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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核

發(fā)布時(shí)間:2023/12/10 linux 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

  • 一、樹莓派Linux源碼配置(適合樹莓派)
    • 總體概述
    • 配置的三種方式
      • 1.照搬廠家的配置(使用這種方式)
      • 2.參考廠家的配置(感受一下)
      • 3.完全自主配置(需要一定工作經(jīng)驗(yàn))
  • 二、樹莓派Linux內(nèi)核編譯
  • 三、樹莓派掛載新內(nèi)核
    • 總體概述
    • 1.打包zImage文件成kernel_new.img(用linux源碼包里的工具)
    • 2.樹莓派sd卡掛載到ubuntu上(兩個(gè)分區(qū):boot kernal/根文件)
    • 3.安裝modules
    • 4.拷貝新kernel.img文件
    • 5.拷貝其他文件到fat
  • 四、在樹莓派上運(yùn)行
    • 1.用window配置sd卡文件方便觀看啟動(dòng)過程
    • 2.sd卡插回樹莓派
    • 3.打開secureCRT 串口方式登陸樹莓派

一、樹莓派Linux源碼配置(適合樹莓派)

總體概述

配置的三種方式

參照博文(一般廠家會(huì)給到這樣的操作手冊(cè),沒有就涼涼了,玩不了):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ā)準(zhǔn)備第一節(jié)有講到。因?yàn)閮?nèi)核配置全部在宿主機(jī)ubuntu下完成的,必須要有交叉編譯工具。

1.照搬廠家的配置(使用這種方式)

在內(nèi)核源碼目錄文件下搜索廠家配置文件(此步驟作為了解)
可以找到樹莓派3、樹莓派4使用的廠家配置文件bcm2709_defconfig

find . -name *_defconfig

  • 執(zhí)行命令
ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make bcm2709_defconfig

注意:這個(gè)命令要在路徑/linux-rpi-4.14.y(存放的源碼目錄文件)下執(zhí)行,否則提示 “make: *** 沒有規(guī)則可制作目標(biāo)“bcm2709_defconfig”。

  • 執(zhí)行結(jié)果
    可以發(fā)現(xiàn) 廠家config 變成了 .config

2.參考廠家的配置(感受一下)

基于廠家的config,用make menuconfig一項(xiàng)項(xiàng)配置,通常需要自主增刪一些驅(qū)動(dòng)

首先要安裝必要的庫

  • 系統(tǒng)自帶,一般都有
sudo apt-get install bc
  • 必須
sudo apt-get install libncurses5-dev libncursesw5-dev
  • 必須
sudo apt-get install zlib1g:i386
  • ↓ 若這一步提示“E: 無法定位軟件包 lib32ncurses5”可以先留著不做
sudo apt-get install libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5

執(zhí)行menuconfig

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make menuconfig

可以看到以下界面


回車 selects submenus 進(jìn)入子菜單帶—>的
[ ]表示略過的,不參與編譯
空格鍵切換狀態(tài)

驅(qū)動(dòng)的兩種加載方式:

  • [*] built-in:表示編譯進(jìn)了內(nèi)核,zImage包含了驅(qū)動(dòng)。
  • [M] modularizes:表示以模塊的方式生成驅(qū)動(dòng)文件xxx.ko。系統(tǒng)啟動(dòng)后,通過命令inmosd xxx.ko臨時(shí)加載(后面的驅(qū)動(dòng)就是這么進(jìn)行的)

3.完全自主配置(需要一定工作經(jīng)驗(yàn))

可以工作2-3年后在涉獵。

二、樹莓派Linux內(nèi)核編譯

編譯指令:

ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make -j4 zImage modules dtbs

是否成功編譯?

可以看到在內(nèi)核的源碼樹目錄下生成了vmlinux(沒有壓縮的linux)即為成功。

而我們真正想要的目標(biāo)鏡像是/arch/arm/boot/zImage

三、樹莓派掛載新內(nèi)核

總體概述

1.打包zImage文件成kernel_new.img(用linux源碼包里的工具)

./scripts/mkknlimg arch/arm/boot/zImage ./kernel_new.img

樹莓派的鏡像文件結(jié)尾就是.img,這個(gè)文件就是要放到sd卡中的文件

2.樹莓派sd卡掛載到ubuntu上(兩個(gè)分區(qū):boot kernal/根文件)

樹莓派斷電,把SD卡插入讀卡器后按照下圖配置

查看內(nèi)核信息,有設(shè)備接入的時(shí)候內(nèi)核會(huì)打印出驅(qū)動(dòng)層面的信息。

dmesg

接入成功!

sdb1,2分別是樹莓派sd卡的兩個(gè)分區(qū)
①一個(gè)fat分區(qū)。是boot相關(guān)的內(nèi)容,kernel的img文件在此分區(qū)。
②一個(gè)是ext4分區(qū),也就是系統(tǒng)的根目錄分區(qū)。(cd /進(jìn)入的就是系統(tǒng)的根目錄)

這里我在我的ubuntu桌面底下(/Desktop)新建兩個(gè)文件夾

mkdir data1 mkdir data2

然后分別關(guān)聯(lián)到sd卡的兩個(gè)分區(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)),要對(duì)應(yīng)好。

老陳這里的boot用的之前刷機(jī)刷好的,沒有重新進(jìn)行移植,下面直接講了內(nèi)核的移植。

3.安裝modules

modules就是內(nèi)核驅(qū)動(dòng)相關(guān),少了這一步類似網(wǎng)卡,wifi,usb,HDMI這些都用不了

注意:操作的是ext4分區(qū),對(duì)應(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

實(shí)際使用的時(shí)候要將“[ext4]”更改為自己data2的絕對(duì)路徑 ,這里根據(jù)我自己的文件路徑修改成:

sudo ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- KERNEL=kernel7 make INSTALL_MOD_PATH=/home/zhugl/Desktop/data2 modules_install

可以看到很多的.ko文件,這與驅(qū)動(dòng)相關(guān)。出現(xiàn)的提示make: arm-linux-gnueabihf-gcc: Command not found不用管它。

4.拷貝新kernel.img文件

注意查看原來鏡像名字是kernel7.img

ls /home/zhugl/Desktop/data1


因?yàn)樵瓉淼倪@個(gè)kernel7.img將要被覆蓋(樹莓派鏡像規(guī)定必須要定義成這個(gè)名字),為了防止刷機(jī)失敗,或者拷貝過程中文件損壞,需要提前用別名備份這個(gè)文件。打開新的終端(ctrl alt t)(方便操作罷了),進(jìn)入其存放路徑(cd /home/zhugl/Desktop/data1)

sudo cp kernel7.img kernel7OLD.img

從源碼樹目錄(linux-rpi-4.14.y)拷貝kernel_new.img(是由zImage打包而成)到data1并且命名為kernel7.img覆蓋原來的文件

sudo cp kernel_new.img /home/zhugl/Desktop/data1/kernel7.img

檢查拷貝是否有問題

md5sum顯示文件的唯一編碼號(hào),若相同則為同一個(gè)文件

md5sum kernel_new.img md5sum /home/zhugl/Desktop/data1/kernel7.img


編碼號(hào)一樣,拷貝正確。

5.拷貝其他文件到fat

都是從目錄linux-rpi-4.14.y進(jìn)行拷貝

這些配置文件是為了能夠加載驅(qū)動(dòng)以及一些其他的配置。

————————①

  • 更改前
cp arch/arm/boot/dts/.*dtb* [fat]/
  • 根據(jù)實(shí)際更改后
sudo cp arch/arm/boot/dts/.*dtb* /home/zhugl/Desktop/data1/

————————②

  • 更改前
cp arch/arm/boot/dts/overlays/.*dtb* [fat]/overlays/
  • 根據(jù)實(shí)際更改后
sudo cp arch/arm/boot/dts/overlays/.*dtb* /home/zhugl/Desktop/data1/overlays/

————————③

  • 更改前
    README有沒有都行
cp arch/arm/boot/dts/overlays/README [fat]/overlays/
  • 根據(jù)實(shí)際更改后
sudo cp arch/arm/boot/dts/overlays/README /home/zhugl/Desktop/data1/overlays/

四、在樹莓派上運(yùn)行

1.用window配置sd卡文件方便觀看啟動(dòng)過程

如果之前在做別的項(xiàng)目,例如串口編程時(shí)用于串口數(shù)據(jù)交互和傳輸會(huì)把這個(gè)配置信息刪掉,這時(shí)需要添加回來,用來觀察操作系統(tǒng)啟動(dòng)過程

點(diǎn)擊選擇斷開連接sd卡,使其重新掛載在windows上。

打開sd卡中boot文件夾下的cmdline.txt

按照上圖位置添加(直接在虛擬機(jī)上修改這個(gè)配置文件也可以)

console=ttyAMA0,115200

2.sd卡插回樹莓派

sd卡插回樹莓派,USB-TTL連接。注意樹莓派要在斷電下操作

3.打開secureCRT 串口方式登陸樹莓派

樹莓派重新上電,可以看到啟動(dòng)正常。

如何確定內(nèi)核已經(jīng)更換了呢?

查看內(nèi)核版本號(hào)

uname -r

原來版本為4.14.98-v7

所以成功啦!

有意思的是,之前在上一個(gè)內(nèi)核版本樹莓派里編寫的一些Demo文件都在!而且以前配置的SSH登錄、固定IP地址配置都原樣不動(dòng)!所以內(nèi)核新配置的那兩個(gè)分區(qū)并沒有改變以前的一些文件和配置,因?yàn)槲覀冎皇歉铝薻ernal.img,Uboot和根文件系統(tǒng)都沒改變。

總結(jié)

以上是生活随笔為你收集整理的树莓派Linux内核源码配置、编译、挂载(boot/kernal/根文件)、开启新内核的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。