历史上的今天
返回首页

历史上的今天

今天是:2025年06月10日(星期二)

正在发生

2021年06月10日 | ARM/uClinux开发环境的建立

2021-06-10 来源:eefocus

先说两句废话为和我以前一样对操作系统(尤其是嵌入式操作系统)迷惑的弟兄解释些概念。因为总是有人在问是不是一定要用操作系统,我的CPU能不能移植操作系统,可以移植什么操作系统,有了操作系统可不可以运行某些程序。


从我的个人经历来讲,这其实就是许多硬件出身的弟兄对操作系统这个东西有神秘感(和我一年前一样)。说白了,操作系统就是一段设计非常巧妙的程序,和你自己的程序从本质讲没有区别,于是,以上问题转为,我是不是一定要用这段程序,我的CPU能不能运行这段程序,可以跑什么样的程序。这个程序可以跑,调用这个程序接口的另一个程序能不能跑!


答案也就变得简单,操作系统对任何一个CPU都不是必须的(对嵌入式系统更是如此),你可以自己编些程序在没有操作系统的PC裸机上跑(BIOS就是这样的),像玩C51一样,(虽然奢侈的让人有些心痛),或者移植UCOS到上面。另一方面,现代操作系统大多需要一些硬件的支持,(像保护模式的实现),反过来说,高端CPU中专门有针对支持操作系统的体系结构,这样,许多操作系统的实现是挑剔硬件平台的。其实其它程序也一样,你编的程序使用的片上外设另一CPU上没有,那这段程序就无法移植了。这就是话粗理不粗。书归正传,还是聊聊ARM+uClinux开发模式下开发环境的建立(其实下面说到的东西不仅限于这种硬件平台和操作系统)


很久以前就在介绍嵌入式系统开发的书上见过“交叉编译环境”这词,当时觉得很玄,用了以后才知道,其实就是解决在谁的地盘上用谁的工具编谁的代码问题。


编译的最主要的工作就在将你的程序转化成运行该程序的CPU所能识别的机器代码,不同的CPU有相应的编译器,另一方面。编译器本身也是程序,当然也要在某一个CPU平台上运行。于是交叉编译的交叉点就在那个编译器本身是CPU1上的一个程序,却在为CPU2编译代码(整个一个吃里扒外!)。这么一想,以前用51和dsp的开发软件(大部分都是IDE-集成开发环境)开发程序时,都算是交叉编译啦。当然,假如在你的ARM系统上,操作系统已经正常运行,并且你的资源足够多,你可以把PC机上运行的ARM编译工具移植到ARM上,然后所有该系统的应用程序都直接在ARM系统上编译,这就不算交叉编译,但如果有条件这么作,程序的开发或者移植就方便多了,因为整个开发过程又回到在自己PC机上编应用程序的那种模式了,那就是在自己的地盘上用自己的编译器编自己的应用程序。


与不使用操作系统的开发模式不同(此处的操作系统尤其指提供了专门的接口函数库的操作系统,目前的UCOS就不算),在目标板(就是实现系统的板子)使用操作系统的开发模式下,交叉编译环境中还需要该对应该操作系统的库。比如uClinux提供的uClibc。此时,开发用的主机上不光要有目标板CPU所需的编译工具,还要有对应操作系统的库,又因为一般库文件还要在开发机上拿目标CPU的编译器重新编译一下,所以还要把操作系统的原码也放到开发机上。(唉,跟目标板没什么关系,却要帮它背这么多东西,真是上辈子欠它的!!)。


虽然操作系统的接口库至关重要,但大家似乎已经淡忘了它的存在。这些多是因为大家已经远离了刀耕火种的年代(需要告诉编译器需要的include路径,lib路径,以及lib的名称),集成的编译环境让我们编译链接的所有繁琐工作化作对BUILD按钮的潇洒一击。而且不论是windows环境,还是linux环境,都有环境变量去记录这些参数。。但尝试将/usr/lib目录改一个名字,你就会知道你不能无视他们的存在,因为操作系统的功能都是通过这些库来交给应用层程序使用的。当然如果你的系统不依靠任何操作系统,像最原始的那种完全自己实现所有代码,就只需要一个编译工具,少了这些罗嗦事。


以上的东西一般时候是没有必要仔细研究,但交叉环境下开发或移植比较大的程序时,你可能就需要了解编译器,链接器等开发工具的几乎所有重要参数。


我在开发时,主机完全使用的是linux,如果有条件,建议大家这样作,linux的使用没有想象的复杂(虽然我现在身边还要放一本关于linux使用的书籍),而且开发程序可以先在主机上调通,然后用交叉编译工具为目标系统重新编译一遍,可以这样做是因为主机是linux,目标系统跑uClinux,两个操作系统提供的应用程序接口几乎是一样的,所以程序几乎不用修改。


在我的系统上,建立基本的开发环境过程如下。


(1) 安装gnu开发工具链(是GNU开发的针对ARM CPU的一组编译开发程序(是linux程序)。包括arm-elf-gcc,arm-elf-ld等

(2) 将uClinux源代码源代码解压到相应路径下,按照编译内核的步鄹编译一遍(此时使用的编译工具已经是上面提到的ARM编译工具了,因为它要在ARM CPU上运行,另外,和编译linux内核一样,此时可以通过menuconfig来对内核提供的功能进行裁减

(3) 将库(uClibc)解压到相应路径下,用以上工具编译一遍。


这样最基本的环境就算搭建好了。

推荐阅读

史海拾趣

Advanced Detector Corp公司的发展小趣事

ADC始终坚持以技术创新为核心竞争力,不断投入研发资源,探索新的技术领域。目前,公司正积极研发应用于物联网、人工智能等前沿领域的探测器技术,并计划推出更多具有创新性的产品。展望未来,ADC将继续致力于技术创新和市场拓展,努力成为电子行业的领军企业。

这五个故事展示了Advanced Detector Corp公司从创立初期到逐渐发展壮大的过程,体现了公司在技术创新、市场扩张、战略合作等方面的努力和成就。同时,这些故事也揭示了ADC在电子行业中的重要地位和影响力。

Hongfa公司的发展小趣事

为了推动公司的进一步发展,宏发公司于2008年进行了股份制改造,并成立了“厦门宏发电声股份有限公司”。2012年,公司成功上市,通过资本市场获得了更多的资金支持和发展动力。上市后,宏发继续加大在技术研发、市场拓展和产能提升等方面的投入,不断巩固和扩大其在继电器行业的领先地位。同时,公司还积极履行社会责任,为行业发展和地方经济做出了积极贡献。

ANYSOLAR LTD.公司的发展小趣事

ANYSOLAR始终关注企业的社会责任和可持续发展。在生产过程中,公司严格遵守环保法规,采用先进的环保技术和设备,确保生产过程中的废弃物排放达到国家标准。同时,公司还积极参与社会公益活动,捐赠光伏产品支持贫困地区的能源建设。

此外,ANYSOLAR还致力于推动清洁能源的普及和应用,通过技术研发和市场推广等方式,降低清洁能源的使用成本,提高其在能源结构中的占比。这些举措不仅体现了ANYSOLAR的社会责任感,也为公司的可持续发展奠定了坚实的基础。

以上便是关于ANYSOLAR LTD.的五个发展故事。虽然这些故事是虚构的,但它们基于电子行业的常见趋势和企业发展的普遍规律,旨在展示一个企业在发展过程中可能面临的挑战和机遇。希望这些故事能够为您提供一些启发和参考。

CIRCUITCO公司的发展小趣事

随着技术的不断进步,CIRCUITCO公司开始寻求市场拓展的机会。公司积极与国内外知名电子产品制造商建立合作关系,为其提供优质的电路板解决方案。通过与这些企业的合作,CIRCUITCO的产品逐渐渗透到各个领域,如通信、计算机、消费电子等。同时,公司也通过参加国际电子展会等方式,提升品牌知名度,进一步拓展市场份额。

Freeport Resources Enterprises Corp公司的发展小趣事

随着全球对环保和可持续发展的重视,Freeport Resources将这一理念融入到公司的发展战略中。公司投入大量资金进行环保设施建设和生产技术改造,致力于减少开采和加工过程中的环境污染和资源浪费。同时,Freeport Resources还积极参与社会公益活动,推动矿业与社区的和谐共生。这些举措不仅提升了公司的社会形象,也为其在电子材料市场的长期发展奠定了坚实的基础。

CP Technology Inc公司的发展小趣事

CP Technology Inc一直注重产品质量和客户服务。公司建立了严格的质量管理体系,从原材料采购到生产过程控制,再到产品检测和售后服务,都力求做到精益求精。这种对品质的执着追求赢得了客户的广泛赞誉和口碑传播,为公司的长期发展奠定了坚实基础。

问答坊 | AI 解惑

常用子程序

这是一些我们常用的子程序,包含了各种通讯以及模块的子程序,很收用的。…

查看全部问答>

任意波形发生器

本帖最后由 paulhyde 于 2014-9-15 03:41 编辑 任意波形发生器 任意波形发生器  …

查看全部问答>

今天收到SST,有个问题想问大家,在线等!

今天收到SST89C58,DIP40的,空片,直接用串口电路(MAX232)对其进行在线编程,能写进去吗?需要注意些什么?…

查看全部问答>

GSM模块参数设置问题?

我用的GSM模块是EM310 现在硬件电路还没出来,公司让我写设计先, 我想知道,如果发送命令 第一步:(AT%ETCPIP=”dtu”,”123”), 注册网络用户名dtu和密码123 第二步:(AT%ETCPIP= ,”333”) 那么用户名是被设置为了默认值还是空或者还 ...…

查看全部问答>

可有偿哦-有高手能提供点读笔芯片组开发支持吗,或提供芯片原组代码

想做一款点读的东东,好像有好几个厂家的芯片组可以选择,请问谁可以提供开发芯片组(或在哪儿有代理可以买),有源代码更好了,兄弟自己掏点儿银子也行啊,哈哈…

查看全部问答>

Keil MDK下uC/OS-II在FL2440上的移植

关于uCOS-II的种种阿呆就不说了,很多初学者从此踏上操作系统之路uCOS-II在ADS上的移植很常见,而在KEIL MDK下的移植却不是很多,阿呆根据ADS下的移植范例,结合自 己最近使用KEIL MDK的稍许心得,记录一下uCOS-II在KEIL MDK下的移植过程。 一: ...…

查看全部问答>

eZ430学习笔记之三在labVIEW下使用

以下使用NI-VISA与USB设备eZ430-RF2500进行通信,是在使用LabVIEW2010和NI-VISA503full的开发环境通过的。 1、USB与VISA背景 VISA是一个高级API用来与仪器控制总线进行通信。它是平台独立、总线独立、环境独立的。USB是一个基于消息的通信总线。 ...…

查看全部问答>

这中断是咋回事??

最近在调CC1101,中断本来就已经调好了的,,,无奈又出毛病了,,,找不出哪有毛病,就重新建了一个工程,单独做个中断,,就是LAUNCHPAD上面那两个按钮,按一下进入中断把灯点亮. 结果竟然不行......也找不出毛病在哪....... #include \"inc/hw_memmap.h\" ...…

查看全部问答>