之前通过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可读写。