我的mtd-utils工具鏈編譯過程

來源:互聯網
上載者:User

我的AT91SAM9G20系統,板上整合了256M位元組的NAND FLASH ;原來是使用JFFs2的,使用一段時間後發現,
當資料寫得比較多時,例如MTDBLOCK2的分區大小為220M,當寫了164M位元組的資料時,這時候每次上電,JFFS2的檔案系統,jffs2_gcd_mtd2的線程需要花差不多40秒的
時間去做記憶體回收的工作,更要命的是在記憶體回收的這段時間,占的資源接近100%,也就是說差不多40秒內,其他的線程基本上,沒有機會運行了

所以我們決定使用UBI檔案系統,但是UBI檔案系統需要個工具,這個工具叫mtd-utils

其實網上有幾個關於UBI移植的文章。我也是參照他們來做的,但是走了一些不應該走的彎路;當然也學習了一些額外的知識

我的linux編譯器為: arm-none-linux-gnueabi 編譯器的位置為: /usr/local/arm-2007q1

編譯mtd-utils ,除了需要mtd-utils的源碼外,還需要lzo-2.03  和 zlib-1.2.3這2個庫檔案;

下載這檔案到你的機器上,在那個位置都可以;

1.安裝lzo-2.03 
用 tar -xzvf 命令解壓縮

輸入如下命令:
CC=arm-none-linux-gnueabi-gcc ./configure --host=arm-linux --prefix=/usr/local/arm-2007q1/arm-none-linux-gnueabi
make
make install

注意我的機器是使用arm-none-linux-gnueabi-gcc 這個工具鏈的;
還有就是前面的那個CC 是大寫的;寫出小寫話,編譯出來的庫檔案是基於PC而不是ARM的
後面的是編譯器的路徑;路徑中不要加什麼BIN之類的檔案夾,否則會報找不到標頭檔,需要修改Makefile,強行指定路徑

2.安裝zlib-1.2.3
用 tar -xzvf 命令解壓縮
CC=arm-none-linux-gnueabi-gcc ./configure --shared --prefix=/usr/local/arm-2007q1/arm-none-linux-gnueabi
make
make install

安裝事項同樣參考1

編譯mtd-utils
用 tar -xzvf 命令解壓縮

make CROSS=arm-none-linux-gnueabi- WITHOUT_XATTR=1

 

CROSS=arm-none-linux-gnueabi-   指定ARM編譯器的路徑

WITHOUT_XATTR=1  是應為mtd-utils中有些源碼使用了zlib.h中的庫檔案而不使用acl.h的庫檔案

如下面 (mkfs.jfFs2.c):

#ifndef WITHOUT_XATTR
    #i nclude <sys/xattr.h>
    #i nclude <sys/acl.h>
#endif
    #i nclude <byteswap.h>
    #define crc32 __zlib_crc32
    #i nclude <zlib.h>
#undef crc32 

編譯後,在mtd-utils/arm-none-linux-gnueabi/ubi-utils的檔案夾中

找到需要的工具: ubiattach、ubiformat、ubimkvol等

把這些工具複製到目標板上 

 

在AT91SAM9G20上運行時,需要保證板子上的核心是否開啟了UBI檔案系統

進入核心的檔案夾,輸入make menucofig

1)Device Drivers 
--->Memory Technology Device (MTD) support 
--->UBI - Unsorted block images 
--->Enable UBI

 

在“Miscellaneous filesystems”菜單下,
 選中“UBIFS file system support”,
           “Extended attributes support”,
     “Advanced compression options”,
             “LZO compression support”,
      “ZLIB compression support”五項,
以使核心支援 UBIFS。

下面把mtdblock2 作為ubifs檔案系統掛載起來

在控制台中輸入:

1.
flash_eraseall /dev/mtd2

把MTD2的FLASH擦除

 

2.
格式化FLASH
./ubiformat /dev/mtd2 -s 512

mtd2 對應是FLASH分區 MTDBLOCK2
-s 512  是我的板子的海量儲存空間不支援子頁功能,所以必須指定為 為512位元組;否則使用預設的2048位元組

在ubiatached 是會報錯

執行了步驟1後,2不需要運行

3.
將第二分區附著至ubi0上
./ubiattach /dev/ubi_ctrl -m 2

-m 2    指把mtdblock2     關聯到ubi0

4.
建立卷標
./ubimkvol /dev/ubi0 -N rootfs -s 200MiB

這一步並非單純是給檔案系統命名的意思,它還擔負了指定分區大小、建立ubi0_0這個東東

不做這一步。下一步操作不能進行的

5.
最後1步,掛載ubi檔案系統,上面N步工作都是為這步結果的

mount -t ubifs ubi0_0 /mnt

需要注意:
ubi0_0   是使用ubimkvol建立的卷標,並不需要加上  /dev/ubi0_0  
雖然/dev 下也存在ubi0_0這個裝置

跟新了檔案系統後,使用FTP下載檔案到目標板上,速度比原來的JFFS2要快很多

達到3M位元組/秒,以前使用JFFS2也就600多K/每秒

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.