|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
问题:目录和文件名如何保存,如何读取?, _% l; U) `6 n; {+ P) A
(目录只是一种固定格式的文件,可以“vim 目录”,看到这个目录文件的内容)! H+ N6 \$ R5 }! ^+ ^6 d2 c9 c
##2.2VFS 的建立
5 ~5 J- `5 L' H- C: @经过前面的ext2 文件系统格式的介绍,我们起码知道了如何去获取文件系
& A8 Q7 Z2 `4 t+ p3 t统的信息和如何读取文件内容。其中也建立了两个很重要的概念super block, b/ `+ P- J$ V+ F6 n) P( q
超级块和inode 节点信息,然后如果理解dentry(directory entry)概念就更
. e# i- ]! Q/ N" d W* R好了。
+ b& R) S4 G. _; X8 O4 B5 Z7 @3 y( M关于VFS,看开头的描述和逻辑图。1 {; t1 O* b) ^. n, N
在2.6 内核中,启动的过程中由vfs 建立的rootfs 根文件系统过程如下:
4 O% z: x/ J8 h$ Ekernel_start()# W# b! W, a5 \+ Z
|____start_kernel()' o1 a. l" x& Q+ ^+ K; K# A0 `/ C
|____vfs_caches_init()(fs/dcache.c)# x { i* { i+ ~
|____dcache_init()
/ J* J+ d6 B: H0 m- V|____inode_init()0 U# e1 H8 Z e" N
|____files_init()" G) n: _3 k+ i
|____mnt_init()& @/ ^* B! w6 ~2 w* r- `
| |____init_rootfs()/ h( s& n4 S. Q* d+ j
| | |___register_filesystem(7 B* i @' U6 ]2 E0 f
| | &rootfs_fs_type)
& h& J% w/ K* E3 D: B| |_init_mount_tree()4 @* _& K4 p3 M! f, Y
| | do_kern_mount()
: C, G- O' y/ a. @% D3 C| (建立系统的根”/”)4 E; I7 C7 b' Z) d; C3 ?; P
|____bdev_cache_init()8 I8 l1 C9 t Y8 s" Y
|____chrdev_init()
k, ~+ _2 w9 B4 U; t1 |9 R$ A###2.2.1第一步init_rootfs()
( g2 T, P- M' O' `init_rootfs() 通过调用 register_filesystem(&rootfs_fs_type)
$ m; [4 S' V" s函数来完成 rootfs 文件系统注册的,其中rootfs_fs_type 定义如下:( g1 C/ j4 V8 |* b: ^4 p" P* u% Q1 H
struct file_system_type rootfs_fs_type = {
7 d1 w3 M2 ?( ^2 B+ m7 ]name: “rootfs”,# D f2 u' Z9 B& Y. b
read_super: ramfs_read_super,
6 d* p5 S2 G) d: j% {2 rfs_flags: FS_NOMOUNT|FS_LITTER, t' ?! a2 J* b1 w2 ^5 x
owner: THIS_MODULE,+ H. W2 J8 \2 z# A, `
}$ v8 z2 v6 ]; `8 B3 U, ]0 I
注册之后的 file_systems 链表结构如下图所示:
0 j# m J% e' A; Y5 o9 y###2.2.2第二步而init_mount_tree()& m9 n4 E# s/ {$ g
第二步而init_mount_tree() 是用来建立根“ / ” 目录的, 它会调用9 T p: \( L6 c9 W5 g
do_kern_mount(“rootfs”, 0, “rootfs”, NULL) 来挂载前面已经注册了的7 K/ T- K; o. B9 V
rootfs 文件系统。! ^7 O" `4 Y7 R' i$ a( A
% _! }3 Y6 W5 C2 U( c; v! `5 R) p# D+ p4 O
过程如下:4 R; L9 x" m9 w* b# G: U
9 W% }2 | T: C* \. I4 O! T' P% Q2 ?: ?) Q: }2 o: ?
# r, z. `" ?$ P$ n# ]* M4 ?2 K; p2 I4 K( d
% ]1 `. I2 t+ f& L* j/ c7 {0 `# v# q
9 F" g7 O# W( r" I
8 `7 E( V% X' D" v: ?
2 f% r7 H* L; Z: U0 d
( N% X% L0 i$ p9 ]; n$ w9 H$ M
8 K6 @* B% m* S, `9 Q( X8 {
0 [8 q6 I% {8 y% ?3 @( W
2 R2 X9 L" k# f A |
|