目標:
1.給內核打補丁
2.配置
3.編譯
4.重啟
1 內核打補丁
1.1 通過FTP將Windows里system目錄下linux-2.6.22.6.tar.bz2和linux-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 .config將config_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位置在linux中work/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.c中menu_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”刪除內存中root區0x0026000~0x0fffffff文件系統后,重啟設備,就會無法啟動內核,
所以要想啟動內核,必須需要文件系統!!!!!
若編譯模塊,輸入make modules即可,然后模塊會編譯成.ko文件