树莓派/RaspberryPi 内核编译
目标:修改Linux的内核源码,让其识别并加载相关的USB Serial的驱动(也可用于升级内核)
环境:树莓派3B+(搭载)
原有内核版本
Linux raspberrypi 4.14.76-v7+ #1150 SMP Mon Oct 15 15:19:23 BST 2018 armv7l GNU/Linux
1、下载树莓派Linux的内核源码
源码地址:https://github.com/raspberrypi/linux
选择所需编译的分支版本:4.14.y
# git clone --depth=1 -b rpi-4.14.y https://github.com/raspberrypi/linux.git
众所周知,国内直接下载github的源码是比较慢的,所以在此提供一个高速下载的地址
# git clone --depth=1 -b rpi-4.14.y https://gitclone.com/github.com/raspberrypi/linux.git
2、修改源码
根据相关的文档修改 [KERNEL]/drivers/usb/serial/option.c 文件(此处不是重点,不做详细介绍,)
3、编译、提取内核及其模块
1)安装bc
# apt-get install -y bc
2)配置内核,配置makefile的ARCH类型和编辑器路径
可以直接修改内核根目录的Makefile文件,修改下面的这两行
ARCH ?=$(SUBARCH) CROSS_COMPILE ?=$(CONFIG_CROSS_COMPILE:"%"=%)
或者执行指令
# cd linux # KERNEL=kernel7 # make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
说明:
Pi 1 使用bcmrpi_defconfig
Pi 2/3 使用bcm2709_defconfig
配置内核模块,执行
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
PS:如果此处报错 Makefile:520: recipe for target 'menuconfig' failed,则安装以下包
apt-get install ncurses-dev
开启CONFIG_USB_SERIAL_OPTION(加载USB Serial)
[*] Device Drivers →
[*] USB Support →
[*] USB Serial Converter support →
[*] USB driver for GSM and CDMA modems
3)编译内核
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
如果是多处理系统可以添加选项-jn ,n为数字,表示多处理器的数量*1.5。可以加快编译速度
# make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 zImage modules dtbs
整个编译的时间根据配置的不同有所不同,本次编译时间约1小时,请耐心等待。
4、升级内核及其文件
1)安装modules (/path为存放的路径)
# make modules_install ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/path/modules
# cp /path/modules/lib/modules/4.14.114-v7+ /lib/modules/
2)升级内核
# mv /boot/$KERNEL.img /boot/$KERNEL-backup.img # ./scripts/mkknlimg arch/arm/boot/zImage /boot/$KERNEL.img # cp arch/arm/boot/dts/*.dtb /boot/ # cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ # cp arch/arm/boot/dts/overlays/README /boot/overlays/
5、重启并查看内核
# uname -a Linux raspberrypi 4.14.114-v7+ #2 SMP Wed Aug 4 20:49:36 CST 2021 armv7l GNU/Linux
升级成功
参考:
1、树莓派/RaspberryPi 内核编译 - Qiengo - 博客园 (cnblogs.com)
2、树莓派3B+内核编译_jqh_111的专栏-CSDN博客_树莓派内核编译