序言:本文记录了自己从一个完全不懂Linux的人怎么一步步学会Linux程序开发的过程。其实也希望本文才能达到它的目的,让这些和我一样没有任何基础的人也能快速入门Linux程序开发。
一、Arm-Linux程序开发平台简略介绍
Arm-Linux程序的开发并不像我们曾经接触的Windows程序开发那样,关于平台的搭建就冗长好多,所以在即将步入程序开发之前先对这些开发模式进行简略介绍,让一个虽然没有任何Linux开发经验的程序员也才能读懂前面的内容。
1.1程序开发所需系统及开发语言
开发arm-linux程序起码须要三种系统:
Windows系统。
主要拿来文件传送和一些简单的文本文件编辑。这个系统虽然并非必需,只是由于目前PC机上最流行的系统一直是Windows系统,我们的好多关于PC的文件和数据的操作习惯都是在Windows系统上养成的,早已对其产生了严重的依赖,所以Windows系统饰演着的“辅助开发系统”的角色。
PC-Linux系统。
在此系统上安装arm-Linux交叉编译器后,就可以对代码文本文件进行编译,生成可在arm-Linux系统中运行可执行程序。此系统被称为“Linux宿主机”,我们对Linux程序的开发工作(包括代码编撰、调试和编译生成可执行文件)基本上就是在此系统上进行的。
Arm-Linux系统。
Arm-Linux程序运行的平台。此系统的硬件载体是一块大型的嵌入式arm板linux使用教程,我们在Linux宿主机上开发好程序并编译生成arm-linux可执行程序后,将可执行程序文件传送到嵌入式arm板中,之后就可以在arm板上直接运行此程序了。
三种系统的职能和联系如右图:
“三系统”职能和关联图
关于每位系统的职能及操作还有文件怎么传送交流都在前面详尽介绍。
关于开发语言,由于目前订购的Arm-Linux嵌入式板提供的编译库都是C/C++的,所以通常选择C/C++进行程序设计。
1.2系统平台搭建方法
关于“三系统”的搭建方法,有两种方式:三台分立的单系统机器组合或则一台双系统PC机和一台单系统Arm板机器。并且不管采用哪种组合形式,各类系统的职能都是一样的,但是都是通过FTP、Telnet或则SSH等网路合同进行文件传输交流。
“三机器”组合模式。将三个系统分别安装在三台机器上并将三台机器成立局域网。
“两机器”组合模式。在PC机上借助虚拟工作站可以同时运行两个系统,虚拟机上的Linux系统基本可以完成所有的实体PC-Linux机器的所有任务,其实也就能成立局域网。
“三机器”组合模式图
“两机器”组合模式图
假如开发人员对机器性能要求比较高,这么建议采用“三机器”组合模式。由于“两机器”组合模式要求一台机器运行双系统,每位系统都须要分配一定的硬件资源,可能会对每位系统运行的流畅程序都导致影响。
假如开发人员只进行一些简单的程序开发,则建议采用“两机器”组合模式。这样可以节约硬件设备的投资,并且开发环境的搭建、开发的流程等等就会简单一些。并且下边的内容都是基于这些“两机器”组合的开发模式。
二、Linux开发平台搭建
2.1安装虚拟工作站
目前比较流行的虚拟工作站比较多,推荐使用VM-wareWorkStation。构建虚拟工作站的目的就是为了使一台机器同时运行多个不同类型的系统,便捷开发人员进行跨平台开发应用程序。
(关于VMware,可以到网上搜索到详尽介绍和使用方式,在此不再赘言)
2.2安装Linux虚拟机
安装虚拟机的过程和安装实体机一样,惟一的区别是,虚拟机安装是从VMware中打开并安装的。先打算Linux安装文件,通常可以到网上下载到Linux的iso安装文件,之后从VMware中安装此系统。
(关于虚拟机安装,在网上可以搜索到详尽的步骤,在此不再赘言)
几点建议:
1.安装Fedora-10并选择完全安装,即把所以的包和选项都勾上。这样在安装完毕后,系统就自带了好多开发工具和相关的库,防止自己去重新进行繁琐的基本开发平台搭建。
2.在VMware中为虚拟系统配置硬件资源。建议分配硬碟空间16G,显存1G以上。由于今后主要的Linux程序开发工作是在虚拟机上进行了,所以为了保证虚拟机流畅运行,须要分配比较丰富的硬件资源。
在第一次从ISO文件中安装完毕虚拟机后,在安装目录下边会生成一系列的文件,将这种文件进行备份后linux命令行和shell脚本编程宝典,在其它机器上安装虚拟机的时侯就花几个小时去从ISO中安装了,将这个目录下的文件复制到相应的目录下边(在第一次从ISO中安装的时侯设定的目录相同),之后只须要从VMware中打开此目录下的文件就行了。
执行VMwareWorkstation中的【View】--【Home】,调出Home视图,之后打开虚拟工作站系统文件。
打开后,就可以看见一个虚拟机的硬件资源配置了。这种参数有一部份是在只能在初次使用iso安装的时侯配置的,例如硬碟大小。另外一些参数例如显存大小、共享目录等等可以在后期随时人工修改的。
(详尽设置内容,到网上可以找到好多相关内容,在此不再赘言)
两种方式的区别就是WinXp的安装盘和Ghost盘的区别吧。
安装完毕Fedora后,就可以从虚拟工作站中启动FedoraLinux系统了。系统桌面如下:
2.3虚拟机的一些基本配置
在第一次安装完毕虚拟机后开启虚拟机,默认的帧率是800*600,同时没有全能共享目录。为了获得比较好的操作界面,同时便捷文件共享和转移,须要进行一些基本的配置。
2.3.1构建共享目录
在同一个硬件PC机上运行的两个系统。Windows实体系统拿来做通常的用途,例如联网,处理文档等等;FedoraLinux虚拟系统则拿来开发Linux程序并进行编译生成可执行文件。
先须要安装vmwaretools
在VMware里面,选择菜单【VM】--【InstallVMtools】,之后在Linux虚拟机上会生成目录/media,同时上面形成一个rpm文件。
之后打开控制终端并su登陆超级用户:
cd/media
rpm–ivhVMwareTools-7.8.5-156735.i386.rpm
cd/usr/bin
之后在/usr/bin下边见到wmware-config-tools.pl
再在Teminal中输入wmware-config-tools.pl
之后一路回车下去。之后今后就可以构建共享目录。
(详尽过程也可以在网上搜索相关内容)
共享目录的用处是可以将这种文件在Windows系统中提取下来,之后可以通过我们熟悉的windows系统进行网路传输和一些其它命令操作。这个设置在前面程序开发的时侯会谈到其使用方式。
在VMware中构建共享目录,执行菜单命令【VM】--【Settings…】
之后在Linux虚拟机文件系统中可以找到对应的共享目录:/mnt/hgfs/xplinux
构建共享目录可以便捷虚拟机和实体机进行文件交流。比如,我们可以将在Linux机器上编译生成好执行文件放置到共享目录中,之后可以通过Windows机器提取下来并通过网路传送到arm-linux嵌入式板上。
2.3.2调整桌面帧率
在VMware工作站中调整虚拟机桌面帧率。通常默认是800*600,但是现今的显示器,通常是1024*768甚至更高,以我目前使用的笔记本显示器为例,帧率是1440*900。须要将虚拟机桌面码率进行适当调整,之后全屏,这么就可以获得比较友好的操作界面。
在VMware中启动虚拟机,虚拟机启动后的登陆界面如下:
之后登陆系统,设置帧率,系统菜单:
【System】--【Preferences】--【Hardware】--【ScreenResolution】
设置好码率后,就可以在获得全屏状态的Linux操作界面了。
2.3.2其它设置
例如设置桌面背景,系统字体,还有资源管理器的模式等等,这种可以自己去实地操作并进行熟悉。
2.4安装软件
尽管Fedora早已自带了一些必要的软件,如OpenOffice办公软件,gedit记事本软件,Firefox网页浏览器等等。并且既然是操作系统,我们也可以安装一些我们须要的软件。例如英文输入法(如:小企鹅输入法),聊天工具(如QQ)等等。
注意:在Terminal终端中安装程序的时侯须要启用su超级用户权限。
三、Fedora-linux系统
Fedora-linux虚拟机安装完毕并进行基本设置后,就可以开始了程序开发环节了。在即将开始程序开发时,还须要对Linux的一些基本编程工具进行简略介绍,其实假如早已有此基础的,可以直接略过这一章。
3.1控制终端的基本操作命令
执行系统菜单命令【Applications】--【SystemTools】--【Terminal】,打开Terminal终端:
熟悉Windows系统的DOS操作界面的人肯定也会对此操作终端也不会陌生。通过在Terminal中输入命令,用户可以很便捷地完成Linux下的一系列操作,在即将步入自主程序设计之前,用户有必要对下边一些最基本命令进行熟悉(其它的命令在项目须要的时侯再到网上查找相关资料)。
文件操作命令
文件/文件夹的创建、修改、复制、删除、移动等等。(如rm/mv/vi/cat等等)
网路设置命令
个性IP、开启FTP、开启Telnet、开启SSH等等。(如ifconfig/telnetd等等)
用户管理命令
系统用户的添加、删除、密码更改等等。(如,addusr/passwd等等)
文件编译命令
这个涉及到编译环境的构建,将在前面即将步入到自主程序设计时进行详尽介绍。
尽管目前Fedora为用户提供了比较良好的操作界面嵌入式linux系统基本组成和开发流程图,并且Linux最初是从命令行的操作系统发展上去的,好多强悍的功能都是须要借助Terminal控制终端来实现的,所以作为开发人员有必要先对那些基本命令进行熟悉并熟练操作。
3.2编程工具简介
假如在安装Fedora的时侯,选择的是完全安装,系统会自带好多开发工具。其中Fedora-EclipseCDT和Qt库及相关设计器QtDesigner是我们今后开发的主要工具。
其实,假如用户没有选择安全安装,则可以到网上下载到各种开发工具的安装文件,并自己进行安装。
3.2.1Fedora-EclipseCDT
在Fedora中执行系统菜单【Application】--【Programming】--【Eclipse】
之后就可以看见FedoraEclipse的启动画面
之后就是下边就是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++进行研究)。
3.2.2Qt库及Qt界面设计软件
倘若只是编撰C/C++控制台软件,则只须要EclipseCDT就完全可以解决。并且假如要进行窗体化编程,就须要引用一些开源的界面库。诸如目前比较流行的Qt库。
Qt是摩托罗拉开发的一个跨平台的C++图形用户界面应用程序框架。它提供给应用程序开发者构建艺术级的图形用户界面所需的所用功能。Qt是完全面向对象的,很容易扩充,而且容许真正地组件编程。基本上,Qt同XWindow上的Motif,Openwin,GTK等图形界面库和Windows平台上的MFC,OWL,VCL,ATL是同类型的东西,但Qt具有优良的跨平台特点、面向对象、丰富的API、大量的开发文档等优点。
在Eclipse中对项目Build选项进行设置,对Qt库进行联接,之后就可以进行Linux下的Qt程序进行开发了。
由于Eclipse没有提供可视化的窗体程序设计器,所以须要依靠第三方工具,QtDesigner可以挺好的解决Qt的UI设计问题并编译生成对应的*.h和*.cpp文件(具体的操作步骤将在下边的内容中详尽介绍)。
所谓“工欲善其事,必先利其器”,上面花了大量篇幅来介绍,都是为了“磨刀”,如今开始步入“砍柴”环节。下边将以EclipseCDT作为开发环境来介绍Linux和arm-linux程序开发的通常技巧。
四、使用EclipseCDT开发Linux程序
4.1构建控制台程序
用EclipseCDT构建基于C++的“HelloWorld”控制台程序。
打开Eclipse开发环境。执行【File】--【New】--【C++Project】
之后步入到C++Project向导,有C++的HelloWorld模板
点击Finish,之后Eclispe都会构建一个基于C++的HelloWorld项目,运行程序后,才能在控制台北输出“HelloWorld”:
说明:假如是开发控制台程序,则不须要进行任何其它设计,只须要直接编撰C++代码即可,不用对编译库和编译器进行设置,Eclipse早已为我们手动完成了那些内容。
4.2构建Linux窗口程序
如同在Window环境下,假如要用C++开发窗口程序,我们通常须要使用WindowsAPI或则MFC。同样,在Linux环境下嵌入式linux系统基本组成和开发流程图,我们可能在C++项目中引用Qt库来进行Linux下的窗口程序开发。
在完整版的Fedora中,自带了Qt的库,在目录/usr/lib下边:
系统默认自带有两个版本的Qt库qt-3.3和qt4,通常我们用qt-3.3。
编撰窗口程序,我们只须要在构建了C++Project的情况下,对C/C++Build路径进行设置,指向qt-3.3的库即可。主要开发流程如下:
第一步:使用EclipseCDT构建C++Project。
第二步:设置Build路径指向Qt。在项目管理器中右击项目文件设置项目属性,在C/C++Build的Settings的ToolSettings中进行设置。
【GCCC++Compiler】--【Directories】添加包含的文件路径:/usr/lib/qt-3.3/include。这个是C++的编译器包含的头文件路径,由于是构建的C++Project,所以一定要设置。
【GCCCCompiler】--【Directories】添加包含的文件路径:/usr/lib/qt-3.3/include。这个是设置C语言编译器包含的头文件路径,由于有时侯C++中会考虑到兼容一些C语言的句型和关键字,所以最好也进行相关设置。
【GCCC++Linker】--【Libraries】添加编译时引用的库路径:/usr/lib/qt-3.3/lib(注意:不要写成include了)。并设置库搜索命令参数:qt-mt。
第三步:编撰引用了Qt库的C++程序。
第四步:运行程序。
程序运行疗效如右图:
总结:通过前面对Linux下边的控制台程序及窗口程序的介绍,我们早已对Linux系统下的简单程序开发流程有了简单了解。下边开始介绍arm-Linux程序的开发。
五、使用Eclipse开发Arm-linux程序
5.1Arm-linux硬件平台
Arm-Linux机器采用的是飞凌嵌入式技术公司的FL2440开发板。在飞凌公司订购开发板的时侯,会随开发板一起附赠的相关入门教程《飞凌开发板配套教程》并附有一张光碟,上面有各类写FL2440相关的开发资源。
在即将步入程序开发之前,先对FL2440开发板及arm-linux系统进行熟悉。
Fl2440开发板:熟悉Bootloader的使用方式、学会烧录内核、烧写文件系统等等。
Arm-linux系统:熟悉借助一些文件系统和网路设置相关的命令。假如你对Linux命令已然有了一定了解,这么arm-linux上的命令也基本一样。
(详尽操作过程请参考《飞凌开发板配套教程》一书)
5.2开发控制台程序
主要开发流程图如下:
在初期的开发环境方法中,是先用文本编辑器编撰c或则cpp文件,之后再直接在Linux机器上通过交叉编译命令,编译代码文本文件并生成可执行程序,之后将可执行程序传送到arm-linux板上,之后就可以在arm-linux机器上运行程序了。
现今的开发模式和初期的开发模式一样,只是在编撰代码的工具上进行了改进。初期编撰代码的工具只要是能编辑文本的软件就可以,甚至在Linux中通过终端的vi命令就可以搞定,Linux机器的职能仅仅是编撰代码和编译代码。如今则使用EclipseCDT,可以在Linux机器上编撰C/C++代码并进行调试,Linux机器基本上可以模拟arm-linux系统上不仅一些硬件相关度高的应用程序(如驱动程序)之外的绝大部份其它程序的运行环境。
5.2.1使用EclipseCDT编撰代码
虽然和用EclipseCDT编撰Linux环境下的控制台程序是完全一样。不仅在一些非常的场合,例如编撰驱动程序,须要注意差异外,其余的功能的实现方式基本上一样。
这方面属于程序设计的基本功,须要常年学习和积累,所以在此不再多述。
5.2.2构建交叉编译环境
尽管生成程序的源码是一样的,而且在Linux机器上编译生成的可执行文件是不能在arm-linux系统上运行的,须要用arm-linux专用的编译器进行编译后,才会生成可在arm-linux系统上运行的可执行文件,其实此时应用程序又似乎不能在Linux系统上运行了。
将交叉编译工具cross-2.95.3.tar.bz2(可以到网上下载,也可以到开发板附送的光碟资源中找到)通过共享目录传送到Linux系统中,之后在Linux系统终端中先步入其文件目录,之后执行解压命令:
tarxjvfcross-2.95.3.tar.bz2
之后在/usr/local/arm文件目录下可以看见解压后的2.95.3的库了,或则假如你解压的是cross-3.4.1.tar.bz2的版本,这么将会在对应目录下生成3.4.1的目录。
之后设置环境变量。由于Linux机器上存在不止一种编译器,为了防止环境变量冲突,最好新建一个帐号,例如新建帐号arm-linux-gcc,之后在对应的帐号目录中找到.bash_profile文件,设置环境变量,编辑.bash_profile,在最后一行降低路径(vi打开文本文件,按i表示insert更改文本文件,之后Esc退出insert模式,再shiftzz表示保存退出文件,详尽的命令介绍可以到网上查阅相关资料):
exportPATH=/usr/local/arm/2.95.3/bin:$PATH
可以通过echo$PATH来查看环境变量是否设置成功:
5.2.3编译并运行程序
在编辑好了代码文件并完善好了交叉编译环境后,就开始编译代码生成可执行程序,并移植到arm板上运行程序。
在Linux系统的终端中通过输入arm-linux-gcc/arm-linux-g++来编译C/C++文件。比如,我们对上面编撰的最简单的CppHelloWorld.cpp文件进行编译:
arm-linux-g++CppHelloWorld.cpp–oCppHello
之后在对应目录下会生成一个可在arm-linux系统上运行的应用程序CppHello。
之后通过SSH服务和FTP服务,将可执行文件从Linux文件系统网路传送到arm-linux文件系统(在此用到了两个小软件SSHSecure和LeapFTP,在前面再对软件的功能进行一下简略介绍)。
之后在Windows机器上远程登陆arm-linux系统开发板,并控制程序运行
注意:须要先通过chmod+xCppHello来告诉系统此文件是可执行文件,之后再通过./CppHello来运行程序。
我们可以看见程序运行的结果:在屏幕上复印出一行字“HelloWorld”
广州市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
上海市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
广州市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
广州市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
上海市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
广州市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
上海市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
广州市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
上海市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190
广州市西城区中关村东路18号B座15层1530室电话:(010)82350740邮编:100190