日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

配置树莓派linux的内核和编译并将镜像拷贝至树莓派

發布時間:2023/12/10 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 配置树莓派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_defconfigHOSTCC scripts/basic/fixdepHOSTCC scripts/kconfig/conf.oSHIPPED scripts/kconfig/zconf.tab.cSHIPPED scripts/kconfig/zconf.lex.cHOSTCC scripts/kconfig/zconf.tab.oHOSTLD 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

總結

以上是生活随笔為你收集整理的配置树莓派linux的内核和编译并将镜像拷贝至树莓派的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。