Linux内核源码可以从官网下载(www.kernel.org),也可以从国内的镜像服务器下载,下载速度更快。
国内镜像下载地址: https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x

04步:编译Linux内核镜像_内核编程

执行以下命令可以完全完成编译和安装工作

# cd /home
# sudo mkdir tftpboot
# sudo chmod 777 tftpboot
# cd tftpboot
# mkdir kernel
# cd kernel
# wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.10.99.tar.xz
# tar -xvf linux-5.10.99.tar.xz
# cd linux-5.10.99
# gedit Makefile +371

修改Makefile编译,设置为arm-linux-gnueabi-gcc编译器

ARCH ?= arm
CROSS_COMPILE =-linux-gnueabi-

04步:编译Linux内核镜像_linux_02

将编译功能配置为vexpress,在进入GUI编译模式配置编译

# make vexpress_defconfig
# make menuconfig

报下面这两个错误是因为flex和bison没有装,装了就好

04步:编译Linux内核镜像_内核编程_03


04步:编译Linux内核镜像_linux_04

# sudo apt install flex bison

这种情况是因为libncurses-dev没装,同理

04步:编译Linux内核镜像_设备树_05

# sudo apt install libncurses-dev

04步:编译Linux内核镜像_linux_06

出现这个页面证明kernel配好了,可以安心编译了

# make zImage  -j 2
# make modules -j 2
# make dtbs    -j 2
# make LOADADDR=0x60003000 uImage  -j 2

编译好以后,再把镜像文件和设备树文件复制到工程目录里

# cp arch/arm/boot/zImage /home/tftpboot/
# cp arch/arm/boot/uImage /home/tftpboot/
# cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb /home/tftpboot/

zImage为通用内核文件,modules是没有加载进内核的模块(驱动, make menuconfig中设置为(M)的内容), dtbs为编译的设备树,uImage是专供u-boot引导的内核,这里暂时用不上,但是我们这里先编译,可能会有以下错误:

04步:编译Linux内核镜像_linux_07


装一个u-boot-tools即可解决

# sudo apt install u-boot-tools

04步:编译Linux内核镜像_设备树_08


编译好以后,看镜像文件zImage, 设备树文件vexpress-v2p-ca9.dtb是否存在,记录下路径

在目录/home/tftpboot下创建一个脚本start.sh

# cd /home/tftpboot
# touch start.sh
# chmod 777 start.sh
# gedit start.sh

输入以下内容:

qemu-system-arm \
-M vexpress-a9 \
-m 512M \
-kernel zImage \
-dtb vexpress-v2p-ca9.dtb \
-nographic \
-append "console=ttyAMA0"

改用root登录,su root以后./start.sh启动

04步:编译Linux内核镜像_设备树_09


有以上显示,证明内核挂载成功。最后提示end Kernel panic是因为没有根文件系统,完成下面的部分就可以解决这个问题