http://www.nsfocus.net/index.php?act=magazine&do=view&mid=1487
1.get_kernel_info函数负责取得kernel中先以注册的modules,放入module_stat中.
2.set_ncv_prefix(NULL);判断symbolname中是否有前缀,象_smp之类,一般没有。
3.检查是否已有同名的module。
4.obj_load,将。o文件读入到struct obj_file结构f中。
5.比较kernel版本和module的版本,在版本的判断中,不是想象中的那样简单,还有是否有checksum的逻辑关系。
6.add_kernel_symbols替换.o中的symbol为ksyms中的符号值
7.create_this_module(f, m_name)生成module结构,加入module_list中。
8.obj_check_undefineds检查是否还有un_def的symbol
9.add_archdata添加结构相关的section,不过i386没什么用。
10.add_kallsyms如果symbol使用的都是kernel提供的,就添加一个.kallsyms section
11.obj_load_size计算module的大小
12.create_module调用sys_create_module系统调用创建模块,分配module的空间
13.obj_relocate重定位module文件中.text中的地址
14.init_module先在用户空间创建module结构的image影响,是由sys_init_module系统调用实现向kernel的copy。
insmod源码分析
最新推荐文章于 2023-05-14 18:29:10 发布