如何制作文件系统并用qemu运行linux内核

上一文我们介绍了如何编译内核和busybox:
如何编译Linux内核源码?

本文介绍如何制作一个简版的文件系统、制作fs镜像文件并最终通过qemu将linux内核运行起来!


制作一个简版文件系统

编译完成后的busybox就安装在源码根目录下的_install目录了,我们进入_install目录,补充一些必要的文件或目录,相关的shell命令如下:

$ mkdir -p etc dev mnt proc sys tmp mnt
$ mkdir -p etc/init.d/

$ mkdir etc dev mnt
$ mkdir -p proc sys tmp mnt
$ mkdir -p etc/init.d/
$ vim etc/fstab
proc        /proc           proc         defaults        0        0
tmpfs       /tmp            tmpfs      defaults        0        0
sysfs       /sys            sysfs        defaults        0        0
$ vim etc/init.d/rcS
echo -e "Welcome to tinyLinux"
/bin/mount -a
echo -e "Remounting the root filesystem"
mount  -o  remount,rw  /
mkdir -p /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
$ chmod 755 etc/init.d/rcS
$ vim etc/inittab
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount -a -r
$ chmod 755 etc/inittab
$ cd dev
$ sudo mknod console c 5 1
$ sudo mknod null c 1 3
$ sudo mknod tty1 c 4 1 

制作根文件系统镜像文件

思路:

  1. 先制作一个空的镜像文件;
  2. 然后把此镜像文件格式化为ext3格式
  3. 接着把此镜像文件挂载,并把根文件系统复制到挂载目录
  4. 卸载该镜像文件。
  5. 打成gzip包。
#!/bin/bash
rm -rf rootfs.ext3
rm -rf fs
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs
mount -o loop rootfs.ext3 ./fs
cp -rf ./_install/* ./fs
umount ./fs
gzip --best -c rootfs.ext3 > rootfs.img.gz

最终生成的文件系统镜像名字为:rootfs.img.gz

准备好了内核和文件系统镜像,接下来就是见证奇迹的时刻!

qemu运行linux内核

$ qemu-system-x86_64 \
  -kernel ./linux-4.9.229/arch/x86_64/boot/bzImage  \
  -initrd ./busybox-1.30.0/rootfs.img.gz   \
  -append "root=/dev/ram init=/linuxrc"  \
-serial file:output.txt

img

这样一个完整的最小linux系统就起来啦.
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/fly_wt/article/details/121434810