原文: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 ?= 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内核编程