内核源码解读基础
来源:互联网 发布:手机上能开淘宝店吗 编辑:程序博客网 时间:2024/06/06 18:46
module_init宏的定义
第一段代码:
typedef int (*initcall_t)(void);
......
#define __define_initcall(level,fn,id)\
static initcall_t __initcall_##fn##id __attribute_used_ \
__attribute__((__section__(".initcall" level ".init"))) = fn
......
#define device_initcall(fn) __define_initcall("6",fn,6)
......
#define __initcall(fn)device_inicall(fn)
......
#define module_init(x)__initcall(x)
第二段代码:
#define INITCALLS \
*(.initcall0.init)\
*(.initcall0s.init)\
......
*(.initcall7.init)\
*(.initcall7s.init)
第三段代码:
.initcall.init :AT(ADDR(.imitcall.init) - LOAD_OFFSET){//这段代码依然不理解
__initcall_start = .;
INITCALLS
__initcall_end = .;
}
第四段代码:
static void __init do_initcalls(void)
{
initcall_t *call;
int count = preempt_count();
for (call = __initcall_start;call < __initcall_end;call++){
......
result = (*call)();
......
}
flush_sheduled_work();
}
第五段代码:
typedef int (*initcall_t)(void);
......
#define module_init(initfn)\
static inline initcall_t __inittest(void)\
{return initfn;}
int init_module(void) __attribute__((alias(#initfn)));
天书一样的代码,但毕竟还是可以理解的,只不过需要一些内核知识和良好的c语言基础。
c语言代码中的"#"与"##"的用法:
(1)"#"的使用
eg:
#define PrintfStr(arg)printf("%s",#arg)
PrintfStr(output) ->prinf("%s","output")
eg:
#define show(var) printf(#var"= %d\n",var);
show(number) -> printf("number = %d\n",var);
(2) "##"的使用
eg:
#define join(a,b) a##b
strlen_s(join(var,123),sizeof(join(var,123)))->strlen_s(var123,sizeof(var123))
gcc中的attrbute()
__attribute__可以设置函数属性,变量属性,类型属性
__attribute__的section子项使用方式:
__attribute__((section("section_name")))将作用的函数或数据放入指定名为"section_name"的段
通过__attribute__((alias(#initfn)))为函数定义一个别名
- 内核源码解读基础
- linux内核源码基础
- 解读linux内核源码的入门方法
- 解读linux内核源码的入门方法
- 如何使解读Linux内核源码
- 【源码解读】Screencap源码分析-基础篇
- 【源码解读】Screencap源码分析-基础篇
- linux内核分析-简单的操作系统内核源码解读
- HashMap 基础原理以及源码解读
- linux-内核-内核基础/内核源码/内核配置和编译
- 内核解读
- 一种解读Linux操作系统内核源码的好方法
- 解读linux内核源码的入门方法 [转]
- <寒江独钓>Windows内核安全编程__Ramdisk源码解读
- spark内核揭秘-07-DAGScheduler源码解读初体验
- 源码解读
- spark内核源码学习-RDD基础篇
- spark内核源码学习-RDD基础篇
- POJ2909 Goldbach's Conjecture
- Java引用类型
- 点击ImageButton进行页面跳转
- 第34讲项目2——麻烦的累加涨功夫
- App性能瓶颈优化 总结
- 内核源码解读基础
- 在AWS RDS(Oracle)上执行数据导入
- Java之冒泡排序的实现
- Ros_OpenCV_cascade分类器检测程序
- Python爬虫_简单获取百度贴吧图片
- C++扬帆远航——8(张三李四,等差数列)
- zabbix监控邮件报警功能二次开发(自定义媒体)
- go语言channel关注点
- 微信和qq默认表情代码对照表及表情文件下载