EDA365电子论坛网

标题: ARM ------- 制作Linux 文件系统(5) [打印本页]

作者: pulbieup    时间: 2019-6-29 09:00
标题: ARM ------- 制作Linux 文件系统(5)
问题:目录和文件名如何保存,如何读取?2 Z  _  [7 t' ]) g
(目录只是一种固定格式的文件,可以“vim 目录”,看到这个目录文件的内容)
: [/ s3 v; W8 y: x: c, z##2.2VFS 的建立, e* i- g6 L7 M& E( l: M' h$ I
经过前面的ext2 文件系统格式的介绍,我们起码知道了如何去获取文件系7 W0 ~- X/ K9 d' X( Y/ [" D
统的信息和如何读取文件内容。其中也建立了两个很重要的概念super block2 g! A1 n0 I3 H1 {2 o
超级块和inode 节点信息,然后如果理解dentry(directory entry)概念就更/ i! w9 M- ~, o% J* d1 V
好了。* B$ `7 [) T. m% W  K" r9 b
关于VFS,看开头的描述和逻辑图。) ]/ s' {& V1 f7 M7 p4 X9 ^, h
在2.6 内核中,启动的过程中由vfs 建立的rootfs 根文件系统过程如下:
0 R- m5 e5 ~1 d) R: j" Okernel_start(); `' y5 ?" {; i- t
|____start_kernel()9 ~' b/ D. W  @0 M+ A
|____vfs_caches_init()(fs/dcache.c)# y3 S: P+ J" Z) i
|____dcache_init(): H" Q$ ~% @& ~$ R- \. [9 @
|____inode_init()( }4 ?0 ?) u5 F9 C$ k" I7 X
|____files_init()& m6 X  A+ g$ a4 i; a" M0 C$ n
|____mnt_init()2 B$ F# V5 P5 |) ]( D: U
| |____init_rootfs()
" }+ E  A+ \: a  B5 N| | |___register_filesystem(
+ {6 z$ u" u. P' A8 ^7 J$ I| | &rootfs_fs_type)
. c8 O* U. j) x, K/ ?! }| |_init_mount_tree()
4 f: Q: b# K% D; ?" R4 u1 h+ Q| | do_kern_mount()
! g* x6 @# K. I# O& q, w+ || (建立系统的根”/”)
- B$ \$ T! G/ r) o- q/ S|____bdev_cache_init()# Y% q5 @/ I' y
|____chrdev_init()
  E1 f! S0 s& g! h9 i###2.2.1第一步init_rootfs()" n. F% K2 j& b0 ?. D
init_rootfs() 通过调用 register_filesystem(&rootfs_fs_type). D0 m2 k, w2 C) |9 J7 K* q# X. a
函数来完成 rootfs 文件系统注册的,其中rootfs_fs_type 定义如下:
8 \9 q+ w6 t* R* e7 l4 sstruct file_system_type rootfs_fs_type = {
' f0 O6 t0 {9 k9 qname: “rootfs”,
7 S# m) R# s# D/ E  {read_super: ramfs_read_super,
, o: V' j4 G& b: Yfs_flags: FS_NOMOUNT|FS_LITTER,0 P. C: I# m% Q- H4 X
owner: THIS_MODULE,
- c, s& N& Y8 e1 t& H, a$ W}( r% W4 N* }# v2 V$ F  c+ z8 e
注册之后的 file_systems 链表结构如下图所示:% P  a* t! m6 \( B
###2.2.2第二步而init_mount_tree()
  S$ r& Z5 Z  B第二步而init_mount_tree() 是用来建立根“ / ” 目录的, 它会调用: v0 Q  y3 C: z8 @6 _
do_kern_mount(“rootfs”, 0, “rootfs”, NULL) 来挂载前面已经注册了的
. R; x4 Q+ x1 ^! Trootfs 文件系统。
6 u4 s0 U% ^0 F
' a3 {5 ?  l* N% g! Q6 ~$ \9 \
1 i6 o3 [  o( h* b* S4 ]1 x* O, Q
过程如下:
5 k+ n: m) Q+ P: J+ V- r' z; X# @, Q& G' |/ o6 ?% Q

4 f& E( s6 @# K' L0 Z. b( s) h

7 z. ^5 L4 G6 \2 i% ?' y* s4 z( x6 x7 s
! S6 b9 N  ]" o% Y! ]6 A
# M5 h1 v1 R& ?+ `7 w

  Y* ?3 W% @0 ?. N2 p
; I) M/ I* [9 V7 Y
0 R( l! O7 _( u1 S4 h# b  A! d
7 r7 {: I/ T  S- R; ^4 Z" I
+ ^3 j$ |" _, }" I( W, L' Q) q
8 m- Q" D1 }% Q9 x; ?

$ l2 f( I% u/ ~, x/ p
作者: littlestupid    时间: 2019-7-1 18:19
看看




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2