前言
由于更换了x86 all in boom,所以N1就闲置了,这次使用物理机斐讯N1进行内核编译,记录一下过程,第一次编译用时将近10小时。
建议使用gcc编译,编译速度会更快,编译时间能缩短40%。
准备材料
- 一个32G以上U盘或移动硬盘(建议移动硬盘,最好是SSD)
- 系统:Armbian_23.08.0_amlogic_s905d_bookworm_5.15.128_server_2023.08.28
地址:https://github.com/ophub/amlogic-s9xxx-armbian/releases - 源码:linux 5.15.y
地址:https://github.com/unifreq/linux-5.15.y - arm64 编译工具: clang
1、安装依赖
apt install -y gcc make libncurses5-dev build-essential pkg-config libc6-dev bison flex libelf-dev xz-utils \
bc libssl-dev git llvm-15 lld-15 clang-15 gcc-aarch64-linux-gnu screen rsync u-boot-tools initramfs-tools
# 如果安装过程出错就执行下面命令修复安装
apt --fix-broken install
2、下载源码
mount /dev/sda1 /mnt/ssd1
cd /mnt/ssd1
git clone --depth 1 https://github.com/unifreq/linux-5.15.y
3、编译内核
cd linux-5.15.y/
scp -P 22 root@192.168.3.2:/boot/config-* .config
CC=/usr/bin/clang-15
LD=/usr/bin/ld.lld-15
make -j$(nproc) CC=$CC menuconfig
make -j$(nproc) CC=$CC
4、制作uinitrd
make modules_install
make headers_install
mkdir -p ../output/{boot,dtb,modules}
cp .config /boot/config-5.15.133-liangjc-01+
mkinitramfs -c xz -o ../output/boot/initrd.img-5.15.133-liangjc-01+ 5.15.133-liangjc-01+
mkimage -A arm64 -O linux -T ramdisk -C none -a 0 -e 0 -n uInitrd -d ../output/boot/initrd.img-5.15.133-liangjc-01+ ../output/boot/uInitrd-5.15.133-liangjc-01+
5、打包内核
# 复制相关文件
cp -r /lib/modules/5.15.133-liangjc-01+ ../output/modules/
cp arch/arm64/boot/Image ../output/boot/vmlinuz-5.15.133-liangjc-01+
cp .config ../output/boot/config-5.15.133-liangjc-01+
cp System.map ../output/boot/System.map-5.15.133-liangjc-01+
cp arch/arm64/boot/dts/amlogic/* ../output/dtb
#headers
mkdir -p ../output/headers/arch/arm64/kvm
cp -r arch/arm64/include ../output/headers/arch/arm64/
cp -r arch/arm64/kvm/hyp ../output/headers/arch/arm64/kvm/
cp arch/arm64/Makefile ../output/headers/arch/arm64
cp -r include ../output/headers/
cp -r scripts ../output/headers/
cp {Makefile,Module.symvers} ../output/headers/
# 压缩打包
cd ../output/boot
tar -zcf ../boot-5.15.133-liangjc-01+.tar.gz *
cd ../modules
tar -zcf ../modules-5.15.133-liangjc-01+.tar.gz *
cd ../headers
tar -zcf ../headers-5.15.133-liangjc-01+.tar.gz *
cd ../dtb/
tar -zcf ../dtb-amlogic-5.15.133-liangjc-01+.tar.gz *
6、本地更新
# 把boot-*.tar.gz,dtb-*.tar.gz,modules-*.tar.gz,headers-*.tar.gz上传到N1后执行以下命令
# 方法1: 使用ophub的armbian-update命令更新
# 4个文件放在同一个目录执行:
armbian-update
# 方法2: 手动更新方法
tar -xf boot-5.15.133-liangjc-01+.tar.gz -C /boot
tar -xf dtb-amlogic-5.15.133-liangjc-01+.tar.gz -C /boot/dtb/amlogic
tar -xf modules-5.15.133-liangjc-01+.tar.gz -C /lib/modules
cd /boot
cp -a uInitrd-5.15.133-liangjc-01+ uInitrd
cp -a vmlinuz-5.15.133-liangjc-01+ zImage
cd /lib/modules/5.15.133-liangjc-01+
find kernel/ -name "*.ko" -exec ln -s {} \;
reboot
附录:使用ophub大的一键编译脚本进行内核编译
# 安装更新编译环境及依赖
armbian-kernel -u
# 一键编译内核
armbian-kernel -k 5.15.131 -n "-liangjc-04" -t clang
-k 指定内核版本 #指定旧版也是直接编译最新版,原因未知
-n 自定义签名 默认ophub
-t 指定编译工具 gcc / clang 默认gcc,经测试gcc比clang编译速度要快。
# 内核文件保存在 /opt/kernel/compile-kernel/output 目录里