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