編譯環境:Ubuntu 版本:18.4.6
交叉編譯工具:arm-linux-gnueabihf-gcc 版本:7.4.1
開發板:STM32MP157 pro
燒寫方式:STM32CubeProgrammer、TFTP、線上燒寫
安裝工具
sudo apt install make gcc-arm-linux-gnueabihf gcc bison flex libssl-dev dpkg-dev lzop
下圖是我當前使用的工具版本,僅供參考
GitHub倉庫:https://github.com/Embedfire/ebf_linux_kernel
git clone -b ebf_4.19_star https://github.com/Embedfire/ebf_linux_kernel.git
注意: STM32MP157 核心原始碼對應的是 ebf_4.19_star 分支,因為網路原因有時下載會很慢,也可以通過其他倉庫路徑進行下載,不過可能出現下載不完整現象,導致無法編譯。
清理專案工程
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
設定預設組態檔
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- stm32mp157_ebf_defconfig
編譯 zImage 或 .dtb 檔案
# 預設編譯核心和裝置樹
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8
# 編譯核心
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage
# 編譯裝置樹
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
編譯生成deb
也可以直接通過軟體包的形式,直接安裝核心
直接執行 make_deb.sh
檔案進行編譯
./make_deb.sh
生成檔案的路徑
zImage:/arch/arm/boot/目錄下
dtb:/arch/arm/boot/dts目錄下
將zImage和.dtb檔案放入tftp伺服器中,不會的朋友可以看Linux安裝設定 tftp 伺服器
進入uboot中設定網路
setenv ipaddr 192.168.30.156
setenv gatewayip 192.168.30.1
setenv netmask 255.255.255.0
setenv serverip 192.168.30.99
setenv ethaddr 00:01:12:13:14:15
saveenv
** 設定完成後可以通過 ping
命令檢視網路是否連線,下圖中表示連線成功
下載zImage檔案
tftp 80800000 zImage
下載.dtb檔案
tftp 83000000 stm32mp157a-basic.dtb
啟動載入zImage和dtb檔案
bootz 80800000 - 83000000
驗證是否成功
毫無疑問,驗證失敗,提示錯誤 Bad Linux ARM zImage magic!
,這個應該是STM32MP157這塊開發板的分割區問題導致的,目前只能嘗試後面幾種方式燒寫,後續我研究明白了在更新,有知道的大佬可以給個解決思路
核心安裝包的執行過程,直接檢視 make_deb.sh
檔案
vim make_deb.sh
如下圖所示:
編譯
./make_deb.sh
檢視當前核心
dpkg -l | grep stm-r1
解除安裝當前核心
sudo dpkg -r linux-image-4.19.94-stm-r1
安裝核心
將編譯生成的核心通過TFTP拷貝到開發板下,核心安裝包位於 ebf_linux_kernel/build_image/linux-image-4.19.94-stm-r1_1stable_armhf.deb
sudo dpkg -i linux-image-4.19.94-stm-r1_1stable_armhf.deb
注意:若使用 dpkg 安裝核心 deb 包提示錯誤,刪除 boot/kernel 目錄下所有檔案 sudo rm boot/kernel/*
驗證
重啟開發板,使用 cat /proc/version
命令檢視核心是否安裝成功,如下圖所示
替換檔案
將編譯出來的 ebf_linux_kernel/arch/arm/boot/zImage 拷到板子上,替換/boot/kernel/vmlinuz-4.19.94-stm-r1 檔案
注意:這裡需要將zImage 檔案重新命名為vmlinuz-4.19.94-stm-r1 ,也可能會涉及到許可權問題。
新增軟連結
ln -s /lib/modules/4.19.94-stm-r1 /lib/modules/4.19.94+
重啟驗證
sudo reboot
cat /proc/version