2012年(14)
分类: LINUX
2012-05-28 16:25:23
在2.6内核中已经把很多初始化函数都放在initcall中实现了。所以初始化中会执行socket.c中的sock_init()函数
static int __init sock_init(void) |
就是在sock_init()函数中成功的将我们的网络文件系统登记、安装到了linux的内核中,register_filesystem函数将我们的sockfs套接字文件系统注册到linux内核中去,kern_mount函数完成了在linux内核中的套接字文件系统的安装,在内核中建立了网络文件系统安装点。这二个函数均与具体的使用的文件系统相关,所以我们不再跟进分析了,朋友们参阅操作系统理论的文件系统内容可以了解一下。在安装的过程中,我们的套接字文件系统会调用sock_fs_type数据结构中的get_sb钩子函数,以后我们称这类初始化的结构变量为钩子结构,因为他提供了我们函数的入口,就象钩子一样,将函数挂入到结构体中,所以这样的结构体我们称之为钩子结构体,而挂入的函数称之为钩子函数。我们在上面的代码中已经看到了sock_fs_type的设置了get_sb的钩子函数为sockfs_get_sb(),所以理所当然进入函数中去完成文件系统的安装过程