第10章嵌入式Linux的开发

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

主要内容Linux的诞生Linux相关概念Linux的组成及其版本Linux的特点嵌入式Linux的概念嵌入式Linux操作系统介绍嵌入式Linux的开发开发步骤构建合适的开发环境开发或者移植BootLoader构建适合的Linux系统开发必须的驱动程序开发应用程序开发具有图形界面的应用程序开发环境的构建开发环境的建立通常包含一下几个步骤:(1)建立装有Linux操作系统的开发主机,(2)安装C/C++语言的编译器,交叉编译器,(3)配制串口通信工具,(4)配制网络通信工具。(5)建立Windows环境下的开发工具。开发环境的构建安装Linux操作系统注意点建议用户在安装到软件配置时,选者“定制”。在“选择软件包组”界面时,[全部]VMWare安装Linux关闭防火墙利用VMWare安装LinuxVMWare是一个“虚拟机”软件。它可以在一台计算机上虚拟出多台计算机,用户可以把这些虚拟机作为一台真正的计算机,来安装自己需要的操作系统。利用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:02Pleaseappendacorrectrootroot=bootoptionkernelpanic: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.

1 / 48
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功