使用busybox制作根文件系统,并使用qemu加载

mac2026-04-14  2

文章目录

前提下载 busybox:编译、安装busybox:制作rootfs使用qemu测试

前提

已经有编译好的linux内核镜像, 需要查看前一篇文章,熟手例外:交叉编译linux内核5.3.7,制作initramfs,使用qemu测试

主机ubuntu16.04目标aarch64交叉编译器gcc-linaro-7.4.1-2019.02-x86_64_aarch64-linux-gnu.tar.xz

下载 busybox:

https://busybox.net/downloads/ 我是:busybox-1.31.1.tar.bz2 放到linux内同级目录,核解压

tar xvf busybox-1.31.1.tar.bz2

目录结构图:

编译、安装busybox:

使用脚本 mybuild.sh,放在busybox源码目录下:

#!/bin/bash export CROSS_COMPILE=aarch64-linux-gnu- export ARCH=arm64 echo "CROSS_COMPILE = "$CROSS_COMPILE echo "ARCH = "$ARCH make menuconfig make -j4 make install

执行脚本,编译安装

sudo chmod +x mybuild.sh ./mybuild.sh

menuconfig:需要配置静态编译

Settings ---> [*] Build static binary (no shared libs)

然后exit退出

成功输出如下:

-------------------------------------------------- You will probably need to make your busybox binary setuid root to ensure all configured applets will work properly. --------------------------------------------------

busybox安装在源码目录下的 _install目录

制作rootfs

返回上一级目录: 编写制作rootfs脚本 make-rootfs.sh :

#!/bin/sh busybox_folder="./busybox-1.31.1" rootfs="my-rootfs" echo $base_path if [ ! -d $rootfs ]; then mkdir $rootfs fi cp $busybox_folder/_install/* $rootfs/ -rf cd $rootfs if [ ! -d proc ] && [ ! -d sys ] && [ ! -d dev ] && [ ! -d etc/init.d ]; then mkdir proc sys dev etc etc/init.d fi if [ -f etc/init.d/rcS ]; then rm etc/init.d/rcS fi echo "#!/bin/sh" > etc/init.d/rcS echo "mount -t proc none /proc" >> etc/init.d/rcS echo "mount -t sysfs none /sys" >> etc/init.d/rcS echo "/sbin/mdev -s" >> etc/init.d/rcS chmod +x etc/init.d/rcS if [ -f ../my-rootfs/rootfs.img ]; then rm ../my-rootfs/rootfs.img fi find . | cpio -o --format=newc > ../my-rootfs/rootfs.img

执行脚本制作rootfs:

sudo chmod +x make-rootfs.sh ./make-rootfs.sh

然后,在当前目录下生成 my-rootfs 目录 然后my-rootfs 目录里面: rootfs.img 是制作成功的根文件系统镜像

使用qemu测试

linux内核镜像路径./linux-5.3.7/out_aarch64/arch/arm64/boot/Image根文件系统路径./my-rootfs/rootfs.img qemu-system-aarch64 \ -M virt \ -cpu cortex-a53 \ -smp 2 \ -m 1024M \ -kernel ./linux-5.3.7/out_aarch64/arch/arm64/boot/Image \ -append "root=/dev/ram rdinit=sbin/init console=ttyAMA0 ignore_loglevel" \ -initrd ./my-rootfs/rootfs.img \ -nographic

成功:

最新回复(0)