编译环境 ubuntu 20.06 x64位系统
$ sudo apt-get install libncurses5-dev
$ sudo apt-get install libx11-dev:i386 libreadline6-dev:i386
$ sudo apt-get install build-essential
$ sudo apt-get install lib32stdc++6
$ sudo apt-get install lib32z1
$ sudo apt-get install bison
$ sudo apt-get install flex
$ sudo apt-get install libssl-dev

$ git clone https://github.com/raspberrypi/linux.git -t raspberrypi-kernel_1.20200512-2
$ git clone https://github.com/raspberrypi/tools.git
$ git clone git://github.com/raspberrypi/firmware.git
# 32位系统编译工具目录
# /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
# 64位系统编译工具目录
# /tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin
$ sudo cd linux
#树莓派 1 使用bcmrpi_defconfig
$ KERNEL=kernel
$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcmrpi_defconfig

#树莓派 b/a+ 使用bcm2835_defconfig
$ KERNEL=kernel
$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcm2835_defconfig

#树莓派 2/3 使用bcm2709_defconfig
$ KERNEL=kernel7
$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcm2709_defconfig

#树莓派 4 使用bcm2711_defconfig
$ KERNEL=kernel71
$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- bcm2711_defconfig

$ make ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- menuconfig
$ make ARCH=arm -j8 CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- zImage modules dtbs

最终,arch/arm/boot/zImage 就是我们所编译获得的文件。zImage

Compressed kernel image 文件,要转换为 kernel.img 还需要进一步处理(最新版的操作系统只需要把“zImage” 改成“kernel.img”即可)。

$ cd ../tools/mkimage/
$ ./imagetool-uncompressed.py ../../linux/arch/arm/boot/zImage

新的Kernel要正确运行,还需要编译所需的module,主要对应“/lib”目录下的内容。编译时,使用“INSTALL_MOD_PATH“参数指定目标路径。
$ cd ../..
$ mkdir modules
$ cd linux/
$ make modules_install ARCH=arm CROSS_COMPILE=../tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-INSTALL_MOD_PATH=../modules


注意:本文归作者所有,未经作者允许,不得转载