版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章
嵌入式Linux软件设计主要内容1324Bootloader引导程序Linux的移植驱动程序开发应用程序开发
7.1.1Bootloader的启动过程
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。bootloader的操作模式:1,自启动模式:bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行。2,交互模式:目标机上的bootloader将通过串口或网络等通行手段从开发主机(Host)上下载内核映像等到RAM中。可以被bootloader写到目标机上的固态存储媒质中,或者直接进入系统的引导。也可以通过串口接收用户的命令。
7.1.1Bootloader的启动过程BootLoader的实现依赖于CPU的体系结构,因此大多数BootLoader都分为stage1和stage2两大部分。BootLoader的stage1通常包括以下步骤:硬件设备初始化。为加载BootLoader的stage2准备RAM空间。复制BootLoader的stage2到RAM空间中。设置好堆栈。跳转到stage2的入口点。
BootLoader的stage2通常包括以下步骤:初始化本阶段要使用的硬件设备。检测系统内存映射。将kernel映像和根文件系统映像从Flash读到RAM中。为内核设置启动参数。调用内核。
7.1.2BootLoader——vivivivi是由韩国MIZI公司提供的一款针对S3C2410芯片的BootLoader。vivi的启动过程分为两个阶段:阶段1和阶段2。阶段1的主要工作是:硬件初始化;配置串口;复制自身到SDRAM中(跳转到C代码的入口函数)。阶段2的主要工作是:对硬件系统继续初始化;内存映射初始化,内存管理单元MMU初始化;初始化堆;初始化MTD设备,MTD设备指具有闪存功能的设备,如闪存芯片、闪存卡等;初始化私有数据;初始化内置命令;启动vivi。
7.1.3BootLoader——U-Boot
U-Boot,全称UniversalBootLoader,是开源项目。其源码目录、编译形式与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的支持最完善。主要内容1324Bootloader引导程序Linux的移植驱动程序开发应用程序开发
7.2Linux的移植所谓Linux移植,就是针对具体的目标平台对Linux做必要的改写后,安装到该目标平台并使其正确运行的过程。基本内容包括:获取某一版本的Linux内核源码。根据具体的目标平台,对源码进行必要的改写(主要是修改有关体系结构的部分),然后添加一些驱动,打造一款适合目标平台的新的操作系统。对该系统进行针对目标平台的交叉编译,生成一个内核映像文件。将该映像文件烧写、安装到目标平台中。
7.2.1Linux内核的目录结构1./arch:其中的子目录包含了所有与硬件体系结构相关的内核移植代码。每一个目录都代表一种硬件平台,对于每种平台都应该包括:boot:包含启动内核所使用的部分或全部平台的相关代码。kernel:包含支持体系结构特有的特征代码。lib:包含存放体系结构特有的通用函数的实现代码。mm:包含存放体系结构特有的内存管理程序的实现。mach-xxx:包含存放该处理器的移植代码。2./Documentation:其中的子目录包含有关内核的许多非常详细的文档。3./drivers:其中的子目录包含内核中所有的设备驱动程序。4./fs:其中的子目录包含了所有文件系统的代码。5./include:其中的子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。同时,包括不同平台需要的库文件。6./init:其中的子目录包含了内核的初始化代码,内核从此目录下开始工作。7./ipc:其中的子目录包含了内核的进程间通讯的代码。8./kernel:其中的子目录包含了主内核的代码,如进程调度等。9./lib:其中的子目录包含了通用的库函数代码等。10./mm:其中的子目录包含了内核的内存管理代码。11./net:其中的子目录包含了内核的网络相关代码。12./scripts:其中的子目录包含了配置内核的一些脚本文件。
7.2.2Linux内核源码通常对内核源码的改写难度较大,因为这不仅要求对内核结构非常熟悉,而且也要对目标平台的硬件结构相当了解。所以这部分工作主要由目标平台厂商提供,如对于ARM平台,对Linux内核源码的改写就是由英国ARM公司完成的。对于读者来说,只需从其网站上下载相关版本的Linux内核补丁,再安装补丁即可。
7.2.3交叉编译环境的建立交叉编译指利用运行在机器上的编译器编译某个源程序,生成在另一台机器上运行的目标代码的过程。对于Linux系统和ARM平台来讲,GCC交叉编译器能高效的完成移植,下面介绍生成GCC交叉编译器的一般过程。(1)下载源代码(2)编译binutils(3)配置Linux内核头文件(4)第一次编译gcc(5)交叉编译glibc(6)第二次编译gcc
7.2.4修改Linux内核文件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文件,该文件主要用来初始化处理器。7.在arch/arm/def-configs目录下添加配置好的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.5Linux内核及文件系统的编译1.编译Linux内核makedepmakecleanmakezImage2.制作cramfs文件系统利用工具软件MKCRAMFS制作cramfs文件系统。假设root_tech目录包含将来要用到的所有文件,把制作工具和root_tech放在同一个目录下,并在该目录下使用命令:MKCRAMFSroot_techrootfs.cramfs
7.2.6Linux内核及文件系统的下载1.利用vivi通过超级终端重新下载vivi2.利用vivi烧写内核和root文件系统3.利用U-Boot烧写内核和root文件系统主要内容1324Bootloader引导程序Linux的移植驱动程序开发应用程序开发设备驱动程序的工作原理设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,应用程序可以像操作普通文件一样对硬件设备进行操作。设备驱动程序作为内核的一部分,完成以下功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。Linux下的设备驱动程序是内核的一部分,运行在内核模式。在Linux系统中,使用file_operation结构将设备驱动程序和文件系统相关联,在这个结构里存放了设备各种操作的入口函数。
Linux下设备驱动程序在输入/输出系统中的地位用户程序的进程(设备)文件系统设备驱动程序设备服务子程序中断处理程序物理设备控制器输入/输出请求输入/输出响应物理设备驱动程序的开发和使用步骤1.用户在自己的驱动程序源文件中定义file_operations结构,并编写出设备需要的各个操作函数,对于设备不需要的操作函数用NULL初始化;2.定义一个初始化函数,该函数应包含以下几项工作:(1)对使用到的硬件寄存器进行初始化,包括中断寄存器。(2)初始化与设备相关的参数。(3)注册设备。
intregister_chrdev(unsignedint,constchar*,structfile_operations*)其中三个参数分别代表主设备号、设备名和file_operations结构变量的地址。(4)注册设备使用的中断。注册中断使用的函数。(5)其他的一些初始化工作,比如给设备分配I/O,申请DMA通道等。3.将设备驱动加到Linux内核中4.将设备驱动编译成驱动模块主要内容1324Bootloader引导程序
Linux的移植驱动程序开发应用程序开发
应用程序的开发步骤开发Linux应用程序一般分为以下几个步骤:编写程序编写Makefile文件编译程序运行程序将生成的可执行文件加入文件系统。如果应用程序的运行需要某些驱动程序,先将驱动程序挂接到文件系统中。举例:hello应用程序的开发和运行1.编写Hello程序编写hello.c文件,保存在hello目录下。代码如下所示:#include<stdio.h>#include<stdlib.h>intmain(intargc,char**argv){printf("HelloReader,Congradulations!!!\n");return(0);}2.编写Makefile文件,内容如下:CC=/opt/host/armv4l/bin/armv4l-unknown-linux-gccCFLAGS=-I/l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024届高考语文一轮复习第2章小说阅读3第二节分析情节结构-精构情节讲好故事课件
- 预防青少年犯罪法制教育课
- 16.2《登泰山记》课件 2024-2025学年统编版高中语文必修上册
- 辽宁省葫芦岛市八中2025届高三(最后冲刺)语文试卷含解析
- 江苏省无锡市惠山六校联考2025届高三第一次调研测试语文试卷含解析
- 湖北省荆州市重点中学2025届高三适应性调研考试英语试题含解析
- 湖北省仙桃市汉江高级中学2025届高三六校第一次联考语文试卷含解析
- 现代学徒制课题:中国特色学徒制建设标准体系研究(附:研究思路模板、可修改技术路线图)
- 内蒙古阿拉善2025届高考仿真卷英语试卷含解析
- 贵州省凤冈县第二中学2025届高考语文考前最后一卷预测卷含解析
- 中华人民共和国文物保护法学习课程PPT
- 人教版数学二年级上册期末综合素质评价(一)(含答案)
- 联轴器基本知识讲解
- 夜听电台情感故事【十二篇】
- 云应用系统开发技术PPT完整全套教学课件
- Unit 1 What's he like Part B Let's learn(说课稿)人教PEP版英语五年级上册
- 表格式部编版语文六年级上册全册(教案)
- 国开2023年春《人文英语4》机考网考期末复习资料参考答案
- DB3716-T 27-2023乡镇级应急物资配备指南
- 员工食堂承包合同、考核细则、考核评分表
- SnO2材料气敏性能研究进展
评论
0/150
提交评论