




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 第12章 嵌入式Linux软件设计 共五十七页12.1 移植(yzh)的基本概念广义上讲移植包括软件移植和硬件移植。从狭义上讲,移植就是指软件移植,即将一个软件从一个平台迁移到另一个与其不同的平台上工作。通常情况(qngkung)下,移植分为以下3种情况(qngkung)。1、从一个硬件平台移植到另一个硬件平台2、从一个操作系统移植到另一个操作系统3、从一种软件库环境移植到另一种软件库环境 共五十七页12.2 Bootloader的移植(yzh) Bootloader是操作系统和硬件的纽带。它负责初始化硬件,引导操作系统内核,检测各种参数给操作系统内核使用。一个功能完备的大型Bootload
2、er,就相当于一个小型的操作系统。在嵌入式领域中,操作系统移植的关键在于Bootloader的移植以及操作系统内核与硬件相关(xinggun)部分的移植。 共五十七页12.2.1 关键文件(wnjin)的修改1. vivi顶层Makefile文件的修改vivi作为Linux系统的启动代码,在编译配置时需要(xyo)用到函数库包括交叉编译器库和头文件,交叉编译开关选项设置,还包括Linux内核代码中的库和头文件通常需要修改vivi工程管理文件Makefile。共五十七页2.vivi中与硬件相关的初始化与具体运行在哪一个处理器平台(pngti)上相关的文件都存放在vivi/arch/目录下系统使用
3、S3C2410 x处理器,对应的目录为s3c2410其中head.s文件是vivi启动配置代码,加电复位运行的代码就是从这里开始的。 共五十七页3.对不同Flash启动的修改vivi能从Nor Flash或Nand Flash启动启动程序、Linux内核及根文件系统,甚至包括图形用户界面都需要存放在Nor Flash或Nand Flash中。4.内核启动参数设置经过(jnggu)修改后,S3C2410 x开发板能从Nand Flash中启动运行Linux,也能从Nor Flash中启动,所以相应地也要修改启动命令 。共五十七页5. Flash驱动的实现移植vivi的最后一步就是实现Flash驱
4、动程序员需要根据自己系统中具体Flash芯片的型号(xngho)及配置来修改驱动程序,使Flash设备能够在嵌入式系统中正常工作。 共五十七页12.2.2 串口设置(shzh)示例串口作为一种常用的通信方式,在嵌入式开发中起到极其重要的作用(zuyng)几乎所有的嵌入式设备都提供了串口的支持,并且都在Bootloader中就给出了支持为下一步开发提供方便,比如操作系统内、文件系统等下载等。 共五十七页对vivi而言,串口的初始化是在vivi初始化的第一个阶段进行具体(jt)是在arch/s3c2410 /head.s文件中设置一般串口波特率设置为115200Buad。若希望波特率设置为1152
5、00,而PCLK又等于40MHz,那么UBRDIVn就应该设置为:UBRDIVn= (int)(40000000/(11520016) ) 1 =(int)(21.7)-1 =20其中,PCLK=50700000,UBRDIV0的值向下取整。 共五十七页12.2.3 Bootloader的交叉(jioch)编译修改vivi目录下的Makefile文件,将其中的编译器由 gcc改为交叉编译器arm-linux-gcc。使用make命令(mng lng),根据Makefile文件自动完成整个编译。编译完成后,系统将自动在vivi的根目录下生成一个名为“vivi” 的二进制目标文件,用于下载到嵌入式
6、目标设备的Flash中。共五十七页12.2.4 Bootloader的下载(xi zi)Bootloader的下载(又叫做(jiozu)烧录)利用JTAG口进行。操作平台可以是Windows或桌面Linux,只是两者用的工具软件不同而已。以Windows操作平台及sjf2410工具软件为例进行介绍。在下载之前,需要将生成的可执行文件从桌面Linux下转移到Windows的某个目录下(如 d:vivi)。共五十七页 利用Jflash线将PC机和嵌入式目标板的JTAG口正确连接。 启动sjf服务,安装giveio.sys驱动。打开sjf目录下的loaddrv.exe,将弹出LoadDrv窗口. 然
7、后再依次点击install 和start按钮, 就会提示“service already runing”,也就是驱动已经安装成功. 在DOS环境下手动运行sjf2410命令(mng lng):sjf2410 /f: vivi,其中“/f:是”参数而不是目录. vivi下载成功后,用串口将PC和嵌入式目标板连接起来,并启动Windows中的超级终端.共五十七页12.3 嵌入式Linux内核(ni h)的移植内核是嵌入式Linux系统(xtng)的核心部分。Linux与Windows不同,其内核和文件系统、图形用 户系统(GUI窗口系统)可以分开。它们的开发、移植、下载甚至运行都是可以分开的。共五
8、十七页内核(ni h)移植是一个比较复杂的任务,也是嵌入式系统开发中非常重要的一个过程。内核移植一般包括3大步骤内核配置内核编译内核下载共五十七页12.3.1 内核移植(yzh)的准备 准备好编译内核的编译器即交叉编译工具(gngj)链从相关的网站()下载要移植的内核源代码(基本上都是C语言编写) 。共五十七页12.3.2 关键文件(wnjin)的修改1. 设置目标平台和指定交叉编译器在源代码的最上层根目录下的Makefile文件中,指定所移植的硬件平台,以及所使用的交叉编译器。 2. arch/arm目录下Makefile 修改内核系统的启动(qdng)代码是通过此文件产生的。 共五十七页3
9、. arch/arm目录下Config.in 修改 Config.in文件是用来设置后面介绍的menuconfig配置菜单的,它们是一一对应关系。 这里把嵌入式目标板的CPU平台加在相应的地方,这样(zhyng)在配置Linux内核时就能够选择是否支持该平台了 4. arch/arm/boot目录下Makefile 修改 编译出来的内核存放在该目录下。 用来指定内核解压到实际硬件内存系统中的物理地址。 一般如果内核无法正常启动,很可能是这里的地址设置不正确。共五十七页5. arch/arm/boot/compressed目录下 Makefile 修改(xigi) 该文件从vmlinux中创建一
10、个压缩的vmlinuz镜像文件 该文件中用到的SYSTEM、ZTEXTADDR、ZBSSADDR、和ZRELADDR是从arch/arm/boot/Makefile文件中得到的。 6. arch/arm/boot/compressed目录下 添加head-s3c2410.s共五十七页7. arch/arm/def-configs目录 这里定义(dngy)了一些平台的config文件,比如lart和assert等。把配置好的S3C2410的配置文件复制到这里即可。8. arch/arm/kernel目录下Makefile 修改 该文件主要用来确定文件类型的依赖关系。共五十七页9. arch/ar
11、m/kernel目录下的文件 debug-armv.s 修改 在该文件中添加如下代码,目的是关闭(gunb)外围设备的时钟,以保证系统正常运行。 10. arch/arm/kernel目录下的文件 entry-armv.s 修改 在适当的地方加入如下代码,此为CPU初始化时的处理中断的汇编代码。共五十七页11. arch/arm/mm目录下的相关文件 此目录下的文件是和ARM平台相关的内存管理内容,只有mm-armv.c文件需要移植。12. arch/arm/mach-s3c2410目录下的相关文件 这个目录在2.4.18版本的内核中是不存在的,但在高版本中已经添加(tin ji)了对这款处理
12、器的支持。 不过发布的内核只是对处理器的基本信息提供支持,有关开发板的外设 。共五十七页12.3.3 内核(ni h)的配置与裁剪配置内核与裁剪是移植内核过程中很重要的一步,也是非常复杂的一步,配置时一定要小心,否则操作系统将无法运行。配置内核的目的:裁剪掉不必要的文件(wnjin)和目录获得一个最简的、又能满足用户开发的操作系统以解除嵌入式开发过程中所遇到的存储空间有限的困扰。共五十七页 通常有4种主要的配置内核的方法(fngf)。 1. make config(命令行) 2. make oldconfig (使用已有的配置文件,提示之前没有配置的选项) 3. make menuconfig
13、(基于文本的菜单) 4. make xconfig (基于X窗口的配置菜单)共五十七页1、启动内核配置窗口进入(jnr)被配置内核的目录,如/arm/kernel输入make menuconfig打开内核配置窗口2、配置内核使用SPACE键选中或取消对某项的选择,*表示被选中。3、保存配置共五十七页12.3.4 内核(ni h)的编译编译内核几个步骤:一是清除以前编译通过(tnggu)的残留文件;二是编译内核image文件和可加载模块;三是安装模块。共五十七页在编译内核之前,可先参考内核目录下的README文件和Documentation/Changes文件:README文件说明安装(nzhu
14、ng)内核的方法;Changes文件说明编译和运行内核需要的最低工具软件列表。 共五十七页具体介绍编译(biny)内核的基本步骤 make dep (该命令用在内核2.4或之前) 用于建立源文件之间的依赖关系 在执行(zhxng)内核配置命令之后使用。 make clean (这个步骤是可选的)用于删除前面留下来的中间文件不会删除.config等配置文件 make zImage用于编译生成压缩形式的内核映象编译成功后,在archarmboot目录下生成zImage文件 .共五十七页 make modules如果在配置菜单的过程中,有些选项被选择为模块的,即选项前为M并且(bngqi)在回答En
15、able loadable module support(CONFIG_MODULES)时选了“Yes”用命令make modules来编译这些可加载模块用make modules_install 将make modules 生成的模块文件复制到到相应目录。 如果是直接升级PC桌面Linux系统的内核,那么接下来还要用make install来安装新内核。 共五十七页12.3.5 内核(ni h)的下载进入vivi控制台连好串口线,启动超级终端(波特率为115200),在开机的瞬间快速的按空格键(不能是回车键)向flash芯片中烧写 kernel 在vivi命令行上输入:load flash
16、kernel x含义:向flash芯片中烧写 kernel,采用xmodem协议。回车后会提示等待。 选择要发送的文件比如(br)zImage文件,这里Linux环境下源代码arch/arm/boot目录下的zImage内核映像文件已转移到windows 的某个目录下。共五十七页12.4 嵌入式Linux文件系统的移植(yzh)文件系统是Linux/UNIX系统的一个重要组成部分。也是操作系统正常工作时的必要组成部分。在启动时内核需要根文件系统来挂载和组织文件。内核代码映像文件保存在根文件系统中。系统引导启动程序会从这个根文件系统设备上把内核执行代码加载到内存(ni cn)中去运行。共五十七页
17、在Linux 中,用户(yngh)能看到的文件空间是用一个单树状结构来组织的。根文件系统的最顶层称为root其下的每一个目录都有其具体的目的和用途常见的根文件系统有Romfs、JFFS2、NFS、ext2、RamDisk、cramfs等 。共五十七页12.5 Linux下设备(shbi)驱动程序的开发Linux驱动开发(kif)是嵌入式软件设计中的主要内容。也是嵌入式Linux移植中工作量最大的部分。共五十七页这里主要概述:Linux设备驱动框架驱动程序的组成(z chn)常用的加载驱动程序的方法通过实例来详细介绍字符设备驱动程序的开发过程。 共五十七页12.5.1 驱动程序概述(i sh)设
18、备驱动程序是应用程序与硬件之间的一个中间软件层。可以看作(kn zu)是一个硬件抽象层。为应用程序屏蔽了硬件的细节。共五十七页在应用程序看来,硬件设备只是一个设备文件(wnjin)。 应用程序可以像操作普通文件一样对硬件设备进行操作。在操作系统看来,设备驱动程序是内核的一部分。 它主要实现的功能有: 对设备进行初始化和释放; 把数据从内核传送到硬件和从硬件读取数据; 读取应用程序传送给设备文件的数据 回送应用程序请求的数据 检测和处理设备出现的错误。共五十七页1. 设备(shbi)类型分类 在Linux操作系统下有3类主要的设备(shbi)类型:字符设备块设备网络设备共五十七页3类主要(zhy
19、o)的设备类型(1) 字符设备(shbi)字符设备(char device)和普通文件之间有主要的区别:普通文件可以来回读/写,而大多数字符设备仅仅是数据通道,只能顺序读/写。 (2)块设备 块设备(block device)是文件系统的物质基础,它也支持像文件一样被访问。 (3)网络设备网络设备是一个物理设备,如以太网卡,但软件也可以作为网络设备,典型的是回送设备(loopback)。 字符设备和块设备的主要区别在于是否使用了缓冲技术。共五十七页2. 设备(shbi)驱动与文件系统的关系Linux通过设备文件系统对设备进行管理。设备都以文件的形式存放在/dev目录下,称为“设备文件”。应用程
20、序可以像普通文件一样(yyng)打开、关闭和读/写这些设备文件。为了管理这些设备,系统为设备编了号,每个设备号又分为主设备号和次设备号。 (p396数据结构)共五十七页12.5.2 重要(zhngyo)的数据结构和函数1. 设备(shbi)驱动中关键数据结构设备驱动程序提供的这组入口点由几个结构向系统进行说明,是:file_operations数据结构inode数据结构file数据结构(P397)2. 设备驱动开发中的基本函数设备驱动程序所提供的入口点,在设备驱动程序初始化的时候向系统进行说明,以便系统在适当的时候调用。初始化部分一般还负责为设备驱动程序申请系统资源,包括内存、中断、时钟、I/
21、O端口等(这些资源也可以在open子程序或别的地方申请)在这些资源不用的时候,应该释放它们,以利于资源的共享。 共五十七页(1)设备注册函数(2)内存(ni cn)操作函数 (3)中断申请和释放函数 (4) I/O端口操作函数 共五十七页12.5.3 字符设备(shbi)驱动程序的组成 设备驱动程序作为内核的一部分它完成的功能包括:对设备初始化和释放(shfng);把数据从内核传送到硬件并从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。 共五十七页1. 驱动程序的注册和注销设备驱动程序通过命令insmod以模块的方式动态加载后入口点是init
22、 _module 函数或宏 mdolue init 。 2. 设备操作在设备成功注册之后,就可对它进行打开、读写、控制和释放等操作。在Linux内核中,字符设备使用(shyng)fie_operations结构来定义设备的各种操作集合。 共五十七页3. 驱动程序的中断处理(chl)在实际的系统中,设备的许多工作通常与处理器不同步,而且总比处理器慢。在设备准备好后通知处理器来进行处理,这种方法就是中断。由于系统的中断资源有限驱动程序在使用中断前需要申请,使用完后需要释放。Linux中,中断的申请和释放分别是通过 request_irq()函数和free_irq()函数来实现的。共五十七页12.5
23、.4 动态(dngti)和静态加载方式Linux设备驱动模块(m kui)属于内核的一部分可以用静态和动态两种方式来进行编译和加载两者方式的开发过程稍有不同,也各有特点。共五十七页1. 静态(jngti)加载方式(1)特点静态方式就是将驱动程序的源代码事前放到内核源代码中,和整个内核一起编译。它需要修改内核源代码和文件系统,并重新烧录下载到嵌入式设备中,这样(zhyng)当内核启动时就会加载驱动程序。 (2)内核的修改设备驱动程序写完后,就可以将文件加到linux的内核中了。 共五十七页(3)文件系统的修改在内核中加上驱动程序后,还不能直接在应用程序中使用驱动程序中的函数,如open,clos
24、e等.因为还需要在文件系统中提供设备访问(fngwn)接口,也就是/dev/目录下的设备名与设备号。共五十七页2. 动态(dngti)加载方式(1)特点动态加载方式就是说将驱动程序编译成一个可加载、卸载(xi zi)的模块目标文件,然后添加到内核中去即可。这种方法的好处就是通过将于内核中一些不常用的驱动采取动态加载方式,从而可以减少内核的大小模块被插入内核后,它就和内核其他部分一样可方便的被使用。 共五十七页(2)驱动程序添加到内核中对于动态驱动程序的源代码,其初始化函数和静态方式的定义不同。要用这样一些(yxi)函数:int _init device_init (void);void _ex
25、it device_exit(void);module_init(device _init);module_exit(device_exit)。 (3)文件系统下设备名的创建驱动添加安装好后,还需要修改文件系统共五十七页12.6 应用(yngyng)程序开发在Windows环境中,开发者习惯使用各种功能强大的集成编译开发环境(IDE),完成程序编辑、编译后,直接运行即可。基于嵌入式Linux的应用程序开发过程中,目前还缺乏比较简单、高效的开发工具和手段。应用程序最终运行平台是嵌入式目标系统,而程序开发与调试又仍然需要借助PC平台的桌面系统来完成在程序的开发与调试过程中,需要频繁地将目标文件从桌
26、面Linux系统中加载到嵌入式目标设备(shbi)中,这是一个相对比较耗时的过程。 共五十七页12.6.1 应用程序的加载方式(fngsh)在桌面Linux上编辑源文件交叉编译(biny)生成ELF可执行文件后将生成的可执行文件加载到嵌入式目标系统上运行。程序加载有多种方式,最为常见的方式有:U盘拷贝FTP下载NFS挂载方式共五十七页12.6.2 应用程序的GDB/GDBSERVER联机(lin j)调试嵌入式Linux的联机环境下,常用的调试代理工具为GDBSERVER。它是一个轻量级的调试器,运行在目标机上与运行在主机(zhj)上的GDB通过RSP(Remote Serial Protoco1)协议进行通讯从而完成远程联机调试工作。共五十七页1. GDB/GDBSERVER调试模型主机和目标机之间使用串口或者网络作为通信的通道.2. RSP通讯协议RSP协议将GDBGDBSERVER间通讯的内容看做(kn zu)是数据包。数据包的内容都使用ASCII字符。每一个数据包都遵循这样的格式:$调试信息 接受方在收到数据包之后,对数据包进行校验,若正确回应“+”,反之回应 。共五十七页3. 调试步骤(1)交叉编译被调试程序文件(wnjin)。 (2)运行嵌入式目标机中的GDBSERVER 并加载被调试程序文件
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 项目建设过程中进度与质量控制沟通方案
- 市区排水管网混错接改造工程建筑工程方案
- 光伏电站绿色能源管理方案
- 住宅项目楼宇外部施工与装饰整修方案
- 中华传统文化融人幼儿艺术教育研究
- 边缘区域绿色低碳设计方案
- 智能制造展厅数字化展品展示方案
- 高中英语读后续写教学中思维可视化工具的应用分析
- 高管薪酬差距对企业社会责任履行的影响
- 显示设备安装与调试方案
- 招标代理员工合同
- 语言:轰隆隆来了
- 白云区五年级上学期语文期末试卷
- 深度学习技术基础与实践 课件 第1-3章 深度学习概述、深度学习原理、深度学习框架介绍
- 二十四节气与我们的生活
- 护士在公共卫生应急响应中的作用和责任
- 报名统计表格
- 上海初中毕业生综合素质评价表资料
- 软件系统上线试运行申请表方(仅用于个人学习的参考模板)
- 高考作文之成人高考高升专英语作文
- 特许经营管理手册范本(餐饮)
评论
0/150
提交评论