华为的鸿蒙系统开源之后第一个想看的模块就是 FS 模块,想了解一下它的 IO 路径与 linux 的区别。现在鸿蒙开源的仓库中有两个内核系统,一个是 liteos_a 系统,一个是 liteos_m 系统。两者的区别主要是适应的场景不一样,liteos_a 系统适用于硬件资源更加丰富的场景,比如 CPU 更强,内存更大;而 liteos_m 系统则适用于 IoT 设备,相对来说硬件资源比较弱一些。所以我们就拿 liteos_a 系统来分析一下它的 IO 栈吧,毕竟它应对的场景更加复杂一些。
鸿蒙系统 liteos_a Kernel 的下载地址在这:https://gitee.com/openharmony/kernel_liteos_a。
1.FS 源码结构
下载内核源码后发现 fs 目录下似乎缺少很多东西。
当时觉得好奇怪,啥都没有,那它的 shell 相关命令是怎么使用 fs 模块进行读写的呢?于是发现鸿蒙的 FS 模块主要是从 Nuttx (注:Nuttx 是 Apache 正在孵化的实时操作系统内核)那里借用了 FS 的相关实现。这是从内核的 fs.h 引用的路径发现的,它引用的路径内容如下:
../../../../../third_party/NuttX/include/nuttx/fs/fs.h
所以我们需要找到这个模块,在 gitee 的仓库中搜索 Nuttx 发现的确有这个仓库,所以我们需要联合两个仓库的代码一起解读 IO 栈的源码。Nuttx 的仓库地址为:https://gitee.com/openharmony/third_party_NuttX。
我们来看一下 Nuttx 的目录结构:
可以发现 FS 的具体实现都在这个 Nuttx 仓库内。接下来我们来看看鸿蒙系统的 IO 栈吧,因为 IO 栈的路径比较多,所以我们选取块设备(block device)的路径来分