QEMU运行简易linux环境

编译linux kernel源码

获取linux kernel code

git clone https://github.com/torvalds/linux.git

安装依赖项

这里以ubuntu平台为例

sudo apt-get install libncurses5-dev flex bison libssl-dev libelf-dev

编译

这里我们以编译x86平台的kernel为例

export ARCH=x86 #设置编译ARCH环境为x86
#进入linux kernel目录下
make menuconfig#进入menuconfig设置编译属性
	#支持ramdisk
	----------------------------------menuconfig-----------------------------------------
	General setup--->
		[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
	Device Drivers --->
      	[*] Block devices  --->
      		<*>   RAM block device support
            (65536) Default RAM disk size (kbytes)
     -------------------------------------------------------------------------------------
make #开始编译

如果是初次编译需要等待较长时间,若编译成功,在编译log最后会看到编译kernel Image的路径,需要记下这个路径之后会使用到
![编译日志](https://img-blog.csdnimg.cn/68b295df13a04fe5b1eaef19b8c3074e.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBAYjExMzQ5Nzc1MjQ=,size_14,color_FFFFFF,t_70,g_se,x_16
如上图日志,Image文件在arch/x86/boot/bzImage路径内

制作busybox文件系统

运行简易linux环境前我们需要制作一个简易的文件系统供运行,这里我们使用busybox

安装编译busybox

#下载busybox,建议先检查版本并下载最新版,这里使用1.33.1版本
wget https://busybox.net/downloads/busybox-1.33.1.tar.bz2
#解压
tar xvjf busybox-1.33.1.tar.bz2
#进入busybox目录编译
make menuconfig
	----------------------------------menuconfig-----------------------------------------
	Settings--->
		--- Build Options
		[*] Build static binary (no shared libs) 
     -------------------------------------------------------------------------------------
make && make install

编译成功后busybox目录下会出现名为_install的文件

制作文件系统

使用以下命令生成文件系统gzip包,建议把这些命令打包在shell文件内,一键生成

#!/bin/bash

cd _install
#在_install目录下补充必要文件

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

echo "proc        /proc           proc         defaults        0        0" > etc/fstab
echo "tmpfs       /tmp            tmpfs        defaults        0        0" >> etc/fstab
echo "sysfs       /sys            sysfs        defaults        0        0" >> etc/fstab

echo "echo -e \"Welcome to tinyLinux\"" > etc/init.d/rcS
echo "/bin/mount -a" >> etc/init.d/rcS
echo "echo -e \"Remounting the root filesystem\"" >> etc/init.d/rcS
echo "mount  -o  remount,rw  /" >> etc/init.d/rcS
echo "mkdir -p /dev/pts" >> etc/init.d/rcS
echo "mount -t devpts devpts /dev/pts" >> etc/init.d/rcS
echo "echo /sbin/mdev > /proc/sys/kernel/hotplug" >> etc/init.d/rcS
echo "mdev -s" >> etc/init.d/rcS

chmod 755 etc/init.d/rcS

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

chmod 755 etc/inittab

cd dev

mknod console c 5 1
mknod null c 1 3
mknod tty1 c 4 1

cd ../..

rm -rf rootfs.ext3
rm -rf fs

#然后通过以下执行将文件系统打包成gzip包
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

最终在busybox目录下会生成rootfs.img.gz的gzip包,这就是我们之后会使用到的文件系统

运行QEMU

安装QEMU

#下载qemu,建议下载最新版
wget https://download.qemu.org/qemu-6.0.0.tar.bz2

tar xvjf qemu-6.0.0.tar.bz2

#编译需要的一些工具
sudo apt-get install ninja-build pkg-config libglib2.0-dev libpixman-1-dev

#进入qemu路径,注意不同版本文件名可能不同
cd qemu-6.0.0/
./configure
make && make install

运行Linux

若QEMU安装成功,那么我们所需要运行Linux的所有软件都已经安装完成了,
输入以下指令即可运行简易Linux环境

qemu-system-x86_64 -M pc -kernel ./linux/arch/x86/boot/bzImage  -initrd ./busybox-1.33.1/rootfs.img.gz    -append "root=/dev/ram init=/linuxrc console=ttyAMA0 console=ttyS0" -nographic

# -kernel 编译的linux kernel image文件
# -initrd busybox文件系统gzip文件
# -nographic 无图形界面模式,如果使用终端需要这个参数

QEMU运行Linux
运行成功后会看到这样的日志输出,可以运行基本Linux命令

退出QEMU Linux

先按ctrl+A,再按X,即可退出QEMU Linux

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值