qemu + busybox + 内核实验环境搭建(2023-11)

主要是参考网上的例子,网上的一些例子可能用的busybox 老旧,编译各种问题,以及rootfs hda的方式或者ramfs的方式。可能有些概念还是不清楚,以下是最终完成测试成功的案例。

下载kernel

https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.138.tar.xz

安装qemu arm

sudo apt install qemu-system-arm

QEMU emulator version 4.2.1 (Debian 1:4.2-3ubuntu6.27)

Copyright (c) 2003-2019 Fabrice Bellard and the QEMU Project developers

更新国内阿里的镜像然后安装

备注:这里标准版本防止出现版本差异的各种问题,后面busybox 就遇到了

安装交叉编译工具链

sudo apt install gcc-aarch64-linux-gnu

Using built-in specs.

COLLECT_GCC=aarch64-linux-gnu-gcc

COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/aarch64-linux-gnu/9/lto-wrapper

Target: aarch64-linux-gnu

Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --without-target-system-zlib --enable-libpth-m2 --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=aarch64-linux-gnu --program-prefix=aarch64-linux-gnu- --includedir=/usr/aarch64-linux-gnu/include

Thread model: posix

gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)

编译内核

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

make defconfig

make menuconfig

make –j$(nproc)              #开始编译

备注:遇到什么百度,这里基本都没什么问题,就是安装一些库

使用qemu-system-aarch64

常见帮助

Qemu-system-aarch64 –h

Qemu-system-aarch64 –machine help

Qemu-system –cpu help

内核编译好,这里就能用qemu启动了,只不过没有rootfs,最终会panic

qemu-system-aarch64 -M virt -cpu cortex-a57 -m 1024 -nographic -kernel path-to-Image-file

备注:path-to-Image-file 在arch/arm64/boot下面,Image这个文件

,参数的含义自行百度

添加rootfs

编译busybox

busybox-1.35.0 #注意网上一些老版本的busybox 可能有各种编译问题,省的麻烦就用新一点的。

export ARCH=arm64

export CROSS_COMPILE=aarch64-linux-gnu-

make

make install

#最终_install 目录下面的文件是需要的

创建rootfs

在busybox目录

cd _install
find . | cpio -o --format=newc > ../rootfs.img
cd ..
gzip -c rootfs.img > rootfs.img.gz

注意这里的rootfs.img.gz文件

到这里我们有了kernel 有了rootfs.img.gz,组合起来。

qemu-system-aarch64 \
-M virt \
-cpu cortex-a57 \
-m 1G \
-nographic \
-kernel Image \
-initrd rootfs.img.gz \

-append "root=/dev/ram rdinit=/bin/sh"

备注:写个sh文件把上面的语句拷贝进去,省的来回的练输入。Image 是arch/arm64/boot/Image
最终成功启动

qemu + busybox + 内核实验环境搭建(2023-11)_第1张图片

你可能感兴趣的:(arm开发)