版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章嵌入式Linux系统移植9.1Bootloader(引导加载器)9.2基于ARM-withMMU的Linux移植9.3基于ARM-noMMU的µCLinux移植9.1Bootloader的开发LinuxBootloader的概述BootLoader的stage1BootLoader的stage2LinuxBootloader的概述BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。依赖于CPU体系结构的代码,例如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。与体系结构相关便于适应不同平台LinuxBootloader的概述BootLoader的stage1通常包括以下步骤(以执行的先后为顺序):硬件设备初始化为加载BootLoader的stage2准备RAM空间拷贝BootLoader的stage2到RAM空间中设置好堆栈跳转到stage2的C入口点进入BootLoader的C语言入口准备的C语言的运行环境。LinuxBootloader的概述BootLoader的stage2通常包括以下步骤(以执行的先后为顺序):初始化本阶段要使用到的硬件设备检测系统内存映射(memorymap)将kernel映像和根文件系统映像从flash上读到RAM空间中为内核设置启动参数调用内核硬件初始化阶段。为操作系统准备环境调用操作系统BootLoader的stage11、基本的硬件初始化:屏蔽所有的中断设置CPU的速度和时钟频率RAM初始化初始化LED关闭CPU内部指令/数据cache对于具有MMU的处理器BootLoader的stage12、为加载stage2准备RAM空间为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载BootLoader的stage2准备好一段可用的RAM空间范围。BootLoader的stage13.复制stage2到RAM中stage2的可执行映像在固态存储设备的存放起始地址和终止地址;为stage2所安排的RAM空间的起始地址。BootLoader的stage14、设置堆栈指针spBootLoader映像区域第二阶段加载区域BootLoader的stage15、跳转到stage2的C入口点在上述一切都就绪后,可以跳转到BootLoader的stage2去执行了。ARM处理器跳转通过PC(R15)的改变来实现BootLoader的stage2trampoline程序示例(来自blobbootloader软件):.text.globl_trampoline_trampoline: bl main /*如果main返回,对其进行再次调用*/
b _trampoline这里的main标号为C语言的入口BootLoader的stage21、初始化本阶段要使用到的硬件设备初始化至少一个串口,以便和终端用户进行I/O输出信息;初始化定时器等。在C语言程序中,可以通过读写处理器的特殊功能寄存器,实现设置硬件的工作。BootLoader的stage22、检测系统的内存映射(memorymap)内存映射就是指在整个4GB的物理地址空间中。BootLoader的stage2必须先检测整个系统的内存映射情况。检测完系统的内存映射情况后,BootLoader也可以将内存映射的详细信息打印到串口。BootLoader的stage23、加载内核映像和根文件系统映像规划内存占用的布局从Flash上拷贝while(count){*dest++=*src++;count-=4;};BootLoader的stage24、设置内核的启动参数
从Flash上拷贝调用内核之前,应该作一步准备工作,即:设置Linux内核的启动参数。console=ttyS0,115200n8串口采用如下设置:“115200bps、无奇偶校验、8位数据位”。Linux控制台参数BootLoader的stage25、调用内核CPU寄存器的设置CPU模式Cache和MMU的设置C语言调用内核:void(*callKernel)(intzero,intarch,u32params_addr)=(void(*)(int,int,u32))KERNEL_RAM_BASE;callKernel(0,ARCH_NUMBER,(u32)kernel_params_start);函数指针,赋值为绝对地址。9.2基于ARM-withMMU的Linux移植Linux内核概述Linux源文件结构ARM-Linux移植ARM-Linux的初始化流程基于PXA2xx的ARMlinux移植Linux内核概述Linux内核组成:进程调度(ProcessSchedule)进程间通信(IPC,Intre-ProcessCommunication)内存管理(MM,MemoryManagement)虚拟文件系统(VFS,VirtualFlieSystem)网络(Net)Linux内核概述Linux源文件结构代码部分程序语言描述linux2.x/initC初始化代码,包括C语言入口函数main.clinux2.x/kernelC内核的核心代码,包括进程调度等linux2.x/ipcC进程通讯代码linux2.x/mmC内存管理代码linux2.x/fsC文件系统代码linux2.x/netC网络代码linux2.x/driversC驱动程序代码包含char、block、net等子目录linux2.x/includeC头文件各部分代码头文件linux2.x/archC+汇编与体系结构相关的C和汇编代码移植改动的主要工作。ARM-Linux移植Linux核心部分的C语言源文件Linux驱动程序的C语言源文件ARM体系的C语言和汇编文件具体处理器的C语言和汇编文件生成的目标包含内核映像和各个独立的模块。ARM-Linux移植在arch\arm包含的目录如下表所示:
init:启动汇编入口,文件夹compressed包含了压缩程序
configs:配置脚本
mm:与体系结构相关的内存管理代码
tools:包含各种体系结构的定义
mach-XXX:各种体系相关的代码Linux内核概述Linux的C语言入口是linux2.x/init/目录中的main.c的start_kernel()函数。Linux程序进入C语言入口后,将完成系统的各种初始化工作,并建立第一个进程,整个系统进入调度状态。Linux内核概述压缩和非压缩启动同时进入内核入口。基于PXA2xx的ARMlinux移植
对于增加Linux对一款新的处理器的支持,需要从以下几个方面出发:中断系统定时器DMA系统编译选项中断和定时器是为操作系统提供运行节拍的必要硬件从编译的角度,增加对新处理器的支持基于PXA2xx的ARMlinux移植目录和文件类型描述arch/arm/tools/mach-types机器类型这是包含机器类型(处理器类型)的文件,需要在此处增加新的处理器类型include/asm-arm/arch-XXX头文件这些是需要在内核和内核模块中使用的头文件。在include/arm目录中的每一个arch-XXX表示了一种Linux支持ARM处理器,对于新增的处理器需要增加一个arch-XXX目录。arch/arm/mach-XXX处理器移植文件这是移植主要需要的文件,既包括C语言文件,也包括汇编文件。针对每种处理器需要增加各种实现。arch/arm/共同代码部分ARM的公共代码对于某些处理器,需要更改针对ARM处理器的共同代码部分,一般使用条件编译的方式Makefile和config文件编译脚本Linux内核编译过程中,需要配置的脚本决定编译的文件,选择移植的体系结构。核心部分:定时器和中断系统。基于ARM-noMMU的µCLinux移植µCLinux的特点µCLinux源文件结构和移植ARM-µCLinux系统的初始化过程S3C44B0X系统的µCLinux的移植µCLinux的特点µCLinux是针对工业控制领域的嵌入式linux操作系统,它从Linux2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性,适合不具备MMU的微处理器/微控制器。支持没有MMU的CPU是µCLinux与主流Linux的基本差异。针对没有内存管理单元的处理器。µCLinux的特点µCLinux和标准Linux主要的差别:虚拟内存Flat(扁平)格式位置无关的代码PIC多进程管理µCLinux的特点内容类型描述Linux-2.6.xlinux-2.4.xlinux-2.0.xOS源代码µCLinux的内核,与Linux-2.6.x/Linux-2.4.x/Linux-2.0.x内核兼容。freeswan软件源代码来自的软件lib软件源代码用户层应用程序所用到的一些库,包括libc,libm等等uClibc源代码是一个libc库,比通常使用的glic更小,更精简。user源代码包含了µCLinux自带的大量用户层的应用程序,。config配置脚本一个基本的linux配置脚本用来进行默认的配置vendors编译信息包含平台特定的一些编译信息和一些支持文件。这里还存放了对每一个µCLinux支持的平台的默认文件。romfs编译结果ROM文件系统的目录结构images编译结果包含编译好的二进制内核文件,文件系统的镜像文件和一个包含文件系统和内核的镜像。µCLinux源文件结构和移植主要的区别在于内存管理(mm),公用代码和体系结构相关的代码与标准Linux具有差别。ARM-µCLinux系统的初始化过程ARM-µCLinux系统的初始化过程和ARM-Linux类似,都是要从Bootloader引导,运行内核。加载内核映像的方式分为压缩和非压缩两种,压缩内核的启动经过arch/arm/boot/compressed目录中head.S文件,非压缩内核启动直接进入arch/armnommu/kernel目录中的head-armv.S,然后调用start_kernel进入C语言环境。S3C44B0X系统的µCLinux的移植µCLinux的移植需要增加和改动的文件和Linux基本一致,只是Lin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 证券协议经常使用
- 二手车分期付款合同模板
- 购买室内IC卡兼容机协议
- 公司内部股权转让协议范本
- 2025年劳动合同范本
- 商务专员工作职责内容(3篇)
- 2025年医院文化建设阶段总结范文(2篇)
- 一年级班级规章制度(3篇)
- 设备异常运行管理制度模版(3篇)
- 其他副经理安全生产责任制(2篇)
- 医保工作自查表
- 调休单、加班申请单
- 肉制品生产企业名录296家
- 小学-英语-湘少版-01-Unit1-What-does-she-look-like课件
- 单证管理岗工作总结与计划
- 规划设计收费标准
- 安全安全隐患整改通知单及回复
- 国有检验检测机构员工激励模式探索
- 采购部年终总结计划PPT模板
- CDI-EM60系列变频调速器使用说明书
- 【汇总】高二政治选择性必修三(统编版) 重点知识点汇总
评论
0/150
提交评论