您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页基于Linux嵌入式系统开发平台的构建及应用

基于Linux嵌入式系统开发平台的构建及应用

来源:爱问旅游网
嵌入式技术林继民等:基于Linux嵌入式系统开发平台的构建及应用

基于Linux嵌入式系统开发平台的构建及应用

林继民,吴󰀁怡,林󰀁萧

(福建师范大学物理与光电信息科技学院,福建福州󰀁350007)

摘󰀁要:为了能够在硬件基础之上,按照产品要求或者研究需要进行各种嵌入式应用程序的开发,在介绍ARM和Linux特点的基础上,通过宿主机和开发板的对接模式,成功地将嵌入式Linux操作系统移植到32位微处理器S3C2410A上,从而建立所需的嵌入式开发平台。简要讨论几种调试方法,并提出一种整体打包的方法,最后以一个简单的Qtopia菜单程序为例,说明嵌入式应用程序的开发过程。

关键词:ARM;嵌入式系统;Linux;Qtopia

中图分类号:TN911󰀁34;TP316󰀁󰀁󰀁文献标识码:A󰀁󰀁󰀁文章编号:1004󰀁373X(2010)18󰀁0030󰀁05

EstablishmentandApplicationofEmbeddedSystemDevelopmentPlatformBasedonLinux

LINJi󰀁min,WUYi,LINXiao

(SchoolofPhysicsandOptoelectronicsTechnology,FujianNormalUniversity,Fuzhou350007,China)

Abstract:AsthemassapplicationofembeddedproductsandparticulardominanceofLinuxsystem,thedevelopmentandstudyaboutembeddedsystemshavebecomeamaintopicofdiscussion.Inordertodevelopvariousembeddedapplicationsbasedonhardwareaccordingtotherequirementofproductsandtheneedofstudy,theembeddedLinuxsystemistransplantedintothe32bitmicro󰀁processorS3C2410AsuccessfullywiththedockingmodeofthehostanddevelopmentboardaccordingtothecharactersofARMandLinux,andthentheneededembeddeddevelopmentplatformissetup.Severaldebuggingmethodsarediscussedandaoverallpackagemethodisputforward.TakingaQtopiaapplicationasanexample,thedevelopmentprocessofanembeddedapplicationprogramisdepicted.

Keywords:ARM;embeddedsystem;Linux;Qtopia

0󰀁引󰀁言

嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁减,适用于应用系统对功能、可靠性、成本、功耗有严格要求的专用计算机系统,通常由嵌入式微处理器、外围硬件设备、嵌入式操作系统、及用户应用程序四部分组成,用于实现对其他设备的控制、监视或者管理等功能

[1]

上搭建嵌入式开发平台,然后进行各种应用程序的

开发。1󰀁硬件平台

本文使用的硬件平台是杭州立宇太电子有限公司的ARMSYS系列嵌入式系统开发板。它使用三星公司的S3C2410A处理器。S3C2410A是一款包含ARM920T内核的16/32位精简指令集计算机(RISC)嵌人式微处理器。ARM920T核由ARM9TDMI、存储管理单元(MMU)和高速缓存3部分组成。该处理器主要面向手持设备以及高性价比、低功耗的应用,运行频率可达203MHz,可支持ARM󰀁Linux,WindowsCE等操作系统的嵌入式硬件平台。

ARMSYS2410开发板的硬件资源主要由CPU、存储器、串口、2个USBHostA型接口、1个USBSlaveB型接口、以太网控制器CS8900及接口、JTAG调试口、LCD(夜晶显示屏)触摸屏接口,音频接口、电源复位等电路组成。其中,CPU采用S3C2410A;存储器由1片64MB的SDRAM,1片1MB的NORFLASH和1片64MBNADNFLASH构成;2个串口为COM0和COM1。

,类似于PC机上的Win󰀁

dowsXP系统。嵌入式操作系统是一种更加精简、功能相对完整的操作系统,目前比较流行的嵌入式操作系统主要有Linux,WindowsCE,Vxworks,󰀁C/OS󰀁󰀂等。Linux操作系统是一个免费并且源代码开放的操作系统,用户可以免费获得Linux源代码,然后根据自己的应用需求对系统进行定制和改造[2]。

本文选用的32位ARM920T内核微处理器是三星公司的S3C2410A󰀁20[3],它可以支持2.4版本和2.6版本内核的Linux操作系统。本文把2.4版本内核的Linux操作系统嵌入到ARM体系结构中,并在此基础

收稿日期:2010󰀁04󰀁22

基金项目:福建省自然科学基金资助项目(2008J0017)

30 现代电子技术!2010年第18期总第329期2󰀁嵌入式Linux系统的移植

有些操作系统如Linux,WindowsCE等经过移植后可以运行在不同的硬件平台上。移植就是把某一个平台上的代码运行在其他平台上的过程。2.1󰀁U󰀁Boot的移植

一般而言,计算机系统都需要有启动的引导程序。PC机的引导代码就是BIOS引导程序,而嵌入式Linux系统的引导加载程序称之为Bootloader。Bootloader是系统加电后运行的第一段代码,它的主要运行任务就是将内核映像从硬盘上读到RAM中,然后跳转到内核的入口点去运行,即开始启动操作系统[4]。通过Boot󰀁loader小程序可以初始化硬件设备,建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境[3]。Uboot是最常见的Bootloader,主要用来完成系统环境的初始化,将后期执行代码复制到SDRAM空间,为Linux内核的运行准备好条件。

2.1.1󰀁Windows和Linux系统的文件共享

实现Windows下文件到Linux系统的共享方法有很多种,比如使用Samba,硬盘挂载mount和直接使用虚拟机的SharedFolders等。在PC上安装一个虚拟机VMware和RedHatLinux,虚拟机的好处就是可以在虚拟机中打开操作系统Linux,实现WindowsXP系统下资源的共享和Linux操作系统图像界面的全屏化,共享的文件可以在/mnt/hgfs目录下看到[5]。2.1.2󰀁配置和编译U󰀁boot

不同硬件板的U󰀁boot配置也稍有不同。移植U󰀁boot主要包括添加开发板硬件相关的文件等。为了不改动原来的smkd2410.h文件,在uboot2410/in󰀁clude/configs/下的smdk2410.h复制一份并更名为ar󰀁msys2410.h,可以通过armsys2410.h来修改U󰀁boot软硬件配置,包括硬件板直接相关联的CPU类型、开发板IP、波特率等。设置所需要的配置后就能编译U󰀁boot。U󰀁boot编译的具体过程如下:

(1)将板子取名为armsys2410,在Makefile中加入armsys2410_config:unconfig@./mkconfig$(@:_config=)armarm920tarmsys2410NULLs3c24x0.(2)在/u󰀁boot_2410/board/下建立armsys2410目录,并把/board/smdk2410/下的文件拷贝到/board/ar󰀁msys2410下,将smdk2410.c更名为armsys2410.c

(3)编译U󰀁boot,即可生成u󰀁boot.bin可执行文件,具体的执行命令如下:

makesmdk2410_configmakeallARCH=arm

󰀁

󰀂

计算机应用技术

(4)下载u󰀁boot.bin到S3C2410开发平台的NANDFLASH,成功下载后开发板上电就能从超级终端上看到刚下载的U󰀁boot启动程序。启动过程中按下任意键,出现如图1所示的启动画面。

2.2󰀁zImage的移植

Linux内核主要由以下5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口、进程间通信。内核结构中的几个主要目录存放着大量的源代码等信息。ARMSYS2410开发板的CPU内核可以移植2.4和2.6版本的Linux内核,本文选用2.4版本的Linux内核。对Linux内核的移植是一个庞大的工程,首先要对其源码结构有清楚的认识,并能深刻理解其中的源代码,然后在此基础上修改或编写需要的源代码,以达到预期的目的。Linux内核目录[2]如下:/Documenta󰀁tion:存放了许多的文档/arch:不同体系结构特定的内核代码;/drivers:设备的驱动程序;/fs:文件系统代码;/include:相关库文件;/init:内核的初始化代码;/ipc:进程通信代码;/kernel:主内核代码;/lib:存放高速体系结构特有的和通用函数的实现;/mm:内存管理代码;/net:网络相关代码;/scripts:存放了配置内核的一些脚本文件。

[3]

图1󰀁启动画面

2.2.1󰀁交叉编译环境

开发板是ARM9处理器,开发板平台上没有编译器,只负责存放编译好的目标代码,并能够执行。源代码的编译器是存放主机Linux系统上的,为了使在主机Linux系统上编译的代码能够在ARM9处理器中执行,必须有一交叉编译工具。交叉编译器和链接器是在宿主机上运行的,并且能够生成在目标机上直接运行的二进制可执行文件。安装cross󰀁2.95.3.tar.bz2,并设置好交叉编译器的启动路径,完成交叉编译环境的建立,上文编译u󰀁boot.bin时已经用到arm󰀁linux󰀁gcc。2.2.2󰀁配置和编译Linux内核

tarzxvfkernel_armsys_070730.tar.gz(解压内核文件),当出现文件夹/kernel时,就能看到上述几个目录。每个目录下都有很多的相关模块,通过筛选和裁

31

嵌入式技术林继民等:基于Linux嵌入式系统开发平台的构建及应用

这样就可以把zImage固化到开发板的内存中,通过boot命令即可启动内核。2.3󰀁文件系统的移植

文件系统是操作系统中用来管理用户文件的内核软件层。根文件系统是Linux系统的核心部分,包括系统使用的软件和库,以及所有用来为用户提供支持架构和用户使用的应用软件,并作为存储数据读/写结果的区域。在Linux系统启动时,首先完成内核安装及环境初始化,最后寻找一个文件系统作为根文件系统被加载。嵌入式系统中通常可以选择的根文件系统有:Romfs,Cramfs,Ramfs,YAFFS,JFFS和JFFS2等。本文使用的YAFFS是专为NANDFLASH存储器设计的嵌入式文件系统,适用于大容量的存储设备,YAFFS是可读写的文件系统,而且保存在文件系统的文件和设置在掉电后不会丢失[1󰀁2]。

U󰀁boot也支持nfs挂载功能,把开发板提供的root󰀁armsys󰀁nfs󰀁050801.tgz放到/armsys2410目录下,解压后的文件名更改为root,这是网络文件系统。在/armsys2410/root/bin/目录下有一个用于下载根文件系统到NANDFLASH的下载工具Writerootfs。把根文件系统压缩包root_armsys_l35t32.tgz拷到在/arm󰀁sys2410/root目录下,这个压缩包就是用于固化在NANDFLASH上的根文系统YAFFS。

(1)关闭WindowsXP和Linux系统的防火墙,设置文件系统的nfs挂载,在宿主机上先启动NFS服务:/etc/rc.d/init.d/nfsstart。设置服务器的共享目录,编辑文件/etc/exports,在文件中添加内容:/arm󰀁sys2410/root*(rw,sync,no_root_squash),然后保存退出。其中:/armsys2410/root代表要共享输出的root文件系统的共享目录;*代表所有客户机都可以挂载次文件系统;rw代表客户机可以读写许可地挂载它们的根文件系统;no_root_squash表示允许客户机以主机上的root身份挂载根文件系统。

表1󰀁开发板的参数设置10.192.3.20010.192.3.100

linux_argnoinitrdroot=/dev/mtdblock/2init=linuxrcconsole=ttyS0

bootcmdnandrce000030008000/bootm

[2]

剪,选择所需要的极少部分即可。开发板的内存容量比较有限,而且有很多的用途,不能一味地去装很大的内核,所以只有通过适当地裁剪才能真正达到移植的目的。

配置内核:makemenuconfig,对开发板做进一步的裁剪,LoadanAlternateConfigurationFile,选择一个ARMSYS2410板的内核配置文件作为模板:Arm󰀁sys2410_cfg;选择适合LCD和触摸屏规格的配置,Consoledrivers∀Frame󰀁buffersupport∀S3C2410BoardLCDDisplaySize∀320x240;触摸屏选择:Char󰀁acterdevices∀S3C2410TOUCHSCREENSize∀X>Y,表示横放模式。为了使嵌入式目标系统的Linux内核支持NFS客户端,在进行配置内核时必须选择Filesystems󰀁>NetworkFileSystems󰀁>ProvideNFSv3clientsupport和NFSfilesystemsupport。做这样简单的配置之后就可以进行编译了,makeclean,makedep,创建内核的依赖关系;makezImage,创建内核镜像文件,编译成功后可得到刚裁剪配置的Linux内核压缩映像文件zImage。2.2.3󰀁zImage的下载

系统映像的下载只能由bootloader提供。通过bootloader提供的命令行或者交互Shell界面可以指定内核映像和文件系统映像的下载位置,也可以检查目标板上内存地址中的内容[6]。使用U󰀁boot下载Linux内核的最快捷方法是通过网络传输。TFTP是TCP/IP协议族中一个用来在客户机与服务器之间进行简单文件传输的协议,用于提供不复杂、开销不大的文件传输服务,它基于UDP协议实现。U󰀁boot支持TFTP协议,因此可以利用网络接口,使用tftp传输的方法来下载zImage,在根目录下建一个/tftpboot目录,把zIm󰀁age拷到/tftpboot目录下,启动tftp:/etc/init.d/vsft󰀁pdstart。假设PC主机设IP为10.192.3.100,则开发板的设置如下:

开发板IP地址Tftp服务器IP地址内核启动参数Bootcmd启动命令

(2)开发板的启动参数设置:setenvlinux_argroot=/dev/nfsinit=/linuxrcnfsroot=10.192.3.100:/armsys2410/rootip=10.192.3.200:10.192.3.100:10.192.3.1:255.255.255.0:jmaylin:eth0:offconsole=ttyS0。它说明宿主机挂载在目标机上的目录是/arm󰀁sys2410/root。

(3)重启开发板,看到WelcometoNFSrootfilesystem!说明成功挂载主机目录/armsys2410/root。使用Writerootfs命令开始下载文件系统root_armsys_l35t32.tgz,该文件系统集成了Qtoqia等应用程序,开发板上电后,除了进入文件系统外,还在LCD上显示Qtoqia应用程序图形界面。

使用ping命令查看是否与主机连通,若显示host10.192.3.100isalive,说明宿主机已经与目标机建立链接。传输zImage到开发板的内存为:

SMDK2410#tftp30000000zImage

;映像文件zImage传送到暂存地址0x30000000

SMDK2410#nandwce000030000000

;写入内核的起始块号为c的NANDFLASH

32 现代电子技术!2010年第18期总第329期3󰀁嵌入式Linux应用程序的开发

经过上面的过程,一个嵌入式开发平台基本搭建完成。在这个平台上就能进行各种应用程序的开发。基于ARMSYS2410开发板,其源程序的编写、编译调试等过程都在主机上进行,最后再把编译生成的可执行文件固化到开发板上去运行,下面讨论几种调试方法。3.1󰀁调试方法

(1)Nfs挂载

在配置内核的时候,选择选项Filesystems∀Net󰀁workFileSystems∀ProvideNFSv3clientsupport和NFSfilesystemsupport,这样才能保证正常地从开发板的文件系统去挂载主机上的共享目录。然后可以在主机上使用交叉编译工具编译和直接运行,只要把相应的库文件设置好即可。这种方法不用传递可执行文件,即可在开发板的文件系统直接运行主机上的可执行文件,方便快捷,是较为常用的一种调试方法。

(2)ftp传输方法

#查看主机有没有装ftp服务:rpm󰀁qa|grepvsft󰀁pd,然后启动ftp:/sbin/servicevsftpdstart。主机上的/var/ftp目录就是ftp的共享目录,把可执行文件(比如hello)放在该目录下。

∃开发板文件系统:设置开发板的IP,使其与宿主机IP处于同一网段。在开发板的文件系统里ftp登录主机:ftp10.192.3.100,使用匿名登录,显示主机共享/var/ftp目录下的hello可执行文件,下载可执行文件到开发板的文件系统:ftp>gethello。通常,使用这种方法还要修改可执行文件的执行模式。

(3)U盘挂载

可以把在主机上可执行文件hello拷到U盘里面,利用开发板的USBHOST端口把U盘挂载到板上,然后拷贝U盘里的hello到文件系统里执行。

(4)整体打包

上面几种方法都是在已有的文件系统上操作的,整体打包的方法是对预下载的整个文件系统进行编辑。加载的文件系统YAFFS是压缩格式的root_armsys.tgz,只有当开发板上电启动后,才把根文件系统解压出来。在主机Linux系统/armsys2410目录下,新建一个test文件夹,把root_armsys.tgz拷到/test目录下并解压,再把应用程序的可执行文件放到/test目录下,重新把所有文件打包成root_armsys.tgz:tar󰀁czvfroot_ar󰀁msys.tgz./*,再一次加载到NANDFLASH中,更新原来的文件系统。这种方法是直接对整个根文件系统进行编辑,适用于在开发文件系统时使用,但是每次都要重新下载整个文件系统,比较繁琐。

3.2󰀁Qtopia应用程序

󰀁

󰀂

计算机应用技术

Qt/Embedded是Trolltech公司开发的面向嵌入式系统的Qt版本,2000年11月发布了第一个Qt/E版本,而Qtopia则是构建于Qt/E之上的类似桌面系统的应用环境,包括PDA和手机等掌上系统常见的功能,如:电话簿、图像浏览、Media播放器、日历等[6]。Qt应用程序实现的是对静态图像的显示及其形态的处理操作

[7]

为了开发和调试Qtopia应用程序,必须安装基于PC和ARM的Qt开发环境。下面以一个简单的菜单程序为例来说明Qtopia应用程序的开发过程。程序开发流程如图2所示。

图2󰀁Qt应用程序开发流程图

(1)使用基于PC的Qt开发环境编译

在建立基于PC的Qt开发环境时,需要编辑/etc/ld.so.conf,使得在源程序编译链接过程中能找到相应的库文件:/armsys2410/qt_x86/qt/lib和/arm󰀁sys2410/qt_x86/qtopia/lib。保存退出后激活设置ld󰀁config。当用完库后可以把/etc/ld.so.conf改回来,不然会影响系统上其他应用程序的启动,加上%#&将其注释掉。设置基于PC的Qt开发环境的环境变量,保证编译的正确路径:sourceset󰀁env。主程序源代码main.cpp如下:

#include\"menu.h\"

intmain(intargc,char**argv){󰀁QApplicationapp(argc,argv);//defineaapplication󰀁MainWidget*mainwidget=newMainWidget(0);

//defineaMainWidgetobject

󰀁mainwidget󰀁>setGeometry(10,30,320,240);

//settheobject∋scoordinateandsize

󰀁app.setMainWidget(mainwidget);

//sendthecreatingobjecttocurrentapplication

󰀁mainwidget󰀁>show();//showwindow󰀁intresult=app.exec();

//runorexecutetheapplicationrepeatedly

󰀁returnresult;}

利用Qt环境调试过程:

#产生工程文件:progen󰀁tapp.t󰀁omain.pro;∃产生Makefile文件:tmake󰀁oMakefilemain.

33

嵌入式技术林继民等:基于Linux嵌入式系统开发平台的构建及应用

开发的调试方法,并进行简单的讨论和比较。最后通过调试和编译简单的Qtopia应用程序,说明了嵌入式应用程序的开发过程,为开发实际应用程序和驱动程序奠定了基础。

参󰀁考󰀁文󰀁献

pro,修改Makefile中的lib,加链接库󰀁lmlstdc++即可;

(运行make产生menu的可执行文件;

)打开虚拟帧缓存:qvfb&,运行可执行文件menu:./menu󰀁qws。

(2)使用基于开发板的Qt开发环境编译

设置基于ARM的Qt开发环境的环境变量:sourceset󰀁env。为了能生成可在目标板上运行的可执行文件,需要把生成Makefile文件中的编译器、链接器gcc,g++分别改为arm󰀁linux󰀁gcc和arm󰀁linux󰀁g++,其他步骤同上。最后选择一种文件传输办法,把menu送到ARM板上运行,执行界面如图3所示。

[1]孙天泽,袁文菊,张海峰.嵌入式设计及Linux驱动开发指

南∗∗∗基于ARM9处理器[M].北京:电子工业出版社,2005.

[2]王黎明,陈双桥,闫晓玲,等.ARM9嵌入式系统开发与实践

[M].北京:北京航空航天大学出版社,2008.

[3]SamsungElectronic.User∋smannualS3C2410X32BitRISCmi󰀁

croprocessor[M].SouthKorea:SamsungElectronic,2003.[4]叶林,方建军.基于ARM9嵌入式系统的BootLoader设计

[J].科技信息,2009(11):36󰀁37.

[5]邹颖婷,李绍荣.ARM9上的嵌入式Linux系统移植[J].自

动化技术与应用,2009,28(6):43󰀁45.

[6]刘文峰,李程院,李善平.嵌入式Linux操作系统的研究[J].

图3󰀁执行界面

浙江大学学报:工学版,2004,38(4):447󰀁452.

[7]刘福才,赵佳伟,汤丽娜.基于嵌入式Linux系统的Qt/Em󰀁

bedded图像处理界面开发[J].计算机应用与软件,2009,26(11):116󰀁117,149.

[8]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电

出版社,2006.

[9]邹思轶.嵌入式Linux设计与应用[M].北京:清华大学出版

社,2002.

[10]欧文盛.ARM嵌入式Linux应用实例开发[M].北京:中

国电力出版社,2008.

4󰀁结󰀁语

本文在分析ARM和Linux特点的基础上,详细介

绍了Linux系统移植的各个部分,其中包括U󰀁boot,zImage和YAFFS文件系统的具体操作过程。由此构建了嵌入式Linux开发系统平台,指出Linux移植过程中系统的精简度、安全性、稳定性等方面均需要开发人员做进一步的考虑和研究。给出了几种常见的嵌入式

吴󰀁怡󰀁女,副教授。主要研究方向为无线通信。

作者简介:林继民󰀁男,1982年出生,福建云霄人,在读硕士研究生。主要研究方向为无线通信与嵌入式系统应用。

林󰀁萧󰀁男,1981年出生,硕士,助教。主要研究方向为光电传感及智能测控技术。

󰀁󰀁(上接第29页)

影响,抗外界电磁干扰能力强,受周围外界环境的影响小,因此有着广泛的应用空间。

参󰀁考󰀁文󰀁献

[1]阎石.数字电子技术基础[M].上海:高等教育出版

社,2006.

[2]薛燕红.传感器自动检测系统的设计与实现[J].电子测量

技术,2007(5):196󰀁199.

[3]何克忠.计算机控制系统[M].北京:清华大学大学出版

社,2004.

[4]康华光.电子技术基础[M].北京:高等教育学出版社,2006.[5]李刚民.单片机原理及实用技术[M].北京:高等教育学出

版社,2008.

[6]崔华,刘高鏁.单片机原理实用技术[M].北京:清华大学出

版社,2004.

[7]杨静.电子设计自动化[M].北京:高的教育出版社,2006.[8]新型集成电路简明手册及典型应用[M].西安:西安电子科

技大学出版社,2005.

[9]李刚,林凌.现代测控电路[M].北京:高等教育出版

社,2004.

[10]汪俊,郑宾.虚拟仪器环境下的扫频仪设计[J].电测与仪

表,2008(5):38󰀁40.

作者简介:徐思成󰀁男,1971年出生,副教授。省级商检技术专业特色专业建设点、省级示范性实训基地和省级精品课程负责

人,长期从事电子电器产品检测、产品开发和教学工作。

34

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务