龙芯目前主推的内核版本有 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 -xf linux-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.1、编译内核镜像
在内核源码下,我们输入“sudo ./create.sh”命令,开始编译Linux内核,如下图所示:
编译完成后,会在Linux源码根目录下生成“vmlinuz”镜像文件,我们输入命令ls -alh vmlinuz 来查看的生成的带文件系统的内核镜像的大小,如果大小大于10M说明已经编译成功了,如下图所示:
至此,编译带文件系统的内核就编译完成了。