forked from xuzhongxing/fuchsia-notes
-
Notifications
You must be signed in to change notification settings - Fork 0
/
blobfs.txt
53 lines (36 loc) · 1.61 KB
/
blobfs.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
注意,有2个blobfs, 一个是host目录下的,一个是uapp目录下的
uapp下的:
process_args
注:
在Mounter::PrepareHandles里会传递device fd对应的handle作为FS_FD_BLOCKDEVICE
在__libc_extensions_init会建立从fd到handle的映射
command="mount"
func = do_blobfs_mount
注:
所有的block_info_t最初都是来自于sata.c: sata_device_identify
do_blobfs_mount
block_info.flags在目前blobfs的创建中应该还没有被设置过
blobfs::blobfs_mount(loop.dispatcher(), fbl::move(fd), options, fbl::move(root), fbl::move(loop_quit))
blobfs_create(&fs, fbl::move(blockfd))
获取blocks数量的时候在host和fuchsia上的方式不同
Blobfs::Create(fbl::move(blockfd), info, out)
ioctl_block_get_fifos
==fdio_ioctl
zxrio_ioctl
fidl_ioctl
fuchsia_io_NodeIoctl
Connection::NodeIoctl 细节还没看
====>
blkdev_get_fifos
Blobfs::InitializeVnodes
VnodeInsertClosedLocked
把inode变成vnode, 插入closed_hash_
blobfs实际上只有一个root vnode, 然后所有的其他的文件都是这个root vnode下的
客户端通过hash来查询文件
fs->OpenRootNode(&vn)
vn->Open(0, nullptr)
fd_count++
fs->ServeDirectory(fbl::move(vn), fbl::move(root))
OpenVnode(flags, &vn)
(*vnode)->Open(flags, &redirect)
vn->Serve(this, fbl::move(channel), ZX_FS_RIGHT_ADMIN)