樹莓派/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)配置核心,配置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部落格_樹莓派核心編譯