一、开篇
近来在看qemu,所以尝试使用qemu来运行一个内核。
关于介绍就不多说了,可以直接网上搜索,这儿记录下运行上去的过程。
二、编译内核
使用指令aptinstallgcc-arm-linux-gnueabi来安装交叉编译工具
apt install gcc-arm-linux-gnueabi
gcc-arm-linux-gnueabi和gcc-arm-linux-gnueabihf的区别:gcc-arm-linux-gnueabi是针对软浮点运算,gcc-arm-linux-gnueabihf针对硬浮点运算。
使用指令wget来下载内核,这儿使用的国外镜像linux游戏linux删除命令,速率快。
下载完成后通过tar-xvflinux-5.10.99.tar.xz来解压出内核。
步入内核目录,更改内核根目录Makefile如下:
在编译前我们先安装一些软件:
sudo apt-get install flex bison libncurses-dev
sudo apt-get install u-boot-tools
配置编译:
make vexpress_defconfig
make menuconfig
我这儿用的默认的配置,感兴趣的可以在makemenuconfig执行后来对内核进行剪裁。
配置完成后就可以编译了。
make zImage -j2
make modules -j2
make dtbs -j2
之后指定内核的加载地址:
make LOADADDR=0x60003000 uImage -j2
这儿我遇见了问题,须要通过sudoaptinstallu-boot-tools来安装uboot-tools。
之后把内核和设备树拷贝到一个目录里:
cp arch/arm/boot/zImage ../../../tftpboot/
cp arch/arm/boot/uImage ../../../tftpboot/
cp arch/arm/boot/dts/vexpress-v2p-ca9.dtb ../../../tftpboot/
在同一个目录下linux内核烧写,创建一个qemu的启动脚本start.sh:
qemu-system-arm -M vexpress-a9
-m 512M
-kernel zImage
-dtb vexpress-v2p-ca9.dtb
-nographic
-append "console=ttyAMA0"
通过sourcestart.sh启动qemu:
里面就把一个内核引导启动上去了,并且在启动最后我们发觉有个错误如右图linux内核烧写,按照最后的kernelpanic提示可以晓得由于我们没有挂载文件系统造成的错误。