1.前言:我对linux环境的一点认知
初学嵌入式linux,对于整个环境的认知,以及整个环境的操作非常重要。平时编程都是在集成开发环境下进行,比如VC6.0,写完代码后,直接按钮单击“编译”,点击“运行”,均是界面化操作。但各位开发程序猿们是否想过这集成开发环境的“编译”和“运行”是如何进行的?又是怎样一个过程?集成开发环境确实方便,直接通过按钮的点点就完成了想要的操作,但隐藏了内在的运行逻辑。
而linux下开发,就能让你的视野更有深度,整个过程没有集成开发环境,自己编辑代码,自己写编译过程,自己去运行,不再是通过按钮点点就能完成,你开发的过程就是个集成环境。因此linux下的开发,你能更有深度的去了解开发到运行的内在机理。
下面,笔者就跟的大家一起学习嵌入式Linux学习第一步----熟悉linux开发环境,输出我的第一个hello word!
2.了解编译过程
通常情况所说的“编译”,编译的过程流程如下:
C程序源文件(.c)----预处理---》(.i文件)---编译---》汇编文件(.s)---汇编---》目标文件(.o)---链接---》(可执行文件)
可执行文件可以直接被运行的文件,对于嵌入式Linux开发,可执行文件还需要转换成二进制文件(.bin),才能烧写到控制器中。下面针对这个过程进行开发,在Linux下输出: start myhello word!
2.C程序源文件编辑
编辑环境:Windows
编辑器:Source Insight
编写源程序,不管什么系统下,只要在任何一个代码编辑器中,都可以编写。这里选择在Windows的Source Insight编辑器里写代码比较方便些。
- 建立一个myhello.c源文件
- 对myhello.c源文件进行代码编写,并保存。main为函数入口,为了更深入了解编译文件之间联系,加入了HelloFunction()函数调用,然后再创立一个头文件和源文件来声明和定义HelloFunction()函数。
#include "stdio.h"
#include "HelloPrint.h"
int main()
{
printf("start\n");
HelloFunction();
return 0;
}
3.同理,创立一个HelloPrint.c源文件,来定义HelloFunction()函数。
#include "stdio.h"
#include "HelloPrint.h"
void HelloFunction()
{
printf("myhello word!\n");
}
4.同理,创立一个HelloPrint头文件HelloPrint.h,来声明HelloFunction()函数。
#ifndef __HelloPrint_H
#define __HelloPrint_H
void HelloFunction(void);
#endif
2.自己写编译过程---makefile文件
makefile文件是整个编译过程的一个集合文件,事先将程序源文件的编译过程写到makefile文件里,以后只要在命令行下输入make命令,系统自动执行makefile文件里内容,方便操作。同时,makefile会自动根据目标文件是否改动,依赖文件是否更新,选择是否要编译,这样对于大量的程序文件来说,可以减少编译时间。makefile文件编写有具体规则形式,网上也有很多这方面资料。
makefile文件内容如下。其中hello 文件是最终要生成的可执行文件,myhello.c 和HelloPrint.c 是编译原材料,采用gcc编译工具。
hello : myhello.c HelloPrint.c
gcc -o hello myhello.c HelloPrint.c
clean:
rm hello
3.linux下完成编译,运行
上面编写代码都是在Windows下完成,当然在Linux下也可以编写,但Windows下写方便些。写完以上代码和makefile文件后,需要上传上到虚拟机的linux中。
上传工具:CuteFTP(也可以用虚拟机里的VMware tools工具拉拽文件)
SSH远程登录工具:SecureCRT(登录到linux服务器,在Windows下的SecureCRT软件里即可完成命令行操作),也可以直接在linux的终端操作命令行。
-
CuteFTP完成上传拷贝到Linux下的文件有以下几个:
-
SecureCRT登录到虚拟机linux服务器界面如下,并完成相关指令操作。以及操作后的编译结果如下:
可以看出make指令后,列出的相关文件多出了可执行文件hello,也就是最后想要的。执行hello后,就可以出现执行结果。第一个hello word的输出就出现了。make clean是用来执行makefile里的clean内容,删除掉可执行文件。
看到这里的亲们是否对linux开发环境有些熟悉了呢?熟悉环境对于开发入门很重要。这些也是嵌入式linux开发基础,只是程序还没有烧录到控制器中,所以下一篇将通过简单的S3C2440裸板程序开发来学习基础开发过程。