linux kernel编译
编译x86的kernel
export ARCH=x86_64
export CROSS_COMPILE=x86_64-linux-gnu-
make defconfig
make -j32
中间出现了libelf.h找不到, sudo apt-get install libelf-dev bc
解决。
编译aarch64的kernel
export ARCH=x86_64
export CROSS_COMPILE=x86_64-linux-gnu-
make defconfig
make -j32
当要编译特定版本,可以到如下地方看commit id, 然后回退linux, 重新编译
https://mirrors.edge.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.19
参考下面的说明可以编译一个external kernel
https://www.kernel.org/doc/html/latest/kbuild/modules.html
准备linux rootfs文件系统
debootstrap装x86 64时,arch给定amd64, 而不是x86/x86_64.
debootstrap --arch amd64 --foreign buster linux_rootfs_x86 http://mirrors.ustc.edu.cn/debian/
sudo chroot linux_rootfs_x86/ debootstrap/debootstrap --second-stage
装aarch64的系统,
debootstrap --arch arm64--foreign buster linux_rootfs_x86 http://mirrors.ustc.edu.cn/debian/
qemu启动kernel+rootfs
参考https://blog.csdn.net/qq_41660119/article/details/123949923,
其中启动的aarch64系统的命令和启动x86有区别,特别是指定磁盘设备front end的驱动类型是, -device virtio-blk
,而不是-device virtio-blk-device
。驱动不对导致kernel发现不了磁盘设备。append中指定
QEMU=qemu-system-x86_64
sudo ${QEMU} -m 2048 -M q35 -cpu host -enable-kvm -nographic -smp 4 -kernel /home/zwl/software/linux/arch/x86_64/boot/bzImage \
-append "noinintrd sched_debug root=/dev/vda rootfstype=ext4 rw console=ttyS0 crashkernel=256M loglevel=8" \
-drive if=none,format=raw,file=./linux_rootfs_x86.ext4,id=hd0 -device virtio-blk,drive=hd0