04步:编译Linux内核镜像
原文:https://www.zhaixue.cc/qemu/qemu-build_kernel.html
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 ?= armCROSS_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内核编程

浙公网安备 33010602011771号