樹莓派內核升級的三種方式


一、前言

樹莓派使用的鏡像比較舊了,可以通過三種方式進行升級。一種是本地下載編譯升級,即Local build,還有一種采用交叉編譯,第三種最簡單,輸入一條命令就可以升級。
下面主要講第一種方式。

二、升級過程

  • 1、目前的內核版本,使用 uname -a 查看
    這里寫圖片描述
  • 2、使用 sudo apt-get install git bc 安裝必備軟件
  • 3、使用 git clone --depth=1 https://github.com/raspberrypi/linux 下載最新內核
  • 4、使用如下命令進行編譯前配置
cd linux
KERNEL=kernel7
make bcm2709_defconfig

這里寫圖片描述

  • 5、make,共有三個東西需要make,這個過程會花費很少時間,同時為了避免出錯,可以分別make.
make -j4 zImage
make -j4 modules
make -j4 dtbs

這里寫圖片描述
- 6、執行 sudo make modules_install 進行安裝
- 7、依次使用如下命令拷貝

sudo cp arch/arm/boot/dts/*.dtb /boot/
sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/
sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/
sudo cp arch/arm/boot/zImage /boot/$KERNEL.img

這里寫圖片描述

  • 8、執行完上述步驟,不出錯的話,重啟后,內核應該就升級成功了。

三、升級情況

make的過程非常舊,如果不加參數 -j4 的話,編譯需要好幾個小時,加上參數使用 4核同時編譯,編譯速度明顯加快。時間如下:

make -j4 zImage      34min
make -j4 modules     66min 
make -j4 dtbs        <1min  

除去兩個編譯過程特別耗時外,其他的指令都很快完成。

四、錯誤及解決方法

可能出現的錯誤

如上執行完了所有步驟,並沒有那一步出現錯誤。執行完步驟后查看版本號是沒有變化的,重啟后就無法網卡燈不閃爍,路由器看不到樹莓派連接,SSH自然登陸不上。沒有顯示器,因此看不出系統是否啟動,感覺應該是沒有。

目前不知道是什么原因導致的。升級完成后,/boot目錄下多了幾個.dts文件,刪除后試了不行。最新版的樹莓派官方系統默認不開啟SSH,需要在/boot目錄下手動添加一個名為ssh的空白文件,添加了也不行。

拷貝升級前的/boot文件夾內容進行替換后,可以連上樹莓派,查看版本號並沒有更新。

解決方法

出現上面這個情況的原因是樹莓派無法boot,bootbin和升級后的內核並不兼容,也就是說原有的舊的bootbin不能boot新的內核。

可以使用新版本的固件文件替換。代碼在樹莓派github倉庫的firmware項目下。具體的替換有三個,如下:

bootcode.bin
fixup.dat
start.elf

將新版本的這三個文件拷貝到/boot目錄下替換掉原有的文件,便可以啟動了。

五、第二種方式

第二種方式是使用的交叉編譯,宿主機是搭建在VM虛擬機里的一個ubuntu。具體的步驟可以看官網的文檔,交叉編譯的工具在樹莓派github倉庫tools項目中。

編譯的原理都差不多,也可以使用menuconfig來自定義編譯的內核。由於虛擬機的ubuntu也僅僅只分配了一個CPU核,實際的編譯效果和樹莓派四核編譯時間雖有減少,但也不是很多。

編譯完成之后見內存卡插入電腦,掛載進ubuntu里,拷貝新編譯好的內核和模塊進去,便可。若出現不開機的情況,和上面提到的錯誤類型是一致的。也就是固件和內核不兼容,比如說我這里使用內核4.1,升級到最新的內核4.9之后就出現這個問題,同時升級固件就不會。

六、第三種方式

使用命令升級,最簡單也不會出錯。

sudo apt-get install --reinstall raspberrypi-bootloader raspberrypi-kernel


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM