第3階段——內核啟動分析之內核編譯試驗(1)


目標:

1.給內核打補丁

2.配置

3.編譯

4.重啟  

 

1 內核打補丁

1.1 通過FTPWindowssystem目錄下linux-2.6.22.6.tar.bz2linux-2.6.22.6_jz2440.patch文件拷貝linux/work/system

1.2  使用  tar xjf linux-2.6.22.6.tar.bz2   命令解壓linux-2.6.22.6.tar.bz2

(tar命令詳細介紹入口鏈接http://www.cnblogs.com/lifexy/p/7009245.html)

1.3  進入linux-2.6.22.6目錄下,使用  patch -p1 <../linux-2.6.22.6_jz2440.patch  命令linux-2.6.22.6文件進行打補丁。

(patch命令詳細介紹入口鏈接http://www.cnblogs.com/lifexy/p/7009706.html)

2 配置(3種配置方法)

2.1直接輸入 make menuconfig   命令,從頭到尾重新配置菜單 (非常復雜)、

make menuconfig時修改配置項,最終的配置結果會保存在.config文件中,這主要是Kconfig的功能,

再執行make menuconfig時就可以回去讀取.config文件。這是內核配置的過程。

 

2.2通過make xxx_defconfig命令在默認的配置上進行修改,然后再輸入make menuconfig配置菜單

(1)  首先找defconfig位置, linux-2.6.22.6目錄下,使用 find –name *defconfig 命令查找所有帶fconfig名字的文件.

 (find命令詳細介紹入口鏈接http://www.cnblogs.com/lifexy/p/7160677.html)

發現defconfig文件都在arch架構目錄下,如下圖所示:

 

(2) 我們的是arm架構,所以 cd  arch/arm/configs   進入configs目錄,如下圖所示,發現與2440相像的就只有s3c2410_deconfig

 

3)返回到linux-2.6.22.6頂層目錄下,通過make s3c2410_defconfig 命令來配置,如下圖所示

配置完后可以看出最后出現“configuration written to .config”,表示將所有config配置都寫入到.config文件中,

 

4最后執行make menuconfig時就可以回去讀取.config文件,不同的.config文件,menuconfig都不同

2.3使用廠家提供的配置config_ok文件

linux-2.6.22.6目錄下,使用cp config_ok  .configconfig_ok復制覆蓋新的.config隱藏文件(通過 ls -la 命令可以查看.config隱藏文件),

最后執行make menuconfig時就可以回去讀取.config文件

2.4  make menuconfig 配置菜單使用說明

使用 make menuconfig 配置菜單后,會出現以下菜單

 

菜單使用說明

 


Arrow keys navigate the menu.    箭頭鍵導航菜單

<Enter> selects submenus --->.   Enter鍵選擇菜單——>

Highlighted letters are hotkeys.   粗體的開頭字母是熱鍵,例如上圖中按B,跳到Block layer

Pressing <Y> includes,                Y,編譯在內核里運行        

<N> excludes,                              N,不編譯在內核中

<M> modularizes features.          M,進行模塊化

Press <Esc><Esc> to exit,         Esc鍵退出

<?> forHelp,                               ?鍵幫助

</> for Search.                           /鍵搜索

Legend:                                      顯示:

[*] built-in                                    [*]:已經內置在內核中

 [ ] excluded                               [ ]:不編譯在內核中

<M> module                              <M>:已經模塊化

< > module capable                  < >:表示這選項能被模塊化(按下M鍵有響應)


 

3 編譯(2種配置方法)

3.1 輸入 make 命令直接編譯

3.2 輸入 make uImage 命令生成uImage內核文件(頭部uImage+真正的內核),可以直接燒寫給uboot直接使用(因為uboot支持的內核需要有頭部uImage,  uImage位置在linuxwork/system/linux-2.6.22.6/arch/arm/boot)

注意:要想“ make uImage”成功,必須把編譯 u-boot 時得到的 mkimage 工具復制到
/usr/bin 目錄下去。 mkimage 工具在 u-boot 源碼下u-boot-1.1.6/tools 目錄里,如下所示:

 

 

 3.3將編譯出的uImage文件uboot菜單中輸入k,通過dnw發送uImage文件uboot進行燒寫

其中k鍵是對應於cmd_menu.cmenu_shell()函數,代碼如下:

case 'k':
{
strcpy(cmd_buf, "usbslave 1 0x30000000; nand erase kernel; nand write.jffs2 0x30000000 kernel $(filesize)");
run_command(cmd_buf, 0);
break;
}

其中實現了:usb接收發送的數據下載到0x30000000,接着擦除內核分區,然后將0x30000000地址的東西燒寫到nand flash內核分區中,方便下次重啟使用,filesize接收文件的大小

在uboot中輸入"mtd"可以查看內核分區位置

0:bootloader 0X00040000 0X00000000 0
1:params      0X00020000 0X00040000 0
2:kernel        0X00200000 0X00060000 0
3:root            0X0fda0000 0X00260000 0

4.重啟,燒寫文件系統

4.1 uboot菜單中按b按鍵重啟內核,如下圖所示:

 

若顯示VFS: Mounted root (nfs filesystem).字段,表示已安裝文件系統

 4.2輸入nand erase root刪除內存中root0x0026000~0x0fffffff文件系統后,重啟設備,就會無法啟動內核,

 

所以要想啟動內核,必須需要文件系統!!!!!

若編譯模塊,輸入make modules即可,然后模塊會編譯成.ko文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM