QEMU运行Linux内核

安装qemu

sudo apt install qemu

根文件系统制作

busybox下载

https://busybox.net/downloads/busybox-1.36.1.tar.bz2

配置

make menuconfig

  ...
    Settings  ---> 
        ...
        # 静态编译busybox
        --- Build Options  
        [*] Build static binary (no shared libs) 
        ...
    ...

编译

make -j15

make install

创建根文件系统需要的一些目录

cd _install/

mkdir -p dev etc home lib mnt proc root sys tmp var

新建需要的文件

cd _install/

vi etc/inittab

ect/inittab内容如下

::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::cttlaltdel:/bin/umount -a -r

inittab语法

<id>:<runlevels>:<action>:<process>

id : /dev/id
runlevels : 忽略
action : 何时执行,有以下选项 sysinit, respawn, askfirst, wait, once,restart, ctrlaltdel, and shutdown
process : 应用程序或脚本

mkdir -p etc/init.d/
vi etc/init.d/rcS
chmod 755 etc/init.d/rcS

etc/init.d/rcS

内容如下:

echo "----------mount all in fstab----------------"
/bin/mount -a #读取/etc/fstab,加载文件系统
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
echo "****************Hello itas109******************"
echo "Kernel Version:linux-5.4.50"
echo "***********************************************"

etc/fstab

内容如下:

#device mount-point type option dump fsck
proc  /proc proc  defaults 0 0
temps /tmp  rpoc  defaults 0 0
none  /tmp  ramfs defaults 0 0
sysfs /sys  sysfs defaults 0 0
mdev  /dev  ramfs defaults 0 0

添加设备文件

cd _install
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
sudo mknod tty1 c 4 1

生成ramdisk文件

#!/bin/bash

sudo rm -rf rootfs.ext4
sudo rm -rf fs
dd if=/dev/zero of=./rootfs.ext4 bs=1M count=32
mkfs.ext4 rootfs.ext4
mkdir fs
sudo mount -o loop rootfs.ext4 ./fs
sudo cp -rf ./_install/* ./fs
sudo umount ./fs
gzip --best -c rootfs.ext4 > rootfs.img.gz

运行

qemu-system-x86_64 -kernel ./bzImage -initrd rootfs.img.gz -append "root=/dev/ram0 init=/linuxrc"

 

 

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享