TCP/IP - 网络文件系统
2013-06-10 17:02
316 查看
1. 网络的初始化入口:
sock_fs_type变量。
定义在内核的net/socket.c中。
类型为file_system_type结构体,代表Linux内核的各种网络文件系统。
sock_fs_type变量代表sockfs的网络文件系统,虚拟文件系统。
2. 网络文件系统的初始化:
initcall机制。
复用GCC编译器的功能,在__initcall_start到__initcall_end中存放内核的初始化函数地址。
Linux在启动时会执行init/main.c中的初始化函数kernel_init(),这个函数调用do_basic_setup(),从而调用do_initcalls()函数,其中遍历__initcall_start到__initcall_end的地址空间,循环调用do_one_initcall()函数执行所有的init初始化函数。
kernel_init()->do_basic_setup()->do_initcalls()->do_one_initcall()。
3. sock_init()函数:
在socket.c文件中。
core_initcall()函数将sock_init()函数登记到initcall中。
GCC编译时把sock_init()函数安装到initcall中。
驱动程序中常用的module_init注册用户自定义的初始化函数也是通过initcall来实现的。
内核初始化时会执行sock_init()函数来等级网络文件系统。
kernel_init()->do_basic_setup()->do_initcalls()->do_one_initcall()->sock_init()。
sock_init()函数主要将sock_fs_type变量登记到内核安装网络文件系统。
sock_init()创建一块用于网络文件节点和socket的高速缓存:
sock_init()将网络文件系统注册到Linux中:
sock_init()进行网络文件系统的安装并建立安装点:
4. 安装过程:
内核调用sock_fs_type变量get_sb字段中存储的钩子函数(即函数指针)sockfs_get_sb(),由该函数完成网络文件系统的安装。
sock_init()->kern_mount()->中间过程从略->sockfs_get_sb()->get_sb_pseudo()。
5. get_sb_pseudo()函数:
第一个参数:sock_fs_type。
第二个参数:要求创建socket名称的根目录项,如:"socket:"。
第三个参数:关于网络文件系统的超级块操作函数表sockfs_ops。
最后一个参数:网络文件系统的安装点。
6. sockfs_ops变量:
网络文件系统的超级块操作函数表。
创建socket时会用到该函数表内容。
该函数表对网络文件系统的节点和目录提供了具体的操作函数。
涉及玩过文件系统的重要操作都会到该函数表中查找相应的操作函数。
Linux内核在创建socket节点时会查找sockfs_ops变量的alloc_inode字段,即sock_alloc_inode(),完成节点的建立。
sock_fs_type变量。
定义在内核的net/socket.c中。
类型为file_system_type结构体,代表Linux内核的各种网络文件系统。
sock_fs_type变量代表sockfs的网络文件系统,虚拟文件系统。
2. 网络文件系统的初始化:
initcall机制。
复用GCC编译器的功能,在__initcall_start到__initcall_end中存放内核的初始化函数地址。
Linux在启动时会执行init/main.c中的初始化函数kernel_init(),这个函数调用do_basic_setup(),从而调用do_initcalls()函数,其中遍历__initcall_start到__initcall_end的地址空间,循环调用do_one_initcall()函数执行所有的init初始化函数。
kernel_init()->do_basic_setup()->do_initcalls()->do_one_initcall()。
3. sock_init()函数:
在socket.c文件中。
core_initcall()函数将sock_init()函数登记到initcall中。
core_initcall(sock_init);
GCC编译时把sock_init()函数安装到initcall中。
驱动程序中常用的module_init注册用户自定义的初始化函数也是通过initcall来实现的。
内核初始化时会执行sock_init()函数来等级网络文件系统。
kernel_init()->do_basic_setup()->do_initcalls()->do_one_initcall()->sock_init()。
sock_init()函数主要将sock_fs_type变量登记到内核安装网络文件系统。
sock_init()创建一块用于网络文件节点和socket的高速缓存:
init_inodecache();
sock_init()将网络文件系统注册到Linux中:
register_filesystem(&sock_fs_type);
sock_init()进行网络文件系统的安装并建立安装点:
kern_mount(&sock_fs_type);
4. 安装过程:
内核调用sock_fs_type变量get_sb字段中存储的钩子函数(即函数指针)sockfs_get_sb(),由该函数完成网络文件系统的安装。
sock_init()->kern_mount()->中间过程从略->sockfs_get_sb()->get_sb_pseudo()。
5. get_sb_pseudo()函数:
第一个参数:sock_fs_type。
第二个参数:要求创建socket名称的根目录项,如:"socket:"。
第三个参数:关于网络文件系统的超级块操作函数表sockfs_ops。
最后一个参数:网络文件系统的安装点。
6. sockfs_ops变量:
网络文件系统的超级块操作函数表。
创建socket时会用到该函数表内容。
该函数表对网络文件系统的节点和目录提供了具体的操作函数。
涉及玩过文件系统的重要操作都会到该函数表中查找相应的操作函数。
Linux内核在创建socket节点时会查找sockfs_ops变量的alloc_inode字段,即sock_alloc_inode(),完成节点的建立。
相关文章推荐
- TCP/IP 详解 卷1 ch29 网络文件系统
- TCP-IP详解卷1-29:NFS(Network File System):网络文件系统
- Linux网络管理员手册(5) 第五章 配置TCP/IP网络 proc文件系统 设置主机名 分配IP地址 IP的接口配置 以太网接口
- [导入]多重网络环境下动态切换TCP/IP网络配置的批处理文件
- W5100 在嵌入式系统中实现TCP/IP 网络通信的应用
- Linux内核网络系统结构图(TCP/IP)和源代码的布局
- 计算机网络系统--TCP/IP OSI模型
- 【科研论文】W5100在FPGA系统中实现TCP/IP网络通信
- Linux C编程连载(4)-基于TCP/IP的文件传输系统
- Linux内核网络系统结构图(TCP/IP)和源代码的布局
- W5100 在嵌入式系统中实现TCP/IP 网络通信的应用
- Linux 基于TCP/IP的文件传输系统
- Linux C编程连载【4】-基于TCP/IP的文件传输系统
- win2003下安装Look n Stop网络防火墙导致系统蓝屏(tcpip.sys - address F75F5390 base at F75B4000,DataStamp 4473b09e)
- tcpip.sys文件损坏或丢失引发的网络故障
- Linux C编程连载(4)-基于TCP/IP的文件传输系统
- 构建 复杂系统的TCP/IP网络架构
- Linux的TCP/IP网络配置文件
- TCP/IP - 2.6 socket与文件系统的关联