林继民等:基于Linux嵌入式系统开发平台的构建及应用 基于Linux嵌人式系统开发平台的构建及应用 林继民,吴 怡,林 萧 (福建师范大学物理与光电信息科技学院,福建福州 350007) 摘要:为了能够在硬件基础之上,按照产品要求或者研究需要进行各种嵌入式应用程序的开发,在介绍ARM和Linux 特点的基础上,通过宿主机和开发板的对接模式,成功地将嵌入式I inux操作系统移植到32位微处理器¥3C2410A上,从而 建立所需的嵌入式开发平台。简要讨论几种调试方法,并提出一种整体打包的方法,最后以一个简单的Qtopia菜单程序为 例,说明嵌入式应用程序的开发过程。 关键词:ARM;嵌入式系统;Linux;Qtopia 中图分类号:TN9】1 34;TP316 文献标识码:A 文章编号:1004—373X(2010)18-0030—05 Establishment and Application of Embedded System Development Platform Based on Linux LIN Ji—min,WU Yi,LIN Xiao (School of Physics and Optoelectronics Technology,Fuiian Normal University,Fuzhou 350007,China) Abstract:As the mass application of embedded products and particular dominance of Linux system,the development and study about embedded systems have become a main topic of discussion.In order to develop various embedded applications based on hardware according to the requirement of products and the need of study,the embedded Linux system is transplanted into the 32 bit micro—processor¥3C2410A successfully with the docking mode of the host and development board according to the characters of ARM and IAnux,and then the needed embedded development platform is set up.Several debugging methods are discussed and a overall package method is put forward.Taking a Qtopia application as an example,the development process of an embedded application program is depicted. Keywords:ARM;embedded system;Linux;Qtopia 0 引 言 上搭建嵌入式开发平台,然后进行各种应用程序的 开发。 ’ 嵌入式系统是以应用为中心,以计算机技术为基 础,并咀软硬件可裁减,适用于应用系统对功能、可靠 性、成本、功耗有严格要求的专用计算机系统,通常由 嵌入式微处理器、外围硬件设备、嵌入式操作系统、及 用户应用程序四部分组成,用于实现对其他设备的控 制、监视或者管理等功能 ],类似于PC机上的win— dows XP系统。嵌入式操作系统是一种更加精简、功 1硬件平台 本文使用的硬件平台是杭州立宇太电子有限公司 的ARMSYS系列嵌入式系统开发板。它使用三星公 司的¥3C2410A处理器。¥3C2410A是一款包含 ARM92OT内核的16/32位精简指令集计算机(RISC) 嵌人式微处理器。ARM920T核由ARM9TDMI、存储 能相对完整的操作系统,目前比较流行的嵌入式操作系 统主要有Linux,Windows CE,Vxworks, ̄c/os—II 管理单元(MMu)和高速缓存3部分组成。该处理器 主要面向手持设备以及高性价比、低功耗的应用,运行 频率可达203 MHz,可支持ARM—Linux,Windows CE 等。Linux操作系统是一个免费并且源代码开放的操 作系统,用户可以免费获得Linux源代码,然后根据自 己的应用需求对系统进行定制和改造_2j。 本文选用的32位ARM920T内核微处理器是三星 等操作系统的嵌入式硬件平台。 ARMSYS2410开发板的硬件资源主要由CPU、存 储器、串口、2个USB Host A型接口、1个USB Slave 公司的¥3C2410A-20[3],它可以支持2.4版本和2.6版 本内核的Linux操作系统。本文把2.4版本内核的 Linux操作系统嵌入到ARM体系结构中,并在此基础 收稿日期:2O1O O4—22 B型接口、以太网控制器CS89oo及接口、JTAG调试 口、LCD(夜晶显示屏)触摸屏接口,音频接口、电源复位 等电路组成。其中,CPU采用¥3C2410A;存储器由 1片64 MB的SDRAM,1片1 MB的NOR FLASH和 l片64 MB NADN FLASH构成;2个串口为COM0和 C()M1 基金项目:搁建省自然科学基金资助项目(2008J0017) 3O 《现代电子技术)2010年第18期总第329期 2嵌入式Linux系统的移植 计算机应用技术q (4)下载u—boot.bin到¥3C2410开发平台的 NAND FLASH,成功下载后开发板上电就能从超级终 有些操作系统如Linux,Windows CE等经过移植 后可以运行在不同的硬件平台上。移植就是把某一个 平台上的代码运行在其他平台上的过程。 2.1 U—Boot的移植 端上看到刚下载的U—boot启动程序。启动过程中按下 任意键,出现如图1所示的启动画面。 2.2 zlmage的移植 Linux内核主要由以下5个子系统组成:进程调 般而言,计算机系统都需要有启动的引导程序。 度、内存管理、虚拟文件系统、网络接口、进程间通信。 内核结构中的几个主要目录存放着大量的源代码等信 息__3]。ARMSYS2410开发板的CPU内核可以移植2.4 PC机的引导代码就是BIOS引导程序,而嵌入式Linux 系统的引导加载程序称之为Bootloader。Bootloader 是系统加电后运行的第一段代码,它的主要运行任务就 是将内核映像从硬盘上读到RAM中,然后跳转到内核 的入口点去运行,即开始启动操作系统 ]。通过Boot— loader小程序可以初始化硬件设备,建立内存空间的映 射图,从而将系统的软硬件环境带到一个合适的状态, 以便为最终调用操作系统内核准备好正确的环境I3]。 Uboot是最常见的Bootloader,主要用来完成系统环境 的初始化,将后期执行代码复制到SDRAM空间,为 Linux内核的运行准备好条件。 2.1.1 Windows和Linux系统的文件共享 实现Windows下文件到Linux系统的共享方法有 很多种,比如使用Samba,硬盘挂载mount和直接使用 虚拟机的Shared Folders等。在PC上安装一个虚拟 机VMware和Red Hat Linux,虚拟机的好处就是可以 在虚拟机中打开操作系统Linux,实现Windows XP系 统下资源的共享和Linux操作系统图像界面的全屏化, 共享的文件可以在/mnt/hgfs目录下看到[5]。 2.1.2 配置和编译U—boot 不同硬件板的U-boot配置也稍有不同。移植 U—boot主要包括添加开发板硬件相关的文件等。为了 不改动原来的smkd2410.h文件,在uboot2410/in— clude/con gs/下的smdk2410.h复制一份并更名为ar— msys2410.h,可以通过armsys2410.h来修改U—boot 软硬件配置,包括硬件板直接相关联的CPU类型、开 发板IP、波特率等。设置所需要的配置后就能编译 U—boot。U—boot编译的具体过程如下: (1)将板子取名为armsys2410,在Makefile中加 入armsys2410一config:unconfig@./mkconfig¥(@:一 config=)arm arm920t armsys2410 NULL s3c24xO. (2)在/u—boot一2410/board/下建立armsys2410目 录,并把/board/smdk2410/下的文件拷贝到/board/ar— msys2410下,将smdk2410.C更名为armsys2410.C (3)编译U—boot,即可生成u—boot.bin可执行文 件,具体的执行命令如下: make smdk2410config make al1 AR( H—arm 和2.6版本的Linux内核,本文选用2.4版本的Linux 内核。对Linux内核的移植是一个庞大的工程,首先要 对其源码结构有清楚的认识,并能深刻理解其中的源代 码,然后在此基础上修改或编写需要的源代码,以达到 预期的目的。Linux内核目录l2 如下:/Documenta— tion:存放了许多的文档/arch:不同体系结构特定的内 核代码;/drivers:设备的驱动程序;/fs:文件系统代 码;/include:相关库文件;/init:内核的初始化代码;/ ipc:进程通信代码;/kernel:主内核代码;/lib:存放高速 体系结构特有的和通用函数的实现;/ram:内存管理代 码;/net:网络相关代码;/scripts:存放了配置内核的一 些脚本文件。 图1 启动画面 2.2.1 交叉编译环境 开发板是ARM9处理器,开发板平台上没有编译 器,只负责存放编译好的目标代码,并能够执行。源代 码的编译器是存放主机Linux系统上的,为了使在主机 Linux系统上编译的代码能够在ARM9处理器中执 行,必须有一交叉编译工具。交叉编译器和链接器是在 宿主机上运行的,并且能够生成在目标机上直接运行的 二进制可执行文件。安装cross一2.95.3.tar.bz2,并设 置好交叉编译器的启动路径,完成交叉编译环境的建 立,上文编译u—boot.bin时已经用到arm—linux-gcc。 2.2.2 配置和编译Linux内核 tar zxvf kernelarmsys一070730.tar.gz(解压内核 文件),当出现文件夹/kernel时,就能看到上述几个目 录。每个目录下都有很多的相关模块,通过筛选和裁 3】 林继民等:基于Linux嵌入式系统开发平台的构建及应用 剪,选择所需要的极少部分即可。开发板的内存容量比 较有限,而且有很多的用途,不能一味地去装很大的内 核,所以只有通过适当地裁剪才能真正达到移植的 目的。 配置内核:make menuconfig,对开发板做进一步的 裁剪,Load an Alternate Configuration File,选择一个 ARMSYS2410板的内核配置文件作为模板:Arm— sys2410cfg;选择适合LCD和触摸屏规格的配置, Console drivers— Frame—buffer support—+¥3C241O Board LCD Display Size- ̄320x240;触摸屏选择:Char— acter devices--*S3C2410 TOUCHSCREEN Size—X> Y,表示横放模式。为了使嵌入式目标系统的Linux内 核支持NFS客户端,在进行配置内核时必须选择File systems~>Network File Systems一>Provide NFSv3 client support和NFS file system support。做这样简 单的配置之后就可以进行编译了,make clean,make dep,创建内核的依赖关系;make zImage,创建内核镜像 文件,编译成功后可得到刚裁剪配置的Linux内核压缩 映像文件zlmage。 2.2.3 zImage的下载 系统映像的下载只能由bootloader提供。通过 bootloader提供的命令行或者交互Shell界面可以指定 内核映像和文件系统映像的下载位置,也可以检查目标 板上内存地址中的内容[5]。使用U—boot下载Linux内 核的最快捷方法是通过网络传输。TFTP是TCP/IP 协议族中一个用来在客户机与服务器之问进行简单文 件传输的协议,用于提供不复杂、开销不大的文件传输 服务,它基于UDP协议实现。U—boot支持TFTP协 议,因此可以利用网络接口,使用tftp传输的方法来下 载zlmage,在根目录下建一个/tftpboot目录,把zIm— age拷 ̄/tftpboot目录下,启动tftp:/etc/init.d/vsft— pd start。假设PC主机设IP为10.192.3.100,则开发 板的设置如下: 表1开发板的参数设置 开发板IP地址 lO.192.3.200 Tftp服务器lP地址 10.192.3.100 内核启动参数 linuxarg noinitrd root-二/dev/mtdblock /2jnft—linuxrc console=ttySO Bootcmd启动命令 bootcmd nandr c e0000 30008000/bootm 使用ping命令查看是否与主机连通,若显示host 10.192.3.100 is alive,说明宿主机已经与目标机建立 链接。传输zImage到开发板的内存为: SMDK24 1 0#tftp 30000000 zlmage ;映像文件zlmage传送到暂存地址0x30000000 SMDK2410#nandw C eO000 30000000 ;写入内核的起始块号为c的NAND FI ASH 32 这样就可以把zlmage固化到开发板的内存中,通 过boot命令即可启动内核。 2.3 文件系统的移植 文件系统是操作系统中用来管理用户文件的内核 软件层。根文件系统是Linux系统的核心部分,包括系 统使用的软件和库,以及所有用来为用户提供支持架构 和用户使用的应用软件,并作为存储数据读/写结果的 区域。在Linux系统启动时,首先完成内核安装及环境 初始化,最后寻找一个文件系统作为根文件系统被加 载。嵌入式系统中通常可以选择的根文件系统有: Romfs,Cramfs,Ramfs,YAFFS,JFFS和JFFS2等。本 文使用的YAFFS是专为NAND FLASH存储器设计 的嵌入式文件系统,适用于大容量的存储设备,YAFFS 是可读写的文件系统,而且保存在文件系统的文件和设 置在掉电后不会丢失 ]。 U—boot也支持nfs挂载功能,把开发板提供的 root—armsys—nfs一050801.tgz放到/armsys2410目录下, 解压后的文件名更改为root,这是网络文件系统。在 /armsys2410/root/bin/目录下有一个用于下载根文件 系统到NAND FLASH的下载工具Writerootfs。把根 文件系统压缩包root—armsys一135t32.tgz拷到在/arm— sys2410/root目录下,这个压缩包就是用于固化在 NAND FLASH上的根文系统YAFFS。 (1)关闭Windows XP和Linux系统的防火墙,设 置文件系统的nfs挂载,在宿主机上先启动NFS服 务:/etc/rc.d/init.d/Ms start。设置服务器的共享目 录,编辑文件/etc/exports,在文件中添加内容:/arm— sys2410/root*(rw,sync,no—root—squash),然后保存 退出。其中:/armsys2410/root代表要共享输出的root 文件系统的共享目录;*代表所有客户机都可以挂载次 文件系统;rw代表客户机可以读写许可地挂载它们的 根文件系统;no—root—squash表示允许客户机以主机上 的root身份挂载根文件系统l2]。 (2)开发板的启动参数设置:setenv linux—arg root一/dev/nfs init=/linuxrc nfsroot一10.192.3.100: /armsys2410/root ip一10.192.3.200:10.192.3.100:10. 192.3.1:255.255.255.0: maylin:eth0:off console— ttyS0。它说明宿主机挂载在目标机上的目录是/arm— sys2410/root。 (3)重启开发板,看到Welcome to NFS root file system!说明成功挂载主机目录/armsys2410/root。 使用Writerootfs命令开始下载文件系统root—armsys一 135t32.tgz,该文件系统集成了Qtoqia等应用程序,开 发板上电后,除了进入文件系统外,还在LCD上显示 Qtoqia应用程序图形界面。 曳圣撞 Q Q 笺 墨翅总墓圣兰 期 3嵌入式Linux应用程序的开发 经过上面的过程,一个嵌入式开发平台基本搭建完 成。在这个平台上就能进行各种应用程序的开发。基 于ARMSYS2410开发板,其源程序的编写、编译调试 等过程都在主机上进行,最后再把编译生成的可执行文 件固化到开发板上去运行,下面讨论几种调试方法。 3.1调试方法 (1)Nfs挂载 在配置内核的时候,选择选项File systems-- ̄Net— work File Systems-,-Provide NFSv3 client support和 NFS filesystem support,这样才能保证正常地从开发 板的文件系统去挂载主机上的共享目录。然后可以在 主机上使用交叉编译工具编译和直接运行,只要把相应 的库文件设置好即可。这种方法不用传递可执行文件, 即可在开发板的文件系统直接运行主机上的可执行文 件,方便快捷,是较为常用的一种调试方法。 (2)ftp传输方法 ①查看主机有没有装ftp服务:rpm—qa I grep vsft— pd,然后启动ftp:/sbin/service vsftpd start。主机上 的/var/ftp目录就是ftp的共享目录,把可执行文件 (比如hello)放在该目录下。 ②开发板文件系统:设置开发板的IP,使其与宿主 机IP处于同一网段。在开发板的文件系统里ftp登录 主机:ftp 10.192.3.100,使用匿名登录,显示主机共 享/var/ftp目录下的hello可执行文件,下载可执行文 件到开发板的文件系统:ftp>get hello。通常,使用这 种方法还要修改可执行文件的执行模式。 (3)U盘挂载 可以把在主机上可执行文件hello拷到u盘里面, 利用开发板的USB HOST端口把U盘挂载到板上,然 后拷贝U盘里的hello到文件系统里执行。 (4)整体打包 上面几种方法都是在已有的文件系统上操作的,整 体打包的方法是对预下载的整个文件系统进行编辑。 加载的文件系统YAFFS是压缩格式的root—armsys. tgz,只有当开发板上电启动后,才把根文件系统解压出 来。在主机Linux系统/armsys2410目录下,新建一个 test文件夹,把root—armsys.tgz拷到/test目录下并解 压,再把应用程序的可执行文件放到/test目录下,重新 把所有文件打包成root—armsys.tgz:tar—czvf root—ar— msys.tgz./*,再一次加载到NAND FLASH中,更 新原来的文件系统。这种方法是直接对整个根文件系 统进行编辑,适用于在开发文件系统时使用,但是每次 都要重新下载整个文件系统,比较繁琐。 计算机应用技术 3.2 Qtopia应用程序 Qt/Embedded是Trolltech公司开发的面向嵌入 式系统的Qt版本,2000年I1月发布了第一个Qt/E版 本,而Qtopia则是构建于Qt/E之上的类似桌面系统 的应用环境,包括PDA和手机等掌上系统常见的功 能,如:电话簿、图像浏览、Media播放器、日历等【6]。Qt 应用程序实现的是对静态图像的显示及其形态的处理 操作 。 为了开发和调试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开发环境的环境变量,保证 编译的正确路径:source set—env。主程序源代码main. cpp如F: #include”menu.h” int main(int argc.char**argv) { QApplication app(argc,argv); //define a application MainWidget*mainwidget:new MainWidget(0): //define a MainWidget object mainwidget一>setGeometry(10,30,320,240); //set the object S coordinate and size app.setMainWidget(mainwidget); //send the creating object to current application mainwidget一>show(); //show window int result—app.exec(); /run or execute the application repeatedly return result; } 利用Qt环境调试过程: ①产生工程文件:progen—t app.t—O main.pro; ②产生Makefile文件:tmake一0 Makefile main. 33 林继民等:基于Linux嵌入式系统开发平台的构建及应用 pro,修改Makefile中的lib,加链接库一lm lstdc++ 即可; 开发的调试方法,并进行简单的讨论和比较 最后通过 调试和编译简单的Qtopia应用程序,说明了嵌入式应 用程序的开发过程,为开发实际应用程序和驱动程序奠 ③运行make产生menu的可执行文件; ④打开虚拟帧缓存:qvfb ,运行可执行文件 定了基础。 menu:./menu-qws。 (2)使用基于开发板的Qt开发环境编译 参考文献 设置基于ARM的Qt开发环境的环境变量: source set—env。为了能生成可在目标板上运行的可执 [1]孙天泽,袁文菊,张海峰.嵌入式设计及IAnux驱动开发指 行文件,需要把生成Makefile文件中的编译器、链接器 南——基于ARM9处理器[M].北京:电子工业出版 gec,g++分别改为arm—linux—gcc和arm~linux—g++, 社,2005. 其他步骤同上。最后选择一种文件传输办法,把menu [2]王黎明,陈双桥,闫晓玲,等.ARM9嵌入式系统开发与实践 送到ARM板上运行,执行界面如图3所示。 [M].北京:jE京航空航天大学出版社,2008. r3]Samsung Electronic.User S mannual S3C2410X 32Bit RISC mi— croprocessor[M].South Korea:Samsung Electronic,2003. ;; :==● l I《 E4]叶林,方建军.基于ARM9嵌入式系统的BootI oader设计 一 口].科技信息,2009(11):36—37. [5]邹颖婷,李绍荣.ARM9上的嵌入式I inux系统移植[J].自 露 动化技术与应用,2009,28(6):43—45. [6]刘文峰,李程院,李善平.嵌入式Linux操作系统的研究[J]. 浙江大学学报:工学版,2004,38(4):447—452. [7]刘福才,赵佳伟,汤丽娜.基于嵌入式Linux系统的qt/Em— 4结 语 bedded图像处理界面开发[J].计算机应用与软件,2009,26 (11):116-117,149. 本文在分析ARM和Linux特点的基础上,详细介 E8]孙琼.嵌入式Linux应用程序开发详解[M].北京:人民邮电 绍了I inux系统移植的各个部分,其中包括U—boot, 出版社,2006. zlmage和YAFFS文件系统的具体操作过程。由此构 [9]邹思轶.嵌入式I.inux设计与应用[M].北京:清华大学出版 建了嵌入式Linux开发系统平台,指出Linux移植过程 社,2002. 中系统的精简度、安全性、稳定性等方面均需要开发人 [10]欧文盛.ARM嵌入式IAnux应用实例开发[M].北京:中 员做进一步的考虑和研究。给出了几种常见的嵌入式 国电力出版社,2008. 作者简介:林继民 男,1982年出生,福建云霄人,在读硕士研究生。主要研究方向为无线通信与嵌入式系统应用。 吴 怡 女,副教授。主要研究方向为无线通信。 林 萧 男,1981年出生,硕士,助教。主要研究方向为光电传感及智能测控技术。 (上接第29页) L4 原华光.电子技术基础LMJ.北京:商等教育学出版社,2006. 影响,抗外界电磁干扰能力强,受周围外界环境的影响 [5]李刚民.单片机原理及实用技术[M].北京:高等教育学出 小,因此有着广泛的应用空问。 版社,20。 · [6]崔华,刘高缫.单片机原理实用技术[M].北京:清华大学出 参考文献 版社,20O4· [7]杨静.电子设计自动化[M].北京:高的教育出版社,2006. [1 社石.数字电子技术基础[M].上海:高等教育出版 2006. ……茎 曼…… 册及典型应用 Ml西安:西安电子科 [2]薛燕红.传感器自动检测系统的设计与实现[J].电子测量 [9]李刚,林凌·现代测控电路[M]·北京:高等教育出版 技术,2007(5):196—199. 社,2004. [3]何克忠.计算机控制系统[M].北京:清华大学大学出版 [1o]汪俊,郑宾·虚拟仪器环境下的扫频仪设计[J]·电测与仪 社,2004. 表,2008(5):38—4O· 作者简介:徐思成 男,1971年出生,副教授。省级商检技术专,Jk特色专,Jk建设点、省级示范性实训基地和省级精品课程负责 人,长期从事电子电器产品检测、产品开发和教学工作。 34