【利用qemu启动linux吧】

qemu+linux内核+busybox

前提步骤

  • ubuntu宿主机 x86系统
  • 宿主机通过apt-get 安装qemu,交叉编译环境
  • linux内核源码以及busybox源码

arm64 or x86_64

如果交叉编译,即在x86的系统上要编译启动arm64的linux内核,则在编译内核或者是busybox时均需要执行修改环境变量

export CROSS_COMPILE=aarch-linux-gnu-
export ARCH=arm64

以上的命令不是固定的,需要看我们要编译的对象是否与宿主机相同,如果相同,上面的两个环境变量便不需要执行,否则需要执行;
在这里插入图片描述

编译内核

  1. 生成默认.config
make defconfig
  1. 利用menuconfig修改基本配置
make menuconfig

在Devices driver -> Block devices -> RAM block device support选中,将Default RAM disk size (kbytes) 置为65536
在这里插入图片描述

  1. 可选 多线程编译
    nproc 命令获得当前的cpu数, 启动内核多线程编译
  2. 编译内核
    make -j$(nproc)
    在这里插入图片描述
  3. 等待编译完成
    arch/xxx平台相关/boot/
    在这里插入图片描述
  4. 注意
    可以在编译过程中编译的文件确认是否平台编译正确,如下面有进入到arch/arm64目录下,如果是x86,则会进入到x86的目录下
    在这里插入图片描述

编译busy_box

  1. 环境变量设置之后生成默认配置项
make defconfig
  1. 通过menuconfig修改默认配置项
make menuconfig

Settings -> Build static binary (no shared libs)选中
在这里插入图片描述
3. 编译

make -j$(nproc)
  1. 生成_intall
make install
  1. 补充文件目录
    在busybox的_intall同级目录下创建mk_rootfs.sh脚本,内容如下,chmod 777 mk_rootfs.sh增加执行权限之后,执行脚本;
rootfs=fs
busybox_folder=.
if [ ! -d $rootfs ]; then
        mkdir $rootfs
fi
cp $busybox_folder/_install/* $rootfs/ -rf
cd $rootfs
mkdir etc dev mnt
mkdir -p proc sys tmp mnt
mkdir -p etc/init.d/
touch etc/fstab
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
touch etc/init.d/rcS
echo "/bin/mount -a" >> 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
touch etc/inittab
echo "::sysinit:/etc/init.d/rcS" >> etc/inittab
echo "::respawn:-/bin/sh" >> etc/inittab
echo "::askfirst:-/bin/sh" >> etc/inittab
echo "::ctrlaltdel:/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

  1. 制作镜像
    在busybox的_install同级目录执行完毕mk_rootfs.sh的脚本之后,创建mk_img.sh,chmod 777 mk_img.sh增加执行权限之后,执行脚本,在busybox的目录下会生成rootfs.img.gz文件
#!/bin/bash
rm -rf rootfs.ext3
rm -rf fs_ext3
dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
mkfs.ext3 rootfs.ext3
mkdir fs_ext3
mount -o loop rootfs.ext3 ./fs_ext3
cp -rf ./fs/* ./fs_ext3
umount fs_ext3
gzip --best -c rootfs.ext3 > rootfs.img.gz

在这里插入图片描述

qemu启动

创建启动脚本,launch_arm64.sh, 修改kernel路径和文件系统路径,即可执行

qemu-system-aarch64 -M virt -nographic -m size=1024M -cpu cortex-a57 -smp 4 -kernel ~/linux-4.9.229_aarch64/arch/arm64/boot/Image -initrd ~/linux-4.9.229_aarch64/busybox-1.33.1/rootfs.img.gz -append "root=/dev/ram console=ttyAMA0 rdinit=/linuxrc"

如果是编译的x86的,可以不用指定模拟机器,launch_x86.sh

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

在这里插入图片描述

qemu关闭

Ctrl+a 然后按x即可关闭qemu
Ctrl+Alt+G释放单开的qemu窗口
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值