Linux内核编译
2021-12-03
Linux 5.15.5内核编译
先去官网下载最新内核源码,预先安装好以下这些库
sudo apt install libssl-dev libncurses5-dev flex bison libelf-dev libssl-dev dwarves
make menuconfig
进行编译前配置,主要要打开下面修改选项,这样可以更容易的调试,若要使用llvm,则加上LLVM=1
kernel hacking –> Compile-time checks and compiler options –> Compile the kernel with debug info
kernel hacking –> Compile-time checks and compiler options –> Provide GDB scripts for kernel debugging
为了加速编译,可以关闭下面用不到的功能
Networking support
Virtualization
File systems -> CD-ROM/DVD Filesystems
File systems -> DOS/FAT/EXFAT/NT Filesystems
编辑.config
,关闭校验签名的功能
CONFIG_SYSTEM_REVOCATION_LIST=n
CONFIG_SYSTEM_TRUSTED_KEYS=""
CONFIG_SYSTEM_TRUSTED_KEYRING=n
编译
make bzImage -j 12
make headers_install INSTALL_HDR_PATH=./headers
得到输出文件arch/x86/boot/bzImage
,可以把这个文件单独移出来。
交叉编译
sudo apt install binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu
# 其中要选择对应硬件信息,qemu上运行可以选择
make ARCH=arm64 CROSS_COMPILE=/usr/bin/aarch64-linux-gnu- menuconfig
# 同上修改.config,关闭签名
make ARCH=arm64 CROSS_COMPILE=/usr/bin/aarch64-linux-gnu- -j12
# 导出头文件
make headers_install ARCH=arm64 INSTALL_HDR_PATH=./headers
编译busybox
官网下载最新源码
make menuconfig
打开Settings -> Build static binary (no shared libs)
交叉编译时Settings -> Cross compiler prefix
设为aarch64-linux-gnu-
然后make && make install
得到生成文件夹_install
制作最小根文件系统
将_install
拷贝一份。进入文件夹执行以下命令。
mkdir proc dev sys
cat << EOF > init
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devtmpfs devtmpfs /dev
echo -e "\nBoot took \$(cut -d' ' -f1 /proc/uptime) seconds\n"
setsid cttyhack setuidgid 1000 sh
umount /proc
umount /sys
poweroff -d 0 -f
EOF
chmod 755 init
sudo chown -R root:root *
一个最小的文件系统就做好了,然后将其打包起来,先进入该文件夹,然后用下面的命令
find . | cpio -o --format=newc | gzip -9 > ../initrd.cpio.gz
生成initrd.cpio.gz
文件
Qemu运行和调试
安装:sudo apt install qemu-system-x86
启动:
qemu-system-x86_64 -kernel ./bzImage -initrd ./initrd.cpio.gz -append "console=ttyS0" -enable-kvm -nographic
一些常用快捷键: Ctrl+A X
退出;Ctrl+A H
打开帮助。
aarch64下
qemu-system-aarch64 -machine virt -cpu cortex-a53 -smp 1 -m 2G -kernel ./Image -initrd ./initrd.cpio -append "console=ttyAMA0" -nographic
Ccache加速编译
安装ccache:sudo apt install ccache
ccache -d ~/.ccache # 配置ccache缓存路径
ccache -M 50G # 配置ccache缓存上限
内核make
时加上环境变量HOSTCC="ccache gcc"
和CROSS_COMPILE="ccache "
(不要忘记ccache后面的空格)
缓存后一次全新编译只要4min。