历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2019年12月03日 | Linux及Arm-Linux程序开发笔记(零基础入门篇)

2019-12-03 来源:eefocus

前言:本文记录了自己从一个完全不懂Linux的人如何一步步学会Linux程序开发的过程。当然也希望本文能够达到它的目的,让那些和我一样没有任何基础的人也能快速入门Linux程序开发。


image

“三系统”职能和关联图

  关于每个系统的职能及操作还有文件如何传送交流都在后面详细介绍。

  关于开发语言,因为目前购买的Arm-Linux嵌入式板提供的编译库都是C/C++的,所以一般选择C/C++进行程序设计。

clip_image004

“三机器”组合模式图

clip_image006

“两机器”组合模式图

  如果开发人员对机器性能要求比较高,那么建议采用“三机器”组合模式。因为“两机器”组合模式要求一台机器运行双系统,每个系统都需要分配一定的硬件资源,可能会对每个系统运行的流畅程序都造成影响。

  如果开发人员只进行一些简单的程序开发,则建议采用“两机器”组合模式。这样可以节省硬件设备的投资,而且开发环境的搭建、开发的流程等等都会简单一些。而且下面的内容都是基于这种“两机器”组合的开发模式。


clip_image008

  打开后,就可以看到一个虚拟机的硬件资源配置了。这些参数有一部分是在只能在初次使用iso安装的时候配置的,比如硬盘大小。另外一些参数比如内存大小、共享目录等等可以在后期随时人工更改的。

(详细设置内容,到网上可以找到很多相关内容,在此不再赘述)

clip_image010

  两种方法的区别就是WinXp的安装盘和Ghost盘的区别吧。

  安装完毕Fedora后,就可以从虚拟工作站中启动Fedora Linux系统了。系统桌面如下:

clip_image012

clip_image014

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

    在VMware中建立共享目录,执行菜单命令【VM】--【Settings…】

clip_image016

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

clip_image018

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

clip_image020

    然后登录系统,设置分辨率,系统菜单:

    【System】--【Preferences】--【Hardware】--【Screen Resolution】

clip_image022

clip_image024

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

clip_image026

2.3.2其它设置

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

clip_image028

    熟悉Windows系统的DOS操作界面的人肯定也会对此操作终端也不会陌生。通过在Terminal中输入命令,用户可以很方便地完成Linux下的一系列操作,在正式进入自主程序设计之前,用户有必要对下面一些最基本命令进行熟悉(其它的命令在项目需要的时候再到网上查找相关资料)。

文件操作命令

文件/文件夹的创建、修改、复制、删除、移动等等。(如rm/mv/vi/cat等等)

网络设置命令

个性IP、开启FTP、开启Telnet、开启SSH等等。(如ifconfig/telnetd等等)

用户管理命令

系统用户的添加、删除、密码修改等等。(如,addusr/passwd等等)

文件编译命令

这个涉及到编译环境的建立,将在后面正式进入到自主程序设计时进行详细介绍。

    虽然目前Fedora为用户提供了比较良好的操作界面,但是Linux最初是从命令行的操作系统发展起来的,很多强大的功能都是需要依靠Terminal控制终端来实现的,所以作为开发人员有必要先对这些基本命令进行熟悉并熟练操作。

clip_image030

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

clip_image032

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

clip_image034

    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++进行研究)。

clip_image036

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


clip_image038

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

clip_image040

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

clip_image042

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

clip_image044

    系统默认自带有两个版本的Qt库qt-3.3和qt4,一般我们用qt-3.3。

    编写窗口程序,我们只需要在建立了C++ Project的情况下,对C/C++ Build路径进行设置,指向qt-3.3的库即可。主要开发流程如下:

clip_image046

    第一步:使用Eclipse CDT建立C++ Project。

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

clip_image048

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

clip_image050

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

clip_image052

    【GCC C++ Linker】--【Libraries】添加编译时引用的库路径:/usr/lib/qt-3.3/lib(注意:不要写成include了)。并设置库搜索命令参数:qt-mt。

第三步:编写引用了Qt库的C++程序。

第四步:运行程序。

程序运行效果如下图:

clip_image054

    总结:通过上面对Linux下面的控制台程序及窗口程序的介绍,我们已经对Linux系统下的简单程序开发流程有了简单了解。下面开始介绍arm-Linux程序的开发。


五、使用Eclipse开发Arm-linux程序 

5.1 Arm-linux硬件平台 

clip_image056

    Arm-Linux机器采用的是飞凌嵌入式技术公司的FL2440开发板。在飞凌公司购买开发板的时候,会随开发板一起赠送的相关入门教程《飞凌开发板配套教程》并附有一张光盘,里面有各种写FL2440相关的开发资源。

    在正式进入程序开发之前,先对FL2440开发板及arm-linux系统进行熟悉。

    Fl2440开发板:熟悉Bootloader的使用方法、学会烧写内核、烧写文件系统等等。

    Arm-linux系统:熟悉利用一些文件系统和网络设置相关的命令。如果你对Linux命令已经有了一定了解,那么arm-linux上的命令也基本一样。

(详细操作过程请参考《飞凌开发板配套教程》一书)

image

    在早期的开发环境方式中,是先用文本编辑器编写c或者cpp文件,然后再直接在Linux机器上通过交叉编译命令,编译代码文本文件并生成可执行程序,然后将可执行程序传送到arm-linux板上,然后就可以在arm-linux机器上运行程序了。

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

clip_image060

    然后设置环境变量。因为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

clip_image062

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

clip_image064

clip_image066

    然后在对应目录下会生成一个可在arm-linux系统上运行的应用程序CppHello。

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

clip_image068

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

clip_image070

    注意:需要先通过chmod +x CppHello来告诉系统此文件是可执行文件,然后再通过./CppHello来运行程序。

    我们可以看到程序运行的结果:在屏幕上打印出一行字“Hello World”

推荐阅读

史海拾趣

Avel Lindberg公司的发展小趣事

由于我无法直接获取Avel Lindberg公司的详细发展资料,因此我无法直接为您撰写5个关于该公司发展起来的具体故事。不过,我可以为您提供一个通用的故事框架,您可以根据这个框架结合公司的公开信息来撰写相关故事。

Avel Lindberg公司发展故事框架

  1. 创业初期: 描述Avel Lindberg公司成立的背景,包括创始人或核心团队的愿景、行业趋势以及初始产品或服务。可以提及公司如何克服初创期的困难,如资金短缺、市场竞争激烈等问题,逐渐在市场上站稳脚跟。

  2. 技术突破: 讲述公司在某个关键时期实现的技术突破,这项突破可能是对既有技术的改进,也可能是全新技术的研发。这个突破如何帮助公司打开了新的市场领域,提升了竞争力,成为行业内的领军者。

  3. 合作与扩展: 描述公司如何通过与其他企业、研究机构或高校建立合作关系,来扩大业务范围或提升技术水平。这些合作可能涉及共同研发、市场拓展、品牌建设等方面,对公司的长期发展产生了积极影响。

  4. 国际化战略: 讲述公司如何逐步实施国际化战略,进入海外市场。这包括公司如何分析国际市场的需求和竞争态势,制定合适的市场进入策略,以及在国际市场上取得的成就和面临的挑战。

  5. 社会责任与可持续发展: 介绍公司在发展过程中如何关注社会责任和可持续发展。这可以包括公司在环保、员工福利、社区支持等方面的举措,以及这些举措如何提升了公司的社会形象和品牌价值。

在撰写具体故事时,您可以根据Avel Lindberg公司的实际情况调整上述框架中的内容,并结合公司的官方公告、新闻报道和行业分析报告等资料来丰富细节。同时,请确保所描述的事实准确无误,避免主观评价和猜测。

AAT [Advanced Analog Technology, Inc.]公司的发展小趣事

由于版权和实时数据的限制,我无法直接为您提供关于AAT(Advanced Analog Technology, Inc.)公司的5个具体的发展故事。但是,我可以提供一个通用的框架,您可以根据这个框架来查找或编写相关故事。


AAT公司发展故事框架

  1. 创业初期与技术创新

在电子行业的初期,AAT公司由一群富有远见和技术的工程师创立。他们瞄准了模拟技术领域的巨大潜力,决心开发出一系列高性能的模拟芯片。初期,公司面临资金短缺和技术挑战,但通过不断的技术创新和市场调研,AAT成功研发出了一款具有竞争力的模拟芯片,并获得了市场的认可。

  1. 市场拓展与国际合作

随着技术的成熟和产品的完善,AAT开始积极拓展市场。他们与全球多家知名电子企业建立了合作关系,共同推动模拟芯片在各个领域的应用。同时,AAT也积极参与国际技术交流活动,与全球同行分享经验和技术成果,进一步提升了公司的国际影响力。

  1. 应对行业变革与战略调整

随着电子行业的快速发展和变革,AAT也面临着新的挑战和机遇。为了应对这些变化,公司进行了战略调整,加大了对新兴技术的研发投入,并优化了产品结构和市场布局。这些举措使得AAT在激烈的市场竞争中保持了领先地位。

  1. 人才培养与团队建设

AAT深知人才是企业发展的核心。因此,公司一直注重人才培养和团队建设。他们通过提供丰富的培训和发展机会,吸引和留住了一批优秀的工程师和管理人才。这些人才为公司的技术创新和市场拓展提供了有力支持。

  1. 社会责任与可持续发展

在追求经济效益的同时,AAT也积极履行社会责任。他们关注环境保护和可持续发展,通过采用环保材料和节能技术,降低产品对环境的影响。此外,AAT还积极参与公益事业,为社会做出积极贡献。


以上只是一个通用的框架,您可以根据这个框架来查找或编写关于AAT公司的具体发展故事。在编写时,请确保只描述事实,避免加入个人主观评价或褒贬色彩。同时,由于电子行业和AAT公司的发展是一个持续的过程,建议您查阅最新的行业资讯和公司报告,以确保故事的时效性和准确性。

Advanced Power Solutions公司的发展小趣事

Advanced Power Solutions公司非常重视人才培养和企业文化建设。公司注重员工的职业发展和培训,为员工提供了广阔的职业发展空间和学习机会。同时,公司还倡导开放、创新的企业文化,鼓励员工提出新的想法和建议。这种积极向上的企业文化吸引了大量优秀人才的加入,也为公司的持续发展提供了强大的动力。

以上五个故事框架仅用于说明Advanced Power Solutions公司可能的发展路径和成就,并不代表公司的实际历史。在实际撰写时,需要根据公司的具体情况进行调整和补充。

Axiomtek公司的发展小趣事

Advanced Power Solutions公司非常重视人才培养和企业文化建设。公司注重员工的职业发展和培训,为员工提供了广阔的职业发展空间和学习机会。同时,公司还倡导开放、创新的企业文化,鼓励员工提出新的想法和建议。这种积极向上的企业文化吸引了大量优秀人才的加入,也为公司的持续发展提供了强大的动力。

以上五个故事框架仅用于说明Advanced Power Solutions公司可能的发展路径和成就,并不代表公司的实际历史。在实际撰写时,需要根据公司的具体情况进行调整和补充。

Aimtec公司的发展小趣事

随着业务规模的扩大,Aimtec公司开始将目光投向国际市场。公司先后在欧洲和亚洲设立了办事处,通过本地化的销售策略和技术支持,逐步打开了国际市场的大门。在国际竞争中,Aimtec凭借其优质的产品和服务,赢得了众多客户的信赖和好评。同时,公司还积极参与国际电子行业的交流与合作,不断提升自身的技术水平和市场竞争力。

Holy Stone公司的发展小趣事

1999年,Holy Stone在台湾桃园龙潭设立了生产基地,开始自主生产积层陶瓷电容(MLCC)。这一举措标志着公司从单纯的代理商向集研发、生产、销售于一体的多元化企业转型。同年,公司创立了自有品牌“HEC”,并以该品牌推出了一系列多元客制化产品,行销全球。这些产品凭借其高品质和满足客户全方位需求的特点,赢得了客户的广泛信赖,进一步巩固了公司在电子元件市场的地位。

问答坊 | AI 解惑

evc4转 vc2005 的问题

原来是用ce4.2的系统 用的是evc4 现在系统改成ce5.0的   想用vc2005   因为可以单步调试. 但有个消息函数一直没有找到, 请大家在vc2005上面怎么做告诉下我 PreTranslateMessage(MSG* pMsg) evc4和vc6  我知道 ...…

查看全部问答>

导出的SDK安装到EVC下报错

导出的SDK 安装到EVC下 在TOOL/OPTIONS/directories 中设置完了后 编译一个程序 提示:error:Connection was not created 程序本身0 error 0 warning 请问怎么解决这个事情呢?…

查看全部问答>

求VXWORKS5.5之前版本

不知哪位有vxworks5.5之前的版本 越早越好 联系szwdsd@gmail.com 不胜感激…

查看全部问答>

猎头职位:赴美国工程师!咨询13381085719 13381085771刘先生

猎头职位:赴美国工程师!咨询13381085719 13381085771刘先生…

查看全部问答>

新手问一个关于data,idata,xdata的问题

由于程序里面定义了一些比较大的idata类型的全局变量,导致256字节的ram不够用了。选择的是small模式,在不考虑优化的情况下,可以把这里的idata类型变量随意的改为xdata类型吗?…

查看全部问答>

SI4432直接模式

有没有哪位大虾做过Si4432直接模式的,给小弟指导一下啊,我用si4432做串口透明传输,如果用FIFO模式,串口速率达到9600bps的时候,空中速率要很高啊,我改用直接模式,但不知道咋个弄,资料上介绍很少,而且我是刚接触这块儿不久的一个菜鸟,各种 ...…

查看全部问答>

参量放大器

参量放大器有它很大的优势。早期半导体器件水平很低时,用它作低噪声电路,在RF领域占居相当重要的位置。   现在的飞秒激光,离不开参量电路。   老外的参量电路,帖个图,大家欣赏   …

查看全部问答>

关于协议栈和硬件资源的匹配问题

zigbee协议是个泛指的概念,它实际是一系列的协议标准与规范,并不是实际的代码,当然也不能实际使用.到目前为止已经出了3个版本,分别是2004,2006,2007. 以TI公司为代表的几家, 参照了3个不同的ZIGEBEE版本,又结合各自厂家推出的硬件平台,分别开发出 ...…

查看全部问答>

基于STM32的USB程序开发笔记

基于STM32的USB开发笔记,有兴趣的朋友可以收藏一下…

查看全部问答>

关于MSP430F5438的自检程序

各位,大虾好,请有没有关于MSP430F5438好坏的自检程序,就是对MCU内部的各个内设都有一个自检,就像示波器自检功能那样,通过逐一打开面板上的所有灯来告诉我们示波器硬件是否OK?在此表示感谢。 …

查看全部问答>