Chinaunix首页 | 论坛 | 博客
  • 博客访问: 262494
  • 博文数量: 84
  • 博客积分: 3742
  • 博客等级: 中校
  • 技术积分: 870
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-20 19:38
文章分类

全部博文(84)

文章存档

2012年(6)

2011年(21)

2010年(54)

2009年(3)

分类: 嵌入式

2010-12-01 13:52:03

看到这篇嵌入式系统开发的基础性文章,虽说很简单,但条理清楚,对于新手而言,还是有所帮助的,所以就贴上来!

本文主要由以下几个模块组成:

1,  环境搭建
2,  嵌入式开发流程
3,  关于交叉编译环境及程序调试
4,   嵌入式开发的三个层次


环境搭建

一、认识开发板

1,ARM开发板的硬件配置(以S3C2410为例)

CPU、SDRAM、FLASH、LCD(包括键盘LED驱动器,触摸屏)、以太网、USB、串口、调试接口(JTAG)、AD及扩展。

2,ARM体系结构与编程。

仅仅了解arm开发板的硬件构成显然是不够的,还需要由表及里,了解ARM体系结构与编程。这部分内容有相应文档,中文版有杜春雷编写的《ARM体系结构与编程》。

注:SDRAM = Synchronous DRAM,同步动态随机存取存储器

这是一种与CPU实现外频Clock同步的内存模式,一般都采用168Pin的内存模组,工作电压为3.3V。 所谓clock同步是将CPU与RAM通过一个相同的时钟锁在一起,使RAM和CPU能够共享一个时钟周期,以相同的速度同步工作,这样可以取消等待周期,减少数据传输的延迟,因此可提升计算机的性能和效率。

二、开发板与宿主机直接通信

开发板与主机之间的通信有4种方式:

1.       JTAG。

2.       COM。传输协议通常是xmodem/ymodem/zmodem.

3.          网口。TFTP协议。

4.       SD卡口

 

三、宿主机之windows平台

开发环境:ADS1.2+超级终端

ADS1.2:学会使用ADS平台软件,会用AXD进行调试。

超级终端:一般设置波特率115200,数据位8位,停止位1,无奇偶校验,软件硬件流控制设为无。

配置网络:主要是配置NFS,需关闭防火墙,简化嵌入式网络调试环境设置过程。

 

四、宿主机之Linux平台

开发环境:Linux+minicom

Linux:定制或全部安装。下载安装交叉编译器

minicom:初始化,配置, 同windows下超级终端。

配置网络:主要是配置NFS,需关闭iptables。

 

五、文件烧写

包括烧写内核,根文件系统,应用程序等。

内核映像的烧写有两种方式:

1.vivi,xmodem协议下载,然后烧写

2.linux系统启动后,使用imagewrite工具烧写  imagewrite /dev/mtd/0 zImage:192k

 

嵌入式开发流程

环境搭建起来之后,接下来则要进行嵌入式开发了,根据一般开发流程,大致可分为6个过程。


一、建立引导装载程序BOOTLOADER。这是程序正常运行的第一步。

常见的有:U-BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等。

这些都公开源码,可以在网上下载,然后根据自己的内核、芯片进行修改,移植。

有些芯片没有bootloader,如Samsung的ARM9系列芯片,这需自己编写,然后烧写到Flash里。

Windows下可通过JTAG并口烧写。

Linux下用源码公开的J-FLASH。购买厂家,则无法了解其核心技术,但可极大提高开发速度。

 

二、下载操作系统到开发板上。

一般而言,新买的开发板上已经自带烧写好了的Linux操作系统。当然你也可以自己完成,先到网上下载别人已经移植好的,如uclinux、arm-linux、ppc-linux。

操作系统成功安装之后,就是添加自己特点硬件的驱动程序,进行修改调试。

对于自带MMU的处理器可以使用模块方式调试,对于uclinux则只能通过编译进内核调试。

 
三、建立根文件系统

可到下载,使用busybox软件进行功能裁剪,产生一个最基本的根文件系统,再根据应用需求添加其他程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc 目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile 等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用 mkcramfs、genromfs 等工具产生烧写映象文件。

 

四、建立应用程序的Flash磁盘分区,一般使用JFFS2或YAFFS文件系统。

这需要内核中提供这些文件系统的驱动,有的系统使用非线性Flash(NAND型),有的系统使用线性Flash(NOR型),有的两者都用。


五、开发应用程序。

可放在根文件系统,也可放在JFFS2或YAFFS文件系统。也有直接将应用程序和内核设计在一起,比如uc/os-II。

 

六、烧写内核、根文件系统,应用程序。

至此,一个完整的嵌入式系统开发流程就完成了。

 

 

关于交叉编译环境及程序调试

一、交叉编译环境

绝大多数的 Linux 软件开发都是本机(HOST)开发、调试, 本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板子上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台 PC 机)上,对应的开发板叫做目标板。运行 Linux 的 PC(宿主机)开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行),然后把可执行文件下载到目标机上运行。

 

调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。

 

宿主机和目标板的处理器一般都不相同,宿主机为 INTEL 处理器,而目标板如 UP-NETARM2410 开发板为三星 S3C2410,GNU 编译器提供这样的功能,在编译器编译时可以选择开发所需的宿主机和目标机从而建立开发环境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的 PC 机作宿主开发机,对于嵌入式LINUX,宿主机上的操作系统一般要求为 REDHAT LINUX。嵌入式开发通常要求宿主机配置有网络,支持 NFS(为交叉开发时 mount 所用)。然后要在宿主机上建立交叉编译调试的开发环境。

 
二、程序调试

上面所有的东西看起来很复杂,但大多数嵌入式系统开发者大多数时间辛勤耕耘的根据地其实是软件的开发调试环境。而这部分要求跟PC平台开发者功力相当,遗憾的是,我最薄弱的地方其实就是这里,因为这里的提高非一日之功。在此悼念我的大学时光。

 

 
嵌入式开发的三个层次

一、无操作系统

这个层次中,由于没有操作系统,这时的开发板基本类似于单片机,所有的硬件都是有自己用程序控制。需要考虑的问题比较多,适合从事底层嵌入式开发者。适合偏硬的嵌入式软件开发工程师。

 

二、仅有操作系统内核。最典型的是uc/os-II

uc/os基本可以说是一个只有内核的操作系统。但已更为智能。

 

三、有操作系统。又可以分为WinCE和嵌入式Linux

目前,真正做嵌入式软件开发的人员,往往在有操作系统的开发板上编程,这时开发者可以更加全心的关注嵌入式产品实现的功能,而不必过多考虑底层的实现。适合偏软的嵌入式软件开发工程师。

 

上面三个层次的划分是一般意义上的,在实际应用中,用到的最多的有完整操作系统的开发,是下面两种组合方式:

1,  RedHat 9.0 + minicom + armlinux开发环境

2,  Windows XP + 超级终端 + ADS1.2开发环境

 

 
阅读(1211) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~