為了更好的理解ubifs根檔案系統的製作,首先,我們簡單的說一下,系統的組成:
| Bootloader(uboot) |
parames(啟動參數) |
kernel(核心) |
root Filesystem (根檔案系統) |
bootloader(uboot)的作用就是用來載入作業系統;而嵌入式linux系統由linux核心和根檔案系統兩部分構成,兩者缺一不可。
所以我們要製作一個UBIFS的根檔案系統,首先必須讓上面系統組成的幾個部分都支援UBIFS檔案系統,就得在這幾個組成部分添加一些“東西”(支援UBI的配置):
(打個我自己理解的比喻吧:“娶媳婦”比作--啟動系統,娶媳婦是不是要經過老爸、老媽、丈母娘、嶽父的同意和支援?bootloader、parames、kernel、root
Filesystem便是老爸、老媽、丈母娘、嶽父...O(∩_∩)O~,而你叫"UBI")
這篇博文主要是詳細解析:uboot中添加對UBIFS檔案系統的支援
一、移植環境
§主機:vmware-redhat5
§開發板:mini2440--256MB nandflash
§kernel:2.6.29 編譯器:arm-linux-gcc-4.3.2.tgz
§uboot: u-boot-2008.10
二.移植步驟
本次移植的功能為:支援UBIFS檔案系統
1.在include/configs/mini2440.h中添加如下配置: (注意:不同的開發板在include/configs/目錄下對應的修改的設定檔不同,我的開發板是mini2440所以修改的是mini2440.h)
#define CONFIG_MTD_DEVICE
#define CONFIG_MTD_PARTITIONS
#define CONFIG_CMD_MTDPARTS
#define CONFIG_LZO
#define CONFIG_RBTREE
#define CONFIG_CMD_UBIFS //要支援ubIfs首先得讓uboot支援UBIFS的燒寫命令
#define CONFIG_CMD_UBI //uboo支援的ubifs燒寫命令:1.mtdparts: 用來給NAND分區;
/*2.nand erase.part:用來擦除指定分區 等這些命令 在“UBIFS鏡像的製作&&燒寫”博文理解*/
//其次要支援MTD(memory
technology device記憶體技術裝置)是用於訪問memory裝置(ROM、flash)的Linux的子系統
#define MTDIDS_DEFAULT "nand0=nandflash0" //同時要給nandlflash建立預設的分區,
#define MTDPARTS_DEFAULT "mtdparts=nandflash0:384k(bootloader),"\ //我的分區:
"128k(params),"\
"5m(kernel),"\
"64m(root)"
/*還要修改下面幾個宏,因為使用UBIFS會佔用更多的堆、棧空間*/
#define CONFIG_STACKSIZE (512*1024)
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE+1024*1024)
#define CONFIG_SYS_GBL_DATA_SIZE 512
2.回到uboot的頂層目錄下
(可能拿到的uboot已被編譯過,所以最好要用此命令清理中間檔案)
執行命令:make clean
(uboot是通用的bootloader,支援多種開發板,所以編譯之前先選擇使用哪種board)
執行命令:make mini2440_config
注意:我用的是mini2440開發板,所以要編譯這個開發板使用的uboot,所以這裡的目標為mini2440_config,表示選擇的board是mini2440
(mini2440_config在Makefile標準術語稱為“目標”,可以在uboot頂層Makefile找到該目標)
執行命令(開始編譯uboot) :make CROSS_COMPILE=arm-linux-