溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux內核移植的方法有哪些

發(fā)布時間:2022-02-19 10:25:41 來源:億速云 閱讀:170 作者:iii 欄目:開發(fā)技術

這篇文章主要介紹“Linux內核移植的方法有哪些”,在日常操作中,相信很多人在Linux內核移植的方法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Linux內核移植的方法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Linux內核移植的方法有哪些
方式一:kernel提供的源碼包,進行編譯替換
1、首先做好內核編譯前的準備工作,

主要有兩個準備工作,一是在linux kernel官網上下載源碼包,二是安裝好任意版本的linux Ubuntu 系統(tǒng)并下載相應的編譯工具。

在linux kernel上下載源碼包,如下圖所示:以linux_3.2.1為例子:

Linux內核移植的方法有哪些

下載完成后,進行第二個準備工作,安裝任意版本的Ubuntu,像裝其他任意操作系統(tǒng)一樣,安裝完成Ubuntu操作系統(tǒng),然后配置好聯(lián)網,進行apk_get的下載。以下過程在root權限下進行,安裝有關編譯程序。安裝make ,gcc, make-kpkg,運行menuconfig等等和編譯內核相關的工具。

有關命令:

$sudo  apt-get install build-essential kernel-package   libncurses5-dev

注意: 

(1)libncurses5-dev是為之后配置內核能運行 make menuconfig程序做準備 Build-essential為編譯工具,kernel-package是編譯內核工具

(2)如果系統(tǒng)顯示無法查找到這三個文件,輸入#apt-get update更新數據源。 把剛剛下載的源碼包進行拷貝在ubuntu系統(tǒng)中,并解壓到/usr/src 目錄下,解壓可以直接右鍵解壓,或者采用以下命令進行解壓:

$sudo tar Jvfx linux-3.4.88.tar.xz
2、開始配置編譯的相關文件及環(huán)境

首先,清理以前編譯時留下的臨時文件。如果是剛剛解開的包,不需要執(zhí)行這步。如果是第二次或者是第n次編譯,那么一定要執(zhí)行。 相關命令如下:

#$ sudo make mrproper

然后將自己原本內核的配置文件拷貝過來成為新內核的配置文件,命令:

#cp /boot/config-`uname -r` ./.config

這里需要說明的是,拷貝過來是很方便的,相當于直接給新的內核編譯提供對應的配置文件,告訴內核哪些文件要編譯,哪些不需要編譯,但是經過幾次的編譯修改,這一部分是可以自定義的,利用我們之前下載的工具menuconfig。

進入內核的源碼目錄

#cd /usr/src/linux_3.2.1

執(zhí)行以下命令:

#make  menuconfig

注意:這個命令需要在超級用戶權限下執(zhí)行,否則可能會報出一些莫名奇妙的錯誤。執(zhí)行這個命令之后了,就可一看到下面的圖片了:

  Linux內核移植的方法有哪些 

這個圖里面就可以對配置文件進行一個修改了,如果當初直接拷貝原內核的配置文件,那么此時直接選擇倒數第二行l(wèi)oad an Alternate Configuration File,然后sava即可。

如果自己配置則選擇上面的任意目錄,進行選擇哪些文件要編譯,哪些不編譯,一般需要選擇的是設備驅動,選項是Device Drivers,選擇完畢后同樣保存save即可。


3、開始編譯新內核

編譯命令:

#make all -j4

執(zhí)行以上命令之后就可以編譯內核了, make all就是將內核以及模塊一起編譯。后面的參數-j4表示,cpu要開啟四個線程來編譯內核。一般來說,每個cpu可以開啟兩個線程來編譯內核,我的電腦是有兩個cpu,所以開啟了4個線程。這樣編譯真心很快的,以前沒有發(fā)現(xiàn)這樣編譯,只有一個線程編譯真心夠等好長時間的。

4、編譯完成之后,就可以進行內核的安裝了

我們將源代碼目錄下的arch/x86_64/boot/bzImage復制到/boot/下面,因為我下載的源代碼版本為linux-3.2.1,但是需要根據自己的cpu類型,如是x86架構還是amd,或者是32位或64位,在相應的目錄下尋找bzImage。 所以復制的命令為:

#cp arch/x86_64/boot/bzImage /boot/vmlinuz-3.2.1

這里需要說明,bzImage必須得有,是編譯成功完成的一個生成文件,如果沒有此文件,對不起,編譯失敗,請重新回去編譯。vmlinuz-3.2.1 是自己主動命令的,可以自己改,但一般都是這種命令方式。

5、將源代碼目錄下的System.map復制到/boot目錄下:

命令:

#cp /usr/src/linux-3.2.1/System.map System.map-3.2.1
6、.將源代碼目錄下的.config復制到/boot/目錄下:

命令:

#cp .config /boot/config-3.2.1
7、安裝模塊

命令:

#make modules_install
8、生成initrd.img文件
#cd /lib/modules/3.2.1#update-initramfs –c –k 3.2.1
9、.切換到/boot/grub/目錄下,自動查找新內核,并添加至grub引導
#update-grub
10、修改開機grub啟動時間間隔,命令如下:
#cd /ect/default#sudo nano ./grub

將hidden兩行代碼注釋掉,這樣開機啟動的grub就會出現(xiàn),可以由你選擇改啟動哪個內核版本。

#GRUB_HIDDEN_TIMEOUT=0#GRUB_HIDDEN_TIMEOUT_QUIET=true

更改完成之后,在重新生成grub.cfg文件,命令和上面一樣:

#update-grub
11、切換至grub.cfg目錄

以文本形式查看,是否更新有新內核的啟動項,如果有即可不用修改,如果沒有,進行手動修改。

#cd /boot/grub#sudo nano ./grub.cfg

手動修改,按照原來內核的格式進行修改,只用修改新內核的名字而已。

12、重啟電腦,在previous version中選擇啟動新編譯的內核,成功進入系統(tǒng)。

輸入內核版本檢測命令:

命令:#uname -r

就會出現(xiàn)新內核的名稱?。?!恭喜,替換內核成功!

方式二:下載內核安裝包deb,進行升級替換

首先必須說明的是,這種方式我嘗試了兩臺電腦,兩個不同的內核升級,均為成功,原因不詳: 具體步驟簡單如下:

1.下載deb包

此處下載的是64位的3.5.4版本的3個deb包:

linux-headers-3.5.4-030504_3.5.4-030504.201209142010_all.deb
linux-headers-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
linux-image-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
2.安裝deb包

首先安裝架構無關的即帶all的headers包

sudo dpkg -i linux-headers-3.5.4-030504_3.5.4-030504.201209142010_all.deb
sudo dpkg -i linux-headers-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb
sudo dpkg -i linux-image-3.5.4-030504-generic_3.5.4-030504.201209142010_amd64.deb

安裝后,/boot目錄下會生成新的內核的相關文件,/lib/modules目下也生成了相應模塊。

3.更新啟動項grub

按照上述的步驟9開始,與上面一樣。更新完了grub.cfg,然后重新啟動,進行新的內核即可 測試按照這種步驟進行,但是開機進入之后直接紫屏,沒有任何現(xiàn)象,原因不明?。。?/p>

到此,關于“Linux內核移植的方法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注億速云網站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI