u boot,linux,檔案系統移植筆記1

2022-08-26 16:51:31 字數 2805 閱讀 1447

今天把u-boot,linux,yaffs2檔案系統的移植全部搞定了,在我的mini2440板子上跑起來了,呵呵,興奮啊!現在回頭看看自己花了這麼長時間所作的工作,結論就是,只要堅持下去就一定會成功的。

下面就把我移植過程中的步驟記錄下來,留著以後看看,也許還會用到的。

先是u-boot部分:

我用的是

開發環境:fedora 14

開發板:mini2440  256m nandflash   64m sdram

交叉編譯器:arm-linux-gcc 4.4.3

busybox版本:busybox-1.7.0

yaffs製作工具:mkyaffsimage

yaffs2製作工具:mkyaffs2image(適合64m)、mkyaffs2image-128(適合128m以上,我的256m的用這個)

對於u-boot的修改有很多,參考了韋東山大神寫的那本《嵌入式linux應用開發完全手冊》一步步做的,建議這部分大家也都自己動手做做,會有不少收穫,對於那種檔案的樹形結構分布,程式設計的能力都會有很大的提高。

當u-boot移植能夠在板子跑了,在看下面內容:

我一直困惑在mtd那部分,對於nand flash分割槽那一直不是很清楚,先看我現在的mtd分割槽:

creating 3 mtd partitions on "nand 256mib 3,3v 8-bit":

0x000000000000-0x000000500000 : "kernel"

0x000000500000-0x000000d00000 : "jffs2"

0x000000d00000-0x000010000000 : "yaffs"

tftp 0x31000000 uimage

nand erase 0 0x500000

nand write.jffs2 0x31000000 0 0x300000

static struct mtd_partition friendly_arm_default_nand_part = ,  

[1] = ,

[2] = ,  

[3] = ,

[4] =

};這是之前的mtd分割槽,修改後如下:(在 arch/arm/mach-s3c2440/mach-mini2440.c中)

static struct mtd_partition friendly_arm_default_nand_part = ,  

} };

使用:tftp 0x32000000 uimage bootm 0x32000000

看看能不能列印出這句:

creating 3 mtd partitions on "nand 256mib 3,3v 8-bit":

0x000000000000-0x000000500000 : "kernel"

0x000000500000-0x000000d00000 : "jffs2"

0x000000d00000-0x000010000000 : "yaffs"

如果可以那說明這一步實現了。由於開發板上還沒有寫入檔案系統,也沒有設定nfs掛接網路檔案系統,所以核心啟動後還會出現panic資訊。不急, 我們下一步來解決它。 在這之前,先解釋一下幾個概念:

1.uimage

使用 make uimage編譯 我們編譯linux結束後會在arch/arm/boot/目錄下生成zimage,uimage核心檔案,這有什麼區別呢? 之前一直沒有去研究他們,現在明白了,簡單的說一下區別:  uimage是u-boot專用的映像檔案,它是在zimage之前加上乙個長度為0x40的tag。vmlinuz是bzimage/zimage檔案的拷貝或指向bzimage/zimage的 鏈結。initrd是「initialramdisk」的簡寫。一般被用來臨時的引導硬體到實際核心vmlinuz能夠接管並繼續引導的狀態。 vmlinux是核心檔案,zimage是一般情況下預設的壓縮核心映像檔案,壓縮vmlinux,加上一段解壓啟動**得到,只能從0x0位址執行。 uimage是u-boot使用bootm命令引導的linux壓縮核心映像檔案格式,使用工具mkimage對普通的壓縮核心映像檔案(zimage)加工而得。 可以由bootm命令從任意位址解壓啟動核心。由於bootloader一般要占用0x0位址,所以,uimage相比zimage的好處就是可以和bootloader共存。 當我們使用ls -l 檢視這兩個檔案大小時會發現,uimage比zimage大了64位元組,也就是多了0x40長度的tag.

2.bootm

4.mtdpart_siz_full flash

分割槽剩下的所有大小空間都分配出去。

接著上面說的,寫入flash後,儲存引導引數。我這裡是在u-boot中**固定的。

#define config_bootdelay 5

#define config_bootargs     "noinitrd root=/dev/mtdblock2 init=/linuxrc console=ttysac0"

#define config_ethaddr     08:00:3e:26:0a:5b

#define config_netmask      255.255.255.0

#define config_ipaddr  192.168.1.230

#define config_serverip  192.168.1.10 /*#define config_bootfile "elinos-lart" */

#define config_bootcommand "nboot 0x31000000 0 0; bootm 0x31000000"

這樣開機後,不打斷便可進入kernel。

下一節介紹檔案系統部分!

檔案系統 why檔案系統

為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...

檔案系統 檔案系統的架構

vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...

檔案系統 編寫檔案系統

8.5 編寫乙個檔案系統 如果寫乙個實際檔案系統,但是涉及的東西太多,不容易簡明扼要的理解檔案系統的實現。linux核心中提供的romfs檔案系統是個非常理想的例子,既有實際應用架構,也清晰明了,故以romfs為例項分析檔案系統的實現。一 linux檔案系統的實現要素 編寫新檔案系統涉及一些基本物件...