zl程序教程

您现在的位置是:首页 >  其他

当前栏目

3516开发板liteos-a分区详解

2023-03-14 11:23:07 时间

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

之前通过tftp或ftp往板子中拷贝文件,总是出现拷贝不成功的时候,后来发现原来时磁盘满了,可以3516的mmc容量好几个G,怎么会满,其实只是磁盘分区满了,存不下文件了,所以本文介绍一下3516的lite-a的分区情况。

1 liteos-a的mount命令不能查看分区信息,只能挂载分区,但是toybox下的mount命令可以查看分区,分区显示如下,

主要包括三个分区,根目录,storage和userdata

#星光计划2.0#3516开发板liteos-a分区详解-鸿蒙HarmonyOS技术社区

partinfo可以查看各个分区的总大小:

#星光计划2.0#3516开发板liteos-a分区详解-鸿蒙HarmonyOS技术社区

看到这个好多人会蒙,这到底是多大容量啊,这个容量指的是有多少块,我们可以换算成多少M,每块多大我们看一下代码,在版本3.0中这个目录是存放liteos-a相关的分区加载信息的

#星光计划2.0#3516开发板liteos-a分区详解-鸿蒙HarmonyOS技术社区

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烧录的分区设置如下:

#星光计划2.0#3516开发板liteos-a分区详解-鸿蒙HarmonyOS技术社区

注意我们一定要设置好烧录参数的分区大小和uboot启动参数的分区,如果弄错会出现启动问题,有些目录会不可用,

启动参数和烧录见文章3516开发板window上HiTool工具USB烧录三种固件总结

3 简单过一下代码流程

OsMountRootfs为主函数,先读取uboot设置的参数,然后mount分区,参数包括root,fstype,rootaddr,rootsize和ro,

调用AddPartitions(dev, rootAddr, rootSize, userAddr, userSize)设置分区大小,三个分区开始地址和大小计算如下:

#星光计划2.0#3516开发板liteos-a分区详解-鸿蒙HarmonyOS技术社区
#星光计划2.0#3516开发板liteos-a分区详解-鸿蒙HarmonyOS技术社区

其中add_mmc_partition和los_disk_init是驱动中的函数,最后调用函数MountPartitions(fstype, mountFlags);

fstype代表文件系统类型,mountFlags代表分区加载方式,主要是ro只读和rw可读写。

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com