关于do_initcalls中调用的链表问题
时间:2004-12-02
来源:互联网
{
initcall_t *call;
call = &__initcall_start;
do {
(*call)();
call++;
} while (call < &__initcall_end);
/* Make sure there is no pending stuff from the initcall sequence */
flush_scheduled_tasks();
}
这里使用的链表的内容都是使用__initcall或者module_init声明的,怎么知道这个链表的顺序呢
还有在编译的时候 是根据什么来插入这个链表的呢??
作者: z21921 发布时间: 2004-12-02
2.按在section定义的先后顺序排列
作者: phyma 发布时间: 2004-12-02
如果是section的话 是在哪里定义的啊(具体的文件)
作者: z21921 发布时间: 2004-12-02
这两个定义在include/linux/module.h中
作者: phyma 发布时间: 2004-12-02
我是想知道“存在几个特殊section中函数指针数组”在什么位置
也就是在编译的时候 所有的模块都调用上面的2个宏 它是安装什么顺序编译的
据说在Makefile中定义的 可是还没有看明白
作者: z21921 发布时间: 2004-12-02
module_init(init_nanddoc);
driver/net/ether00.c中有
module_init(ether00_mod_init);
这2个模块都要初始化
它是按照什么顺序初始化的呢
在编译的时候 入口保存在 那个函数指针数组中 这个数组在什么位置 怎么能看到呢?
作者: z21921 发布时间: 2004-12-02
你试着在一个section里全部定义函数指针,那么这个section名称是不是可以用成一个数组呢?
其实那两个宏就可以说明一切问题。
Sorry,我偷懒没有在回帖里面详细说明。
作者: phyma 发布时间: 2004-12-03
是我没有说明白我需要什么东西
我想要一个显示的东西 显示出所有的模块初始化顺序
系统启动后 我在/var/log/messages中能看到一些顺序
这个有办法吗
再次感谢
作者: z21921 发布时间: 2004-12-03
只想到一个最笨的办法:在你感兴趣的initcall中嵌入printk。
不知道有没有高手知道简单点的办法?
作者: phyma 发布时间: 2004-12-03
好像是根据在Makefile中定义的顺序进行的
我现在的调试就是加 printk语句
不过太麻烦了
每次都要编译 重启
作者: z21921 发布时间: 2004-12-03
你用这段代码试试:
print_symbol(": %s()", (unsigned long) *call);
其中call为函数指针
作者: phyma 发布时间: 2004-12-14
恭喜phyma当选版主^_^
作者: z21921 发布时间: 2004-12-14
最初由 z21921 发表 谢谢phyma版主 恭喜phyma当选版主^_^ |
人气很差啊,大家都不喜欢研究内核?
作者: phyma 发布时间: 2004-12-14
可以在内核中执行吗??
我的理解是 我可以把这段代码加到 initcall中
可是在内核中的打印语句好像只有printk吧(也许还有其它的,我不知道)
我把这段加入进去 ,编译不通过
作者: z21921 发布时间: 2004-12-14
作者: phyma 发布时间: 2004-12-14
作者: phyma 发布时间: 2004-12-14
内核版本的差别太大了
作者: z21921 发布时间: 2004-12-14
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28