网站首页
手机版

浅谈嵌入式开发技术总结

更新时间:2022-04-03 14:45:15作者:未知

浅谈嵌入式开发技术总结

  由于嵌入式系统是一个资源受限的系统,所以嵌入系统的软件开发是采用交叉开发实现的。本文总结了嵌入式系统软件的开发技术,分析了嵌入式软件开发的各个过程,给出了每个过程能够使用的各种方法和技术,详细叙述了它们的实现过程,主要内容包括启动软件的选择、启动软件的各种烧写方法、操作系统内核的下载方法、根文件系统的下载方法、NFS文件系统的配置、通过NFS应用程序的交叉开发和目标机程序的编译等。
  
  嵌入式系统将拥有最大的市场。目前在世界范围内嵌入式系统带来的工业年产值已超过了一万亿元, 现在嵌入式系统正处在高速发展阶段。 嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上开发软件比较困难,有时候甚至是不可能的。目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个显著特点,交叉开发环境是指编译、链接和调试嵌入式软件的环境,它与运行嵌入式软件的环境有所不同,通常采用宿主机/目标机模式,目标机和宿主机之间的连接通常有三种连接方式:目标机的串口连接宿主机的串口,目标机的JTAG口连接宿主机的并行口,目标机的网口连接宿主机的网口。

  本文选用某公司生产的OURS_ ARM9_2410EP为嵌入式目标系统,OURS_ARM9_2410EP是一个典型的嵌入式实验系统, 支持ARM9,具有丰富的外部接口,包括串口、JTAG口、PCMCIA卡、SMC卡、SD卡、USB 、网口和VGA接口等,支持三种启动方式,分别可以从两种NOR FLASH和一种NAND FLASH启动,具有丰富的扩展功能,可扩展GPS&GPRS、射频卡和蓝牙等模块。
  
  一、目标机程序的编译
  

  嵌入式系统中的软件一般包含四个部分:启动部分、操作系统内核、根文件系统和应用程序,这些程序是在宿主机的交叉编译环境中编译成目标机CPU能够运行的目标代码,然后下载到目标机。常用的嵌入式集成开发环境有Tornado、PB(Platform Builder)、ADS(ARM Developer Suite)、GNU工具链等。
  
  二、启动部分的烧写

  
  启动部分的烧写有三种方法:通过JTAG接口使用命令烧写、使用仿真器烧写和交叉烧写,其中交叉烧写要求嵌入式系统中含有两个启动部分。
  
  ARM9_2410EP可以直接从FLASH硬盘的零地址执行代码,也就是说将初始启动代码烧写到FLASH零地址开始的地方就可以启动目标系统。支持ARM结构的启动软件有:U_BOOT、PPCBOOT、REBOOT和BLOB,本文以PPCBOOT为例进行说明。
  
  PPCBOOT是源代码开放并遵守GPL(General Public License )的自由软件,支持多种CPU架构,包括alpha、arm、x86、ia64、mips、mips64、ppc、s390、sh、sparc和sparc64,是被广泛使用的一个启动软件。
  
  首先使用GNU工具链将PPCBOOT编译成在目标机可运行的程序ppcboot.bin,编译过程请参阅文献[1]。
  
  1.通过JTAG接口烧写
  

  JTAG技术可以实现在目标机是裸机的情况下将程序烧写到目标机,是简单和直接的烧写方法。
  
  用JTAG连接线连接宿主机的并口和目标机的JTAG接口,确认已经将JTAG 连接好,通过跳线开关配置要烧写的NOR FLASH。在Red Hat Linux或 Windows XP打开命令窗口,运行命令:
  
  ./JFLASH_2410EP_Nor /f: ppcboot.bin
  
  其中JFLASH为烧写工具,/f表示文件,ppcboot.bin是OURS_ARM9_2410EP系统引导程序。
  
  后面有两个选择,表示要烧写的目标地址,分别选择0,0,即开始对FLASH烧写引导程序ppcboot.bin。此后大约等待六七分钟,烧写完成。烧写结束后又出现选择,输入2退出,这时目标板的启动部分烧写完成。使用这种方法烧写的时间比较长,一般较少使用。
  
  2.通过仿真器烧写
  

  在Windows XP中安装ARM ADS集成开发环境,即ARM Developer Suite。安装Multi-ICE仿真器,在宿主机的并口和目标机的JTAG接口之间连接仿真器,连接宿主机的串口和目标机的串口,安装Multi-ICE v2.2软件。运行Multi-ICE Server,点击软件界面左上角的Auto-Configure按钮,在出现仿真器符号后,仿真器连接成功。
  
  通过仿真器可以使程序直接运行在目标机的内存中,不使用目标机的FLASH,有很多程序就是通过仿真器在目标机运行和调试的。
  
  在Windows XP中打开超级终端,在ADS集成开发环境中编译项目ProgramFlash,ProgramFlash是专门编写的操作FLASH的一个软件。通过仿真器运行ProgramFlash,ProgramFlash在超级终端的运行界面。
  
  选择写入的FLASH,然后在超级终端发送ppcboot.bin,按照提示就可以完成启动的烧写。
  
  3.交叉烧写
  

  在目标机支持多启动的情况下, 可以从一个FLASH启动,利用启动软件写FLASH的功能,通过热跳线,写到另一个FLASH中。
  
  如图3所示是一个支持烧写FLASH的启动软件的运行界面,此时通过热跳线到另一个FLASH, 然后选择4就可以实现交叉烧写。
  
  三、操作系统内核的下载
  

  操作系统内核下载到目标机有三种方法:通过JTAG烧写、通过网口和串口从宿主机下载。其中通过JTAG烧写的操作与第一部分相同。在目标机启动PPCBOOT后,由于PPCBOOT支持网口和串口下载,操作系统内核就通过网口或串口下载到目标机。PPCBOOT的详细使用说明见参考文献[2]。
  
  目前使用较多的嵌入式实时操作系统有:美国WindRiver公司设计开发的嵌入式实时操作系统VxWorks、微软公司的WindowsCE、Linux、UC/OS、eCos、Lynx实时系统公司的LynxOS和QNX软件系统有限公司的QNX等。
  
  本文以Linux为例说明操作过程,Linux内核的交叉编译是在Red Hat Linux环境中实现的,编译后内核的文件名是bzImage。
  
  下面分别说明通过网口和串口内核的下载过程。
  
  1.使用网口

  
  从网口下载操作系统内核,首先要在Red Hat Linux或Windows XP中启动tftp服务,启动超级终端,然后启动目标机的PPCBOOT,在超级终端中就可以使用PPCBOOT的tftp命令,将内核下载到目标机。[4]
  
  下面分别说明在Red Hat Linux和Windows XP环境中的操作过程。SMDK2410 #表示PPCBOOT的提示符。
  
  (1)Red Hat Linux环境
  
  实现过程:1)在Red Hat Linux中启动tftp服务;2)在根目录下建立/tftpboot目录;3)把Linux 内核bzImage拷贝到/tftpboot目录下;4)在Red Hat Linux中启动超级终端minicom;5)启动目标板的PPCBOOT;6)在超级终端中运行tftp命令SMDK2410 # tftp 0x30008000 bzImage。其中数值0x30008000为内核下载到实验箱内存中的地址。7)下载Linux内核, SMDK2410# fl 0x1040000 0x30008000 0x100000。三个参数的意义:0x1040000为内核烧写到Flash的地址,当PPCBOOT启动后它会从此地址加载Linux内核。0x30008000为上一步使用的内核下载到内存中的地址。0x100000为内核的大小,0x100000可被替换为大于内核大小且是0x20000倍数的最小整数。
  
  (2)Windows XP 环境
  

  实现过程:1)在Windows XP中启动tftp服务器;2)在Windows XP中启动超级终端;3)启动目标板PPCBOOT;4)在超级终端中运行命令:SMDK2410 # tftp 0x30008000bzImage;5)下载Linux内核:SMDK2410# fl 0x1040000 0x30008000 0x100000。
  
  2.通过串口
  

  从串口下载操作系统内核,同样需要在Red Hat Linux或Windows XP中启动超级终端。启动目标机的PPCBOOT,在PPCBOOT的提示符下输入loadb命令, loadb命令的功能是通过串行线下载可执行文件到目标机,命令格式是:loadb [offset] [baud], 其中Offset是地址偏移量,baud是串口的波特率。
  
  这个命令开始执行后,在超级终端中打开发送文件选项,出现发送文件对话框,在文件名选择项中加入要烧写的内核,然后单击发送,注意超级终端的波特率要与loadb命令的波特率一致。
  
  四、根文件系统

  
  根文件系统(Root File System)下载到目标机的方法与操作系统内核的方法相同。
  
  首先制作根文件系统,Linux根文件系统的制作见文献[5],假定制作后根文件系统的文件名是ramdisk.image.gz,使用下面的命令下载。
  
  SMDK2410# tftp 30800000 ramdisk.imag.gz
  
  SMDK2410# fl 1140000 30800000 200000
  
  其参数意义与上面的内核下载相同。
  
  五、应用程序
  
  由于应用程序运行在内核和根文件之上,所以应用程序的交叉开发能采用更方便的方法,一般采用NFS系统实现。在应用程序运行之前,应交叉编译为目标机的可执行程序。
  
  NFS(Network File System)指网络文件系统,是Linux系统中经常使用的一种服务,NFS是一个RPC service,很像Windows中的文件共享服务。它的设计是为了在不同的系统间使用, 所以它的通讯协议设计与主机及作业系统无关。当使用者想使用远端档案时只要用“mount”就可把远端档案系统挂接在自己的档案系统之下,使得远端的档案在使用上和本地的档案没两样。
  
  NFS系统配置包括目标机和宿主机的配置,其中以宿主机已配置为主。
  
  在NFS服务中,宿主机(Servers)是被挂载(mount)端,为了远端目标机(Clients)可以访问宿主机的文件,宿主机配置两方面内容:打开NFS服务,允许“指定用户”使用。
  
  在Red Hat Linux或Windows XP中均可以使用NFS服务,本文以Red Hat Linux为例进行说明。
  
  1.NFS文件系统配置
  
  宿主机NFS 文件系统的配置过程如下。
  
  首先打开/etc/exports文件,加入如下内容:
  
  / 192.168.2.* (rw,sync,no_root_squash)。
  
  其中:/表示宿主机的目录,在目标机共享,192.168.2.*为目标机的IP地址范围,括弧内表示操作的权限,然后运行命令:exportfs。
  
  NFS服务的启动是由一些命令来完成的,它们是:portmap、rpc.nfsd、rpc.lockd、rpc.statd、rpc.mountd和rpc.rquotad,如果系统中有这几个命令,就运行下列命令启动NFS服务:service nfs start或/etc/rc.d/init.d/nfsstart;如果系统中没有,就下载工具包nfs-utils-1.0.7.tar.gz,然后编译安装就可以了。在目标机也应该启动NFS服务。在上述的工作完成以后,目标机和宿主机就可以通过NFS 文件系统进行软件的调试和运行,即软件编译在宿主机完成,运行在目标机。
  
  2.通过NFS文件系统进行访问
  
  访问过程的实现如下:在宿主机的Red Hat Linux 中运行命令:minicom,minicom是Linux下的超级终端,进入超级终端后进行一些设置,首先按下Ctrl-A,再按Z,然后选择O,进入配置界面,按上下键选择Serial port setup 进行如下设置:
  
  Serial Device:/dev/ttyS0
  
  BPS/par/bits:/115200 8N1
  
  硬件流、软件流均选择无
  
  然后按ESC键退出配置界面,启动目标机,就在超级终端出现Linux命令提示符,键入命令:ifconfig eth0 192.168.2.2,配置目标机的IP地址,然后在宿主机的控制台运行命令:ifconfig eth0 192.168.2.10,配置宿主机的IP地址。
  
  然后在宿主机的超级终端中键入命令:mount-t nfs 192.168.2.10://mnt/,它的作用是把宿主机的/目录挂接到目标机的/mnt/ 目录中,这时宿主机的/目录下的程序就可以运行在目标机中。需要注意的是宿主机应关闭防火墙。
  
  六、结论
  
  本文对嵌入式开发进行了总结,总结了嵌入式目标机软件的各个部分各种不同的实现方法,详细介绍了它们的实现过程。本文选用OURS_ARM9_2410EP作为实验对象,OURS_ARM9_2410EP是一款具有代表性的嵌入式实验平台,其他产品的操作是类似的。本文介绍的方法可在S3C2410的产品中使用,可对嵌入式开发提供一些参考方法。

本文标签: 嵌入式  嵌入式系统  标签  简介  

为您推荐

WPS2016文档怎么快速转换成PDF(wps office文档转换)

WPS2016文档怎么快速转换成PDF 1.打开需要转成的WPS文档,然后点击工具栏的"输出为PDF" 2.接着我们就可以选择转换的页面以及勾选相关的选项. 3

2023-09-28 00:08

手机WPS 手机wps表格怎么制作表格

手机WPS Office怎么填充表格? 手机WPS Office怎么填充表格? 1.首先打开手机WPS Office 2.打开或新建表格 3.点击"工具" 4.

2023-09-27 00:11

WPS2016打印如何节省纸张(wpsoffice怎么打印一张纸)

WPS2016打印如何节省纸张 首先我们在制作文档的时候为了区分段落经常会给段落加上空格进行区分,其实我们可以删除这个段落,这样对于长篇的文档来说可以节省很多空

2023-09-27 00:11

WPS2016如何限制文档编辑 wps文档怎么限制编辑

WPS2016如何限制文档编辑 1.打开需要限制编辑的文档,然后点击左上角的"WPS文字"然后点击"工具"→"限制编辑" 2.在限制编辑列表里点击"限制"选项,

2023-09-27 00:11

WPS2016个性页眉如何制作(wps做页眉)

WPS2016个性页眉如何制作 1.打开需要插入个性页眉的WPS文档 2.点击工具栏的"插入",点击"页眉和页脚" 3.接着点击"插入"→"形状",我们就可以在

2023-09-27 00:10

WPS2016如何修改纸张大小(wps怎样更改纸张大小)

WPS2016如何修改纸张大小 1.打开WPS文档,然后点击工具栏的"页面布局",接着选择"纸张大小" 2.进入页面设置选项后我们就可以根据自己的需求修改页面纸

2023-09-27 00:10