Build a debuggable os from scratch (AArch64).
Enable building static binary (no shared libs) and disable tc:
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
# Or directly `cp ./busybox.config ./busybox-1.36.1/.config`
$ cat .config | grep CONFIG_STATIC
CONFIG_STATIC=y
$ cat .config | grep CONFIG_TC
# CONFIG_TC is not setCompilation:
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- -j`nproc`
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- install -j`nproc`Configuration:
$ cd _install
$ mkdir -pv {etc,proc,sys,usr/{bin,sbin}}Edit init script:
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs none /dev
echo -e "\nBoot took $(cut -d' ' -f1 /proc/uptime) seconds\n"
exec /bin/shPack the filesystem:
$ find . -print0 | cpio --null -ov --format=newc | gzip > ../initramfs.cpio.gzEnable the tiny configuration and compilation:
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- tinyconfig
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
# Or directly `cp ./linux.config ./linux-6.13.7/.config`
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image qemu/qemu-mali.dtb -j`nproc`
$ make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- scripts_gdb -j`nproc`Compilation:
$ mkdir build/ && cd build/
$ ../configure --target-list=aarch64-softmmu --enable-debug --disable-docs
$ make -j`nproc`Execute and debug the os:
# ./gen_rootfs.sh
$ ./run.sh
$ ./run.sh -trace "smmuv3_*"