历史上的今天
今天是:2024年12月03日(星期二)
2019年12月03日 | Linux及Arm-Linux程序开发笔记(零基础入门篇)
2019-12-03 来源:eefocus
前言:本文记录了自己从一个完全不懂Linux的人如何一步步学会Linux程序开发的过程。当然也希望本文能够达到它的目的,让那些和我一样没有任何基础的人也能快速入门Linux程序开发。

“三系统”职能和关联图
关于每个系统的职能及操作还有文件如何传送交流都在后面详细介绍。
关于开发语言,因为目前购买的Arm-Linux嵌入式板提供的编译库都是C/C++的,所以一般选择C/C++进行程序设计。

“三机器”组合模式图

“两机器”组合模式图
如果开发人员对机器性能要求比较高,那么建议采用“三机器”组合模式。因为“两机器”组合模式要求一台机器运行双系统,每个系统都需要分配一定的硬件资源,可能会对每个系统运行的流畅程序都造成影响。
如果开发人员只进行一些简单的程序开发,则建议采用“两机器”组合模式。这样可以节省硬件设备的投资,而且开发环境的搭建、开发的流程等等都会简单一些。而且下面的内容都是基于这种“两机器”组合的开发模式。

打开后,就可以看到一个虚拟机的硬件资源配置了。这些参数有一部分是在只能在初次使用iso安装的时候配置的,比如硬盘大小。另外一些参数比如内存大小、共享目录等等可以在后期随时人工更改的。
(详细设置内容,到网上可以找到很多相关内容,在此不再赘述)

两种方法的区别就是WinXp的安装盘和Ghost盘的区别吧。
安装完毕Fedora后,就可以从虚拟工作站中启动Fedora Linux系统了。系统桌面如下:


共享目录的好处是可以将这些文件在Windows系统中提取出来,然后可以通过我们熟悉的windows系统进行网络传输和一些其它命令操作。这个设置在后面程序开发的时候会提到其使用方法。
在VMware中建立共享目录,执行菜单命令【VM】--【Settings…】

然后在Linux虚拟机文件系统中可以找到对应的共享目录:/mnt/hgfs/xplinux

建立共享目录可以方便虚拟机和实体机进行文件交流。例如,我们可以将在Linux机器上编译生成好执行文件放置到共享目录中,然后可以通过Windows机器提取出来并通过网络传送到arm-linux嵌入式板上。

然后登录系统,设置分辨率,系统菜单:
【System】--【Preferences】--【Hardware】--【Screen Resolution】


设置好分辨率后,就可以在获得全屏状态的Linux操作界面了。

2.3.2其它设置
比如设置桌面背景,系统字体,还有资源管理器的模式等等,这些可以自己去实地操作并进行熟悉。

熟悉Windows系统的DOS操作界面的人肯定也会对此操作终端也不会陌生。通过在Terminal中输入命令,用户可以很方便地完成Linux下的一系列操作,在正式进入自主程序设计之前,用户有必要对下面一些最基本命令进行熟悉(其它的命令在项目需要的时候再到网上查找相关资料)。
文件操作命令 | 文件/文件夹的创建、修改、复制、删除、移动等等。(如rm/mv/vi/cat等等) |
网络设置命令 | 个性IP、开启FTP、开启Telnet、开启SSH等等。(如ifconfig/telnetd等等) |
用户管理命令 | 系统用户的添加、删除、密码修改等等。(如,addusr/passwd等等) |
文件编译命令 | 这个涉及到编译环境的建立,将在后面正式进入到自主程序设计时进行详细介绍。 |
虽然目前Fedora为用户提供了比较良好的操作界面,但是Linux最初是从命令行的操作系统发展起来的,很多强大的功能都是需要依靠Terminal控制终端来实现的,所以作为开发人员有必要先对这些基本命令进行熟悉并熟练操作。

然后就可以看到Fedora Eclipse的启动画面

然后就是下面就是Eclispe的IDE环境了,有过Windows下的Java编程经验的人来说,这个界面是再熟悉不过了,完全可以直接过渡到Linux下的C/C++程序开发上来,这样就极大地减少了程序员的学习周期。

Eclipse的好处,第一就是开源,第二就是免费,第三就跨平台。
因为开源,所以可扩展性很强,Eclipse实际上就是一个万能的程序开发环境,只需要在设置中对相关语言的库进行引用并连接相应的编译器,就可以对基于任何语言的程序进行开发;因为免费,所以省去了注册软件等等琐事。因为跨平台,所以当用户进行跨平台程序设计的时候,可以极大减少学习周期。
Eclispe在Windows平台下一般都是作为Java的开发环境,用来开发Java桌面应用程序和Jsp网页应用程序甚至目前比较流行的Android手机终端软件。在Linux下面对C/C++的库编译器进行了连接后,则成为Linux下的C/C++开发环境,在Linux下安装JDK后则可以进行Linux下的Java程序设计,如果给Linux系统安装tomcat网页服务器,则可以进行Linux下的网页应用程序开发,如果给Linux安装mysql数据库服务,则可以进行数据库连接操作等等(因为目前我们的目标主要是arm-linux窗口程序开发,所以主要对C/C++进行研究)。

所谓“工欲善其事,必先利其器”,前面花了大量篇幅来介绍,都是为了“磨刀”,现在开始进入“砍柴”环节。下面将以Eclipse CDT作为开发环境来介绍Linux和arm-linux程序开发的一般方法。

然后进入到C++ Project向导,有C++的Hello World模板

点击Finish,然后Eclispe就会建立一个基于C++的HelloWorld项目,运行程序后,能够在控制台中输出“Hello World”:

说明:如果是开发控制台程序,则不需要进行任何其它设计,只需要直接编写C++代码即可,不用对编译库和编译器进行设置,Eclipse已经为我们自动完成了这些内容。

系统默认自带有两个版本的Qt库qt-3.3和qt4,一般我们用qt-3.3。
编写窗口程序,我们只需要在建立了C++ Project的情况下,对C/C++ Build路径进行设置,指向qt-3.3的库即可。主要开发流程如下:

第一步:使用Eclipse CDT建立C++ Project。
第二步:设置Build路径指向Qt。在项目管理器中右击项目文件设置项目属性,在C/C++ Build的Settings的Tool Settings中进行设置。

【GCC C++ Compiler】--【Directories】添加包含的文件路径:/usr/lib/qt-3.3/include。这个是C++的编译器包含的头文件路径,因为是建立的C++ Project,所以一定要设置。

【GCC C Compiler】--【Directories】添加包含的文件路径:/usr/lib/qt-3.3/include。这个是设置C语言编译器包含的头文件路径,因为有时候C++中会考虑到兼容一些C语言的语法和关键字,所以最好也进行相关设置。

【GCC C++ Linker】--【Libraries】添加编译时引用的库路径:/usr/lib/qt-3.3/lib(注意:不要写成include了)。并设置库搜索命令参数:qt-mt。
第三步:编写引用了Qt库的C++程序。
第四步:运行程序。
程序运行效果如下图:

总结:通过上面对Linux下面的控制台程序及窗口程序的介绍,我们已经对Linux系统下的简单程序开发流程有了简单了解。下面开始介绍arm-Linux程序的开发。
五、使用Eclipse开发Arm-linux程序
5.1 Arm-linux硬件平台

Arm-Linux机器采用的是飞凌嵌入式技术公司的FL2440开发板。在飞凌公司购买开发板的时候,会随开发板一起赠送的相关入门教程《飞凌开发板配套教程》并附有一张光盘,里面有各种写FL2440相关的开发资源。
在正式进入程序开发之前,先对FL2440开发板及arm-linux系统进行熟悉。
Fl2440开发板:熟悉Bootloader的使用方法、学会烧写内核、烧写文件系统等等。
Arm-linux系统:熟悉利用一些文件系统和网络设置相关的命令。如果你对Linux命令已经有了一定了解,那么arm-linux上的命令也基本一样。
(详细操作过程请参考《飞凌开发板配套教程》一书)

在早期的开发环境方式中,是先用文本编辑器编写c或者cpp文件,然后再直接在Linux机器上通过交叉编译命令,编译代码文本文件并生成可执行程序,然后将可执行程序传送到arm-linux板上,然后就可以在arm-linux机器上运行程序了。
现在的开发模式和早期的开发模式一样,只是在编写代码的工具上进行了改进。早期编写代码的工具只要是能编辑文本的软件就可以,甚至在Linux中通过终端的vi命令就可以搞定,Linux机器的职能仅仅是编写代码和编译代码。现在则使用Eclipse CDT,可以在Linux机器上编写C/C++代码并进行调试,Linux机器基本上可以模拟arm-linux系统上除了一些硬件相关度高的应用程序(如驱动程序)之外的绝大部分其它程序的运行环境。

然后设置环境变量。因为Linux机器上存在不止一种编译器,为了避免环境变量冲突,最好新建一个账号,比如新建账号arm-linux-gcc,然后在对应的账号目录中找到.bash_profile文件,设置环境变量,编辑.bash_profile,在最后一行增加路径(vi打开文本文件,按i表示insert修改文本文件,然后Esc退出insert模式,再shift zz表示保存退出文件,详细的命令介绍可以到网上查阅相关资料):
export PATH=/usr/local/arm/2.95.3/bin:$PATH

可以通过echo $PATH来查看环境变量是否设置成功:


然后在对应目录下会生成一个可在arm-linux系统上运行的应用程序CppHello。
然后通过SSH服务和FTP服务,将可执行文件从Linux文件系统网络传送到arm-linux文件系统(在此用到了两个小软件SSH Secure和LeapFTP,在后面再对软件的功能进行一下简要介绍)。

然后在Windows机器上远程登录arm-linux系统开发板,并控制程序运行

注意:需要先通过chmod +x CppHello来告诉系统此文件是可执行文件,然后再通过./CppHello来运行程序。
我们可以看到程序运行的结果:在屏幕上打印出一行字“Hello World”
史海拾趣
|
原来是用ce4.2的系统 用的是evc4 现在系统改成ce5.0的 想用vc2005 因为可以单步调试. 但有个消息函数一直没有找到, 请大家在vc2005上面怎么做告诉下我 PreTranslateMessage(MSG* pMsg) evc4和vc6 我知道 ...… 查看全部问答> |
|
导出的SDK 安装到EVC下 在TOOL/OPTIONS/directories 中设置完了后 编译一个程序 提示:error:Connection was not created 程序本身0 error 0 warning 请问怎么解决这个事情呢?… 查看全部问答> |
|
由于程序里面定义了一些比较大的idata类型的全局变量,导致256字节的ram不够用了。选择的是small模式,在不考虑优化的情况下,可以把这里的idata类型变量随意的改为xdata类型吗?… 查看全部问答> |
|
有没有哪位大虾做过Si4432直接模式的,给小弟指导一下啊,我用si4432做串口透明传输,如果用FIFO模式,串口速率达到9600bps的时候,空中速率要很高啊,我改用直接模式,但不知道咋个弄,资料上介绍很少,而且我是刚接触这块儿不久的一个菜鸟,各种 ...… 查看全部问答> |
|
zigbee协议是个泛指的概念,它实际是一系列的协议标准与规范,并不是实际的代码,当然也不能实际使用.到目前为止已经出了3个版本,分别是2004,2006,2007. 以TI公司为代表的几家, 参照了3个不同的ZIGEBEE版本,又结合各自厂家推出的硬件平台,分别开发出 ...… 查看全部问答> |
|
各位,大虾好,请有没有关于MSP430F5438好坏的自检程序,就是对MCU内部的各个内设都有一个自检,就像示波器自检功能那样,通过逐一打开面板上的所有灯来告诉我们示波器硬件是否OK?在此表示感谢。 … 查看全部问答> |




