版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、ARM上的Linux内核及启动过程2007.12linux 2.4 的内核目录结构Linux2.4.x/arch/drivers/fs/include/Documentation/ipc/kernel/lib/mm/init/net/scripts/arm/alpha/m68k/boot/mach-pxa/kernel/lib/mm/asm-arm/linux/net/arch-pxa/proc-armv读懂linux内核源码linux内核庞大,结构复杂对linux内核的统计:接近1万个文件,4百万行代码内核编程习惯(技巧)不同于应用程序(uC)linux内核的C代码Linux内核的主体使用G
2、NU C,在ANSI C上进行了扩充Linux内核必须由gcc编译器编译gcc和linux内核版本并行发展,对于版本的依赖性强内核代码中使用的一些编程技巧,在通常的应用程序中很少遇到GNU C的扩充举例从C+中吸收了inline和const关键字ANSI C代码与GNU C中的保留关键字冲突的问题可以通过双下划线(_ _)解决例如:inline 等价于 _inline_、asm等价于_asm_结构体(struct)的初始化结构体初始化struct sample int member_int;char *member_str;void (*member_fun)(void); ANSI C中的实
3、现struct sample inst_c= 100,/member_intNULL,/*member_str;myfunc/void (*member_fun)(void); C99中的实现struct sample inst_c99 = .member_int = 100,.member_fun = myfun, ; GCC中的实现struct sample inst_gcc = member_fun: myfun, member_int: 100,; 与C99中的用法类似,不必关心struct定义中的实际的顺序和其他未定义的数据,在复杂的结构体初始化的时候很有优势。宏定义的灵活使用(1)
4、虽然GCC中定义了inline关键字,但是,宏操作(#define)仍然在系统中大量使用举例:#define DUMP_WRITE(addr,nr) do memcpy(bufp,addr,nr); bufp += nr; while(0)应用DUMP_WRITE,就像使用C的函数一样:if(addr)DUMP_WRITE(addr, nr);else但是,如果如通过下的定义,都不能满足上述的情况定义1:#define DUMP_WRITE(addr,nr) memcpy(bufp,addr,nr); bufp += nr ;定义2:#define DUMP_WRITE(addr,nr) me
5、mcpy(bufp,addr,nr); bufp += nr;宏定义的灵活使用(2)#define OFFSETOF(strct, elem) (long)&(struct strct *)0)-elem)1、(struct strct *)0) 结构体strct的指针2、&(struct strct *)0)-elem)成员的地址,也就是相对于0的偏移3、结果:OFFSETOF(strct,elem)返回的是,结构体strct中成员elem的偏移量C语言中goto的使用在应用程序的C编程中,为了保证程序的模块化,建议不使用goto内核代码需要兼顾到效率,所以,大量使用goto整个内核的比例大
6、概是每260行一个goto语句速度优先短距离的gotoLinux内核加载过程通常,Linux内核是经过gzip压缩之后的映象文件bootloader复制压缩内核到内存空间内核自解压运行内核编译完成的Linux内核在哪里?./vmlinux,elf格式未压缩内核arch/arm/boot/compressed/vmlinux,压缩以后的elf格式内核arch/arm/boot/zImage,压缩内核压缩内核(zImage)的入口/arch/arm/boot/compressed/vmlinux.lds文件为编译器指定连接(link)顺序ENTRY(_start),压缩内核从.start段开始在a
7、rch/arm/boot/compressed/head.S中检测系统空间初始化C代码空间跳转到C代码decompress_kernel,arch/arm/boot/compressed/misc.c中解压之前的串口输出include/asm-arm/arch-s3c2410/uncompress.h定义了puts作为串口输出函数解压结束以后,跳转到r5:解压之后内核的起始地址开始真正的Linux内核入口在arch/arm/kernel/head-armv.S查找处理器类型_lookup_processor_type_lookup_architecture_type初始化页表(_create_page_tables)初始化C代码空间跳转到C代码中,start_kernel进入C
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 一次性医用制品行业市场发展分析及发展前景与投资机会研究报告
- 2024年激素内分泌药项目招商引资报告
- 2024年广告服务项目经营分析报告
- 中国果蔬饮料行业发展趋势及投资战略研究报告2024-2034版
- 心理活动方案总结报告
- 基因工程疫苗:重组抗原疫苗相关行业项目操作方案
- 三年级上册数学教案-万以内的加法和减法二解决问题 人教新课标版
- 钢带增强波纹管采购合同
- 人工种植牙相关行业项目操作方案
- 企业会计制度设计方案
- 小学二年级治班策略
- 2021年办公大楼办公室甲醛治理投标文件模板
- 六年级下册劳动教育《场馆服务我上岗》教学设计
- 《舞蹈生理学》课程教学大纲
- 政务短视频公众参与的影响因素研究-以“共青团中央”政务抖音号为例
- 《公路工程施工监理规范》(G10-2016 )【可编辑】
- 《《第九十四(惊愕)交响曲》(第二乐章)》教学设计(部级优课)-七年级音乐教案
- 中国警种分类(整理)ppt
- 第8课 会“传神”的木头 课件(图片式24)赣美版美术五年级下册
- 苏菲的世界各章概括每章简介
- 穿越寒冬:创业者的融资策略与独角兽思维
评论
0/150
提交评论