[工学]第10章 嵌入式系统设计linux开发

上传人:tia****nde 文档编号:70513733 上传时间:2019-01-17 格式:PPT 页数:47 大小:495.31KB
返回 下载 相关 举报
[工学]第10章 嵌入式系统设计linux开发_第1页
第1页 / 共47页
[工学]第10章 嵌入式系统设计linux开发_第2页
第2页 / 共47页
[工学]第10章 嵌入式系统设计linux开发_第3页
第3页 / 共47页
[工学]第10章 嵌入式系统设计linux开发_第4页
第4页 / 共47页
[工学]第10章 嵌入式系统设计linux开发_第5页
第5页 / 共47页
点击查看更多>>
资源描述

《[工学]第10章 嵌入式系统设计linux开发》由会员分享,可在线阅读,更多相关《[工学]第10章 嵌入式系统设计linux开发(47页珍藏版)》请在金锄头文库上搜索。

1、嵌入式Linux的开发,开发步骤 构建合适的开发环境 开发或者移植BootLoader 构建适合的Linux系统 开发必须的驱动程序 开发应用程序 开发具有图形界面的应用程序,开发环境的构建,开发环境的建立通常包含一下几个步骤: (1)建立装有Linux操作系统的开发主机, (2)安装C/C+语言的编译器,交叉编译器, (3)配制串口通信工具, (4)配制网络通信工具。 (5)建立Windows环境下的开发工具。,开发环境的构建,安装Linux操作系统注意点 建议用户在安装到软件配置时,选者“定制”。在“选择软件包组”界面时,全部 VMWare安装Linux 关闭防火墙,利用VMWare 安装

2、 Linux,VMWare是一个“虚拟机”软件。它可以在一台计算机上虚拟出多台计算机,用户可以把这些虚拟机作为一台真正的计算机,来安装自己需要的操作系统。利用VMWare软件,我们可以在Windows的环境下,虚拟出来一台计算机,把这台虚拟机作为开发主机,来安装Linux操作系统。,开发环境的构建,TFTP 服务的配置 NFS服务的配置,TFTP 服务的配置,TFTP(Trivial File Transfer Protocol:简单文件传输协议)是一种用来传输文件的简单协议,运行在 UDP (用户数据报协议)上。TFTP 的设计非常简单,它缺乏标准 FTP 协议的许多特征。 TFTP 只能从

3、远程服务器上读、写文件(邮件)或者读、写文件传送给远程服务器,它不能列出目录并且当前不提供用户认证。由于TFTP的实现比ftp简单的多,因此其在嵌入式系统的开发中被广泛使用,它也通常作为BootLoader中的一个基本功能被使用。,NFS服务的配置,网络文件系统(NFS)最早由Sun公司为实现TCPIP网上的文件共享而开发。NFS是一个RPC服务,它可以在不同的系统间使用,其通讯协议的设计与主机及操作系统无关。当使用者想用远端文件时只要用“mount”就可把远端主机的文件系统挂接在自己的文件系统下,在嵌入式系统开发中也通常使用NFS服务来实现文件的传递 。,BootLoader的开发,Boot

4、Loader是用来完成系统启动和系统软件加载工作的程序。它是底层硬件和上层应用软件之间的一个中间软件,其特点是: 完成处理器和周边电路正常运行所要的初始化工作; 可以屏蔽底层硬件的差异,使上层应用软件的编写和移植更加方便; 不仅具有类似PC机上常用的BIOS(Basic Input Output System,基本输入、输出系统监控程序)功能,而且还可具有一定的调试、下载、网络更新等功能。,配置开发工具,安装交叉编译器 在Linux操作系统安装完成之后,会得到GCC开发工具,GCC是GNU 的C/C+ 编译器,它是Linux 中最重要的软件开发工具。实际上,GCC能够编译三种语言:C、C+ 和

5、 ObjectC(C语言的一种面向对象扩展)。利用GCC命令可同时编译并连接C和C+ 源程序。然而开发主机上的的GCC是x86架构的处理器的,即用GCC编译的程序只能在Intel的x86结构的CPU上运行,而对于嵌入式系统开发而言,需要编译出来的程序能够在目标系统的CPU上运行(例如Arm),这就需要构建交叉编译器。交叉编译器是嵌入式系统开发的基本工具,其应用非常广泛,在编译任何目标机上的执行程序的时候,例如应用程序、操作系统、库文件等,就会需要交叉编译器。 通常,交叉编译器是通过对普通的GCC编译器进行改造而得到的,因此,大多数交叉编译器的名称中都含有“gcc”这个关键词,诸如“xxx-xx

6、x-gcc”之类。例如,For Arm处理器的交叉编译器的名称大多为“arm-elf-gcc”、“arm-linux-gcc”或者“arm-elf-linux-gcc”等。,配置开发工具,安装交叉编译器 用户基于GCC编译器的源码构建一个全新的交叉编译器会十分麻烦,幸运的是,很多嵌入式处理器的厂商都提供一个工具包(即BSP),其中会包含交叉编译器的构建工具,只要运行安装其中的相应脚本就可以构建需要的交叉编译器,使用起来非常方便。例如在使用Motorola的MX1(处理器为M9328)开发系统时,可以使用其BSP中的交叉编译工具软件包来构建交叉编译器。具体如下: (1)复制光盘中BSP目录的“a

7、rmLinuxXToolChain.tar.gz“ 到目录“/usr/local“ (2)运行“tar -zxvf armLinuxXToolChain.tar.gz“ (3)开发工具安装完成,一个名为“arm-elf-linux-gcc”交叉编译器就建立了。,配置开发工具,使用串口调试工具 在Windows中经常用到的串口调试工具是超级终端,在Linux中也有一个类似的工具就是minicom。 minicom 是安装RedHat 时安装的软件,minicom中所有的操作都以ctrl+A开始,例如:退出为ctrl+A,松手后再按下Q,则弹出如下一个小框, 选Yes 即可退出minicom。 m

8、inicom具体使用参加课本,BootLoader的开发,BootLoader是用来完成系统启动和系统软件加载工作的程序。它是底层硬件和上层应用软件之间的一个中间软件,其特点是: 完成处理器和周边电路正常运行所要的初始化工作; 可以屏蔽底层硬件的差异,使上层应用软件的编写和移植更加方便; 不仅具有类似PC机上BIOS(Basic Input Output System,基本输入、输出系统) 监控程序的功能,而且还可具有一定的通信、调试、网络更新等功能。,BootLoader的开发,BootLoader程序与系统的操作系统、CPU型号、内存的大小和具体芯片、硬件设计都有关系。每种不同的CPU 体

9、系结构都有不同的Boot Loader。除了依赖于CPU的体系结构外,BootLoader 实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式开发板而言,即使它们是基于同一种CPU构建的, BootLoader通常也不能直接通用。 开发一个全新的BootLoader是困难的,幸运的是,现在有很多成熟的BootLoader可以被选择,例如U-Boot、RedBoot、dBUG等。基于这些成熟的BootLoader,我们所讲的BootLoader的开发工作其实就可以简化为BootLoader的移植工作。,BootLoader的基本知识,BootLoader 的安装位置,Boo

10、tLoader的基本知识,BootLoader的控制与通信 开发主机和目标机之间一般通过串口建立连接,为了使用者能够清晰掌握BootLoader的启动过程,在BootLoader运行之后,它将通过目标机的串行口把启动信息送到开发主机得串行口,并且从串口读取用户控制信息,接收控制。,BootLoader的基本知识,BootLoader 的操作模式 大多数BootLoader都包含两种不同的操作模式:“启动加载“模式和“下载“模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader 的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。,BootLo

11、ader的基本知识,BootLoader与主机之间文件传输协议 最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输协议通常是xmodemymodemzmodem协议中的一种。但是,由于串口传输的速度较低,在很多BootLoader中支持采用TCP/IP网络来出传递数据,例如常用的基石采用TFTP 协议或者NFS服务来传递文件。,BootLoader的开发过程,由于BootLoader的实现依赖于系统的硬件结构,不同结构的系统平台将需要不同的BootLoader,为了便于BootLoader的移植工作,大多数BootLoader都分为stage1和stage2两

12、大部分。stage1中一般放置依赖于CPU体系结构的代码,比如设备初始化代码等,这些代码通常由汇编语言和C语言共同实现,以达到短小精悍的目的。而 stage2则放置与系统平台无关的代码,例如TFTP协议,这些代码通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。用户在把BootLoader移植到不同的嵌入式硬件平台时,仅需修改stage1的代码即可。,BootLoader的移植,前面已经提到,开发一个全新的BootLoader是困难的,幸运的是,现在有很多成熟的BootLoader可以被选择,我们所讲的BootLoader的开发工作其实可以简化为BootLoa

13、der的移植工作。,Linux系统的构建,一个可以运行的Linux系统要包含包含两个方面,一是Linux内核,二是根文件系统。 单独的Linux内核是不能工作的,还需要其它应用程序的配合。这些应用程序存放在根文件系统中,因此Linux系统的构建出了构建Linux内核之外,还要构建根文件系统。,Linux系统的构建,Linux系统的构建步骤 配置内核 编译内核 安装、测试内核,Linux内核的构建,Linux内核的配置 make config 基于文本的最为传统的配置界面,不推荐使用 。 make menuconfig是基于文本选单的配置界面,一般在字符终端下推荐使用。 make xconfig

14、 基于图形窗口模式的配置界面,Xwindow下推荐使用。 make oldconfig 在原来内核配置的基础上修改一些小地方,会省去不少麻烦,Linux内核的配置,在内核配置时,一般会有三种选择:Y、N和M,其分别代表的含义如下: Y将该功能编译进内核。 N不将该功能编译进内核。 M将该功能编译成模块,可以在需要时动态插入到内核中。,Linux内核的配置,SCSI设备的支持。 注意:如果是在VMware下面测试新内核,必须要把SCSI的支持加上,这是由于vmware虚拟出来的硬盘是scsi的。如果新内核不支持SCSI,内核启动是将会出现类似下面的错误 VFS:cannot open root

15、device “sda2“ or 08:02 Please append a correct root “root=“ boot option kernel panic : VFS: unable to mount root fs on 08:02 具体需要选择支持的SCSI的内容如下: (A)Device Drivers -SCSI device support - SCSI disk support (默认支持的) (B)Device Drivers -SCSI device support -SCSI low-level drivers - BusLogic SCSI support(默

16、认不支持的,一定要选上),Linux内核的构建,Linux内核的编译 (1)make dep (2)make clean (3)make zImage (注意I是大写) (4)make bzImage (注意I是大写) (5)make modules (6)make modules_install (7)make install,新内核的测试,利用Grub进行测试 具体参考教材199页,模块的加载,在内核配置中,许多驱动的支持是被设置为模块进行编译的,这些被编译好的模块可以由内核自动加载,也可以由用户加载。一般的,这些编译好的模块位于“/lib/modules/2.4.20-8/kernel/drivers/”目录下。 加载这些模块可以使用insmod或modprobe命令,modprobe命令除了加载制定的模块之外,还会加载和本模块相关的其它模块,因此建议使用modprobe命令代替insmod命令。 例如,我们在linux下使用USB to RS232的转接器。USB to RS232转接器使用的芯片型号是pl2303,则可以运行以下命令: Modpr

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号