04步:编译Linux内核镜像

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

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

# 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 = arm-linux-gnueabi-

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

# make vexpress_defconfig
# make menuconfig

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


# sudo apt install flex bison

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

# sudo apt install libncurses-dev

出现这个页面证明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引导的内核,这里暂时用不上,但是我们这里先编译,可能会有以下错误:

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

# sudo apt install u-boot-tools


编译好以后,看镜像文件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启动

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

不用买开发板,使用QEMU就可以学习的Linux内核开发实战视频教程:《Linux内核编程》,具有一线芯片原厂开发经验的驱动工程师录制,详情点击:王利涛老师个人淘宝店:Linux内核编程