




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第20章Linux内核移植 软件移植的概念简单的说就是让一套软件在指定的硬件平台上正常运行 移植至少包括了两个不同的硬件或者软件平台 对于应用软件来说 移植主要考虑操作系统的差异 重点在修改系统调用 本章的重点是Linux内核移植 需要考虑的硬件平台的差异 涉及较多知识 主要内容如下 Linux内核移植要点内核体系结构框架从现有代码移植内核 20 1Linux内核移植要点 Linux本身对内存管理 MMU 有很好的支持 因此 在移植的时候首先要考虑到目标硬件平台是否支持MMU 以ARM平台为例 ARM7内核的CPU不支持MMU 无法直接把Linux内核代码移植到ARM7核的硬件平台 cLinux是专门针对ARM7这类没有MMU的硬件平台设计的 它精简了MMU部分代码 本书的目标平台是S3C2440A 该处理器基于ARM9核 支持MMU 可以直接移植Linux2 6版本的内核代码 1 目标平台2 内存管理单元 MMU 3 内存映射4 存储器 20 2平台相关代码结构 Linux内核代码目录基本是安装功能块划分的 每个功能块的代码存放在一个目录下 如mm目录存放内存管理单元相关代码 ipc存放了进程间通信相关的代码 kernel存放进程调度相关代码等 arch目录下每个平台的代码都采用了与内核代码相同的目录结构 以arch arm目录为例 该目录下mm lib kernel boot目录与内核目录下对应目录的功能相同 此外 还有一些以字符串mach开头的目录 对应不同处理器特定的代码 从arch目录结构可以看出 平台相关的代码都存放到arch目录下 并且使用与内核目录相同的结构 使用SourceInsight工具可以看到许多的同名称函数 原因就是内核代码调用的函数是平台相关的 每个平台都有自己的实现方法 对于内核来说 使用相同的名字调用 通过编译选项选择对应平台的代码 20 3建立目标平台工程框架 Linux内核2 6版本已经对ARM处理器有很好的支持 并且对三星公司的S3C2440提供一定支持 但是 嵌入式硬件系统的差别很大 移植Linux内核到新的开发板仍然需要修改或者增加针对特定硬件的代码 20 3 1加入编译菜单项 修改arch arm mach s3c2410 Kconfig文件 在 endmenu 之前加入下面的内容 87configARCH MINI244088bool mini2440 89selectCPU S3C244090help91SayYhereifyouareusingthemini2440 20 3 2设置宏与代码文件的对应关系 在设置宏与代码文件对应关系之前 首先建立一个空的代码文件 在arch arm mach s3c2410目录下建立mach mini2440 c文件 用于存放与mini2440开发板相关的代码 建立mach mini2440 c文件后 修改arch arm mach s3c2410 Makefile文件 在文件最后加入mach mini2440 c文件的编译信息 43obj CONFIG ARCH MINI2440 mach mini2440 o 20 3 3测试工程框架 工程框架配置修改完毕后 需要进行简单的测试 根据测试结果判断框架是否搭建成功 回到内核代码顶层目录 输入 makeARCH armCROSS COMPILE arm linux menuconfig 命令 出现内核设置图形界面 加载默认配置文件后 可以开始配置新增加的菜单 进入 SystemTypes 菜单项 打开 S3C24XXImplementations 菜单 出现一个目标开发板的列表 SimtecElectronicsBAST EB2410ITX IPAQH1940 AcerN30 SMDK2410 A9M2410 SMDK2440 AESOP2440 QQ2440 mini2440 ThorcomVR1000 HPiPAQrx3715 NexVisionOTOMBoard NexVisionNEXCODER2440LightBoard mini2440 20 4建立目标平台代码框架 在20 2 2节编译的内核代码最后出现了链接错误 提示vmlinux lds文件链接失败 lds文件是GNUld工具使用的一种脚本文件 该文件描述了如何分配链接后的内存区域和地址等信息 通过lds文件报的错误可以顺藤摸瓜分析问题所在 20 4 1ARM处理器相关结构 首先打开arch arm kernel vmlinux lds文件 找到815行 代码如下 815ASSERT proc info end proc info begin missingCPUsupport 20 4 2建立machine desc结构 Linux内核提供了MACHINE START和MACHINE END宏供建立machine desc结构使用 建议使用宏建立结构 打开arch arm mach s3c2410 mach mini2440 c文件 加入下面的代码 53MACHINE START MINI2440 MINI2440 54 phys ram S3C2410 SDRAM PA 55 phys io S3C2410 PA UART 56 io pg offst u32 S3C24XX VA UART 18 0 xfffc 57 boot params S3C2410 SDRAM PA 0 x100 58 init irq mini2440 init irq 59 map io mini2440 map io 60 init machine mini2440 init 61 timer s3c24xx timer 63MACHINE END 20 4 3加入处理函数 在mach mini2440 c文件加入MINI2440结构中指定的几个函数定义如下 52void initmini2440 init irq void 53 54 5556void initmini2440 init void 57 58 5960void initmini2440 map io void 61 62 20 4 4加入定时器结构 在MINI2440结构定义中 使用了一个名为s3c24xx timer的sys timer结构变量 该变量定义在arch arm mach s3c2410 timer c文件定义如下 252structsys timers3c24xx timer 253 init s3c2410 timer init 定时器初始化函数254 offset s3c2410 gettimeoffset 读取定时器延时255 resume s3c2410 timer setup 恢复定时器256 20 4 5测试代码结构 回到内核源代码根目录 执行 makeARCH armCROSS COMPILE arm linux bzImage 开始编译内核 这次编译没有出错信息 会得到正确的编译结果 查看arch arm boot目录已经有目标文件Image gz 表示已经编译生成运行于ARM处理器的内核 到目前为止 已经可以编译工作在ARM处理器上的代码 但是内核代码还不能启动 因为还没有加入实际的代码 在下节介绍如何加入目标平台相关的代码 20 5构建目标板代码 Linux内核已经为ARM处理器设计好了代码框架 只要按照这个框架加入针对某种开发板和处理器的代码即可工作 加入代码还是按照前面提到的原则 能使用已有的通用代码尽量使用 并且尽可能的参考现有开发板代码的处理方法 20 5 1处理器初始化 首先在mach mini2440 c文件加入处理器初始化代码如下 56void initmini2440 init void 57 58set s3c2410ts info 注册LCD结构61 20 5 2端口映射 端口映射函数设置S3C2440处理器的I O端口描述结构 时钟频率 串口等 代码如下 150void initmini2440 map io void 151 152s3c24xx init io mini2440 iodesc ARRAY SIZE mini2440 iodesc 153s3c24xx init clocks 12000000 154s3c24xx init uarts mini2440 uartcfgs ARRAY SIZE mini2440 uartcfgs 155s3c24xx set board 157 20 5 3中断处理 内核提供了一个s3c24xx init irq 处理函数 因此中断处理函数直接引用即可 186void initmini2440 init irq void 187 188s3c24xx init irq 调用系统提供的中断处理函数189 20 5 4定时器处理 内核提供了一个定时器处理函数结构如下 structsys timers3c24xx timer init s3c2410 timer init 定时器初始化函数 offset s3c2410 gettimeoffset 获取定时器值 resume s3c2410 timer setup 恢复定时器设置 20 5 5编译最终代码 到目前为止 已经添加了所有与mini2440开发板有关的代码 保存文件后 可以开始编译内核 回到内核代码根目录 执行 makeARCH armCROSS COMPILE arm linux bzImage 重新编译代码 最终在arch arm boot目录下生成bzImage文件 针对开发板的内核代码编译成功 通过U Boot或者其他的Bootloader工具可以把代码烧写到开发板的Flash存储器 然后重新启动开发板 可以从液
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学铁路警务专业题库- 铁路警务专业实践实训总结
- 2025年大学涉外警务专业题库- 全球化时代的警务专业发展
- 2025年大学涉外警务专业题库- 跨国网络犯罪打击与涉外警务
- 2025年大学边防管理专业题库- 边防管理中的千岛监控与海岸封控
- 2025年大学铁路警务专业题库- 铁路警务安全风险分析
- 2025年大学劳动教育专业题库- 劳动教育对大学生自信心的培养与激发
- 2024年高职单招综合提升测试卷及参考答案详解【轻巧夺冠】
- 2025年甘肃平凉市静宁县招聘国家公费师范生和国家优师计划毕业生32人笔试备考题库及完整答案详解1套
- 2025年中国邮政集团有限公司湖北省分公司校园招聘笔试模拟试题及完整答案详解一套
- 2023年度自考专业(公共关系)检测卷附参考答案详解【综合卷】
- 同期线损培训课件
- 反诈知识竞赛试题及答案
- 钢筋加工棚租赁合同范本
- 2025年电梯检验员资格考试历年真题及答案试题试卷(含解析)
- 眼整形课件教学课件
- 公司法务知识培训会课件
- 2025年药企QA人员岗位职责培训考核试题及答案
- 2025成人高等学校招生全国统一考试专升本《英语》试题及答案解析
- 五年级上册英语英语试题 Unit1-Unit2单元测试卷(无答案)译林版
- 纤维素基包装生物力学性能-洞察及研究
- 基底细胞癌护理查房
评论
0/150
提交评论