3516開發板liteos-a分區詳解
之前通過tftp或ftp往板子中拷貝文件,總是出現拷貝不成功的時候,后來發現原來時磁盤滿了,可以3516的mmc容量好幾個G,怎么會滿,其實只是磁盤分區滿了,存不下文件了,所以本文介紹一下3516的lite-a的分區情況。
1 liteos-a的mount命令不能查看分區信息,只能掛載分區,但是toybox下的mount命令可以查看分區,分區顯示如下,
主要包括三個分區,根目錄,storage和userdata

partinfo可以查看各個分區的總大小:

看到這個好多人會蒙,這到底是多大容量啊,這個容量指的是有多少塊,我們可以換算成多少M,每塊多大我們看一下代碼,在版本3.0中這個目錄是存放liteos-a相關的分區加載信息的

EMMC_SEC_SIZE這個參數值為512,所以根目錄大小是38912塊,換算成字節是38912*521=19,922,944字節,也就是19M,
轉成16進制為130 0000,代碼中有個宏
#define ROOTFS_SIZE 0x1400000 正是根目錄的文件系統的大小
#define USERFS_SIZE 0x3200000,目錄storage大小為50M
userdata大小為剩余空間大小是7380M,注意總體大小不是她們的和因為uboot和一些參數也要分走一部分空間的,這三個分區只是操作系統的。
2 根目錄的分區大小在代碼中的設置方式是先從uboot啟動參數獲取,如果獲取不到,采用默認值19M,hitool燒錄的分區設置如下:

注意我們一定要設置好燒錄參數的分區大小和uboot啟動參數的分區,如果弄錯會出現啟動問題,有些目錄會不可用,
啟動參數和燒錄見文章3516開發板window上HiTool工具USB燒錄三種固件總結
3 簡單過一下代碼流程
OsMountRootfs為主函數,先讀取uboot設置的參數,然后mount分區,參數包括root,fstype,rootaddr,rootsize和ro,
調用AddPartitions(dev, rootAddr, rootSize, userAddr, userSize)設置分區大小,三個分區開始地址和大小計算如下:


其中add_mmc_partition和los_disk_init是驅動中的函數,最后調用函數MountPartitions(fstype, mountFlags);
fstype代表文件系統類型,mountFlags代表分區加載方式,主要是ro只讀和rw可讀寫。