MACHINE_START与MACHINE_END
来源:互联网 发布:可口可乐昵称瓶 数据 编辑:程序博客网 时间:2024/05/17 08:22
转载地址:http://blog.csdn.net/cxw3506/article/details/8475965
在移植Linux时,有个结构体需要填写,它以MACHINE_START开始并以MACHINE_END结束,如下mini2440开发板的移植为示例
其中MACHINE_START、MACHINE_END都是定义的宏,代码如下
由上代码可知这两个宏一起定义了一个类型为struct machine_desc的变量,结构体定义如下
这个类型的变量放在内核代码段.arch.info.init中,在内核运行初期,被函数lookup_machine_type(此函数用汇编实现,在汇编文件中)取出,读取流程为
Start_kernel() -> setup_arch() -> setup_machine() -> lookup_machine_type()
在函数setup_machine()中,利用这个结构体类型的变量初始化一些全局变量,以备内核运行时使用,比如
init_arch_irq = mdesc->init_irq;
system_timer = mdesc->timer;
init_machine = mdesc->init_machine;
这个结构体中,成员init_machine保存的是开发板资源注册的初始化代码,init_irq保存的是中断初始化指针,timer保存的是一个struct sys_timer类型的指针…..如果我们要给自己的开发板定制内核,那么我们必须自己实现以上成员函数,其中函数init_machine()是我们向内核传递开发板设备信息的重要的常规途径,分析mini2440开发板内核移植代码知道,在这个函数中,注册了开发板所用到的所有设备的相关硬件信息!
那么成员函数init_machine什么时候被调用呢?
在函数setup_machine()中有一条语句init_machine = mdesc->init_machine;其中init_machine为全局函数指针变量,此变量在函数customize_machine()中被调用,代码如下所示:
在MACHINE_START与MACHINE_END之间还要填写一些参数,参照结构体注释小心填写即可,最好找个例子参考参考。
- MACHINE_START与MACHINE_END
- MACHINE_START与MACHINE_END
- MACHINE_START与MACHINE_END
- MACHINE_START与MACHINE_END
- MACHINE_START与MACHINE_END
- MACHINE_START与MACHINE_END
- MACHINE_START MACHINE_END 宏
- MACHINE_START MACHINE_END 宏 .
- MACHINE_START and MACHINE_END
- MACHINE_START and MACHINE_END Macro define
- linux之MACHINE_START和 MACHINE_END
- LINUX中的MACH定义之MACHINE_START / MACHINE_END
- LINUX中的MACH定义之MACHINE_START / MACHINE_END
- LINUX中的MACH定义之MACHINE_START / MACHINE_END
- Linux中的MACH定义之MACHINE_START / MACHINE_END
- LINUX中的MACH定义之MACHINE_START / MACHINE_END
- Linux中的MACH定义之MACHINE_START / MACHINE_END
- 我对MACHINE_START MACHINE_END的理解
- 《JavaScript高级程序设计》学习笔记(第四章)
- 李正轩老师课件的视频网址(讲的SVM非常清晰)
- MongoDB-Elasticsearch 实时数据导入
- 共享内存
- 15:整理药名
- MACHINE_START与MACHINE_END
- Linux 删除用户的问题
- Vijos-1603 迷宫 [矩阵快速幂]
- sp<> wp<>-Android中定义了两种智能指针强指针sp和弱指针wp
- javascript 判断变量类型
- 使用easyui的form提交表单,在IE下出现类似附件下载时提示是否保存的现象
- ztree 初始化让选中的值 选中成功
- 一文搞定数据仓库之拉链表,流水表,全量表,增量表
- POJ 3728 The merchant(LCA+DP)