原创 Linux下程序开发流程

2010-3-11 21:41 2968 0 分类: MCU/ 嵌入式

Linux下程序开发流程


首先说明一下我的开发环境:


Windows XP SP3+VMwork station 7.0+Redhat Linux 9.0


编译工具为arm-linux-gcc 3.4.5




1.       新建一个工作目录,养成一个好的习惯,便于以后进行大的工程的开发。比如在/work下新建一个工作目录 mkdir devp


2.       编写源代码,先创建一个工程,比如mkdir hello。源代码的编辑可以用vimXwindow下的gedit。或者用Kdevelopanjuta等于VC6.0相似的界面来进行开发。一个简单的程序可以是Hello WorldVi hello.c建立一个C语言源程序(虽然Linux下文件的后缀名没有多大作用,但是为了方便阅读建议还是要加上为好),然后进入编辑界面:


#include <stdio.h>


main()


{


           printf(“Hello World!/n”);


}


然后保存退出即可。


3.       编写Makefile


为使上面变成的源代码编译成可执行文件,需要我们动手编写一个Makefile文件。Makefile文件定义了一系列的操作,它指明了哪个文件先编译,哪个文件不用编译以及更复杂的命令。使用它的好处就是你只需要敲一个make就能够进行自动编译。也许小的项目看不出它有什么优势,完全可用手动地来进行编译链接,但是当编译和开发大的工程时,没有Makefile几乎是不可能的。


本实验中的Makefile文件可以编写如下:


CC=arm-linux-gcc               //CC指明编译器


EXEC=hello                                              //EXEC表明编译后生成的可执行文件的名称


OBJS=hello.o                                           //目标文件列表


CFLAGS+=                                                //编译参数


LDFLAGS+= -static                                 //链接参数


<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 


all: $(EXEC)                                               //编译主入口


$(EXEC): $(OBJS)


           $CC $(LDFLAGS) –o $@ $(OBJS)  //空格由Tab键生成,不能用空格键


clean:                                                         //清除编译结果


           -rm –f $(EXEC) *.elf  *.gdb  *.o   //空格由Tab键生成,不能用空格键


4. 编译源文件


   hello目录下,直接键入命令(make clean 后)make便可完成对hello.c文件的编译,可以看到hello文件夹下又多出了hellohello.o文件


5.下载调试


现在我们有两种下载文件的方式:裸机下载和在系统下载


(1)       裸机下载


裸机下载是指目标板上没有操作系统,此时是把ARM处理器当中单片机来使用。不同的是由于ARM提供了JTAG接口,而单片机是通过下载器或串口来进行下载的。这里是用并口来下载,对于使用笔记本来开发的朋友,恐怕得需要借用一下台式机了。


利用JTAG下载文件又有两种方式,一种是利用Windows下的sjf2410.exe JTAG烧写工具,另一种是使用Linux下的JTAG烧写工具Jflash-s3c2410。它们的用法相似,直接执行这些命令就可以看到使用说明。这里以Windows下的工具为例加以介绍:


Windows下进入命令行窗口,找到sjf2410.exe文件所在的目录,进入后执行sjf2410.exe /f:hello /d=5 (或者生产hello.bin文件,烧写.bin文件)。这里要将hello文件放到sjf2410.exe所在的文件目录下。只有LinuxWindows的文件夹共享,我将在下一篇总结里讲。


进入到sjf2410.exe的烧写提示界面后,一般按照指示按0就可以了,最后烧写完事退出。然后按开发板上的复位键后程序便在系统上跑起来了。(注意:有的时候当用JTAG口烧写完程序后按复位键系统不能复位,这时只需要重启系统即可。至于为什么,暂时我还没弄明白,等以后再说吧)


需要补充说明的是,在Linux下,Jflash-s3c2410还不支持对NOR Flash的操作。幸运的是,我们使用JTAG工具对NOR Flash进行烧写只需要一次,即是烧写Uboot时,这时可以借助Windows下的工具。另外,在使用Jflash-s3c2410时,还要在前面加上sudo


(2)       在系统下载


在系统下载就是指在开发板上已经有了操作系统,这里假设按照的是mini Linux并且已经开通了NFS服务功能(NFS服务是用来在LinuxLinux操作系统间通过网口来传输文件的一种协议,至于如何配置,我在后面会讲),这样在VM上的Linux便可以通过网口来向目标板上的Linux操作系统传输文件了。


为了方便传输文件,建议先在宿主机上的Linux下建立一个共享的NFS文件夹,比如/share,然后将我们编译可执行文件hello复制到这个文件夹成功配置好NFS服务后,一定要重启一下NFS服务:/etc/init.d/nfs restart。还要保证VMbridge链接,并且WindowsVM上的Linux和开发板上的Linux在一个网段内(由于我使用的开发板上默认设置的是192.168.1.193,所以我把网段设置为192.168.1.*)。


在传输文件之前,不妨先在Windows下的命令行窗口ping一下宿主Linux和目标板的Linux,如果配置正确的话,这三者是会通的。


现在可以烧写/下载你编译好的文件了(在Windows下的超级终端上输入,见6.调试程序):


mount  -t  nfs  -o  nolock  192.168.1.22:/share  /mnt  


mount  -t  nfs  -o  nolock  192.168.1.22:/share  /host


上面的语句是将你宿主机上的share文件夹挂载到目标板上的/mnt/host目录下,这样就可以进入这个目录执行我们的可执行文件了。


6.调试程序


可以在Windows下建立一个超级终端,启动开发板后,进入Linux操作系统,在超级终端上输入上面的mount  -t  nfs  -o  nolock  192.168.1.22:/share  /mnt命令,然后进入cd /mnt/hello后,执行./hello便可在终端上看到Hello World!了。


开发板上默认设置的是192.168.1.193,所以我把网段设置为192.168.1.*)。


在传输文件之前,不妨先在Windows下的命令行窗口ping一下宿主Linux和目标板的Linux,如果配置正确的话,这三者是会通的。


现在可以烧写/下载你编译好的文件了(在Windows下的超级终端上输入,见6.调试程序):


mount  -t  nfs  -o  nolock  192.168.1.22:/share  /mnt  


mount  -t  nfs  -o  nolock  192.168.1.22:/share  /host


上面的语句是将你宿主机上的share文件夹挂载到目标板上的/mnt/host目录下,这样就可以进入这个目录执行我们的可执行文件了。


6.调试程序


可以在Windows下建立一个超级终端,启动开发板后,进入Linux操作系统,在超级终端上输入上面的mount  -t  nfs  -o  nolock  192.168.1.22:/share  /mnt命令,然后进入cd /mnt/hello后,执行./hello便可在终端上看到Hello World!了。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
0
关闭 站长推荐上一条 /3 下一条