QEMU启动Linux内核

前言

在前面vscode+clangd阅读Linux内核源码一文已经编译生成了内核镜像,可以看到,在/home/yukeyang/myfile/linux-6.6.30/arch/arm/boot/zImage路径下生成了内核镜像zImage,但要启动内核镜像还需要初始化文件系统initramfs。

初始化文件系统initramfs

输入以下命令,制作initramfs,这里假定前面已经完成了根文件系统rootfs的制作,在rootfs文件夹下有生成initramfs文件所需要的文件。

$ cd ~/rootfs
$ find . | cpio -H newc -ov --owner root:root > ../initramfs.cpio
$ cd ..
$ gzip initramfs.cpio
$ mkimage -A arm -O linux -T ramdisk -d initramfs.cpio.gz uRamdisk

在输入上面的命令后,可以看到在home目录下生成了initramfs.cpio.gz文件和uRamdisk文件。initramfs.cpio.gz文件就是我们启动内核所需要的初始化系统文件,它是一个独立的初始化文件系统(standalone initramfs),没有被集成到其它文件中。

yukeyang@ubuntu:~/rootfs$ cd ..
yukeyang@ubuntu:~$ ls
arm-cross-compiler  Documents  Downloads  initramfs.cpio.gz  Music  myfile  Pictures  rootfs  Templates  uRamdisk  Videos  x-tools

启动内核

在生成了initramfs后,已经准备好启动内核所需要的文件。接下来就是在QEMU环境下启动linux内核,QEMU可以简单理解为一块仿真的开发板,可以让我们在脱离硬件的情况下调试linux内核。启动linux内核命令如下:

#设定环境变量
PATH=${HOME}/x-tools/arm-unknown-linux-gnueabi/bin/:$PATH

#在QEMU启动内核
QEMU_AUDIO_DRV=none qemu-system-arm -m 256M -nographic -M versatilepb -kernel /home/yukeyang/myfile/linux-6.6.30/arch/arm/boot/zImage -append "console=ttyAMA0 rdinit=/bin/sh" -dtb arch/arm/boot/dts/arm/versatile-pb.dtb -initrd /home/yukeyang/initramfs.cpio.gz

可以看到在启动内核过程中terminal会输出很多打印,右上角的环境名也变成了qemu开头的名字,说明我们已经进入QEMU环境。在这里插入图片描述
如果想要退出QEMU,可以按下Ctrl + A,然后按下x键即可。

参考文献

  1. Mastering Embedded Linux Programming - Third Edition chapter05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值