第9章嵌入式Linux系统移植_第1页
第9章嵌入式Linux系统移植_第2页
第9章嵌入式Linux系统移植_第3页
第9章嵌入式Linux系统移植_第4页
第9章嵌入式Linux系统移植_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章嵌入式Linux系统移植第9章 嵌入式Linux系统移植第9章嵌入式Linux系统移植第9章 嵌入式Linux系统移植l9.1 Bootloader(引导加载器)l9.2 基于ARM-with MMU的Linux移植l9.3 基于ARM-noMMU的CLinux移植第9章嵌入式Linux系统移植9.1 Bootloader的开发pLinux Bootloader的概述pBootLoader的stage1pBootLoader的stage2第9章嵌入式Linux系统移植Linux Bootloader的概述 BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都

2、分为stage1和stage2两大部分。 依赖于CPU体系结构的代码,例如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。 而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。 与体系结构相关便于适应不同平台第9章嵌入式Linux系统移植Linux Bootloader的概述BootLoader的stage1通常包括以下步骤(以执行的先后为顺序):p硬件设备初始化p为加载BootLoader的stage2准备RAM空间p拷贝BootLoader的stage2到RAM空间中p设置好堆栈p跳转到stage

3、2的C入口点进入BootLoader的C语言入口准备的C语言的运行环境。第9章嵌入式Linux系统移植Linux Bootloader的概述BootLoader的stage2通常包括以下步骤(以执行的先后为顺序):p初始化本阶段要使用到的硬件设备p检测系统内存映射(memory map)p将kernel映像和根文件系统映像从flash上读到RAM空间中p为内核设置启动参数p调用内核硬件初始化阶段。为操作系统准备环境调用操作系统第9章嵌入式Linux系统移植BootLoader的stage11、基本的硬件初始化 :l屏蔽所有的中断l设置CPU的速度和时钟频率lRAM初始化l初始化LEDl关闭CP

4、U内部指令数据cache对于具有MMU的处理器第9章嵌入式Linux系统移植BootLoader的stage12、为加载stage2准备RAM空间 为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载BootLoader的stage2准备好一段可用的RAM空间范围。第9章嵌入式Linux系统移植BootLoader的stage13. 复制stage2到RAM中lstage2的可执行映像在固态存储设备的存放起始地址和终止地址;l为stage2所安排的RAM空间的起始地址。第9章嵌入式Linux系统移植BootLoader的stage14、设置堆栈指针spBootLo

5、ader映像区域第二阶段加载区域第9章嵌入式Linux系统移植BootLoader的stage15、跳转到stage2的C入口点 在上述一切都就绪后,可以跳转到BootLoader的stage2去执行了。ARM处理器跳转通过PC(R15)的改变来实现第9章嵌入式Linux系统移植BootLoader的stage2 trampoline程序示例程序示例(来自来自blob bootloader软件软件):.text.globl _trampoline_trampoline:blmain/* 如果main返回,对其进行再次调用 */b_trampoline这里的main标号为C语言的入口第9章嵌入式

6、Linux系统移植BootLoader的stage21、初始化本阶段要使用到的硬件设备p初始化至少一个串口,以便和终端用户进行I/O输出信息;p初始化定时器等。在C语言程序中,可以通过读写处理器的特殊功能寄存器,实现设置硬件的工作。第9章嵌入式Linux系统移植BootLoader的stage22、检测系统的内存映射(memory map) 内存映射就是指在整个4GB的物理地址空间中。 BootLoader的stage2必须先检测整个系统的内存映射情况。检测完系统的内存映射情况后,BootLoader也可以将内存映射的详细信息打印到串口。第9章嵌入式Linux系统移植BootLoader的st

7、age23、加载内核映像和根文件系统映像p规划内存占用的布局p从Flash上拷贝while(count) *dest+ = *src+; count -= 4;第9章嵌入式Linux系统移植BootLoader的stage24、设置内核的启动参数 从Flash上拷贝调用内核之前,应该作一步准备工作,即:设置Linux内核的启动参数。 console=ttyS0,115200n8 串口采用如下设置:“115200bps、无奇偶校验、8位数据位”。Linux控制台参数第9章嵌入式Linux系统移植BootLoader的stage25、调用内核pCPU寄存器的设置pCPU模式pCache和MMU的设

8、置C语言调用内核:void (*callKernel)(int zero, int arch, u32 params_addr) = (void (*)(int, int, u32)KERNEL_RAM_BASE;callKernel(0, ARCH_NUMBER, (u32) kernel_params_start);函数指针,赋值为绝对地址。第9章嵌入式Linux系统移植9.2 基于ARM-with MMU的Linux移植pLinux内核概述pLinux源文件结构pARM-Linux移植pARM-Linux的初始化流程p基于PXA 2xx的ARM linux移植第9章嵌入式Linux系统移

9、植Linux内核概述Linux内核组成: p 进程调度(Process Schedule)p 进程间通信(IPC,Intre-Process Communication)p 内存管理(MM,Memory Management)p 虚拟文件系统(VFS,Virtual Flie System)p 网络(Net)第9章嵌入式Linux系统移植Linux内核概述第9章嵌入式Linux系统移植Linux源文件结构代码部分代码部分程序语言程序语言描述描述linux 2.x/initC初始化代码,包括C语言入口函数main.clinux 2.x/kernelC内核的核心代码,包括进程调度等linux 2.

10、x/ipcC进程通讯代码linux 2.x/mmC内存管理代码linux 2.x/fsC文件系统代码linux 2.x/netC网络代码linux 2.x/driversC驱动程序代码包含char、block、net等子目录linux 2.x/includeC头文件各部分代码头文件linux 2.x/archC+汇编与体系结构相关的C和汇编代码移植改动的主要工作。第9章嵌入式Linux系统移植ARM-Linux移植Linux核心部分的C语言源文件Linux驱动程序的C语言源文件ARM体系的C语言和汇编文件具体处理器的C语言和汇编文件生成的目标包含内核映像和各个独立的模块。第9章嵌入式Linux

11、系统移植ARM-Linux移植在archarm包含的目录如下表所示:p init:启动汇编入口,文件夹compressed包含了压缩程序p configs:配置脚本p mm:与体系结构相关的内存管理代码p tools:包含各种体系结构的定义p mach-XXX:各种体系相关的代码第9章嵌入式Linux系统移植Linux内核概述 Linux的C语言入口是linux 2.x/init/目录中的main.c的start_kernel()函数。 Linux程序进入C语言入口后,将完成系统的各种初始化工作,并建立第一个进程,整个系统进入调度状态。 第9章嵌入式Linux系统移植Linux内核概述压缩和非

12、压缩启动同时进入内核入口。第9章嵌入式Linux系统移植基于PXA 2xx的ARM linux移植 对于增加Linux对一款新的处理器的支持,需要从以下几个方面出发:p中断系统p定时器pDMA系统p编译选项中断和定时器是为操作系统提供运行节拍的必要硬件从编译的角度,增加对新处理器的支持第9章嵌入式Linux系统移植基于PXA 2xx的ARM linux移植目录和文件类型描述arch/arm/tools/mach-types机器类型 这是包含机器类型(处理器类型)的文件,需要在此处增加新的处理器类型include/asm-arm/arch-XXX头文件 这些是需要在内核和内核模块中使用的头文件。

13、在include/arm目录中的每一个arch-XXX表示了一种Linux支持ARM处理器,对于新增的处理器需要增加一个arch-XXX目录。arch/arm/mach-XXX处理器移植文件 这是移植主要需要的文件,既包括C语言文件,也包括汇编文件。针对每种处理器需要增加各种实现。arch/arm/共同代码部分ARM的公共代码 对于某些处理器,需要更改针对ARM处理器的共同代码部分,一般使用条件编译的方式Make文件编译脚本 Linux内核编译过程中,需要配置的脚本决定编译的文件,选择移植的体系结构。核心部分:定时器和中断系统。第9章嵌入式Linux系统移植基于ARM-noMMU的CLinux

14、移植 pCLinux的特点pCLinux源文件结构和移植pARM-CLinux系统的初始化过程pS3C44B0X系统的CLinux的移植第9章嵌入式Linux系统移植CLinux的特点 CLinux是针对工业控制领域的嵌入式linux操作系统,它从Linux 2.0/2.4内核派生而来,沿袭了主流Linux的绝大部分特性,适合不具备MMU的微处理器/微控制器。支持没有MMU的CPU是CLinux与主流Linux的基本差异。针对没有内存管理单元的处理器。第9章嵌入式Linux系统移植CLinux的特点CLinux和标准Linux主要的差别:l虚拟内存lFlat(扁平)格式l位置无关的代码PICl

15、多进程管理第9章嵌入式Linux系统移植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编译信息包含平台特定的一些编译

16、信息和一些支持文件。这里还存放了对每一个CLinux支持的平台的默认文件。romfs编译结果ROM文件系统的目录结构images编译结果包含编译好的二进制内核文件,文件系统的镜像文件和一个包含文件系统和内核的镜像。第9章嵌入式Linux系统移植CLinux源文件结构和移植主要的区别在于内存管理(mm),公用代码和体系结构相关的代码与标准Linux具有差别。第9章嵌入式Linux系统移植ARM-CLinux系统的初始化过程 ARM-CLinux系统的初始化过程和ARM-Linux类似,都是要从Bootloader引导,运行内核。 加载内核映像的方式分为压缩和非压缩两种,压缩内核的启动经过arch/arm/boot/compressed目录中head.S文件,非压缩内核启动直接进入arch/armnommu/kernel目录中的head-armv.S,然后调用start_kernel进入C语言环境。第9章嵌入式Linux系统移植S3C44

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论