天津科技大学嵌入式系统ppt---第7章 嵌入式Linux软件设计资料_第1页
天津科技大学嵌入式系统ppt---第7章 嵌入式Linux软件设计资料_第2页
天津科技大学嵌入式系统ppt---第7章 嵌入式Linux软件设计资料_第3页
天津科技大学嵌入式系统ppt---第7章 嵌入式Linux软件设计资料_第4页
天津科技大学嵌入式系统ppt---第7章 嵌入式Linux软件设计资料_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、第 7 章 嵌入式Linux软件设计 共二十二页主要(zhyo)内容1324Bootloader引导(yndo)程序 Linux的移植 驱动程序开发 应用程序开发 共二十二页 7.1.1 Bootloader的启动(qdng)过程 在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。嵌入式系统

2、中,系统在上电或复位时通常都从地址0 x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。bootloader的操作模式:1,自启动模式:bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行。2,交互模式:目标机上的bootloader将通过串口或网络等通行手段从开发(kif)主机(Host)上下载内核映像等到RAM中。可以被bootloader写到目标机上的固态存储媒质中,或者直接进入系统的引导。也可以通过串口接收用户的命令。共二十二页 7.1.1 Bootloader的启动(qdng)过程 BootLoader的实现(shxi

3、n)依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。 BootLoader的stage1通常包括以下步骤:硬件设备初始化。为加载BootLoader的stage2准备RAM空间。复制BootLoader的stage2到RAM空间中。设置好堆栈。跳转到stage2的入口点。 BootLoader的stage2通常包括以下步骤:初始化本阶段要使用的硬件设备。检测系统内存映射。将kernel映像和根文件系统映像从Flash读到RAM中。为内核设置启动参数。调用内核。共二十二页 7.1.2 BootLoadervivi vivi是由韩国MIZI公司(n

4、s)提供的一款针对S3C2410芯片的BootLoader。 vivi的启动过程分为两个阶段:阶段1和阶段2。阶段1的主要工作是:硬件初始化;配置串口;复制自身到SDRAM中(跳转到C代码的入口函数)。 阶段2的主要工作是:对硬件系统继续初始化;内存映射初始化,内存管理(gunl)单元MMU初始化;初始化堆;初始化MTD设备,MTD设备指具有闪存功能的设备,如闪存芯片、闪存卡等;初始化私有数据;初始化内置命令;启动vivi。共二十二页 7.1.3 BootLoaderU-Boot U-Boot,全称 Universal Boot Loader,是开源(ki yun)项目。其源码目录、编译形式与

5、Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序。U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持VxWorks, QNX, Solaris等嵌入式操作系统。这是U-Boot中Universal的一层含义,另外一层含义则是U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式处理器和嵌入式操作系统。就目前来看,U-Boot对PowerPC系列处理器支持最为丰富,对Linux的支持最

6、完善。共二十二页主要(zhyo)内容1324Bootloader引导(yndo)程序 Linux的移植 驱动程序开发 应用程序开发 共二十二页 7.2 Linux的移植(yzh) 所谓Linux移植,就是针对具体的目标平台对Linux做必要的改写后,安装到该目标平台并使其正确运行的过程。基本(jbn)内容包括:获取某一版本的Linux内核源码。根据具体的目标平台,对源码进行必要的改写(主要是修改有关体系结构的部分),然后添加一些驱动,打造一款适合目标平台的新的操作系统。对该系统进行针对目标平台的交叉编译,生成一个内核映像文件。将该映像文件烧写、安装到目标平台中。 共二十二页 7.2.1 Lin

7、ux内核的目录(ml)结构 1/arch:其中的子目录包含了所有与硬件体系结构相关的内核移植代码。每一个目录都代表一种硬件平台,对于每种平台都应该包括: boot:包含启动内核所使用的部分或全部平台的相关代码。 kernel:包含支持体系结构特有的特征代码。 lib:包含存放(cnfng)体系结构特有的通用函数的实现代码。 mm: 包含存放体系结构特有的内存管理程序的实现。 mach-xxx:包含存放该处理器的移植代码。2/Documentation:其中的子目录包含有关内核的许多非常详细的文档。3/drivers:其中的子目录包含内核中所有的设备驱动程序。4/fs:其中的子目录包含了所有文件

8、系统的代码。5/include:其中的子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。同时,包括不同平台需要的库文件。6/init:其中的子目录包含了内核的初始化代码,内核从此目录下开始工作。7/ipc:其中的子目录包含了内核的进程间通讯的代码。8/kernel:其中的子目录包含了主内核的代码,如进程调度等。9/lib:其中的子目录包含了通用的库函数代码等。10/mm:其中的子目录包含了内核的内存管理代码。11/net:其中的子目录包含了内核的网络相关代码。12/scripts:其中的子目录包含了配置内核的一些脚本文件。共二十二页 7.2.2 Linux内核(

9、ni h)源码 通常对内核源码的改写难度较大,因为这不仅要求对内核结构非常熟悉,而且也要对目标平台的硬件结构相当了解。所以这部分工作主要由目标平台厂商提供,如对于ARM平台,对Linux内核源码的改写就是(jish)由英国ARM公司完成的。对于读者来说,只需从其网站上下载相关版本的Linux内核补丁,再安装补丁即可。 共二十二页 7.2.3 交叉编译(biny)环境的建立 交叉编译指利用运行在机器上的编译器编译某个源程序,生成在另一台机器上运行的目标代码的过程。对于Linux系统和ARM平台来讲,GCC交叉编译器能高效(o xio)的完成移植,下面介绍生成GCC交叉编译器的一般过程。(1)下载

10、源代码 (2)编译binutils (3)配置Linux内核头文件 (4)第一次编译gcc (5)交叉编译glibc(6)第二次编译gcc 共二十二页 7.2.4 修改Linux内核(ni h)文件 1设置目标平台和指定交叉编译器 2修改arch/arm目录下Makefile文件 3修改arch/arm目录下config.in文件 4修改arch/arm/boot目录下Makefile文件 5修改arch/arm/boot/compressed目录下Makefile文件 6在arch/arm/boot/compressed目录下添加head-s3c2410.s文件,该文件主要用来初始化处理器。

11、7在arch/arm/def-configs目录下添加配置(pizh)好的S3C2410的配置文件。8修改arch/arm/kernel目录下Makefile文件9修改arch/arm/kernel目录下的debug-armv.s文件 10修改arch/arm/kernel目录下的entry-armv.s文件 11修改arch/arm/mm目录下的相关文件 12修改arch/arm/mach-s3c2410目录下的相关文件 共二十二页 7.2.5 Linux内核(ni h)及文件系统的编译 1编译Linux内核 make depmake cleanmake zImage 2制作cramfs文件

12、系统 利用工具软件MKCRAMFS制作cramfs文件系统。 假设root_tech目录包含(bohn)将来要用到的所有文件,把制作工具和root_tech放在同一个目录下,并在该目录下使用命令: MKCRAMFS root_tech rootfs.cramfs 共二十二页 7.2.6 Linux内核(ni h)及文件系统的下载 1利用vivi通过超级终端重新(chngxn)下载vivi2利用vivi烧写内核和root文件系统 3利用U-Boot烧写内核和root文件系统 共二十二页主要(zhyo)内容1324Bootloader引导(yndo)程序 Linux的移植 驱动程序开发 应用程序开

13、发 共二十二页 设备(shbi)驱动程序的工作原理 设备驱动程序是操作系统(co zu x tn)内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节, 应用程序可以像操作普通文件一样对硬件设备进行操作。 设备驱动程序作为内核的一部分,完成以下功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。 Linux下的设备驱动程序是内核的一部分,运行在内核模式。在Linux系统中,使用file_operation结构将设备驱动程序和文件系统相关联,在这个结构里存放了设备各种操作的入口函数。 共

14、二十二页 Linux下设备驱动程序在输入(shr)/输出系统中的地位用户程序的进程(设备)文件系统设备驱动程序设备服务子程序中断处理程序物理设备控制器输入/输出请求输入/输出响应物理设备共二十二页 驱动程序的开发和使用(shyng)步骤 1用户在自己的驱动程序源文件中定义file_operations结构,并编写出设备需要的各个操作函数,对于设备不需要的操作函数用NULL初始化; 2定义一个初始化函数,该函数应包含以下几项工作:(1)对使用到的硬件寄存器进行初始化,包括中断寄存器。(2)初始化与设备相关的参数(cnsh)。(3)注册设备。 int register_chrdev(unsigne

15、d int,const char*,struct file_operations*)其中三个参数分别代表主设备号、设备名和file_operations结构变量的地址。(4)注册设备使用的中断。注册中断使用的函数。(5)其他的一些初始化工作,比如给设备分配I/O,申请DMA通道等。 3将设备驱动加到Linux内核中 4将设备驱动编译成驱动模块 共二十二页主要(zhyo)内容1324Bootloader引导(yndo)程序 Linux的移植 驱动程序开发 应用程序开发 共二十二页 应用程序的开发(kif)步骤 开发Linux应用程序一般分为以下几个步骤(bzhu):编写程序编写Makefile文

16、件编译程序运行程序将生成的可执行文件加入文件系统。 如果应用程序的运行需要某些驱动程序,先将驱动程序挂接到文件系统中。 共二十二页 举例:hello应用程序的开发(kif)和运行 1. 编写Hello程序编写hello.c文件,保存在hello目录下。代码如下(rxi)所示:#include #include int main(int argc, char *argv) printf(Hello Reader,Congradulations!n); return(0); 2. 编写Makefile文件,内容如下:CC = /opt/host/armv4l/bin/armv4l-unknown-

17、linux-gccCFLAGS = -I/linux2410/kernel/include -Wall -Wstrict-prototypes -Wno-trigraphs -Os -mapcs -fno-strict-aliasing -fno-common -fno-common -pipe -mapcs-32 hello: hello.c$(CC) $(CFLAGS) -o hello hello.cclean:-rm -f *.o3. 编译 进入hello目录,使用命令make进行编译。4. 运行 ./hello 共二十二页内容摘要第 7 章 嵌入式Linux软件设计。将kernel映像和根

温馨提示

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

评论

0/150

提交评论