开发板其实和一台电脑是同样的道理,他同样有计算、存储的功能。同样,对Linux的开发板来说,也会像PC一样装有一套系统,只是这套系统不是PC上最常用的Windows,而是Linux系统而已。
嵌入式的硬件结构和PC其实没有什么不同,都是由运算器、控制器、存储器、输入设备和输出设备五大部分组成。
而嵌入式设备来说,总体看来,嵌入式系统具有便利灵活、性能价格比高、嵌入性强等特点,可以嵌入到现有 任何信息 家电和工业控制系统中。从软件角度来看,嵌入式系统具有可修改性、系统所需配置要求较低、系统专业性和实时性较强等特点。
在这也不想说什么嵌入式的特点、分类等等的话题,这些内容直接google即可,但是不得不简单提出几句,来过渡一下。
对于嵌入式硬件来说,是非常广泛的,ARM、DSP、FPGA、STM32等等一大堆的嵌入式硬件平台。从软件角度来看,嵌入式的设备也是五花八门,uC/OS II、Arm-Linux、VxWorks、Windows CE等等,而我列举的也才是其中对我来说出镜率比较高的几种,那么我在接下来的文章里面想要讨论的主要还是 ARM架构下的Linux系统的嵌入式开发 。
至于为什么?原因很简单,就是ARM+Linux使用的范围实在很广。
那么其实还是从拿到的一块开发板开始。
我随便google了一下,出现了一堆的开发板,对于这些开发板来说,长得都差不多,平时我们也都能看到类似的各类电路板。如果我们拆开过电脑,那么我们也会看到一堆的电路板,只是我们在使用电脑的时候,大部分这些板子都被包装在了那些美丽的外壳底下而已。
当你拿到一台PC的时候,无论他是笔记本还是台式机,那么第一件事是干什么呢?
我想,第一件事,不要讨论系统、配置什么的,那些都是次要的,我们肯定需要接线,如果不接线我们都没办法把他们打开,更别说使用了。(虽然笔记本有电池,我发现还是插电的比较多)
那么,我们给开发板接通了电源,上电后,如果开发板在出厂的时候就已经烧好了“系统”(暂且这么说),那么我们可以开机使用了。以上对于PC来说,以上的步骤基本就是完成了的,除非这台PC没有系统,没办法正常启动。
但是,我不得不说但是,对于很多的开发板来说其实都不一定有显示屏,比喻上面的图片,有屏幕的都是少数。
那么我们即使上电,开机了,也就只能看到几盏小灯,无助的亮着,不时还冲你眨眨眼睛。
同样,对于我们来说,用开发板是为了写出自己的程序,来让别人使用,而不是我们自己直接来用开发板。那么我们就需要考虑开发板是如何和电脑连接在一起,才能让我们进行开发的。
上面这幅图是一个ARM开发板的抽象图,上面分布着各类元器件,但是,一般开发板都会提供两个接口方便PC机使用,一个就是串口,另外一个就是JTag口。
JTag口就是类似下面的板子上面的黑色的插座,而串口就是底下那幅图上的样子,而上方的图中也是具备一个串口的。其实还有网口,这个回头再说。
上面提到了关于开发板的接口问题,那么我们再来看看PC上面如果有对应的接口不就可以直接连接了吗?
想法很好,但是对于PC来说,现在很少有电脑上直接有JTag的接口来直接和开发板连接了。那么我们如果考虑使用串口,但是也很可惜,在现在的电脑上,也很少有串口。但是如果有串口,也是可以直接使用串口线,把开发板和PC直接连在一起的。
那么,如果PC上没有串口,就不能和PC连接了吗?显然不是。
由第一幅图可以看出,开发板与PC机相连的方案还是很多种选择的(图上每一种颜色都是一种方案)。总结如下:
但是由于现在的计算机很多都没有串口和并口,所以一般现在都会采用USB来连接开发板,所以需要有开发板的转接板。使用USB连接的方案,也有两种选择:
其中OpenJTag的接口如图所示,OpenJTag的接口比较丰富,可以直接使用OpenJTag上面的JTag口通过排线连接,也可以使用引线通过串口来实现PC和开发板的连接。
同样也有的开发板直接是吧USB串口卡集成在了开发板上的情况,那么相对来说就简单多了,直接使用一条USB连接线就可以完成PC和开发板的连接了。
那么只需要任意选择其中一种方式,把开发板和PC连在了一起了。
完成了开发板和PC的连接,但是是否上电以后就可以直接的开发了呢?
显然还是不行,这些硬件连接在一起还需要为这些硬件安装对应的驱动程序,才能保证,这些设备能够正行的运行。
烧写系统,需要使用JTag口实现,所以必须要在JTag的所提供的方案里面选择,连接PC的并口或者PC的USB来连接。
如果使用并口来操作开发板,那么对于PC来说需要安装并口的驱动程序,具体的并口驱动程序的安装,需要参考对应的开发板的开发手册,上面会有具体的介绍。
那么开发板上的程序运行的时候,会产生一些运算后的数据,这些数据应该从哪里输出呢?
一般用串口比较多,应为串口的操作相对比较简单。
如果没有串口,那么需要使用USB串口卡来连接,同样也是需要在PC安装对应的USB串口的驱动。
** 以下部分采用的是三星的2440开发板,对于不同的开发板的具体操作可能存在差异,但操作的概念大体相同。**
安装对应的烧写软件
我的开发板对应的烧写oflash,只需要把软件的目录写到对应的环境变量里面即可,方便在cmd下能够在任意目录执行到oflash即可。
安装串口工具
常用的串口工具比如SecureCRT,可以通过串口来管理开发板。我更喜欢使用的是XShell,里面也会带有串口工具。并且XShell是一个免费软件,我也不想去使用盗版或者破解版的软件。
具体设置如下:
需要设置开发板的对应的串口号,波特率一般为115200,数据位一般为8位,停止位为1位,流控选为None。
使用串口操作开发板的前提是开发板烧好了程序。
那么如果没烧写程序的裸板我们就需要给他烧写裸板程序了,那么烧写一般有四种方法:
使用程序DNW把需要安装的文件发送给开发板(需要连接usb host线,并安装驱动)
命令tftp 30000000 文件名,来将文件文件下载到开发板
uboot的烧写和烧写裸板程序的方法一样(uboot本身就是一个裸板程序)
烧写内核
uboot + usb Host + DNW(发送文件)来烧写内核
uboot + tftp(下载文件) 烧写系统
烧写文件系统
uboot + DNW(使用jffs文件)
uboot + DNW(使用jffs2文件)
烧写 JFFS2文件系统,需要设置 bootargs的 rootfstype=jffs2,命令如下: setenv bootargs 'root=/dev/mtdblock3 noinitrd init=/linuxrc console=ttySAC0,115200 rootfstype=jffs2 ' save, 2,同样的,在 Linux下使用 dnw和 u-boot烧写系统同样需要设置 rootfstype,不再赘述。 烧写 JFFS2文件系统不需要设置 rootfstype,设置了反而会报错,导致系统无法启动。 3,系统启动后 nand flash 有坏块是它的天然缺点,无法避免。有的坏块多,有的少,纯属 几率,不影响使用
uboot + tftp
uboot打补丁、内核打补丁
用UE打开补丁文件(+++)是修改后的文件、(---)是被修改的文件,(-)删除老文件的内容,(+)添加的内容
patch -p1 < ../u-boot-1.1.6_jz2440.patch
其中p代表忽略补丁文件中,位置信息第几个/
符号之前的信息,比如-p1代表忽略u-boot-1.1.6/这部分信息,直接使用/board/和他之后的内容来做定位文件。(根据执行命令的的目录和被打补丁的目录的相对位置来确定-p的选项)制作、烧写根文件系统,以及初探驱动
mkyaffs2image fs_mini_mdev fs_image.yaffs2
nfs 下载的内存地址 服务器地址:yaffs2路径
,例如nfs 192.168.1.19:work/nfs_root/tmp/fs.yaffs2
(前提是虚拟机启动了NFS服务)nand erase root
nand write.yaffs 259999 $(filesize)
reset
设置NFS网络文件系统服务
mount -t nfs -o nolock,vers=2 192.168.1.19:work/nfs_root /mnt
set bootargs noinitrd root=/dev/nfs nfsroot=192.168.1.19:/work/nfs_root/tmp ip=192.168.1.17:192.168.1.19:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
服务器配置信息:nfsroot=[:][,]
ip信息配置:ip=::::::
save
、reset
在win7下不能使用dnw的解决方案
DNW的作用只是使用USB Host下载文件到开发板。