分类: 嵌入式
2010-06-19 17:33:25
说明:
本文是根据个人学习嵌入式的一些经验而写的。主要关于环境的搭建,但是,没有讲述程序的编写,下载程序(内核/根文件系统)到开发板,测试,等等细节,因为这些带有严重的个人色彩。本文旨在让大家对所谓的“开发”有一个初步的认识,当然,限于个人水平,这个认识不可能很全面。
要想让Linux正常跑起来,除了内核之外,还需要一个根文件系统,这里的“根文件系统”是指我们平时在Linux下看到的目录,如/sbin,/usr, /home, /lib,等等。这些(目录)需要我们自己手动创建。此外,一些常用的命令,可以通过Busybox得到(编译安装BusyBox就可以得到这个命令);一些常用的库,可以直接复制交叉编译器带的库。但是,我们还常常看到一些说法,比如Ramfs文件系统,JFFS文件系统,YAFFS文件系统,它们都是一种文件系统的格式,他们专门用于嵌入式环境中。我们在Windows下看到很多个“盘”,如D盘、E盘,等等,这些“盘”可以在某种程序上看成是Linux下的某些目录;而每个盘又可以有不同的格式,如果以前在U盘中使用的FAT(即FAT16),现在也经常使用的FAT32,很流行的NTFS,等等,可以将它们看作是上述的文件系统类型(JFFS、YAFFS等等)。
无论是个人写的程序,还是Linux内核,还是BusyBox,都要经过编写、编译(可能还有安装)这几个步骤,编写可以使用自己喜欢的编辑器,编译需要使用编译器。虽然编写、编译这些步骤在学习C语言时就知道了,但这些概念并不是所有的人都清楚的。我们平时使用VS2005,使用VC6.0,使用eclips,使用QT,使用AVR Studio,使用Keil,使用……,都是在使用IDE,即集成开发环境,所以“集成”,我觉得是将很多种功能“集成”在这个工具里,比如编写代码、编译代码,调试程序,甚至下载程序。我们在使用IDE过程中,不知不觉被它的美丽外表所迷惑,并迷失于其中。我犹记得,当初学习AVR单片机经过思想斗争,离开AVR Studio这个IDE,决定使用UE+命令行编译+自制USB下载器的方法,当我将这种方式介绍给他人,可惜,我认识的周边的人,除了LG和我外,没人采纳。当我们了解了真正的程序的“开发”过程的细节,我们看问题就会更透切,不会被什么Ubuntu、Fedora、交叉编译、VIM、emacs、glibc以及上述专有名词所迷惑。开发环境没有绝对的好与不好,只有适合自己的,才是好的。
相信许多学习嵌入式的人都会买开发板。一般来说,开发商都会提供一些基本的必须的工具,如,已经做好的内核映像文件,已经做好的根文件系统,交叉编译器,下载所用的工具(DNW、H-JTAG),以及教你如何使用开发板的“使用说明书”,这些现成的资源都可以为我们所用,因为能减少学习的难度以及时间。
但是,不能完全依赖于开发光盘。
只要是企业,都有它追求的目的,为了达到这个目的,它可以有某些夸张的说法以及做法。所以,我们要辩证地对待开发商所说的一切。正确的东西,我们要采纳,错误的东西,我们要摒弃,而这些结论,需要我们的实践来证明。
我们走的第一步,完全可以根据开发板所提供的资源来进行。比如裸机程序,比如编译内核,都可以依据手册的做法,依葫芦画瓢。但每种开发板的做法又不尽相同,比如,交叉编译器的解压,有些手册里解压到/opt目录,有些却解压到/usr/local/目录;又比如下载,有些通过网络下载,有些通过串口与USB同时下载,等等。等我们熟悉了一切,对这些做法有所了解,就会做出我们自己的选择。我见过有些手册要求我们使用root来登陆系统,每次进入目录都使用绝对路径,凡此种种,要经过我们自己的实践,才能找到适合我们自己的习惯以及高效的做法。
我所用的开发板的开发模式为:虚拟机Linux+Windows的串口控制/USB口下载,Linux作为宿主机,主要用于开发(写程序,制作文件系统,等等),而Windows则可以认为是一个中间系统,通过其平台下的一些工具,将内核、根文件系统下载到开发板上。但这种方法不是绝对的,主要取决于BootLoader。
至于如何使用Linux,则完全是个人的事情,如,可以在自己的家目录下创建工作目录,也可以在/目录下;你可以将所以的软件包放到同一个目录,也可以放到其它目录;每次登陆都可以使用root用户,这样免去了切换用户的麻烦,也可以使用自己创建的用户;进入目录可以使用绝对路径,也可以使用相对路径;可以使用文本模式来工作,也可以使用界面模式工作。甚至使用一台安装有Linux的电脑专门用于开发,而另一台电脑专门用于下载。
当我们要测试某一用户程序或驱动程序时,如果每修改一次,都要重新构建文件系统并下载到开发板上,需要花费很多时间,效率也不高,而且,Flash的擦写次数也有限。一般来说,在程序调试或测试阶段,使用NFS来测试程序是比较好的方法。NFS的使用分为服务器与客户端两部分,前者可以看一下这篇文章:http://blog.chinaunix.net/u1/58951/showart_2115798.html,后者可以看一下这篇文章:http://blog.chinaunix.net/u1/58951/showart_2199834.html。
因为BootLoader主要的“控制台”为串口,因而串口通信显示尤为重要。串口通信也可分为服务器与客户端,前者是指串口通信的软件,比如,Widnows自带的超级终端,SecureCRT(此软件还支持SSH等通信协议),Linux下的minicom,这些工具最重要的设置就是不要使用软件或硬件流控制。下面以截图的形式讲一下minicom。如果没有设置过minicom,在终端下输入minicom,会出现以下信息。
[latelee@FightNow ~]$ minicom
minicom: there is no global configuration file /etc/minirc.dfl
Ask your sysadmin to create one (with minicom -s).
如果以root来运行,则会出现以下信息。
[root@FightNow latelee]# minicom
minicom: WARNING: configuration file not found, using defaults
Device /dev/modem access failed: 没有那个文件或目录.
为何?因为minicom默认的设备是modem,而不是串口。
以root运行minicom –s,则会出现minicom的配置“界面”,如图1所示。
图1 minicom
其中主要的是Serial port setup和Save setup as dfl,分别是串口端口设置和保存为默认的dfl文件。其中的串口端口设置如图2所示。
图2 串口端口设置
图中左侧有大写的字母,表示对应选项的按键,如按A(按键盘a就可以了,不区别大小写),就可以设置端口号(默认的为/dev/modem,图中已经修改为/dev/ttyS0,它表示第一个串口)。按回车确定,光标回到图中黑点处。再按回车即可退出此界面。其它类似者同理。
至于它的使用,与其它串口工具使用并无差别。