树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核
目錄
- 一、樹莓派Linux源碼配置(適合樹莓派)
- 總體概述
- 配置的三種方式
- 1.照搬廠家的配置(使用這種方式)
- 2.參考廠家的配置(感受一下)
- 3.完全自主配置(需要一定工作經(jīng)驗)
- 二、樹莓派Linux內(nèi)核編譯
- 三、樹莓派掛載新內(nèi)核
- 總體概述
- 1.打包zImage文件成kernel_new.img(用linux源碼包里的工具)
- 2.樹莓派sd卡掛載到ubuntu上(兩個分區(qū):boot kernal/根文件)
- 3.安裝modules
- 4.拷貝新kernel.img文件
- 5.拷貝其他文件到fat
- 四、在樹莓派上運行
- 1.用window配置sd卡文件方便觀看啟動過程
- 2.sd卡插回樹莓派
- 3.打開secureCRT 串口方式登陸樹莓派
一、樹莓派Linux源碼配置(適合樹莓派)
總體概述
配置的三種方式
參照博文(一般廠家會給到這樣的操作手冊,沒有就涼涼了,玩不了):http://nicekwell.net/blog/20171108/shu-mei-pai-nei-he-kai-fa-shuo-ming-xia-zai-dai-ma-bian-yi-ti-huan-nei-he.html
前提:交叉編譯工具要先安裝好,在我的博文樹莓派內(nèi)核開發(fā)準備第一節(jié)有講到。因為內(nèi)核配置全部在宿主機ubuntu下完成的,必須要有交叉編譯工具。
1.照搬廠家的配置(使用這種方式)
在內(nèi)核源碼目錄文件下搜索廠家配置文件(此步驟作為了解)
可以找到樹莓派3、樹莓派4使用的廠家配置文件bcm2709_defconfig
- 執(zhí)行命令
注意:這個命令要在路徑/linux-rpi-4.14.y(存放的源碼目錄文件)下執(zhí)行,否則提示 “make: *** 沒有規(guī)則可制作目標“bcm2709_defconfig”。
- 執(zhí)行結(jié)果
可以發(fā)現(xiàn) 廠家config 變成了 .config
2.參考廠家的配置(感受一下)
基于廠家的config,用make menuconfig一項項配置,通常需要自主增刪一些驅(qū)動
首先要安裝必要的庫
- 系統(tǒng)自帶,一般都有
- 必須
- 必須
- ↓ 若這一步提示“E: 無法定位軟件包 lib32ncurses5”可以先留著不做
執(zhí)行menuconfig
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig可以看到以下界面
回車 selects submenus 進入子菜單帶—>的
[ ]表示略過的,不參與編譯
空格鍵切換狀態(tài)
驅(qū)動的兩種加載方式:
- [*] built-in:表示編譯進了內(nèi)核,zImage包含了驅(qū)動。
- [M] modularizes:表示以模塊的方式生成驅(qū)動文件xxx.ko。系統(tǒng)啟動后,通過命令inmosd xxx.ko臨時加載(后面的驅(qū)動就是這么進行的)
3.完全自主配置(需要一定工作經(jīng)驗)
可以工作2-3年后在涉獵。
二、樹莓派Linux內(nèi)核編譯
編譯指令:
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs是否成功編譯?
可以看到在內(nèi)核的源碼樹目錄下生成了vmlinux(沒有壓縮的linux)即為成功。
而我們真正想要的目標鏡像是/arch/arm/boot/zImage
三、樹莓派掛載新內(nèi)核
總體概述
1.打包zImage文件成kernel_new.img(用linux源碼包里的工具)
./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img樹莓派的鏡像文件結(jié)尾就是.img,這個文件就是要放到sd卡中的文件
2.樹莓派sd卡掛載到ubuntu上(兩個分區(qū):boot kernal/根文件)
樹莓派斷電,把SD卡插入讀卡器后按照下圖配置
查看內(nèi)核信息,有設(shè)備接入的時候內(nèi)核會打印出驅(qū)動層面的信息。
dmesg接入成功!
sdb1,2分別是樹莓派sd卡的兩個分區(qū)
①一個fat分區(qū)。是boot相關(guān)的內(nèi)容,kernel的img文件在此分區(qū)。
②一個是ext4分區(qū),也就是系統(tǒng)的根目錄分區(qū)。(cd /進入的就是系統(tǒng)的根目錄)
這里我在我的ubuntu桌面底下(/Desktop)新建兩個文件夾
mkdir data1 mkdir data2然后分別關(guān)聯(lián)到sd卡的兩個分區(qū)中(必須掛載到文件夾才能看到里面內(nèi)容)
sudo mount /dev/sdb1 data1 sudo mount /dev/sdb2 data2查看data1,2分別存放的是什么
可以看到data1為fat分區(qū)(boot、kernal相關(guān)),data2為ext4分區(qū)(系統(tǒng)根目錄相關(guān)),要對應(yīng)好。
老陳這里的boot用的之前刷機刷好的,沒有重新進行移植,下面直接講了內(nèi)核的移植。
3.安裝modules
modules就是內(nèi)核驅(qū)動相關(guān),少了這一步類似網(wǎng)卡,wifi,usb,HDMI這些都用不了
注意:操作的是ext4分區(qū),對應(yīng)的就是data2
來到linux-rpi-1.14.y文件路徑下操作
安裝modules的指令是:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=[ext4] modules_install實際使用的時候要將“[ext4]”更改為自己data2的絕對路徑 ,這里根據(jù)我自己的文件路徑修改成:
sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/zhugl/Desktop/data2 modules_install可以看到很多的.ko文件,這與驅(qū)動相關(guān)。出現(xiàn)的提示make: arm-linux-gnueabihf-gcc: Command not found不用管它。
4.拷貝新kernel.img文件
注意查看原來鏡像名字是kernel7.img
ls /home/zhugl/Desktop/data1
因為原來的這個kernel7.img將要被覆蓋(樹莓派鏡像規(guī)定必須要定義成這個名字),為了防止刷機失敗,或者拷貝過程中文件損壞,需要提前用別名備份這個文件。打開新的終端(ctrl alt t)(方便操作罷了),進入其存放路徑(cd /home/zhugl/Desktop/data1)
從源碼樹目錄(linux-rpi-4.14.y)拷貝kernel_new.img(是由zImage打包而成)到data1并且命名為kernel7.img覆蓋原來的文件
sudo cp kernel_new.img /home/zhugl/Desktop/data1/kernel7.img檢查拷貝是否有問題
md5sum顯示文件的唯一編碼號,若相同則為同一個文件
md5sum kernel_new.img md5sum /home/zhugl/Desktop/data1/kernel7.img
編碼號一樣,拷貝正確。
5.拷貝其他文件到fat
都是從目錄linux-rpi-4.14.y進行拷貝
這些配置文件是為了能夠加載驅(qū)動以及一些其他的配置。
————————①
- 更改前
- 根據(jù)實際更改后
————————②
- 更改前
- 根據(jù)實際更改后
————————③
- 更改前
README有沒有都行
- 根據(jù)實際更改后
四、在樹莓派上運行
1.用window配置sd卡文件方便觀看啟動過程
如果之前在做別的項目,例如串口編程時用于串口數(shù)據(jù)交互和傳輸會把這個配置信息刪掉,這時需要添加回來,用來觀察操作系統(tǒng)啟動過程
點擊選擇斷開連接sd卡,使其重新掛載在windows上。
打開sd卡中boot文件夾下的cmdline.txt
按照上圖位置添加(直接在虛擬機上修改這個配置文件也可以)
console=ttyAMA0,1152002.sd卡插回樹莓派
sd卡插回樹莓派,USB-TTL連接。注意樹莓派要在斷電下操作
3.打開secureCRT 串口方式登陸樹莓派
樹莓派重新上電,可以看到啟動正常。
如何確定內(nèi)核已經(jīng)更換了呢?
查看內(nèi)核版本號
uname -r原來版本為4.14.98-v7
所以成功啦!
有意思的是,之前在上一個內(nèi)核版本樹莓派里編寫的一些Demo文件都在!而且以前配置的SSH登錄、固定IP地址配置都原樣不動!所以內(nèi)核新配置的那兩個分區(qū)并沒有改變以前的一些文件和配置,因為我們只是更新了kernal.img,Uboot和根文件系統(tǒng)都沒改變。
總結(jié)
以上是生活随笔為你收集整理的树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转载】制作Ubuntu启动盘——详细记
- 下一篇: linux文件系统、文件系统结构、虚拟文