您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第10章嵌入式Linux的开发
主要内容Linux的诞生Linux相关概念Linux的组成及其版本Linux的特点嵌入式Linux的概念嵌入式Linux操作系统介绍嵌入式Linux的开发开发步骤构建合适的开发环境开发或者移植BootLoader构建适合的Linux系统开发必须的驱动程序开发应用程序开发具有图形界面的应用程序开发环境的构建开发环境的建立通常包含一下几个步骤:(1)建立装有Linux操作系统的开发主机,(2)安装C/C++语言的编译器,交叉编译器,(3)配制串口通信工具,(4)配制网络通信工具。(5)建立Windows环境下的开发工具。开发环境的构建安装Linux操作系统注意点建议用户在安装到软件配置时,选者“定制”。在“选择软件包组”界面时,[全部]VMWare安装Linux关闭防火墙利用VMWare安装LinuxVMWare是一个“虚拟机”软件。它可以在一台计算机上虚拟出多台计算机,用户可以把这些虚拟机作为一台真正的计算机,来安装自己需要的操作系统。利用VMWare软件,我们可以在Windows的环境下,虚拟出来一台计算机,把这台虚拟机作为开发主机,来安装Linux操作系统。开发环境的构建TFTP服务的配置NFS服务的配置TFTP服务的配置TFTP(TrivialFileTransferProtocol:简单文件传输协议)是一种用来传输文件的简单协议,运行在UDP(用户数据报协议)上。TFTP的设计非常简单,它缺乏标准FTP协议的许多特征。TFTP只能从远程服务器上读、写文件(邮件)或者读、写文件传送给远程服务器,它不能列出目录并且当前不提供用户认证。由于TFTP的实现比ftp简单的多,因此其在嵌入式系统的开发中被广泛使用,它也通常作为BootLoader中的一个基本功能被使用。NFS服务的配置网络文件系统(NFS)最早由Sun公司为实现TCP/IP网上的文件共享而开发。NFS是一个RPC服务,它可以在不同的系统间使用,其通讯协议的设计与主机及操作系统无关。当使用者想用远端文件时只要用“mount”就可把远端主机的文件系统挂接在自己的文件系统下,在嵌入式系统开发中也通常使用NFS服务来实现文件的传递。BootLoader的开发BootLoader是用来完成系统启动和系统软件加载工作的程序。它是底层硬件和上层应用软件之间的一个中间软件,其特点是:完成处理器和周边电路正常运行所要的初始化工作;可以屏蔽底层硬件的差异,使上层应用软件的编写和移植更加方便;不仅具有类似PC机上常用的BIOS(BasicInputOutputSystem,基本输入、输出系统监控程序)功能,而且还可具有一定的调试、下载、网络更新等功能。配置开发工具安装交叉编译器在Linux操作系统安装完成之后,会得到GCC开发工具,GCC是GNU的C/C++编译器,它是Linux中最重要的软件开发工具。实际上,GCC能够编译三种语言:C、C++和ObjectC(C语言的一种面向对象扩展)。利用GCC命令可同时编译并连接C和C++源程序。然而开发主机上的的GCC是x86架构的处理器的,即用GCC编译的程序只能在Intel的x86结构的CPU上运行,而对于嵌入式系统开发而言,需要编译出来的程序能够在目标系统的CPU上运行(例如Arm),这就需要构建交叉编译器。交叉编译器是嵌入式系统开发的基本工具,其应用非常广泛,在编译任何目标机上的执行程序的时候,例如应用程序、操作系统、库文件等,就会需要交叉编译器。通常,交叉编译器是通过对普通的GCC编译器进行改造而得到的,因此,大多数交叉编译器的名称中都含有“gcc”这个关键词,诸如“xxx-xxx-gcc”之类。例如,ForArm处理器的交叉编译器的名称大多为“arm-elf-gcc”、“arm-linux-gcc”或者“arm-elf-linux-gcc”等。配置开发工具安装交叉编译器用户基于GCC编译器的源码构建一个全新的交叉编译器会十分麻烦,幸运的是,很多嵌入式处理器的厂商都提供一个工具包(即BSP),其中会包含交叉编译器的构建工具,只要运行安装其中的相应脚本就可以构建需要的交叉编译器,使用起来非常方便。例如在使用Motorola的MX1(处理器为M9328)开发系统时,可以使用其BSP中的交叉编译工具软件包来构建交叉编译器。具体如下:(1)复制光盘中BSP目录的armLinuxXToolChain.tar.gz到目录/usr/local(2)运行tar-zxvfarmLinuxXToolChain.tar.gz(3)开发工具安装完成,一个名为“arm-elf-linux-gcc”交叉编译器就建立了。配置开发工具使用串口调试工具在Windows中经常用到的串口调试工具是超级终端,在Linux中也有一个类似的工具就是minicom。minicom是安装RedHat时安装的软件,minicom中所有的操作都以ctrl+A开始,例如:退出为ctrl+A,松手后再按下Q,则弹出如下一个小框,选Yes即可退出minicom。minicom具体使用参加课本BootLoader的开发BootLoader是用来完成系统启动和系统软件加载工作的程序。它是底层硬件和上层应用软件之间的一个中间软件,其特点是:完成处理器和周边电路正常运行所要的初始化工作;可以屏蔽底层硬件的差异,使上层应用软件的编写和移植更加方便;不仅具有类似PC机上BIOS(BasicInputOutputSystem,基本输入、输出系统)监控程序的功能,而且还可具有一定的通信、调试、网络更新等功能。BootLoader的开发BootLoader程序与系统的操作系统、CPU型号、内存的大小和具体芯片、硬件设计都有关系。每种不同的CPU体系结构都有不同的BootLoader。除了依赖于CPU的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。也就是说,对于两块不同的嵌入式开发板而言,即使它们是基于同一种CPU构建的,BootLoader通常也不能直接通用。开发一个全新的BootLoader是困难的,幸运的是,现在有很多成熟的BootLoader可以被选择,例如U-Boot、RedBoot、dBUG等。基于这些成熟的BootLoader,我们所讲的BootLoader的开发工作其实就可以简化为BootLoader的移植工作。BootLoader的基本知识BootLoader的安装位置BootLoader的基本知识BootLoader的控制与通信开发主机和目标机之间一般通过串口建立连接,为了使用者能够清晰掌握BootLoader的启动过程,在BootLoader运行之后,它将通过目标机的串行口把启动信息送到开发主机得串行口,并且从串口读取用户控制信息,接收控制。BootLoader的基本知识BootLoader的操作模式大多数BootLoader都包含两种不同的操作模式:启动加载模式和下载模式,这种区别仅对于开发人员才有意义。但从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。BootLoader的基本知识BootLoader与主机之间文件传输协议最常见的情况就是,目标机上的BootLoader通过串口与主机之间进行文件传输,传输协议通常是xmodem/ymodem/zmodem协议中的一种。但是,由于串口传输的速度较低,在很多BootLoader中支持采用TCP/IP网络来出传递数据,例如常用的基石采用TFTP协议或者NFS服务来传递文件。BootLoader的开发过程由于BootLoader的实现依赖于系统的硬件结构,不同结构的系统平台将需要不同的BootLoader,为了便于BootLoader的移植工作,大多数BootLoader都分为stage1和stage2两大部分。stage1中一般放置依赖于CPU体系结构的代码,比如设备初始化代码等,这些代码通常由汇编语言和C语言共同实现,以达到短小精悍的目的。而stage2则放置与系统平台无关的代码,例如TFTP协议,这些代码通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。用户在把BootLoader移植到不同的嵌入式硬件平台时,仅需修改stage1的代码即可。BootLoader的移植前面已经提到,开发一个全新的BootLoader是困难的,幸运的是,现在有很多成熟的BootLoader可以被选择,我们所讲的BootLoader的开发工作其实可以简化为BootLoader的移植工作。Linux系统的构建一个可以运行的Linux系统要包含包含两个方面,一是Linux内核,二是根文件系统。单独的Linux内核是不能工作的,还需要其它应用程序的配合。这些应用程序存放在根文件系统中,因此Linux系统的构建出了构建Linux内核之外,还要构建根文件系统。Linux系统的构建Linux系统的构建步骤配置内核编译内核安装、测试内核Linux内核的构建Linux内核的配置makeconfig基于文本的最为传统的配置界面,不推荐使用。makemenuconfig是基于文本选单的配置界面,一般在字符终端下推荐使用。makexconfig基于图形窗口模式的配置界面,Xwindow下推荐使用。makeoldconfig在原来内核配置的基础上修改一些小地方,会省去不少麻烦Linux内核的配置在内核配置时,一般会有三种选择:Y、N和M,其分别代表的含义如下:Y-将该功能编译进内核。N-不将该功能编译进内核。M-将该功能编译成模块,可以在需要时动态插入到内核中。Linux内核的配置SCSI设备的支持。注意:如果是在VMware下面测试新内核,必须要把SCSI的支持加上,这是由于vmware虚拟出来的硬盘是scsi的。如果新内核不支持SCSI,内核启动是将会出现类似下面的错误VFS:cannotopenrootdevicesda2or08:02Pleaseappendacorrectrootroot=bootoptionkernelpanic:VFS:unabletomountrootfson08:02具体需要选择支持的SCSI的内容如下:(A)DeviceDrivers-SCSIdevicesupport---*SCSIdisksupport(默认支持的)(B)DeviceDrivers-SCSIdevicesupport---SCSIlow-leveldrivers---BusLogicSCSIsupport(默认不支持的,一定要选上)Linux内核的构建Linux内核的编译(1)makedep(2)makeclean(3)makezImage(注意I是大写)(4)makebzImage(注意I是大写)(5)makemodules(6)makemodules_install(7)makeinstall新内核的测试利用Grub进行测试具体参考教材199页模块的加载在内核配置中,许多驱动的支持是被设置为模块进行编译的,这些被编译好的模块可以由内核自动加载,也可以由用户加载。一般的,这些编译好的模块位于“/lib/modules/2.4.20-8/kernel/drivers/”目录下。加载这些模块可以使用insmod或modprobe命令,modprobe命令除了加载制定的模块之外,还会加载和本模块相关的其它模块,因此建议使用modprobe命令代替insmod命令。例如,我们在linux下使用USBtoRS232的转接器。USBtoRS232转接器使用的芯片型号是pl2303,则可以运行以下命令:Modprobe/lib/modules/2.6.16-28/kernel/drivers/usb/serial/pl2303内核会加载pl2303.
本文标题:第10章嵌入式Linux的开发
链接地址:https://www.777doc.com/doc-2241647 .html