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
posted @ 2024-10-13 23:20  zwlwf  阅读(5)  评论(0编辑  收藏  举报