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。源代码的编辑可以用vim或Xwindow下的gedit。或者用Kdevelop、anjuta等于VC6.0相似的界面来进行开发。一个简单的程序可以是Hello World。Vi 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文件夹下又多出了hello和hello.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所在的文件目录下。只有Linux和Windows的文件夹共享,我将在下一篇总结里讲。
进入到sjf2410.exe的烧写提示界面后,一般按照指示按0就可以了,最后烧写完事退出。然后按开发板上的复位键后程序便在系统上跑起来了。(注意:有的时候当用JTAG口烧写完程序后按复位键系统不能复位,这时只需要重启系统即可。至于为什么,暂时我还没弄明白,等以后再说吧)
需要补充说明的是,在Linux下,Jflash-s3c2410还不支持对NOR Flash的操作。幸运的是,我们使用JTAG工具对NOR Flash进行烧写只需要一次,即是烧写Uboot时,这时可以借助Windows下的工具。另外,在使用Jflash-s3c2410时,还要在前面加上sudo。
(2) 在系统下载
在系统下载就是指在开发板上已经有了操作系统,这里假设按照的是mini Linux并且已经开通了NFS服务功能(NFS服务是用来在Linux与Linux操作系统间通过网口来传输文件的一种协议,至于如何配置,我在后面会讲),这样在VM上的Linux便可以通过网口来向目标板上的Linux操作系统传输文件了。
为了方便传输文件,建议先在宿主机上的Linux下建立一个共享的NFS文件夹,比如/share,然后将我们编译可执行文件hello复制到这个文件夹成功配置好NFS服务后,一定要重启一下NFS服务:/etc/init.d/nfs restart。还要保证VM是bridge链接,并且Windows、VM上的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!了。
文章评论(0条评论)
登录后参与讨论