目錄
1. 安裝适合的編譯器。
2. 樹莓派linux源碼配置
2.1 基本概念
2.2 核心配置
3. 樹莓派linux核心編譯
4. 測試樹莓派是否正常啟動
更具體的參考博文 :https://blog.csdn.net/nicekwell/article/details/78482833
1. 安裝适合的編譯器。
配置好交叉編譯工具鍊:
https://blog.csdn.net/jinchi_boke/article/details/117822476
得到這個交叉編譯工具:arm-linux-gnueabihf
2. 樹莓派linux源碼配置
2.1 基本概念
linux源碼中有很多工程:
樹莓派1的工程是 bcmrpi_defconfig
樹莓派2、3的工程是 bcm2709_defconfig
驅動代碼的編寫
驅動代碼的編譯需要一個提前編譯好的核心
編譯核心就必須配置
配置的最終目标會生成 .config檔案,該檔案指導Makefile去把有用東西組織成核心
廠家配linux核心源碼,比如說買了樹莓派,樹莓派linux核心源碼
第一種方式:
cp 廠家.config .config
第二種方式:
make menuconfig 一項項配置,通常是基于廠家的config來配置
第三種方式:
完全自己來
如何配置樹莓派的Linux核心
驅動兩種加載方式:
* 編譯進核心 zImage包含了驅動
M 子產品方式生成驅動檔案xxx.ko 系統啟動後,通過指令inmosd xxx.ko 加載
2.2 核心配置
所有的操作幾乎都是在源碼目錄下進行的:/home/yu/SYSTEM/linux-rpi-4.14.y
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
指定ARM架構 指定編譯器 樹莓派 主要核心指令
這個就會生成一個 .config 核心配置檔案(類似上面 2.1 第一種方式)
3. 樹莓派linux核心編譯
3.1 編譯
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
j4 指定用多少電腦資源進行編譯
zImage 生成核心鏡像
modules 要生成驅動子產品
dtbs 生成配置檔案
3.2 編譯成功後,看到核心源碼樹目錄底下多了vmlinux, 失敗則無此檔案
成功後,目标 zImage 鏡像 在arch/arm/boot 底下(可檢視)
3.3 打包 zImage 成樹莓派可用的 xxx.img
回到源碼目錄下打包:/home/yu/SYSTEM/linux-rpi-4.14.y
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
3.4 資料拷貝
把樹莓派的sd卡插入ubuntu系統電腦,樹莓派的sd卡有兩個分區:
一個fat分區,是boot相關的内容,kernel的img檔案就放在這個分區裡;
一個是ext4分區,也就是系統的根目錄分區。
指令 dmesg 檢視linux核心資訊,即可檢視U盤插入成功與否(出現 sdb:sdb1 sdb2)
mkdir data1 data2 建立兩個将要挂載分區的檔案夾
挂載U盤
sudo mount /dev/sdb1 data1 一個fat分區,是boot相關的内容,如kernel的img
sudo mount /dev/sdb2 data2 一個是ext4分區,也就是系統的根目錄分區。
安裝modules, 裝置驅動檔案: hdmi usb wifi io ...沒有安裝的話,核心能起來,但驅動不能用
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/chenlc/data2 modules_install
安裝更新 kernel.img 檔案,注意sd卡中的鏡像名字是kernel7.img
先備份(以免刷機失敗,導緻樹莓派無法啟動)
cd /home/chenlc/data1
cp kernel7.img kernel7OLD.img
再把編譯新生成的拷貝到data1,起名kernel7.img
cp kernel_new.img /home/chenlc/data1/kernel7.img
檢視拷貝的檔案有沒有壞掉(每個檔案都有自己的md5編号)
md5sum kernel7.img
拷貝配置檔案,為了能加載一些驅動等..(.*dtb* : *是通配符,以.開頭,中間是dtb這種格式的檔案,不管dtb前後是什麼字元,都拷貝)
cp arch/arm/boot/dts/.*dtb* /home/chenlc/data1
cp arch/arm/boot/dts/overlays/.*dtb* /home/chenlc/data1/overlays/
cp arch/arm/boot/dts/overlays/README /home/chenlc/data1/overlays/
4. 測試樹莓派是否正常啟動
斷開虛拟機的U盤
到window下找到U盤的cmdline.txt,修改成通過序列槽啟動,看樹莓派的啟動過程,確定系統能正常
檢視核心是否更換
uname -r (檢視核心版本)