樹莓派Linux內核交叉編譯及部署

獲取內核源碼及工具

源碼鏈接:

https://github.com/raspberrypi/linux

工具鏈接:

https://github.com/raspberrypi/tools

patch鏈接:

https://www.kernel.org/pub/linux/kernel/projects/rt/

 

源碼在git上的master的版本是4.9,可直接複製git的鏈接

git clone https://github.com/raspberrypi/linux.git

如果想下載其他版本的內核,比如想下載5.1.y版本內核,則使用如下方式

git clone -b rpi-5.1.y https://github.com/raspberrypi/linux.git

tools工具則是一些交叉編譯所使用的編譯器

git clone https://github.com/raspberrypi/tools.git

下載patch,要下載和你將要編譯的內核版本一致的patch。

以上是使用git下載,在國內的下載速度是比較慢的。如果想高速下載,可以使用迅雷。方法是複製瀏覽器頂部鏈接,複製到迅雷進行搜索

然後下載壓縮版本,我在迅雷裏的下載速度達到了3m,速度還可以。

下載完成後全部解壓。

 

打patch

我們對Linux內核添加補丁,這個過程就是打patch。將上面下載的patch壓縮版解壓到對應的內核文件夾下,並執行

cat *.patch | patch p1

 

配置交叉編譯環境

這個要用到我們下載的tools。使用git方式下載的文件夾名爲tools;下載壓縮包版本直接解壓的文件夾名爲tool-master。我們以tools爲命名來講解。

ubuntu系統位數查看

$ getconf LONG_BIT
64

如果你的ubuntu系統位數爲32位,執行

echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin >> ~/.bashrc
source ~/.bashrc

如果是64位,執行

echo PATH=\$PATH:~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin >> ~/.bashrc
source ~/.bashrc

​​​​並且64位系統也要安裝32位的編譯器的支持​​​​​​​

sudo apt-get install lib32stdc++6
sudo apt-get install libc6:i386
sudo apt-get install lib32z1

進入Linux源碼目錄,進行交叉編譯的配置​​​​​​​

KERNEL=kernel7
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig

 

編譯

進入Linux源碼目錄,執行

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs

或者你的處理器有多個線程,可以使用-jn來加速編譯

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs -j4

這個過程應該要持續幾十分鐘,取決於電腦運行速度。喝杯茶等一下吧~
 

部署到SD卡

首先將插入裝有系統的內存卡讀卡器,並在虛擬機內掛載。

查看分區在/dev下的名稱

lsblk

sdc1是boot分區,sdc2是rootfs分區。

接下來進行掛載。首先在/mnt下創建兩個文件夾​​​​​​​

sudo mkdir /mnt/fat32
sudo mkdir /mnt/ext4

然後將sdc1和sdc2分別掛載在fat32和ext4​​​​​​​

sudo mount /dev/sdc1 /mnt/fat32
sudo mount /dev/sdc2 /mnt/ext4

首先安裝內核模塊到/mnt/ext4,定位到內核源碼文件夾下,執行

sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=/mnt/ext4 modules_install

接下來的操作都是對boot分區進行,也就是/mnt/fat32

備份原本的內核,本次調試發現,kernel7.img是樹莓派所使用的內核,所以我們對樹莓派的kernel7.img進行備份

mv kernel7.img kernel7-pre.img

將內核源碼中的zImage重命名爲kernel7.img(所在位置:linux-rpi-4.9.y/arch/arm/boot)

mv zImage kernel7.img

或者使用tools下的工具進行類型轉換​​​​​​​

cd tools/mkimage
./imagetool-uncompressed.py ~/linux-rpi-4.9.y/arch/arm/boot/zImage

這樣生成的名稱爲kernel.img,將他重命名爲kernel7.img

mv kernel.img kernel7.img

**********************************************

如果出現python編譯的錯

/usr/bin/env python\r no such file or directory

則是由於windows下編寫的python代碼不符合Linux下的規範,使用以下方式進行轉碼

sudo apt-get install dos2unix

dos2unix <filename>

**********************************************

將生成的kernel複製到/mnt/fat32下​​​​​​​

sudo cp ~/linux-rpi-4.9.y/arch/arm/boot/kernel7.img /mnt/fat32
或者
sudo cp ~/tools/mkimage/kernel7.img /mnt/fat32

複製.dts文件和README文件​​​​​​​

sudo cp ~/linux-rpi-4.9.y/arch/arm/boot/dts/*.dtb /mnt/fat32
sudo cp ~/linux-rpi-4.9.yarch/arm/boot/dts/overlays/README /mnt/fat32/overlays

至此樹莓派內核更新完成,插入到樹莓派中試一試

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章