配置樹莓派linux的核心和編譯並將映象拷貝至樹莓派
驅動程式碼的編寫需要一個提前編譯好的核心,編譯核心就必須配置,配置的最終目標會生成.config檔案,該檔案指導makefile去把有用的東西組織成核心。
如何生成.config檔案:
第一種方式:
廠家配linux核心原始碼,比如說買了樹莓派,現在要研發樹莓派的底層,廠家會提供樹莓派linux核心原始碼,直接cp 廠家.config .config
第二種方式:
make menuconfig 一項項配置,通常是基於廠家的config來配置的。
第三種方式:
完全自己來
如何配置樹莓派linux的核心:
1、配置config
linux原始碼中有很多工程:
樹莓派1的工程是bcmrpi_defconfig;
樹莓派2、3的工程是bcm2709_defconfig。
1.1、獲取當前樹莓派的config
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
//ARCH是指定是arm架構
//CROSS_COMPILE指定編譯器是arm-linux-gnueabihf-(不同架構用不同的編譯器)
//KERNEL是樹莓派裡特別指定的
//用的config是bcm2709_defconfig
執行結果如下圖:
feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig
HOSTCC scripts/basic/fixdep
HOSTCC scripts/kconfig/conf.o
SHIPPED scripts/kconfig/zconf.tab.c
SHIPPED scripts/kconfig/zconf.lex.c
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
#
# configuration written to .config//將廠家的config變成了.config
#
此命令功能是獲取bcm2709_defconfig的配置到 .config裡。
我們可以直接用工程裡的配置,但這樣的話可能會丟失原來使用的樹莓派的配置,這裡提供一個方法可以獲取當前正在使用的樹莓派的config。
出現上圖核心配置已完成!下一步核心的編譯。
編譯:
安裝必要的庫:
sudo apt-get install bc
sudo apt-get install libncurses5-dev libncursesw5-dev
sudo apt-get install zlib1g:i386
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5
1、執行menuconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig
如果沒什麼改的就不用執行這一步。
2、編譯
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs
//-j4指定用多少電腦資源來編譯,4是4程式。
//zImage是生成核心映象
//modules要生成驅動模組
//dtbs是生成配置檔案
以n程式編譯。不指明幾程式的話則預設以單程式編譯,編譯成功後,看到原始碼樹多了vmlinux(沒有壓縮的linux),失敗則無此檔案,成功後目標檔案zImage映象在arch/arm/boot底下。
3、打包zImage檔案成樹莓派可用的xxx.img
直接用linux原始碼包裡的工具:
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img
//scripts是一個指令碼資料夾,其中的mkknlimg會將zImage打包成kernel_new.img
在本目錄生成一個kernel_new.img檔案,這個檔案就是要放到sd卡中的檔案。
注:網上很多地方說的用 tools/mkimage/imagetool-uncompressd.py 的方法不行!!
映象的拷貝:
一、掛載樹莓派sd卡,並安裝編譯出的DIRECTLY 到sd卡
把樹莓派的sd卡插入ubuntu系統電腦,樹莓派的sd卡有兩個分割槽:
一個fat分割槽,是boot相關的內容,kernel的img檔案就放在這個分割槽裡;
一個是ext4分割槽,也就是系統的根目錄分割槽。
我們生成的檔案涉及到這兩個分割槽的內容,一般插入ubuntu後會自動掛載,fat分割槽可以不用root許可權操作,ext4分割槽需要root許可權操作。
兩個分割槽具體掛載在什麼地方可以自己決定,以下用[fat]表示boot掛載的路徑,[ext4]表示ext4掛載的路徑。
二、掛載
插入sd卡輸入dmesg去檢視核心的資訊,如有裝置接入,核心會列印一些驅動方面的資訊,如圖:會看到兩個分割槽,sdb1和sdb2
資料拷貝:
mkdir data1
mkdir data2
//建立兩個資料夾,對應stb1和stb2
掛載U盤:
sudo mount /dev/sdb1 data1 一個是fat分割槽,是boot相關的內容,kernel的img
sudo mount /dev/sdb2 data2 一個是ext4分割槽,也就是系統的根目錄分割槽
//將dev下的sdb1和sdb2分別掛載到data1和data2
如圖,可以看到sd卡中的檔案以掛載到data1和data2:
三、開始拷貝
1、安裝modules(也是編譯生成的,主要是裝置驅動檔案,比如:hdmi,usb,wifi…)
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install
//其中的[ext4]是根據自己掛載的檔名稱填寫,是存放根目錄的資料夾路徑。
演示:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/feng/data2 modules_install
安裝後如圖:
2、可以考慮先備份(防止拷貝失敗,樹莓派不能開機)如圖:
然後更新 kernel.img 檔案,再將新生成的映象檔案拷貝到data1,其名為kernel7.img,將原來的(kernel7.img)覆蓋掉,前面已經用 mkknlimg 工具打包了kernel_new.img檔案了,把它複製到boot分割槽並配置使用即可:
cp kernel_new.img [fat]/
3、複製其他相關檔案(這些是配置檔案,為了能夠載入驅動等)
cp arch/arm/boot/dts/.*dtb* [fat]/
cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
//*dtb*中的*是萬用字元就是以.開頭以dtb在中間這種形式的檔案,.和dtb之間的東西不管,dtb後有什麼字元也不管。
更新完成後插回樹莓派即可開機,可以通過串列埠開機(可以看作業系統是否起來了),開機後可以用 uname -a 命令檢視kernel資訊已經改變。
驅動載入的兩種方式:
- * 編譯核心 zImage包含了驅動
- M 模組方式生成驅動檔案xxx.ko 系統啟動後,通過命令inmosd xxx.ko載入
指令補充:
dmesg
//檢視硬體底層的一些連線資料
feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ du kernel_new.img
4828 kernel_new.img
feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ du kernel_new.img -h
4.8M kernel_new.img
feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ md5sum kernel_new.img
6350420d173bddfe02f4d8f81791e91f kernel_new.img
feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$ md5sum /home/feng/data1/kernel7.img
6350420d173bddfe02f4d8f81791e91f /home/feng/data1/kernel7.img
feng@ubuntu:~/SYSTEM/linux-rpi-4.14.y$
//du指令檢視檔案的大小,-h是以兆為單位顯示
//每個檔案都有它唯一的的編碼號就是md5sum的值,在拷貝時若發生損壞則md5sum的值會發生改變,可以用其驗證是否烤壞。
參考博文:https://blog.csdn.net/nicekwell/article/details/78482833
相關文章
- 樹莓派CM4(四):樹莓派映象替換核心樹莓派
- 樹莓派使用入門:用樹莓派學 Linux樹莓派Linux
- 將樹莓派配置成路由樹莓派路由
- 樹莓派配置watchdog樹莓派
- 樹莓派編譯OpenCV報錯樹莓派編譯OpenCV
- 樹莓派是什麼 樹莓派能做什麼 樹莓派的功能用途樹莓派
- 樹莓派製作映象並縮小映象尺寸樹莓派
- 樹莓派使用入門:如何更新樹莓派樹莓派
- PiShrink:使樹莓派映象更小樹莓派
- 「玩轉樹莓派」樹莓派 3B+ 配置無線WiFi樹莓派WiFi
- (二)樹莓派配置MySQL樹莓派MySql
- 將樹莓派配置成路由器樹莓派路由器
- 樹莓派 | 修改樹莓派3熱點的名稱和密碼樹莓派密碼
- 樹莓派使用樹莓派
- 樹莓派使用入門:慶祝樹莓派的 14 天樹莓派
- 樹莓派使用入門:透過樹莓派和 kali Linux 學習電腦保安樹莓派Linux
- 樹莓派使用入門:如何用樹莓派來娛樂樹莓派
- 樹莓派使用入門:如何購買一個樹莓派樹莓派
- 樹莓派筆記樹莓派筆記
- 樹莓派與FileZilla樹莓派
- 樹莓派使用buildroot生成系統映象樹莓派UI
- 樹莓派使用入門:如何啟動一個新的樹莓派樹莓派
- 樹莓派使用入門:如何為樹莓派社群做出貢獻樹莓派
- 樹莓派搭建git伺服器 | 樹莓派小無相系列樹莓派Git伺服器
- 樹莓派開發—基礎配置樹莓派
- 如何將樹莓派配置為列印伺服器樹莓派伺服器
- 樹莓派編譯安裝opencv3 (2019.1.6更新)樹莓派編譯OpenCV
- 樹莓派安裝nodejs樹莓派NodeJS
- 樹莓派 -入門篇樹莓派
- 樹莓派安裝 vscode樹莓派VSCode
- 樹莓派-進階篇樹莓派
- 樹莓派 4 來襲!樹莓派
- 樹莓派raspiOS換源樹莓派iOS
- 樹莓派桌面體驗樹莓派
- Ubuntu和樹莓派遠端操作Ubuntu樹莓派
- 樹莓派和 ArchlinuxARM(aarch64)樹莓派Linux
- 樹莓派開發筆記(十五):樹莓派4B+從原始碼編譯安裝mysql資料庫樹莓派筆記原始碼編譯MySql資料庫
- 樹莓派自建 NAS 雲盤之——樹莓派搭建網路儲存盤樹莓派