龙芯目前主推的内核版本有 linux‐2.6.32 和 linux‐3.10 两个版本,其中 linux‐2.6.32 主要用于龙芯1号 CPU、龙芯2H和龙芯3A , linux‐3.10 主要用于龙芯 3A2000 和 2K 以上的 CPU 版本。
LS2K1000 使用的内核版本为 linux‐3.10。交叉编译器版本为 gcc‐4.9.3‐64‐gnu。
1 安装 Linux 内核交叉编译器
编译 Linux 内核使用的是“gcc-4.9.3-64-gnu.tar.gz”,大家可以在迅为龙芯开发板资料中找到,位置:LS2K1000 开发板资料\02_开发及烧写工具
将编译器拷贝到 Ubuntu 的任意目录下,接着使用命令 sudo tar -xvf gcc-4.9.3-64-gnu.tar.gz -C /”解压编译器,如下图所示:
注意:解压命令必须为这个命令,目录是保证脚本里面的交叉编译器环境变量的路径跟编译器实际解压的路径一致。因为我们在编译的时候使用的是均为绝对路径并已经在编译脚本中写好,大家只要按照这个路径解压即可,也就不用给编译器设置环境变量了。解压完成后会在/opt 下得到解压生成的编译器文件夹,如下图所示:
2 编译内核
内核镜像分为俩种,一种是带 ramdisk 文件系统的内核镜像,一种是不带 ramdisk 文件系统的镜像。下面我们就一起来看一下要怎么编译这俩种内核镜像。编译带文件系统的内核镜像和编译不带文件系统的内核镜像,他们的内核源码都是一样的。
内核源码包位置:LS2K1000 开发板资料\04_pmon&Linux 内核源码
2.1 编译不带文件系统内核
首 先 , 我 们 将 龙 芯 2k1000 的 内 核 源 码 拷 贝 到 Ubuntu 的 任 意 目 录 下 , 使 用 命 令 sudo tar -xflinux-3.10-loongsonpai_20210601.tar.gz 解压源码包得到内核源码并使用命令 cd linux-3.10-loongsonpai 进到内核源码下,注:源码日期大家使用最新的即可。如下图所示:
在 Linux 内核源码根目录下有配置文件“config-ls2k”,该文件就是不带文件系统的内核配置文件,如下图所示:
接着我们输入“sudo cp config-ls2k .config”命令生成内核配置文件“.config”,运行结果如下图所示:
配置好.config 文件以后,我们就可以直接输入命令 sudo ./create.sh 执行 create.sh 编译脚本来编译内核了,如下图所示:
编译过程如下:
编译完成后,会在 Linux 源码根目录下生成“vmlinuz”内核镜像文件,如下图所示:
至此,不带 ramdisk 的内核镜像编译完成。
2.2 编译带文件系统内核
1. 准备 ramdisk 文件系统源码
编译带文件系统的内核,首先需要准备一个制作好的 ramdisk 文件系统,可以使用 busybox 或者 buildroot来制作。这里已经给大家制作好了,位置:LS2K1000 开发板资料\06_文件系统源码\3_ramdisk 源码然后我们把这个文件系统源码拷贝到和内核源码所在的同一级目录下,注意:该文件系统压缩包必须要和 linux 的内核源码放在同一个目录下面目录下,拷贝完成后如下图所示:
然后输入“sudo tar -xvf ramdisk_2.tar.gz”命令,解压文件系统,解压完成后会生成“ramdisk_2”文件夹,如下图所示:
2.生成 config 配置文件
我们进入到 Linux 内核源码目录下,Linux 内核源码根目录下有配置文件“config-ls2k_ramdisk”,该文件就是带最小文件系统的内核配置文件,如下图所示:
我们输入“sudo cp config-ls2k_ramdisk .config”命令生成内核配置文件“.config”,运行结果如下图所示:
3.配置 ramdisk 路径
准 备 好 ramdisk 文 件 系 统 源 码 以 后 , 我 们 记 住 他 的 路 径 , 作 者 这 里 的 路 径 为/home/topeet/LS2K1000/kernel/ramdisk_2,后面我们要用到这个路径。
在进行配置内核的操作之前,我们需要先安装图像化配置依赖工具 Ncurses,如果这里大家安装过了则不必再次安装,安装命令:sudo apt‐get install libncurses5‐dev
接着我们进到内核源码所在的目录,输入命令 sudo ./mymake menuconfig 打开内核的图像化配置界面,如下图所示:
打开成功如下图所示:
接着我们进到 General setup 选项里面,保证 Initial RAM filesystem and RAM disk (initramfs/initrd)support 选项是勾选上的,然后在 Initramfs source file(s)填入 ramdisk 文件系统所在的绝对路径,作者这里的路径为/home/topeet/LS2K1000/kernel/ramdisk_2。设置完成后如下图所示:
设置完成后,我们保存退出图形化界面。如下图所示:
4. 编译内核镜像
在内核源码下,我们输入“sudo ./create.sh”命令,开始编译 Linux 内核,如下图所示:
编译完成后,会在 Linux 源码根目录下生成“vmlinuz”镜像文件,我们输入命令 ls -alh vmlinuz 来查看的生成的带文件系统的内核镜像的大小,如果大小大于 10M 说明已经编译成功了,如下图所示:
|