1. 程式人生 > >ARM flash檔案系統分割槽

ARM flash檔案系統分割槽

在實際應用中我們有時候需要把ARM的一個檔案系統分為多個區域,就像電腦一樣有C、D、E一樣。
前提:你編譯的核心必須支援各種不同型別檔案系統,如果你不太瞭解你的核心是否支援,可以找
部落格學習一下,網上文章一大把。

先直接上圖,說明效果!

# mount -t jffs2 /dev/mtdblock3 /ybq
# df
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/root                 6144      4512      1632  73% /
tmpfs                    29392         4     29388   0% /dev
/dev/mtdblock3            5120       260      4860   5% /ybq
# umount /ybq

這裡有兩個分割槽,一個是/dev/root,另一個為/dev/mtdblock3,而這兩個分割槽是一塊flash中分離出來的,
就像電腦裡的硬碟分割槽一樣。同時你還可以將這兩個分割槽分為不同的格式,比如jffs2,yaffs等。

下面以hisi350d開發板為例講解,它提供一塊16M的flash。
核心編譯(linux_3.0.8)時支援uboot 命令引數分割槽:
Device Drivers --->
            <*> Memory Technology Device (MTD) support --->
                                [*] Command line partition table parsing
官方SDK提供的少寫方法如下(不懂的話,可以查資料這幾句話的意思):

setenv serverip 192.168.210.62;setenv ipaddr 192.168.210.218;setenv ethaddr 192.168.210.1;setenv netmask 255.255.255.0;setenv gatewayip 192.168.210.1;ping 192.168.210.62
sf probe 0;mw.b 82000000 ff 100000;tftp 0x82000000 u-boot_hi3520d.bin;sf probe 0;sf erase 0 100000;sf write 82000000 0 100000    ;reset
setenv serverip 192.168.210.62;setenv ipaddr 192.168.210.218;setenv ethaddr 192.168.210.1;setenv netmask 255.255.255.0;setenv gatewayip 192.168.210.1;ping 192.168.210.62
mw.b 82000000 ff 400000;tftp 82000000 uImage_hi3520d_full;sf probe 0;sf erase 100000 400000;sf write 82000000 100000 400000
mw.b 82000000 ff b00000;tftp 0x82000000 rootfs_hi3520d_64k.jffs2;sf probe 0;sf erase 500000 b00000;sf write 82000000 500000 b00000


setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'
setenv bootargs 'bootargs=mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs) ipaddr=192.168.210.218'
save
reset
地址空間說明
        |      1M       |      3M       |      11M      |
        |---------------|---------------|---------------|
        |     boot      |     kernel    |     rootfs    |

自己燒寫方法如下:
sf probe 0;mw.b 82000000 ff 100000;tftp 0x82000000 u-boot_hi3520d.bin;sf probe 0;sf erase 0 100000;sf write 82000000 0 100000    ;reset
mw.b 82000000 ff 400000;tftp 82000000 uImage_hi3520d_full;sf probe 0;sf erase 100000 400000;sf write 82000000 100000 400000
mw.b 82000000 ff 600000;tftp 0x82000000 rootfs_hi3520d_64k.squashfs;sf probe 0;sf erase 500000 600000;sf write 82000000 500000 600000

setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),6M(rootfs),5M(ybq) ipaddr=192.168.210.218'
setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x400000;bootm 0x82000000'
save
reset
開機後掛載:mount -t jffs2 /dev/mtdblock3 /ybq
地址空間說明
        |      1M       |      3M       |      6 M      |            5             |
        |---------------|---------------|---------------|--------------
        |     boot      |     kernel    |     rootfs    |         ybq            |