多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 编译内核(debian) 这里介绍如何使用linux定制自己的内核,推荐的发行版是Ubuntu 20.04。 ## 需要的软件包 不同的发行版可能对软件包命名会有所不同,这里以Ubuntu 20.04的命名为例。 * binfmt-support * qemu-user-static * gcc-10-aarch64-linux-gnu * kernel-package * fakeroot * simg2img * img2simg * mkbootimg * bison ## 生成内核debian软件包 克隆linux内核,这里选择深度为1减少体积。 ```shell $ git clone https://github.com/OpenStick/linux --depth=1 ``` 开始编译 ```shell $ export CROSS_COMPILE=aarch64-linux-gnu- $ export ARCH=arm64 $ make msm8916_defconfig $ make menuconfig $ make -j16 ``` 生成debian格式的软件包 ``` shell $ fakeroot make-kpkg --initrd --cross-compile aarch64-linux-gnu- --arch arm64 kernel_image kernel_headers ``` 之后将生成的deb软件包(会在代码目录上层生成),与`arch/arm64/boot/Image.gz`保留备用 将rootfs.img转换成img格式并挂载 ``` shell $ simg2img rootfs.img root.img $ sudo mount root.img /mnt ``` 在chroot环境下,将前面生成的linux-image等deb安装包安装即可。注意要将安装完成后生成的`boot/initrd.img`取出备用(安装之前最好卸载原来的linux-image之类的软件包)。 ``` shell $ sudo mount --bind /proc /mnt/proc $ sudo mount --bind /dev /mnt/dev $ sudo mount --bind /dev/pts /mnt/dev/pts $ sudo mount --bind /sys /mnt/sys $ sudo chroot /mnt ``` 安装完成后,解除所有挂载,将img再次转换为simg ``` shell $ img2simg root.img rootfs.img ``` ### 生成boot.img 取前面文件系统安装新内核后`/boot/initrd.img**`文件与内核编译阶段生成的`Image.gz`和`arch/arm64/boot/dts/qcom/`下对应设备的`*.dtb`备用 将devicetree(dtb)附在Image.gz之后 ```shell cat Image.gz dtb > kernel-dtb ``` 生成boot.img ``` shell $ mkbootimg \ --base 0x80000000 \ --kernel_offset 0x00080000 \ --ramdisk_offset 0x02000000 \ --tags_offset 0x01e00000 \ --pagesize 2048 \ --second_offset 0x00f00000 \ --ramdisk initrd.img \ --cmdline "earlycon root=PARTUUID=a7ab80e8-e9d1-e8cd-f157-93f69b1d141e console=ttyMSM0,115200 no_framebuffer=true rw"\ --kernel kernel-dtb -o boot.img ``` 之后将两个img文件分别刷入对应分区即可。