内核启动组件式初始化

内核启动组件式初始化

ID:39569306

大小:88.50 KB

页数:5页

时间:2019-07-06

内核启动组件式初始化_第1页
内核启动组件式初始化_第2页
内核启动组件式初始化_第3页
内核启动组件式初始化_第4页
内核启动组件式初始化_第5页
资源描述:

《内核启动组件式初始化》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux内核源码中多处会看到诸如__init,__initdata,__exitdata的关键字,大部分这样的关键字定义在include/linux/init.h头文件中,它们都会在编译连接阶段被实现处理。#define__init   __section(.init.text)__coldnotrace __init标记的数据被存储在.init.text节#define__initdata __section(.init.data)      __initdata标记的数据被存储在.init.data节#define__initconst__section(.init.rodata) 

2、   __initconst标记的数据被存储在.init.rodata节#define__exitdata __section(.exit.data)     __exitdata标记的数据被存储在.exit.data节#define__exit_call__used__section(.exitcall.exit)__exit__call__used标记的数据被存储在.exitcall.exit节我们也经常看到许多诸如subsystem_initcall(fn)的语句,fn为某个函数的名称,也可以在init.h中找到它的踪影。#define__define_initcall(level,

3、fn,id)   staticinitcall_t__initcall_##fn##id__used   __attribute__((__section__(".initcall"level".init")))=fn#defineearly_initcall(fn)   __define_initcall("early",fn,early)#definepure_initcall(fn)   __define_initcall("0",fn,0)#definecore_initcall(fn)   __define_initcall("1",fn,1)#definesubsys_in

4、itcall(fn)__define_initcall("4",fn,4)#definecore_initcall_sync(fn)   __define_initcall("1s",fn,1s)......#definelate_initcall_sync(fn)   __define_initcall("7s",fn,7s)#define__initcall(fn)device_initcall(fn)#define__exitcall(fn)   staticexitcall_t__exitcall_##fn__exit_call=fn可以看出每个与__define_initcal

5、l相关的注册函数都被解释为:staticinitcall_t__initcall_fn_id,入口地址将被存储在.initcall"level".init节中。我们常在Linux模块中用到的module_init和module_exit的真身也可以看到:#definemodule_init(x) __initcall(x);#definemodule_exit(x) __exitcall(x);init.h中还有一些代码设计boot与kernel的参数交换例如:#define__setup_param(str,unique_id,fn,early)         staticconst

6、char__setup_str_##unique_id[]__initconst     __aligned(1)=str;   staticstructobs_kernel_param__setup_##unique_id      __used__section(.init.setup)          __attribute__((aligned((sizeof(long)))))       ={__setup_str_##unique_id,fn,early}#define__setup(str,fn)             __setup_param(str,f

7、n,fn,0)/*NOTE:fnisaspermodule_param,not__setup! Emitswarningiffn *returnsnon-zero.*/#defineearly_param(str,fn)             __setup_param(str,fn,fn,1)/*Reliesonboot_command_linebeingset*/void__initparse_early_par

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。