目標:修改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)配置內核,配置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
開啓CONFIG_USB_SERIAL_OPTION(加載USB Serial)
[*] Device Drivers →
[*] USB Support →
[*] USB Serial Converter support →
[*] USB driver for GSM and CDMA modems
2)編譯內核
# 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博客_樹莓派內核編譯