构建嵌入式linux系统(推荐10篇)
(MP3播放器)
功能要求:
(1)系统(bootloader,kernel,rootfs)烧写在板子中;
(2)打开电源开关,系统自动启动,启动最后进入到一个GUI界面(MP3播放器)。
(3)用户可以操作该界面,播放歌曲。
具体要求:
(1)自定义的bootloader添加内核启动功能;或者修改u-boot的go命令使之能够启动zImage。
(2)根文件系统制作时,移植Qt库。
(3)sqlite3的移植
(4)madplay移植
./configure--help
关键词:YAFFS,嵌入式Linux,加载时间,磨损平衡
在嵌入式Linux的开发工作中,常用的存储设备有Nor Flash和Nand Flash,其中价格低廉并适用于高密度和大容量存储的Nand Flash运用更为广泛[1]。YAFFS(Yet Another Flash File System)文件系统是专门针对Nand Flash的特殊构造设计的,是一种日志结构的文件系统,性能超越了原有的JFFS系列文件系统。但随着嵌入式技术的发展,在Nand Flash介质上的嵌入式Linux中构造YAFFS时,YAFFS存在挂载时间过长和损耗均衡性不足两方面的缺点,需要进一步改进和优化。
1 YAFFS文件系统
在嵌入式所用的Nand Flash中,基本的读写单位是页(page),YAFFS的存储位也是页(一般称为Chunk),分为附加区(OOB)和数据区。32页组成块(block)是基本的擦除单位[2]。由于YAFFS的文件偏移地址和闪存的物理地址不一致而建立了一张文件与物理页的映射表。闪存的页序号作为表内容,以每页描述的文件偏移量作为表索引,再把这张大的映射表分为若干小表,组织成树结构,以提高文件数据块的查找速度。这种在内存中建立的层次索引目录称之为节点树(Tnode Tree),是YAFFS的核心模型,如图1所示。在节点树中按照逻辑索引(Logical chunk index)找到物理地址索引(Physical chunk index)。当文件变大时,所需的叶子节点也会增加,此时节点树就会“拔高”和“增肥”。当文件进行删除操作时,用递归的方法从叶节点向上收缩,释放已被删除节点对应的物理页。
2 构建YAFFS文件系统
2.1 实验平台
开发过程中运用的是目标板与宿主机的交叉编译模式。宿主机即PC机,采用的是虚拟机+Linux RedHat9.0系统;目标板的硬件是ARM板,采用的是一块S3C2440的ARM9微处理器,带有一块256 MB的NandFlash、64 MB的SDRAM内存。目标板采用的开发软件是嵌入式Linux2.6.28+交叉编译工具arm-Linux-gcc4.3.1。YAFFS文件系统的开发流程如图2所示,引导程序BootLoader一般是固定在开板的Flash中(这里不做详解)。
2.2 内核移植
(1)修改交叉编译环境,使其适用于本实验平台。修改顶级Makefile中定义的ARM编译器,使之与所采用的平台处理器相对应。修改如下:
同时,为了支持实验平台处理器12 MHz的晶振频率,修改Linux提供的输入时钟,在文件arch/arm/machs3c2440/mach-smdk2440.c中定义s3c24xx_init_clocks(12 000 000);并且在该文件中将Linux支持的machine名称改为MACHINE_START(S3C2440,“Study-S3C2440”);最后,修改Linux中默认的机器号,使之与Boot Loarder传递的机器参数782一致。在arch/arm/tools/math-types中,机器型号语句修改为:
(2)内核支持MTD。MTD是闪存与文件系统的接口,Nand Flash、YAFFS文件系统与MTD的联系如图3所示。
老版本的MTD与Nand Flash的兼容不是很好,需要安装最新的MTD。实现Linux对MTD的支持,首先要在MTD子系统内添加Nand Flash的硬件设备驱动。在arch/arm/plat-s3c2440目录下的文件common-smdk.c中定义了Flash硬件平台的驱动信息,在文件中定义了结构体static struct mtd-partition partition-info[],表示闪存的MTD分区信息,这里将Nand Flash分为5个MTD分区,分区内容如下:
在该文件中,还定义了Flash的总线宽度、基本读写操作以及硬件相关的控制引脚,可根据相应的需求进行修改。
(3)增加内核对YAFFS的支持。首先将最新的YAFFS源码包放入Linux内核的/fs目录中,执行解压操作,/fs目录中添加了YAFFS文件系统的源码;然后在内核中对YAFFS进行配置,相应地修改为:在/fs/Makefile中增加obj-$(CONFIG_YAFFS_FS)+=yaffs/;在/fs/Kconfig中增加source“fs/yaffs/Kconfig”。
(4)编译内核。在Linux2.6.28内核目录下执行make menuconfig操作,在内核配置菜单中选中支持MTD、Nand Flash和YAFFS文件系统的选项。注意一定要选择选项Let yaffs do its own ECC,因为制作出来的YAFFS文件系统映像中附加区的数据包含了ECC校验算法。此算法与Nand Flash的MTD中的校验算法不相同,会造成MTD认为页校验错误;之后运行make z Image,在/linux2.6.28/arch/arm/boot中形成压缩的内核镜像z Image,通过S3C2440的专用串口工具DWN,将镜像烧写到kernel分区。
2.3 YAFFS根文件系统制作
(1)制作文件系统。首先,创建文件系统根目录rootfs,并且在根目录下创建子目录bin和sbin(存放自带命令)、etc(系统配置文件)、proc、lib(程序运行的动态链接库)、user、dev(系统支持的设备文件);然后,安装Linux的常用命令集Busybox,安装其源码到Linux根目录下,修改其中的makefile,实现交叉编译:
在Busybox的目录下执行make menuconfig,进入配置菜单,根据需求添加选项。编译后将install目录下的文件拷贝到/rootfs中;其次,安装交互程序Bash,使系统可进入交互界面,源码包解压后,同样修改链接路径为:export PATH=/usr/local/arm/3.4.1/bin;编译后将得到的bash静态链接程序拷贝到/rootfs/bin目录中;最后,建立系统的配置文件及编写启动脚本,系统启动访问的第一个脚本etc/inittab,编辑etc/init.d/rc S脚本,执行挂载文件系统Ramfs和sysfs的命令,还可以在etc/rc.local中配置系统IP地址。
(2)制作YAFFS文件系统镜像。在YAFFS源码文件包中有util工具包,对工具包中makefile的交叉编译路径进行修改,编译后得到mkyaffsimage工具。根目录下执行:./mkyaffsimage/rootfs rootfs.yaffs。
(3)YAFFS根文件系统烧写。修改内核的配置参数rootsystem=YAFFS,通过DWN把rootfs.yaffs镜像文件烧到filesystem分区。启动系统就会显示启动信息:VFS:Mounted root(yaffs filesystem)。
3 YAFFS改进策略
(1)针对挂载YAFFS时需要扫描Flash上所有被使用的块从而减慢了启动速度的问题,在文件系统的加载过程中采用空间换取时间的策略,加入索引区,用于存储文件属性信息节点[3],但对于闪存较小的嵌入式系统则没有太大意义。YAFFS在Nand Flash的页中定义和记录数据Objectpoint_data和file_data,还增加了index_data数据类型,其中记录了挂载系统时所需要的数据和节点信息,并分配专门记录这些数据的块(即索引块)。在YAFFS中创建index_data类型的数据结构yaffs_monut_index,组织文件属性的初始化数据的结构,如yaffs_object及部分相关的yaffs_Device、yafffs_Block Info和yaffs_Tnode等,索引块中每页的存储结构如图4所示。
inode_num和check及其他有用的数据都是存储在索引块每页的附加空间中的标记位。inode_num用于记录存储启动控制信息所用的页数,挂载时系统只需要扫描索引块已使用的页;check记录了系统卸载时,控制信息是否正常地写入闪存中,启动时如能检查通过后,则采用改进策略挂载系统,否则运行原有机制,扫描所有块[4]。YAFFS挂载时,系统扫描每一块第一页的附加区,若不是索引块就跳过检查下一块;如果是,则读取该块,获取记录了节点树中的叶节点数据的信息,重建节点树[5]。YAFFS文件系统成功挂载,即以一定的存储空间换取了大量的挂载时间。采用了该策略后,第一次挂载时系统将运行原有启动机制,卸载时将文件属性数据写入索引块,第二次挂载时则根据默认设置直接读取启动数据[6],而且还避免了随着文件系统增大而启动变慢的问题。采用空间换取时间的策略后与原YAFFS加载过程的区别如流程图5所示。
(2)当YAFFS系统进行写操作且Nand Flash中未分配空间小于预设的阈值时,启动垃圾回收机制,选取最脏块擦除。YAFFS文件系统的垃圾回收策略结合了随机策略的平衡性和贪心策略的高效性,回收机制包括:回收不再使用的脏块以及对存有有效数据的坏块进行处理。但回收算法具有随机性,系统有可能总是选中同一个块,认定它是最脏的块,并连续地擦除回收,造成恶性的使用,而Nand Flash的擦除次数是有限的(大约在10次左右)。出现恶性的使用会造成闪存中的部分块损坏,而其他块使用次数却极少,缩短了闪存的寿命。
(3)针对YAFFS的磨损平衡性差的情况,采用了擦除计数机制[7]:在yaffs.guts.h中定义了存储在Nand Flash的附加区中的数据结构yaffs_tags,用来标志每页的状态;定义了chunk ID、object ID和有效字数等。其中有2 bit的空间是没有使用的,并从chunk ID和object ID分配7 bit,将这9 bit的空间定义为erase_count,用于记录该页被擦除的次数。初始值为零,当被擦除时标记为“1”,表示擦除过一次可达到的最大计数值为511。系统垃圾回收的流程图如图6所示。当某一块的擦除次数达到511时,该块与被擦除数最小的块交换各自存储的数据,使频繁擦写的块存储很少使用的数据,而被擦除次数少的块存储频繁地更新数据[8](如文件属性信息数据)。当擦除计数达到最大的块超过70%以上时,将所有的擦除计数值归零,循环以上的操作,从而实现Nand Flash的损耗基本平衡、延长使用寿命、提高文件系统可靠性。
4 性能测试
按照以上介绍的策略修改YAFFS文件系统相关部分的源代码,并且根据YAFFS根文件系统构建的基本步骤,将改进后的文件系统作为根文件系统烧写入目标板。在实验平台上,分别对YAFFS和改进后的文件系统进行性能测试和研究。性能测试的主要内容有:各块的擦除次数和文件系统挂载的时间。在实验平台上大量地进行读写和删除操作,在源代码中也添加擦除计数(只用于计数),两个文件系统经过相同数量的读写和删除操作后,读取每块的擦除次数,分析数据得出:原YAFFS中存在擦除次数为零的块,而改进后则没有;原YAFFS的最大擦除次数与最小擦除次数的比值是无穷大,而改进后都在平均值附近波动,起伏不大。文件系统加载测试的主要方法是在内核源码和文件系统源码中添加中断机制和时钟,安装评估系统时间的工具Printk Times补丁,运用printk输出所需数据。测试结果如表1所示。由表1可看出,由于第一次启动时文件属性信息还未写入索引区,系统启动时间与改进前大致相同,但第二次启动时索引区机制开始工作,直接从索引块中读取文件信息,修改后的YAFFS启动时间已有明显的改善,表明改进策略达到缩短加载时间的目的。
(单位s)
在以Nand Flash为介质的嵌入式Linux平台上构建了YAFFS文件系统,并在原有YAFFS文件系统的基础上,对YAFFS的启动时间和损耗平衡进行优化。通过测试证明,启动时间相比原文件系统缩短了一半以上,且实现了Nand Flash的摩擦损耗基本保持平衡,优于改进前的文件系统。
参考文献
[1]胡德鹏,李仁发.一种微嵌入式Flash文件系统—uEFFS.电子技术应用,2007,33(7):27-29.
[2]应骏,江峰,李莉.嵌入式系统上的文件系统优化设计[J].电子技术应用,2007,33(12):141-144.
[3]Cao Lu,Shao Shi.A fast mounting method for NAND Flashfile system.computer research and development(ICCRD)[C].2011 3rd International Conference,2011:416-420.
[4]杨春林,雷航.NandFlash的嵌入式文件系统的改进与优化[J].计算机应用,2007,27(12):3102-3104.
[5]RYU J,PARK C.Fast initialization and memory managementTechniques for log-based flash memory file systems,Proceeding[C].of the International Conference on Embeddedand Systems,Daegu,Korea,May,2007.
[6]CHAN S P,TAE H H.Fast mounting method for NANDFlash memory,advanced communication technology(ICACT)[C].The 12th International Conference.2011:416-420.
[7]KEE H J,TAE H H.Efficient garbage collection policy andblock management method for NAND Flash memory[C].20102nd International Conference on Mechanical and ElectronicsEngineering(ICMEE 2010):327-331.
1、嵌入式系统是一种应用系统,它至少包含一个可编程的计算机[通常是某种形式的控制器、微处理器或数字信号处理芯片(DSP)]且使用该系统的人一般并未意识到该系统是基于计算机的。
操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源。为用户提供使用计算机及其外部设备的接口。它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合适的操作环境。嵌入式系统由于硬件的先天限制,经常只具有极稀少的硬件资源。如时脉较少的CPU、较少的内存、常不具有磁盘而用小容量的DiskOnChip或DiskOnModule。而在使用电池的系统中,它还要实现节省电池消耗,延长电池使用时间的功能。
2、最初的嵌入式设备是单一用途的,它们拥有各自独特的显示方式和用户界面;而今天它们变成了我称之为“等同PC”的系统。它们必须运行很多相同的应用程序,它们需要采用相同的方式实现互连或是在某些情况下增强互连性。因此你可以看到在传统的实时操作系统(RTOS)之上建立应用程序的必要性。作为内部开发(in-house developed)操作系统的替代方式,RTOS的出现使得建立嵌入式应用变得更加容易。Liuux还具有很好的可靠性。传统的RTOS通常不具备强大的内存保护功能,这使应用程序很容易被破坏。
二、嵌入式linux在工业控制领域中的应用
基于嵌入式linux的工控系统以嵌入式微处理器为核心来运行嵌入式Linux操作系统。应用程序可通过网络进行更新,并可通过键盘进行人机对话,数据可通过LCD现场显示,重要数据可用文件形式保存在Flash等闪存存储器中;数据和报警信息可通过串口向上位机传输,也以通过以太网向工业以太网或Inernet发布,用户还可通过网络实现远程监控和远程维护。更为关键的是,可充分利用Interact上已有的软件和协议(如:ftp,http以及Apache,PHP,MySQL等应用程序)迅速搭建前台数据采集系统,以实现测控系统和后台管理系统的通讯。
这种方式的优点有:
(1)不需专用的通信线路即可用现成的INTER-NET网络将数据传送到任何地方。
(2)不仅能够传递数据信号,也可以传递音频和图像信号。
(3)由于目前的INTERNET协议是现成和公开的,因此,利用大到几十兆的Microsoft IE浏览器,或小到只有600kB的Mosaic浏览器都可以对网络数据进行读取。
三、Linux操作系统在移动设备领域的优势
首先,Linux属于开放的操作系统,它自身的技术文档甚至源代码都是开放的,因而在学术领域受到格外青睐,使得它对新技术,新协议有良好的适应性,
其次,由于Linux和Unix之间的相似性,使得许多对Unix熟悉的开发人员能够很快在相似的基于嵌入式Linux开发环境中进行开发工作。另外,由于Linux源码的开放性使得代码移植和重用变得相当普遍,基于嵌入式Linux平台的开发产品往往只花费较低的成本就能有很好的质量。这对于注重开发成本的公司无疑具有极大的诱惑力。
四、结束语
在嵌入式应用的领域里,从因特网设备到专用的控制系统,Lin-ux操作系统的前景都很光明。所有新造的微型计算机芯片中大约有95%都是用于嵌入式应用的。由于Linux功能强大、可靠、灵活而且具有伸缩性。再加上它支持大量的微处理器体系结构、硬件设备、图形支持和通信协议,这些都使它作为许多方案和产品的软件平台越来越流行。
参考文献:
[1]邹思轶,Linux嵌入式设计与应用[M],北京:清华大学出版社,2002
组员:武易 金鹏飞 周长升
实验一 熟悉嵌入式系统开发环境
一实验目的
1.熟悉嵌入式系统硬件实验平台 2.掌握超级终端配置方法。
3.掌握嵌入式系统开发环境配置,ARM-Linux下NFS服务器的配置方法 4.掌握常用的 Linux下shell命令
二实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境
三实验内容
(1)掌握嵌入式系统实验平台上的各类借接口的位置;
(2)配置windows的超级终端,熟悉vivi的命令行,bootload、kernel、root和用户程序的介绍;
(3)配置linux的终端,配置网络服、Ip地址,开发目录共享,挂载等。
四实验结果
实验二嵌入式Linux程序设计
一实验目的
1.掌握嵌入式Linux软件设计方法原理 2.掌握Makefile文件设计方法。
3.熟悉Linux下静态库和共享库的设计
二实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境
三实验内容
(1)编写一个带输入、输出的由5个文件组成的嵌入式软件;(2)写好makefile文件,并上机调试;(3)用变量指明两种编译器。
四实验结果
实验三
kernel与root的设计和烧写
一实验目的
1.掌握Linux内核配置与裁剪的方法 2.理解根文件系统配置。
3.掌握嵌入式系统内核和根文件系统的烧写的过程
二实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境
三实验内容
对嵌入式Linux系统进行裁剪、配置和编译,生成自己需要的操作系统映像文件,并将其烧写到flash中。
四实验结果
实验四搭建嵌入式系统开发环境
一实验目的
1.掌握嵌入式开发环境的配置 2.掌握开发工具链的安装与配置。
3.掌握嵌入式系统内核和根文件系统的烧写的过程
二实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境
三实验内容
(1)安装配置嵌入式开发环境;(2)安装与配置工具链;(3)内核和根文件系统的烧写
四实验结果
实验五嵌入式驱动程序设计
一实验目的
1.学习在LINUX 下进行驱动设计的原理
2.掌握使用模块方式进行驱动开发调试的过程
二实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境
三实验内容
在PC 机上编写简单的虚拟硬件驱动程序并进调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。
四实验结果
实验六
S3C2410处理器硬件电路设计
一实验目的
1.熟悉硬件电路设计
2.掌握简单的S3c2410处理器的电路设计。3.掌握protel软件的使用
二实验设备及工具
硬件:UP-NETARM2410-S嵌入式实验仪、PC机pentumn500以上、硬盘40G以上、内存大于256M。
软件:PC机操作系统REDHAT LINUX 9.0、MINICOM、AMRLINUX开发环境
三实验内容
使用protel 99se 做s3c2410处理器最小系统电路设计,A/D数据采集模块电路设计。
工业嵌入式系统(INES:Industrial Embedded Systems)是由欧盟(EU:European Union)设立的用来促进使用开放源码软件的项目。INES自建立以来,已经有大量使用嵌入式Linux的应用和报告出现在实际应用中。这些应用和报告使我们看到了使用嵌入式Linux实现工业项目的希望。同时,也使我们看到了嵌入式Linux在一些意想不到地方的使用。
下面是三个具体的应用实例。
智能化的监视和控制远程点―BIRD2
网络通信功能已经成为嵌入式设备的发展必然。由于因特网的普及和飞速发展,使用基于TCP/IP的通信机制显得更具实用性。
BIRD2用户试验的目标是:使用基于嵌入式TCP/IP通信机制、在GSM(目前最大的数字蜂窝通信系统)基站将开放源码操作系统用做远程监控系统的可行性。监控数据可以通过TCP/IP兼容的传输通道,用各种通信方式如PSTN、ISDN、Ethernet或者通过GSM移动电话网络等多种途径进行传输。
BIRD2采用ULTRA进行研究、开发、设计、生产,其目标是开发出用于电子、通信以及石油工业的高技术解决方案,旨在成为使用边缘技术的端到端的供应链管理以及其他移动解决方案,从而为其顾客和合作伙伴提供最高性能的远程监视和远程控制产品。
ULTRA工业部分为监视机控制系统,引入技术是Modular Linux Data Acquision System。
经济效益
BIRD2项目约18个月偿还期,使用新技术节约了70%的成本,顾客购买价格降低了30%,每3年销售成倍增长。
产品的新特性
产品新特性或新功能有:使用TCP/IP作为标准协议、通过拨号连接或网络服务、提供商进行远程访问、用使用Linux操作系统的嵌入式计算机代替桌面计算机和具有远程诊断及升级的能力。
技术上的选择
经过几年的成长,Linux逐渐发展并得到广泛认可。对嵌入式PC的应用,目前Linux具有诸多优势:
◆ 具有正常运行于较小内存的能力;
◆ 一个多任务的实时操作系统必须包括对授权的保护和控制方法;
◆ Linux是Free的;
◆ 许多主要的公司,都有广泛Linux工具支持(部分免费),包括C、C++编译器以及Java环境。通过在ULTRA技术上采用Internet网络通讯以及开放源码操作系统,BIRD2将有很大的改进。
技术实现
由于系统必须将分部在全国各地的基站加以连接,惟一切实可行的连接选择是使用TCP/IP。TCP/IP允许将存在的各种不同的操作系统在网络层实现透明连接,同时还允许远程诊断和目标SW的升级。对Internet相关的SW的广泛使用使得选择这种解决方案成为必然。
网络化的称重系统
Bilatron是一个建立于1984年的有着13个员工的公司,位于意大利中心。此公司的主要业务是设计、生产、销售工业应用的称重系统。
在Bilatron公司的定制工业称重系统中,使用了uClinux以及一个具有标准网络功能的控制器,以便为顾客提供新的售后服务,这些技术的使用也减少了系统的实现时间。
Bilatron公司的.产品包括:用于火车车厢、客车、坦克的称重系统;为残疾人提供的个人用品、医疗以及运动器械;为动态称重提供的特殊称重设备。
由于新的基于uClinux的具有标准网络设施的控制器的使用,Bilatron公司为用户提供了新的售后服务。该控制器还使得定制具有广泛复杂度的工业称重系统的实现时间有所减少。
Bilatron还参与安装和维护称重系统产品、校准并为其产品颁发合格证。
Bilatron公司的专用称重设备(动力的、批量的、快速运行的称重仪、重量校准仪、crane-scales)占公司产量的60%;标准称重系统(称车辆及其载重、平台、油箱、青贮塔用的台称)占公司产量的35%;个人用品(残疾人、医疗及运动器械)占公司产量的5%。
经济效益
在过去的三年里,Bilatron公司的售后服务的经济效益持续增长。计划新设备WISE将进一步提高公司的销售额。这是因为设备在刻度校准监控上具有的远程控制能力。
三年内的期望投资回报率为204%,能够提供远程的售后刻度校准服务减少定制称重系统的实现时间,新设计面世时间加快。
产品的新特性
增强的控制器的主要新特性如下:
◆ 标准的网络接口。
◆ 使用嵌入式动态Web服务器,实现了远程配置和监控。
◆ 缩短了定制工业称重系统的安装时间。
◆ 远程的售后刻度校准服务。
◆ 使用能够快速载入、评估的简单的类C语言的脚本引擎处理产生的原始数据。这样一来,不需要在整个工作链上
工作、不需要涉及运行于系统上的主要应用就可以更改决定重量的启发式算法。
◆ 图形化的液晶显示管理。
技术上的选择
他们选择使用TCP/IP通信机制原因是:
◆ 他们可从其意大利基地将其业务拓展到世界范围内,并提供维护服务。
◆ 为顾客提供广泛的售后服务。其中最重要的是远程监控称重系统的刻度校准情况的能力。
◆ 使用标准接口和协议,使其称重设备能够与工业控制系统集成。
◆ 使公司能够在较短的时间内设计和递送定制的分布式称重系统。
◆ 选择采用嵌入式开放源码的操作系统(源自Linux)是因为可在短时期内集成TCP/IP通讯机制(Linux的网络连接功能是自带的);可减少产品的面世时间及风险;可减少组件成本。这是由于Linux在没有MML的低成本控制器免费的可用性和集成性较少在组件中集成新设备的设计开销和较少新的SW应用开发的设计开销。
技术实现
在Consorzio Roma Ricerche的技术支持下,该增强设备的开发仅仅用了10个月时间。
该增强设备负责处理并将数据转换为重量值。改进的控制器(基于一个ARM7 Netsilicon NET+50 处理器及uC Linux操作系统)实现了一个脚本引擎用于处理产生的原始数据。组件还包括下面的外围部分:一个图形化的液晶显示屏;一套用于与用户交互的按钮;用于测试瞬时重量的高效的A/D转换器;用于估计测量物速度的计数器;一个提供最终测量的类似版本的D/A。设计时使用的开放源码SW为操作系统uClinux 2.4.1;本地脚本编辑器是LUA;HTTP服务器为THTTPD。
图1 Bilatron公司设计的网络化的称重系统
图2 增强的控制器的重要组件
自动生物监测和控制使用OSS
自动生物监测和控制(Automatic Biological Monitoring and Control)为OSS(Open Source Software)的使用开发了新的市场。
Biotrace有限公司在其新一代的CFL(Continuous Flow Luminometer)上应用开放源码软件(OSS),从而实现了对冷却水塔的生物活动的远程监视和远程控制。目前,如果生物活动过高,技术人员必须亲临每一个水塔,然后取样、检测,然后向水中引入biocide。改进的、使用远程监视和远程控制的系统减少了操作成本。
Biotrace有限公司目前正致力于开发、设计、生产用于食品制备、保健产品、工业及军用市场的卫生监控系统的化学产品和设备。公司的产品包括化学产品及其相关包装用品、取液体化验的试纸及其相关的一次性用具、用于检测发生化学或微生物反应的荧光或颜色变化的测量仪器。
经济效益
Biotrace有限公司在其“不间断流监控系统”中引进了基于嵌入式Internet技术的OSS,为可能的用户减少了水塔监控的操作成本。该项系统就为公司开发了超过45000个水塔的市场,为销售额的增长打下了基础。
使用OSS,大约用了预计开发时间的80%完成原型开发。这使得Biotrace公司的项目开发成本得以降低。操作系统代码的重用、操作系统社区提供的代码行支持、高质量的软件代码也使得其开发成本得以降低。
产品新特性:
◆ 基于OSS的嵌入式Internet技术的引进。
◆ 实现了对样本测试结果的远程访问。
◆ 实现了取样的远程控制。
◆ 增强了取样及净化过程的控制。
◆ 较少了消耗。
Biotrace公司的工程师将有规律地对自测路线和错误信息进行收集,这定会改进系统的服务和维护服务。
图3“不间断流监控系统”应入OSS技术减少了水塔监控的操作成本
图4 Biotrace公司在其产品上引进了一块嵌入式x86板
技术实现
Bio
trace公司之前的Continuous Flow Luminometer(CFL)设备在提供反馈和控制功能时,需要使用者在一个集成的控制面板上进行手工操作。对此,Biotrace公司在其产品上引进了一块嵌入式x86板,使得独立操作和基于Internet的报告和控制不再需要亲临现场。组件中引入GPS接收器能够精确地记录取样时间和取样位置,这使得公司能够从不同的地点收集信息而不存在任何的不必要的配置问题。
在产品的PC和嵌入式平台上,Biotrace公司使用了普通版本的Linux版本。这获得了巨大的效益,并使得可以将比PC版本更新的软件下载到嵌入式控制器上。这让来自于嵌入式软件提供者以及开放源码社区的支持都唾手可得,再加上可用于关键部分的开放源码代码的高质量,使得公司的产品开发时间从计划的202天缩短为166天(这意味着节约了20%的开发成本)。
关键词:工控,嵌入式,Linux
(一)引言
随着科技的飞速发展,各种工业控制系统的功能越来越强大,复杂度与智能化程度也要求越来越高,网络通信数据量也大大增多。比如一个高度智能化的生产系统就必须具备两方面的功能:一是要在现场完成复杂的具有相当智能的检测与控制任务;二是要求系统能够与某一类型的控制网相连,以实现远程监控。目前应用的许多嵌入式系统的硬件采用的是8/16位单片机;软件多采用汇编语言编程,由于这些程序仅包含一些简单的循环处理控制流程,要实现复杂控制功能,开发的难度很大,难以检测错误。而且单片机与单片机或上位机之间的通信通常通过RS232、RS485来组网。这些网络存在通信速度慢、联网功能差、开发困难等问题。为此,采用基于嵌入式操作系统的开发方式已经代替从底层开发的方式,成为当前工业控制领域的主流。
(二)基于Llinux的嵌入式工控系统的优点
从上世纪八十年代末开始,嵌入式操作系统得到很大的发展,主要分为商业化产品与开源产品。目前商业化产品主要有Vxwork、pSOS和WindowsCE等,它们的主要特点是功能强大,但价格昂贵,而且不对用户开放其源代码;而以Linux为代表的开源产品,则对用户开放源代码,价格低廉,而且功能也越来越强大。如今,业界已经达成共识:即嵌入式Linux是大势所趋。嵌入式Linux操作系统以价格低廉、功能强大、易于移植等特点而正在被广泛采用,并已成为一种新兴力量。
基于嵌入式Linux的工控系统以嵌入式微处理器为核心来运行嵌入式Linux操作系统。在通信方面使用工业以太网,现在工业以太网已逐步完善,工业以太网使用的是TCP/IP协议,因而便于联网,并具有高速控制网络的优点。应用程序可通过网络进行更新,并可通过键盘进行人机对话,数据可通过LCD现场显示,重要数据可用文件形式保存在Flash等闪存存储器中;数据和报警信息可通过串口向上位机传输,也可以通过以太网向工业以太网或Inernet发布,用户还可通过网络实现远程监控和远程维护。更为关键的是,可充分利用Internet上已有的软件和协议 (如:ftp、HTTP以及Apache、PHP、MySQL等应用程序) 迅速搭建前台数据采集系统,以实现测控系统和后台管理系统的通讯。这种方式的优点有:不需专用的通信线路即可用现成的Internet网络将数据传送到任何地方;不仅能够传递数据信号,也可以传递音频和图像信号。而且,随着32位嵌入式CPU价格的下降和性能指标的提高,为嵌入式操作系统的广泛应用扫除了执行速度方面的最后障碍。本文就以uClinux为例阐述基于Linux的嵌入式系统的架构。
(三)uClinux系统架构
如上图所示,作为嵌入式操作系统的uCLinux与PC机上的通用Linux在结构上基本相同,但是也有一些区别,主要是因为运行的硬件环境与在其上面运行的应用程序有比较大的差异。工控硬件系统的内存容量和存储器容量都不大,也就不会设置MMU (Memory Management Unit,内存管理单元) ,必须对Linux进行裁减设计,所涉及的主要技术有下面几种
1. 内核的精简
不像Windows, Linux没有采用流行的微内核结构,而是采用了宏内核结构,将许多功能都集中在内核实现。这样实现虽然使其架构上没有微内核那样清晰,但是加快了系统运行速度,特别是网络功能集成到内核,这也是Linux比Windows更适合嵌入式系统的原因之一。标准Linux是面向PC的,它集成了许多PC所需要而嵌入式系统并不需要的功能。对一些可独立加上或卸下的功能块,我们可以通过可在编译内核时,仅保留嵌入式系统所需的功能模块,重新编译内核就可以实现内核的裁剪。
2. 虚拟内存机制的屏蔽
uClinux同标准Linux的最大区别就在于内存管理。标准Linux是针对有MMU的处理器设计的。在这种处理器上,虚拟地址被送到MMU, MMU把虚拟地址映射为物理地址。通过赋予每个任务不同的虚拟—物理地址转换映射,支持不同任务之间的保护。对于uCLinux来说,其设计针对没有MMU的处理器,不能使用处理器的虚拟内存管理技术。uClinux仍采用存储器的分页管理,系统在启动时把实际存储器进行分页。在加载应用程序时程序分页加载。
3. 设备驱动程序的编写
工控系统的接口也比PC系统更加复杂,所以很多时候,为特定的设备编写驱动程序,可按照在Linux下编写驱动程序的规则进行编写。编写的设备驱动程序应当具有以下功能:对设备进行初始化和释放;完成数据从内核到硬件设备的传送和从硬件读取数据两项功能;读取应用程序传递给设备文件的数据以及回送应用程序请求的数据;检测和处理设备出现的错误。
4. 开发基于闪存的文件系统JFFS
应用程序和重要数据通常以文件的形式被存放在闪存文件系统中。JFFS2文件系统是日志结构化的,这意味着它基本上是一长列节点。每个节点包含着有关文件的部分信息。JFFS2是专门为象闪存芯片那样的嵌入式设备创建的,所以它的整个设计提供了更好的闪存管理,因而具有其它文件系统不可比拟的优点。
将裁剪好的内核移植到所用的目标板上,就可以根据具体的应用来开发应用程序。如数据采集模块、数据处理模块、通信和数据发布模块等等。
(四)门禁系统架构与实现
通过以上的分析,我们熟悉了uClinux在系统架构上与标准Linux的差别,但是这些差异主要是针对系统软件开发者,对于一个应用系统开发者来说,在开发应用系统的时候,几乎完全可以不用考虑以上的差异,因为uClinux提供了与标准Linux几乎一样的开发接口。所以,我们可以将成熟的信息系统架构与技术无障碍地移植到工控系统中,下文我们将用成熟的C/S与B/S架构来构建一个实用的门禁系统。
如上图所示,考虑到该系统对实时性的要求不是很严格,所以整个系统基本上都是采用简单的C/S和B/S架构,采用现有的技术与产品,特别是开源产品,结构清晰,成本较低,只需在做少量的开发,现在我们分别简述各部分的实现。
1. 读卡器、写卡器
现在每个嵌入式硬件厂家都会有带有以太网芯片的开发板,我们选用华恒科技的HHPXA270-Integration-R1,这是一款基于Intel PXA270的处理器全功能的开发板,接口丰富,功能强大。2个4线RS232串口;1个2线RS232串口;1个USB Host接口;1个USB Device接口;音频输入输出接口;IDE硬盘接口;RTC;1个10M/100M自适应以太网接口;1个PS2接口;1个MMC卡接口;1个CF无线网卡接口(选配);1个彩色LCD接口;1个JTAG接口;1个9V直流电源接口,具有低功耗、高度集成性、软件兼容性等特点。该开发板提供了华恒公司自己开发的专用嵌入式Linux, 我们也可以采用uClinux。我们用C语言可以很便捷地在读卡器(写卡器)上开发一个简单的数据采集程序,读卡器(写卡器)通过以太网与TCP/IP协议,与数据库后台直接通信,本地不负责数据的存储。至于数据传输中的检错与纠错,以太网与TCP协议已经实现了其功能,我们只需要调用其功能就可以了。
2. 数据库后台
数据库后台全部采用开源软件构建,运行在普通的PC服务器上。操作系统采用红帽公司的Linux AS 5,其特点是功能强大,稳定性强。数据库采用MySql, 与ORACAL等商业数据库相比,其功能稍逊,但是对于本系统来说,已经足够,而且由于其功能稍微简单,占用系统资源也较少,执行速度较快。考虑用户管理监控时直接操作数据库不仅不安全,也不是很便捷,我们还采用了B/S架构,由Apache HTTP Server担任WEB服务器与管理用户交互,然后通过PHP技术操作后台MySql数据库,这样在安全性与便捷性上得到了大大的提高。
3. 监控、管理机
采用通用的Windows xp操作系统和浏览器访问数据库后台,无任何特殊要求。
(五)结束语
综上所述,我们可以看出,采用Linux操作系统的嵌入式工控系统大大简化了开发难度,更多采用集成的方式,而且充分利用了众多的成熟技术与产品,使构建大型系统变得更简单与可控,是现代工业控制的主要趋势。
参考文献
摘 要: 首先对嵌入式Linux操作系统内核和S3C2410处理器进行了简单介绍,在此基础上,对 系统引导程序进行了设计,重点介绍了将Linux移植到S3C2410处理器的步骤和方法,并对移 植过程的关键部分进行了详细阐述。编译生成的内核在嵌入式系统中运行稳定,结果证明方 法可行,对于开发其它嵌入式系统具有参考意义。
关键词:嵌入式操作系统;移植;Linux;S3C2410
中图分类号: TP368.1 文献标识码:A 文章编号:1672-1098(2008)03-0073-04
1 Linux内核和实验系统简介
嵌入式操作系统作为大多数嵌入式应用系统的软件平台,它管理着系统的资源,为应用 软件提供各种必要的服务。在嵌入式应用系统中使用嵌入式操作系统,已是大势所趋。目前 嵌入式操作系统的种类繁多,但Linux以其源代码开放和可移植性强等特点,被广泛使用。 本文将介绍如何将内核版本为2.4.18的Linux移植到基于ARM920T的S3C2410处理器上。
1.1 Linux操作系统内核
Linux操作系统主要由内核、shell、文件结构组成,其中内核是灵魂,负责整个系统的 内存管理、进程调度和文件管理。Linux内核与大部分UNIX内核一样是单内核体系结构的, 能够根据需要定制内核映像的尺寸,具有很大灵活性,不需要重新编译内核和引导就能检验 新的内核组件,这个特性对于嵌入式而言是非常有好处的,方便用户构筑自己的个人内核。 Linux内核有五个主要的子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进 程间通信。
本文将对内核版本为2.4.18的Linux进行移植,其内核代码分布如图1所示。
(1) /arch目录包含了目前Linux支持的硬件结构——如i386、alpha、arm等的内核代码;
(2) /drives目录包含了内核中所有的设备驱动程序;
(3) /fs目录包含了所有的文件系统的代码;
(4) /include目录包含了建立内核代码所需要的大部分库文件,这个模块利用其它模块重建 内核;
(5) /init目录包含了内核的初始化代码,内核从此处运行;
(6) /ipc目录包含了进程间通信代码;
(7) /kernel子目录包含了主内核代码;
(8) /mm目录包含所有独立于CPU体系结构的内存管理代码;
(9) /net目录包含了和网络相关的代码,如ipv4、ipv6等。
一般在每个目录下都有一个.depend文件和一个Makefile文件,这两个文件都是编译时使用 的辅助文件。
1.2 S3C2410处理器
S3C2410是SAMSUNG公司基于ARM920T处理器内核开发的一款16/32位嵌入式处理器,运行 频率高达200多MHz,具有MMU和高速缓存等丰富片上资源,可以广泛用于PDA、internet设备 和手持式设备。其片上集成的功能主要包括以下几个方面:
(1) 1.8V ARM 内核,3.3V存储器,3.3V外部I/O, 具有16kB指令缓存/16kB数据缓存和MMU 的微处理器;
(2) 外部存储控制器(SDRAM 控制和片选逻辑);
(3) LCD控制器(支持上到4k色的STN和256k色的TFT), I通道LCD专 用DMA;
(4) 具有外部请求引脚的4通道DMA;
(5) 3通道UART, 2通道SPI;
(6) 1通道IIC总线控制器,1通道US总线控制器;
(7) 1.0版本的SD主机接口和兼容的2-11版本的Multi-Media卡协议;
(8) 2端口 USB 主机,1端口 USB 设备(USB1.1);
(9) 4通道PWM定时器,1通道内部定时器;
(10) 看门狗电路;
(11) 117个通用I/O口,24通道外部中断源;
(12) 电源控制:常规、缓慢、空闲和断电模式;
(13) 8通道10位ADC和触摸屏接口;
(14) 具有日历功能的实时时钟RTC;
(15) 具有锁相环的片上时钟发生器。
2 将Linux移植到S3C2410
2.1 移植思路
首先要为Linux设计一个BootLoader,通过BootLoader来初始化硬件,引导Linux运行。 Bootloader设计可以在ads中实现。然后,针对硬件环境和设计的 BootLoader修改Linux内 核。接下来,在Linux操作系统下建立交叉编译环境。最后,配置、编译、连接Linu x,下 载编译得到的映像文件到Flash,通过BootLoader 来启动嵌入式操作系统Linux。
2.2 Boot Loader的设计
引导加载程序通常称为Boot Loader,就是在操作系统内核运行之前运行的一段小程序 。通过这段小程序,初始化硬件设备、建立内存空间的映射图,从而建立适当的系统软硬件 环境,为调用操作系统内核做好准备。
本系统Boot Loader的第一阶段主要完成基本的硬件初始化,用汇编语言实现:①关闭w atchdog,屏蔽所有中断;②设置处理器时钟和工作频率,CPU工作频率为200 M Hz;③初始化外部寄存器;④初始化堆栈指针SP;⑤拷贝Boot Loader的第二阶段到RAM空间 中,使用一个 跳转语句跳转到第二阶段的main入口函数。在完成以上操作后就为main函数的运行建立起了 一个基本的环境。
第二阶段用C语言完成:①通用I/O口的设置;②完成内存映射初始化和内存管理单元初 始化:men璤map璤init(); mmu璤init(); 这两个函数在/arch/s3c2410/mmu.c中;③初 始化mtd设备:mtd璤dev璤init();这个函数在/drivers/mtd/maps/s3c2410璤flash.c中 ;④拷贝flash中的kernel映像和根文件系统映像到RAM空间中;⑤跳转到内核的第 一条指令 处。跳转时需要满足下列条件:R0为0;R1为机器类型ID;禁止中断(IRQ和FIQ);C PU设置 为SVC模式(SVC是供操作系统使用的一种保护模式);关闭MMU;关闭数据Cache。至此Boot Loader的任务结束。
2.3 Linux内核的修改
假定内核代码放在/usr/src/Linux-2.4.18目录下
(1) 打开根目录下的Makefile文件 此文件用来指定编译规则,例如哪些需要编译,哪些 需要先编译。
指定目标平台:Arch=arm;
指定交叉编译器:添加CROSS璤COMPILE=arm-linux-。
(2) 打开/arch/arm目录下的Makefile文件 启动代码的产生需要通过此文件,由于2.4内 核还没有对S3C2410的支持,在此添加如下代码:
ifeq((CONFIG璤ARCH璤S3C2410),y)
TEXTADDR=0xC0008000
MACHINE=s3c2410
Endif
嵌入式 linux开发,根据应用需求的不同有不同的配置开发方法,但是一般都经过以下过程:
建立开发环境。操作系统一般 REDHAT-LINUX,版本 7 到9 都可以,选择定制安装或全部安装,通过网络下载相应的 GCC 交叉编译器进行安装(比如 arm-linux-gcc、arm-uclibc-gcc),或者安装产品厂家提供的交叉编译器。
配置开发主机。配置 MINICOM,一般参数为115200,数据位 8位,停止位 1,无奇偶校验,软硬件控制流设为无。在 WINDOWS 下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具;配置网络,主要是配置 NFS 网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。
建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如 U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据自己具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如三星的 ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上 flash 的烧写程序,网络上有免费下载的 WINDOWS 下通过JTAG并口简易仿真器烧写 ARM 外围 flash 芯片的程序。也有 LINUX 下公开源代码的J-FLASH 程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果你购买了厂商提供的仿真器,当然比较容易烧写flash了,但是其中的核心技术是无法了解的。这对于需要迅速开发应用的人来说可以极大地提高开发速度。
下载别人已经移植好的 LINUX 操作系统,如 UCLINUX、ARM-LINUX、PPC-LINUX等,如果有专门针对你所使用的CPU移植好的 LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改,对于带 MMU的 CPU可以使用模块方式调试驱动,对于 UCLINUX 这样的系统好像只能编译进内核进行调试。
建立根文件系统,从下载使用 BUSYBOX 软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于 /etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs、genromfs 等工具产生烧写映象文件。
建立应用程序的 flash 磁盘分区,一般使用JFFS2 或 YAFFS 文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性 flash(NOR 型)512K-32M,有的系统使用非线性 flash(NAND型)8-512M,有的两个同时使用,需要根据应用规划 flash的分区方案。
开发应用程序,可以下载到根文件系统中,也可以放入 YAFFS、JFFS2 文件系统中,有的应用程序不使用根文件系统,而是直接将应用程序和内核设计在一起,这有点类似于UCOS-II 的方式。
烧写内核、根文件系统、应用程序。
Ubuntu 8.10的安装和网络配置
1.安装虚拟机软件Vmware 6.0.2 虚拟机安装版本Vmware 6.0.2的版本
在 winxp操作系统下用鼠标双击VMware-workstation-6.0.2-59824图标,开始安装虚拟机Vmware,如下图所示:
双击VMware-workstation-6.0.2-59824图标,出现vmware的安装界面,所有的选项都采用默认值,用鼠标点【下一步】,然后出现安装进度条,系统开始安装vmware,等待安装完成后,出现如下安装完成界面:
用鼠标点【Finish】,虚拟机安装完成。系统提示重新启动计算机,选择【是】重新启动计算机,电脑重新启动后,虚拟机安装完成。
2.新建虚拟机
打开Vmware虚拟机软件,选【File】->【New】->【Virtual Machine】,弹出新建虚拟机向导对话框,注意以下几个重要的选项,其他都采用默认选项即可。选择操作系统和版本,如下图所示:
选择虚拟机名称和存放的路径,如下图所示:
设置虚拟机硬盘大小为20G ,如下图所示:
点击【完成】按钮,这样我们就新建了一个虚拟机,下面我们设置一下虚拟机的内存,步骤如下:
点击虚拟机Vmware的【VM】->【settings】时菜单,弹出虚拟机设置对话框,设置虚拟机使用的内存为512M或1024M,如下图所示:
点击【OK】按钮,这样我们就新建了一个虚拟机,该虚拟机的硬盘为20G, 内存为512M.接着我们就可以在该虚拟机上安装ubuntu操作系统了。
注: 键盘和鼠标控制权在虚拟机和Windows系统之间的切换是通过组合键【Ctrl】+【Alt】来实现的。安装Linux操作系统ubuntu Ubuntu安装版本 ubuntu 8.10 点击vmware软件工具栏上的【绿色箭头】启动虚拟机,如下图所示:
点击【VM】->【Removable Devices】->【CD_ROM】->【Edit】菜单,弹出CD_ROM设备对话框,如下图所示:
在Connection中选中【Use ISO image】,设置ubuntu软件安装包的路径,如上图所示。然后重新启动虚拟机,开始在虚拟机上安装ubuntu操作系统。重新启动虚拟机后,出现如下ubuntu安装界面:
选择语言版本为【English】,然后按【回车】键,出现如下安装界面:
选择Install Ubuntu,然后【回车】,开始安装Ubuntu,出现ubuntu安装进度界面如下:
在出现的安装向导主要设置一下城市和用户名密码,如下图所示,其余的安装对话框都采用默认值,选择【Forward】即可。设置安装所在城市
当出现安装所在城市对话框时,选择【ShangHai】,通过选择地图上的点选择,如下图所示:
设置系统的用户名和密码
系统安装过程中出现设置用户名和密码对话框时,设置登陆到ubuntu的用户名和密码,如下图所示:
然后点击【Forward】按钮,在出现的最后安装向导对话框中点击【Install】按钮,开始安装ubuntu,ubuntu安装完成后,最后出现安装完成对话框,如下图所示:
点击【Restart now】开始重新启动ubuntu系统。在系统重启过程中出现如下界面:
提示移走光驱中的磁盘后按回车键,这时我们点击【VM】->【Removable Devices】->【CD_ROM】->【Edit】菜单,弹出CD_ROM设备对话框,如下图所示:
在Connection中选中【Use physical drive】,点【OK】按钮,然后按【回车】即可,系统正常启动,在出现输入用户名和密码提示框时,输入刚才在安装过程中设置的用户名和密码即可。这样就进入了我们刚安装好的ubuntu操作系统。
3.安装Vmware tools工具软件
Vmware tools工具软件用于在window系统和虚拟机的ubuntu系统之间进行数据传递,安装好Vmware tools之后,鼠标可以在window系统和虚拟机之间平滑切换,在window系统和虚拟机之间可以直接通过【复制】和【粘贴】的方式进行数据交换。Vmware tools的安装步骤如下: 1)设置Vmware tool软件的路径为 C:Program FilesVMwareVMware Workstationlinux.iso.点击【VM】->【Removable Devices】->【CD_ROM】->【Edit】菜单,弹出CD_ROM设备对话框,如下图所示:
点击【OK】确定,这时在ubuntu的桌面上出现一个光驱图标,如下图所示:
双击Vmware Tools图标,打开光盘文件夹,可以看到在该光盘目录下看到VmwareTools-6.0.2-59824.tar.gz文件,如下图所示:
返回系统桌面,在点击系统菜单【Places】->【Home Folder】,进入用户目录cao,在用户目录下建立Soft目录,把VmwareTools-6.0.2-59824.tar.gz复制到Soft目录下。
在安装VmwareTools-之前我们要先解锁root用户,点击桌面系统菜单 【System】->【Administration】->【Users and Groups】,弹出用户设置对话框如下:
选中root用户,然后点击下面的 【Unlock】,在点【Close】按钮关闭对话框。接着开始设置root用户密码,点击桌面系统菜单 【Applications】->【Accessories】->【Terminal】,进入用户字符终端操作界面如下图所示:
按照上图所示输入命令sudo passwd root设置root用户密码; 提示password for cao时,输入 cao 用户密码;
提示 Enter new UNIX password时,输入root用户密码;
提示 Retype new UNIX password时,再次输入root用户密码; 最后显示password更新成功。
最后输入命令 su切换到root用户,在提示Password时,输入我们刚才设置的root用户密码即可,然后我们可以看到我们成功切换到root用户了,命令提示符由以cao开头改为以root开头了,表示我们已经成功切换到了root用户。
安装Vmware Tools工具 打开ubuntu 字符操作终端,进入到Soft目录,解压VmwareTools-6.0.2-59824.tar.gz软件包,解压完成后,我们看到在Soft目录下生成了一个新的文件夹vmware-tools-distrib,如下图所示:
执行su命令切换到root用户,执行cd vmware-tools-distrib命令进入到vmware-tools-distrib目录,执行ls命令查看该文件夹下的文件,我们可以看到vmware-tools-distrib文件夹下有一个vmware-install.pl安装脚本文件,在操作终端下通过输入命令./ vmware-install.pl执行该脚本文件安装vmware-tools 即可。如下图所示:
然后开始安装vmware Tools工具,安装过程中出现一些选项全部采用默认值,一直按【回车】即可,最后操作终端输出如下提示安装成功信息,如下图所示:
Vmware Tools安装成功后,我们就可以在Windows和虚拟机的ubuntu之间直接通过【复制】和【粘贴】命令进行数据交换了。
网络配置
Ubuntu的虚拟机安装模式下的网络配置
虚拟机下安装好ubuntu之后,在【system】下点【Network Configuration】,弹出Network Connections对话框:
选取Wired选项卡,选中eth0, 点 Edit 按钮,弹出如下网络接口eth0编辑对话框:
注:如果此处没有显示eth0网络,则在windows 下手工配置网络接口的IP地址,然后再重新启动虚拟机,再进入上述网络配置对话框,一般都会出现eth0网络。
在网络接口eth0编辑对话框配置eth0的IP address 为 192.168.0.220 ,Netmask为255.255.255.0,Gateway 为 192.168.0.1, DNS为 218.2.135.1,配置完成后,点OK即可。IP地址,网络掩码,网关的具体配置值需要根据实际网络环境配置。
注:如果这样配置不能上网,可以尝试通过DHCP方式获取IP地址,DNS还是手动设置。
配置完成后,重新Enable Networking即可,如下图所示:
这样就完成了Ubuntu的网络配置,配置完成后,就可以在ubuntu里面打开浏览器上网了。
设置软件源服务器
在全球很多国家都设置有为ubuntu系统服务的服务器,上面有很多为ubuntu提供的应用软件,我们通过设置软件源服务器,来实现在线通过网络完成软件的安装,即通过一条命令实现软件的搜索,下载和安装,同时会安装该软件需要的依赖文件,同过在网络来安装ubuntu上的应用软件非常方便。Ubuntu软件源服务器的设置步骤如下:
1)在桌面系统菜单上点击【System】->【Administration】->【Software Source】,弹出软件源设置对话框如下:
在Download from 里选择软件源服务器,我们一般选择 Taiwan的倒数第1或第2个服务器,如上图所示,选择好软件源服务器后,点【Close】按钮,弹出如下对话框提示可获得的软件包信息已经过时,需要重新更新。
点击【Reload】按钮更新可获得的软件包信息。更新完成后,我们就完成了ubuntu软件源服务器的设置。
安装libncurses5-dev软件包 在ubuntu环境下,我们用命令make menuconfig来对内核进行裁剪和配置时,需要用终端模式下的字符菜单支持软件包libncurses5-dev,下面我们就通过网络的方式来安装libncurses5-dev软件包,安装的前提是已经设置了软件源和ubuntu系统的网络工作正常。安装libncurses5-dev非常简单,在终端模式下输入:apt-get install libncurses5-dev即可。如下图所示:
这样,libncurses5-dev就安装好了,我们可以在终端模式下通过make menuconfig命令来配置和裁剪linux内核了。
安装交叉编译器arm-linux-gcc 嵌入式开发的应用程序编译好后不是在PC机上运行,而是在我们的ARM开发板上运行,这时需要用arm-linux-gcc 交叉编译器编译。安装交叉编译器非常简单,步骤如下:
1)拷贝arm-linux-gcc交叉编译器软件包arm-linux-gcc-4.3.2.tgz到/home/cao/Soft目录。2)进入到Soft目录,在该目录下执行tar zxvf arm-linux-gcc-4.3.2.tgz –C / 命令 解压arm-linux-gcc-4.3.2.tgz。如下图所示:
注: C是大写,C后面有个空格
该命令执行后,将把arm-linux-gcc 安装到 /usr/local/arm/4.3.2 目录。arm-linux-gcc编译器安装好后,我们还要把交叉编译器arm-linux-gcc的路径加入到系统的PATH环境变量,这样在操作终端的其他任意目录下都可以使用arm-linux-gcc。设置环境变量的步骤如下: 1)在终端界面下输入 gedit /root/.bashrc ,编辑./bashrc 文件,如下图所示:
2)在.bashrc文件中增加如下命令把交叉编译器的路径增加到环境变量PATH中, export PATH=$PATH:/usr/local/arm/4.3.2/bin,然后保存推出,如下图所示:
重新打开终端,通过su命令切换到root用户,输入arm-linux-gcc –v就可以看到我们安装的交叉编译器arm-linux-gcc的版本信息了。如下图所示:
关键词:嵌入式系统;Linux;LCD
中图分类号:TP316文献标识码:A文章编号:1007-9599 (2011) 08-0000-01
LCD Driver Design Based on s3c2410 in Embedded Linux
Li Lifeng
(North University,Taiyuan030051,China)
Abstract:This paper describes an embedded linux system design based on s3c2410 the LCD driver,through the Linux device driver described the principle and mechanism,combined with a large number of source code analysis,the LCD driver S3C2410 based development programs.
Keywords:Embedded system;Linux;LCD
嵌入式应用在成本和实时性方面均有较高要求,嵌入式在Linux方面的应用主要体现在对相关硬件驱动
程序的编写和应用程序的开发上。LCD作为嵌入式设备的一项重要应用,其驱动程序的设计及编译是一项重要工作。本文介绍了基于嵌入式Linux系统平台上s3c2410的LCD驱动设计方案,并结合大量源代码做出了分析。
一、LINUX驱动设计基础
ARM-Linux驱动程序的构造和普通Linux的构造相似,都支持模块化,因此,大多数驱动程序以模块化形式出现,但是都同时能适用于多种体系结构。Linux是可以支持模块化模式的,但由于嵌入式应用是针对具体的应用,所以,一般不采用该模式,而是把驱动程序直接编译进内核之中。但是这种模式是调试驱动模块的极佳方法。
设备驱动程序为操作系统内核和机器硬件之间提供了一个接口。驱动程序为用户屏蔽了设备的具体细节,这样对于用户来说,硬件设备只是一个设备文件,用户可以像操作普通文件一样对设备文件进行各种操作。
二、LINUX设备驱动程序设计构想
一般情况下,设备驱动程序包含两个基本的内容:一部分函数通过被系统调用执行;而,另一部分函数则被用来处理中断。在file_operations结构中,函数成员的名称都有一个相应的系统调用。用户程序通过一个系统调用,例如对某设备文件进行write操作时,这时该设备文件的驱动程序就会执行相应的ssize_t(*writev)(struct file*,const struct iovec*,unsigned long,loff_t*)函数。对于操作系统来说,外设的存取是通过一组固定入口进行的外设的驱动程序提供这组固定入口,结构体file_operations对系统说明。这样,设备驱动程序的编写主要是用子函数来填充file_operations的相应域。file_operations的数据结构在LINUX内核中有完整定义,其源代码参看fs.h。
其中主要的子函数功能介绍如下:
(一)open是驱动程序中设备初始化操作的部分,还增加设备使用计数。open主要进行的操作有:设备差错(例如设备未就绪或设备被占用);假如是第一次打开设备,对设备进行初始化;对private_data内的数据结构进行填写和分配;设备使用计数加1。
(二)release是驱动程序中关闭设备时调用的操作,其作用与open相反。release主要进行的操作有:设备使用计数减1;释放open分配的内存,并在最后执行关闭操作时关闭设备。
三、LCD设备驱动程序具体设计
LCD的设备驱动程序属于字符设备的驱动,因此,按照字符设备的规则编写。LCD设备文件的file_operations结构主要函数源代码如下:
struct file_operations LCD_fops={
open:LCD_Open,
ioctl:LCD_Ioctl,
release:LCD_Close,
};
static void CloseLCD(struct inode*inode,struct file*file)
{
Printk("LCD is closedn");
Return;
}
static int OpenLCD(struct inode*inode,struct file*file)
{
Printk("LCD is openn");
return 0;
}
void__exit LCDdriver_Exit(void)
{
Lcd_CstnOnOff(0);
unregister_chrdev(LCD_MAJOR,"S3C2410LCD");
printk("You have uninstall The LCD Driver successfully,n if you want to install again,please use the insmod commandn");
}
module_init(LCD_Init);
module_exit(LCDdriver_Exit);
作为一个LCD的驱动程序,除打开、关闭、卸载等动作外还需要制作一些应用函数,如绘制点函数void LCD_DrawPixel(U16 x,U16 y),得到点值函数U32 LCD_GetPixel(U16 x,U16 y),清屏函数void LCD_Clear(U16 x0,U16 y0,U16 x1,U16 y1)等等,本文限于篇幅不一一列出。
四、结束语
本驱动设计简洁,条理清楚。已经成功的运用于教学用ARM平台,并且运行稳定。以上设计使用LINUX 2.4.14.2版本在基于S3C2410处理器的嵌入式平台上调试通过。限于作者经验问题,文中如有不当敬请指正。
参考文献:
[1]韦东山.嵌入式linux应用开发完全手册[M].北京:人民邮电出版社
[2]徐英慧.ARM9嵌入式系统设计-基于S3C2410与Linux[M].北京:北京航空航天大学出版社
【构建嵌入式linux系统】推荐阅读:
嵌入式系统开发试题07-19
嵌入式毕业论文:嵌入式系统的应用06-19
嵌入式系统试题库09-20
嵌入式系统学习心得07-11
嵌入式系统设计课程设计大纲(给学生)10-22
嵌入式培训总结06-17
实习总结嵌入式11-11
嵌入式开发学习心得11-16
嵌入式应用实践总结12-17
嵌入式笔试题及答案11-22