基于arm+uClinux的嵌入式系统的开发,移植
基于ARMLINUX的嵌入式GUI的研究和移植_纪竞舟

基于ARM LINUX的嵌入式GUI的研究和移植纪竞舟,付宇卓(上海交通大学芯片与系统研究中心,上海200030)表1上述三个GUI的比较MiniGUI Microwindows QT/EmbeddedAPI Win32风格X、Win32子集QT(C+ +)函数库大小500K 600K 1.5M可移植性好很好较好(但函数库本身的交叉编译较难)多语种支持很好好使用UNICODE,但效率较低,对中文字体支持几乎没有系统资源消耗小较小最大(C+ +实现)操作系统支持Linux Linux、ELKS、MSDOS Linux硬件平台支持X86、ARM、MIPS、PowerPC X86、ARM、MIPS、PowerPC、SPARC X86、ARM 3基于ARM Linux平台的移植3.1编译环境的建立GUI的编译通常都是在PC机上执行的,也就是说,编译器本身能够在PC机上执行,同时编译源代码生成的二进制文件必须能在目标机上执行,这类编译器通常称为交叉编译器。
对于ARM平台,我们安装了cross-arm-binutils- *.i386.rpm、cross-arm-gcc- *.i386.rpm、cross-arm-glibc-*.i386.rpm这三个包。
这些包都可以从网上免费获取,“*”通常代表版本号。
arm-binutils这个包一般包含了一些针对ARM平台的二进制工具,比如arm-strip、arm-ar等命令;arm-glibc这个包包含的是标准C的函数库的ARM的版本以及对应的头文件;arm-gcc中包含的则是生成ARM平台代码的x86上的交叉编译器。
执行rpm命令将这些包安装到PC机上,若不在系统默认搜索目录下,比如安装在/opt/cross目录下,则必须将/opt/cross/bin目录加到系统的PATH环境变量中,这样在每次编译时系统才能找得到编译器。
另外需要注意的是,编译时所用的函数库版本要与目标版上运行时所用的函数库版本一致。
ARM设计的uClinux及其应用.

ARM设计的uClinux及其应用摘要:本文讨论了基于ARM的嵌入式操作系统uClinux及其应用开发设计及实现。
在32位ARM核的微处理器S3C4510B的硬件平台上结合嵌入式实时操作uClinux.完成了系统的硬件设计uClinux的编译、移植,最后实现了应用程序的添加。
关键词:ARM;实时操作系统uClinux;S3C4510B;ARM7TDMI1嵌入式操作系统uClinux及其应用开发嵌入式软件平台由以下部分组成:系统引导程序、嵌入式操作系统内核、文件系统。
系统引导程序通常也称为BootLoad&mdas摘要:本文讨论了基于ARM的嵌入式操作系统uClinux及其应用开发设计及实现。
在32位ARM核的微处理器S3C4510B的硬件平台上结合嵌入式实时操作uClinux.完成了系统的硬件设计uClinux的编译、移植,最后实现了应用程序的添加。
关键词:ARM;实时操作系统uClinux;S3C4510B;ARM7TDMI1 嵌入式操作系统uClinux及其应用开发嵌入式软件平台由以下部分组成:系统引导程序、嵌入式操作系统内核、文件系统。
系统引导程序通常也称为BootLoad—er ,代码量虽少,但是作用非常大,相当于PC上的BOIS,负责将操作系统内核固化到Flash中和系统初始化工作.然后将系统控制权交给操作系统。
文件系统是嵌入式软件平台占用存储量最大的一部分,也是与用户开发最相关的一部分,它存储了系统配置文件、系统程序、用户应用程序和必需的驱动程序。
1.1 BootLoader程序系统引导程序BootLoader是嵌入式系统加电后执行的第一个程序,一般应写入Flash存储器中并从起始物理地址0x0开始。
在应用实际中BootLoader的功能主要有:① 将uCLinux内核和文件系统烧写到目标板中;②系统初始化;③系统的内存映射;④加载uClinux内核1.2 嵌入式操作系统uCiinuxuClinux就是Micro—Control—Linux,是针对控制领域的嵌入式linux操作系统,它是从Linux 2.0/2.4内核派生而来,沿袭了主流Linux 的绝大部分特性,适合不具备内存管理单元(MMU)的微处理器/微控制器(例如ARM7TDMI),它也是一个完全符合GNU/GPL公约的操作系统,完全开放代码。
ARM应用系统开发详解—嵌入式uClinux及应用开发

第7章嵌入式uClinux及其应用开发本章从构建一个针对S3C4510B硬件平台的嵌入式uClinux操作系统和在其上进行应用程序的开发入手,逐步讲述如何在Linux环境下编写用户应用程序的方法和步骤,并为熟悉Windows操作系统的用户介绍在这种平台之上,使用何种工具编写和编译自己的应用。
通过本章的学习,读者可以对嵌入式uClinux有一定的了解,并且掌握在Linux和Windows 下嵌入式系统应用开发的基本方法。
本章主要内容有:-嵌入式uClinux系统概况-开发工具GNU的使用-建立uClinux开发环境-在uClinux下开发应用程序7.1 嵌入式uClinux系统概况在PC机上开发应用程序的用户都会有这样的感觉,PC机有完善的操作系统并提供应用程序接口(API),开发好的应用程序可以直接在操作系统上运行。
虽然嵌入式系统的应用程序完全可以在裸板上运行,但为了使系统具有任务管理、定时器管理、存储器管理、资源管理、事件管理、系统管理、消息管理、队列管理和中断处理的能力,提供多任务处理,更好的分配系统资源的功能,用户就需要针对自己的硬件平台和实际应用选择适当的嵌入式操作系统(Embedded Operating System,以下简称EOS)。
本节将结合本书所谈到的硬件平台S3C4510B,介绍一种针对不带MMU的ARM微处理器的嵌入式操作系统uClinux。
uClinux是一个完全符合GNU/GPL公约的操作系统,完全开放代码,现在由Lineo公司支持维护。
uClinux的发音是“you-see-linux”,它的名字来自于希腊字母“mu”和英文大写字母“C”的结合。
“mu”代表“微小”之意,字母“C”代表“控制器”,所以从字面上就可以看出它的含义,即“微控制领域中的Linux系统”。
为了降低硬件成本及运行功耗,有一类CPU在设计中取消了内存管理单元(Memory Management Unit,以下简称MMU)功能模块。
嵌入式Linux在ARM上的移植

Linux在ARM上的移植摘要:本文是基于ARM的平台上进行嵌入式操作系统LINUX的移植,其中ARM选S3C2410。
文中首先对Linux操作系统内核进行了介绍,然后对系统引导程序(BootLoader)进行了设计,最后给出了Linux在ARM上的移植过程。
关键字:Linux、ARM、BootLoader、移植一、Linux操作系统内核Linux作为一种优秀的操作系统,近几年在嵌入式领域成为了极具潜力的嵌入式操作系统。
本文的主要内容是将Linux系统的内核移植到ARM(基于ARM9S3C2410)上。
Linux操作系统主要由内核、Shell、文件结构组成。
其中内核是系统的心脏,是运行程序和管理磁盘、打印机等硬件设备的核心程序。
(1)Linux内核结构Linux内核是整个Linux系统的灵魂,负责整个系统的内存管理、进程调度和文件管理。
Linux内核与大部分UNIX内核一样是单内核体系结构的,能够根据需要定制内核映像的尺寸,具有很大灵活性,不需要重新编译内核和引导就能检验新的内核组件,这个特性对于嵌入式而言是非常有好处的,方便用户构筑自己的个人内核。
Linux内核由5个主要的子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。
(2)Linux内核代码组织结构本文将对LINUX进行内核移植,其内核代码分布如图所示。
下面分别对其进行说明:/arch目录包含了目前Linux支持的硬件结构,如i386、alpha、arm等的内核代码;/drivers目录包含了内核中所有的设备驱动程序;/fs目录包含了所有的文件系统的代码;/include目录包含了建立内核代码所需的大部分库文件,这个模块利用其它模块重建内核;/init目录包含了内核的初始化代码,内核从此处工作;/ipc目录包含了进程间通信代码;/kernel子目录包含了主内核代码;/mm目录包含所有独立于CPU体系结构的内存管理代码;/net目录包含了和网络相关的代码,如ipv4、ipv6等。
基于ARM的uClinux及其应用开发

此 外 对 系 统 S C G寄 存 器 也 进 行 了 相 关 的 设 置 。 YS F 如
C c e 作使 能 、写缓 冲使 能 以及 设 置 了特殊 功 能寄存 器组 的 ah 操
基指针 等 。 最后 即定 义 系统存 储器 控制 寄存 器 。
l32 -. 编 译 u ln x内核 C iu
# e n MC K d f ef L i # e n L 2 d f eMC K i
1 . 嵌 入 式 操 作 系 统 u iu 2 Ci x n u l u 就 是 Mir— o t lLn x Ci x n co C nr — iu ,是 针 对 控 制 领 域 的 嵌 入 o
式 l u 操 作 系 统 , 是 从 Ln x2024 核 派 生 而 来 , 袭 了 主 i x n 它 iu . .内 / 沿
系 统 引 导 程 序 B oL a e是 嵌 入 式 系 统 加 电 后 执 行 的 第 一 oto d r
个 程序 , 一般 应写入 Fah ls存储 器 中并从 起始 物理 地址0 0 x 开始 。 在应 用 实际 中B oL a e的 功能 主要 有 : 将 u Ln x oto dr ① C iu 内核 和 文
统配置 文件 、 系统 程序 、 户应 用程 序和必 需 的驱动 程序 。 用
11 B o L a e 程 序 . oto dr
d fn ¥ C 51 b CP ma trco k eie 3 4 0 U se lc
/木 木 球 水 木 术 水 水 术 术 木 丰 术 水 木 术 木/ 术 卓 木 术 木 木 术 木 木 水 木 木 水 木 术 木 木 木
及 其 他相 关硬 件信 息 的定 义文 件h rw r.首 先要 定义 系统 工 ad ae h
基于ARM9的LINUX操作系统移植

基于ARM9的LINUX操作系统移植ARM9是ARM公司开发的一种低功耗、低成本的微处理器核。
它具有较高的性能、较低的功耗和较小的尺寸,适用于嵌入式系统、智能手机和便携设备等。
移植Linux操作系统到基于ARM9的平台是一项复杂的任务,需要仔细考虑硬件和软件的兼容性,以及适配内核和驱动程序等。
下面将详细介绍ARM9平台上的Linux操作系统移植过程。
首先,进行硬件选型和准备。
选择合适的ARM9处理器和开发板,确保其能够满足项目的需求。
然后,对硬件进行适配和配置,包括时钟、存储器、外设等。
需要将硬件的相关信息添加到Linux内核配置文件中,以确保内核能够正确地检测和使用硬件。
随后,编写启动代码。
ARM9平台上的启动代码是一个汇编文件,用于初始化处理器和硬件,设置堆栈和中断向量表,并跳转到内核入口点开始执行。
启动代码的编写需要根据具体的处理器和开发板进行调整和修改。
然后,进行驱动程序的移植。
驱动程序是操作系统与硬件之间的桥梁,负责管理和控制硬件资源。
在ARM9平台上,需要移植适配各种外设的驱动程序,包括串口、网卡、显示屏等。
可以根据硬件厂商提供的驱动程序手册或原始代码进行移植和调试。
最后,进行系统调试和优化。
移植完Linux操作系统后,需要进行系统调试和测试,确保系统能够正常启动和运行。
可以使用调试工具和性能分析工具来检测和解决问题,并对系统进行优化,提升性能和稳定性。
总之,移植Linux操作系统到基于ARM9的平台是一项复杂而又重要的任务。
通过详细的硬件准备、内核编译、启动代码编写、驱动程序移植和系统调试等步骤,可以成功将Linux操作系统移植到ARM9平台上,并实现功能完善、稳定可靠的嵌入式系统。
基于armuClinux的嵌入式系统开发.

基于arm+uClinux的嵌入式系统开发首页 | 电子新闻| 网站调查 | 电子基础 | 单片机 | 电子设计 | 电子制作| 电子课件 | 资源共享 | 资源下载 |访客留言 | 自选风格基于arm+uClinux的嵌入式系统开发作者:未知来源:BBS浏览次数:179添加时间:2006-7-15 10:20:20前些日子基于arm+uClinux开发了一个网络监控系统,眼看项目马上要做完了,终于松了一口气,于是整理了一些笔记和心得想和大家针对这种开发模式进行一些探讨,希望对各位有所帮助。
按照我的开发过程想分以下几部分逐一介绍。
1.开发平台的选择和论证2.开发环境的建立3.一般程序的开发4.Linux程序向ARM+uClinux平台的移植5.剩下的问题希望诸位多多补充自己的想法,以利于大家共同提高。
1.开发平台的选择和论证一个项目拿到手,如何选择开发平台(主要是指CPU和操作系统以及开发环境和工具)应该说至关重要,有时这不光影响进度,产品质量,可维护性等一般问题,甚至涉及到方案的可实现性。
本人结合自己的网络监控系统简单归纳了一些对平台的考虑,还请各位补充。
从系统功能实现考虑:(1) 是否有片上外设,专用指令或配套的软件模块直接实现系统功能要求。
感觉这一条对很多人的决策影响很大(2) 价格这一点应通过CPU提供的资源综合考虑,它提供了多少有用的资源,多少没用的资源(那可都是银子呀!),还是那三个字,性价比,另一方面,是要抓主要矛盾,是不是有些特性是必须的,什么特性是用户需求里的亮点(就靠这些亮点往上抬价),这时该花的就得花了。
(3) 功耗本系统对CPU功耗要求不高,但对移动设备,这一点可是致命,而且这一点不是仅针对CPU,所有几乎器件都要勒紧裤腰带运行。
(4) 处理速度这项不用多说,大家都明白重要性,但具体算起来可是一门学问,一方面是自己需要多快的速度,如果加上非实时操作系统这事就不好控制,余量还是大点稳妥,另一方面,CPU指令周期多少,有没有流水,有没有并行,什么体系结构,有没有专用指令(看人家DSP多牛,干这事一绝),对外部存储器和外设的存取速度等等,哪一个慢了都叫瓶颈。
基于ARM-LPC2210芯片的uClinux移植及应用

Hale Waihona Puke 器上 , 不仅可 以合理 地对软 硬件 资 源进 行 调 度 , 而且 为用户 提供 方便 的应 用 接 1… .Ciu 针 对工 业 = u l x是 I n 控 制领域 , Lnx24内核 派生 出来 的嵌 入式 操 作 从 i . u
高 端 新 兴 领 域 中 网络 、 信 、 通 多媒 体 技 术 的 发 展, 以及 控制领 域应 用对数 据处 理 能力 的提 升要 求 ,
促进了 3 2位 A M7 D 系列 L C 2 0嵌入 式处 理 R T MI P 21 器 的广 泛应 用. 果将 操 作 系统 移 植 到嵌 入 式 处 理 如
As t e o e ain s se whc s d r e r m i u u ln x i u e n mirp o e s rwi o tme r n g me tu i h p r t y tm ih i e v d f o i o l x, C i u s sd o c o r c s o t u mo y ma a e n nt n h .
UClnu r d ll c me h an e b d e p r to y tm . whih i i e a te fed o n sra o to . Ho t i x ga ua y be o s te m i m e d d o e a in s se c S am d t h il f idu tl c nr 1 l w o
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.开发平台的选择和论证2.开发环境的建立3.一般程序的开发4.Linux程序向ARM+uClinux平台的移植5.剩下的问题希望诸位多多补充自己的想法,以利于大家共同提高。
1.开发平台的选择和论证一个项目拿到手,如何选择开发平台(主要是指CPU和操作系统以及开发环境和工具)应该说至关重要,有时这不光影响进度,产品质量,可维护性等一般问题,甚至涉及到方案的可实现性。
本人结合自己的网络监控系统简单归纳了一些对平台的考虑,还请各位补充。
从系统功能实现考虑:(1) 是否有片上外设,专用指令或配套的软件模块直接实现系统功能要求。
感觉这一条对很多人的决策影响很大(2) 价格这一点应通过CPU提供的资源综合考虑,它提供了多少有用的资源,多少没用的资源(那可都是银子呀!),还是那三个字,性价比,另一方面,是要抓主要矛盾,是不是有些特性是必须的,什么特性是用户需求里的亮点(就靠这些亮点往上抬价),这时该花的就得花了。
(3) 功耗本系统对CPU功耗要求不高,但对移动设备,这一点可是致命,而且这一点不是仅针对CPU,所有几乎器件都要勒紧裤腰带运行。
(4) 处理速度这项不用多说,大家都明白重要性,但具体算起来可是一门学问,一方面是自己需要多快的速度,如果加上非实时操作系统这事就不好控制,余量还是大点稳妥,另一方面,CPU指令周期多少,有没有流水,有没有并行,什么体系结构,有没有专用指令(看人家DSP多牛,干这事一绝),对外部存储器和外设的存取速度等等,哪一个慢了都叫瓶颈。
(5) 需要的硬件支持(如外部存储器,双电源等)这算是杂项,但会增加额外的价格,系统体积等,不容忽视。
从开发者的角度考虑:(1) 是否有足够的技术支持包括demo版及原理图,demo程序,操作系统和BSP,测试开发工具等。
(2) 自身条件;包括对项目开发周期的要求,开发人员对器件和开发模式的熟悉程度以及掌握的难易程度。
(3) 可用资源是否丰富(书籍,网络等)以上三点主要考虑迅速开发出稳定的系统。
(4) 系统的可继承性,可移植性和可扩展性。
(5) 是否有现货。
(6) 方案提供商的素质。
(包括技术水平和服务意识)。
根据以上考虑选择了s3c4510b(ARM7TDMI)+uClinux开发模式(1) 以下是该平台对我的系统的满足情况:(和上面几点对应)本监控系统硬件部分主要要求以下部分:a.以太网接口(s3c4510b自带网络控制器)b.串口(自带)c.与数据采集芯片的接口(8位数据线,小于8位地址总线)。
(自带)本系统软件部分主要要求以下部分:a.硬件接口驱动程序(uClinux提供串口和网络控制器驱动)b.网络协议栈支持(uClinux提供TCPIP,UDP等的协议栈)c.应用层程序(如果算上可以从linux移植的程序来看,那就太多了,我就用到了一个现成的)(2) 本应用系统不是那种批量的东西,对价格要求不苛刻,而且这款CPU最便宜可以到55左右,可以接受。
(3) 本应用系统有固定电源,功耗要求不高。
当然,据说ARM在节省功耗上很有特点。
(4) 本应用系统速度方面要满足两方面:1。
串口:115200bps 2。
网络速度能到10Mbps 就行,所以对系统速度要求也不高。
这款ARM内部可以到50M。
(5) 系统对体积要求也不高,加片flash和RAM还是没问题(到目前为止感觉我的系统真是无欲无求!)从开发者的角度考虑:(1) 因为时间很紧(一个半月),所以支持越多越好。
目前从开发商那里拿到了开发板,原理图,uClinux,相应驱动,bootloader,拿来就可以用了。
软件硬件并行开发。
(bootloader 和网络控制器驱动没提供原码,比较可惜:-((2) 当时我对嵌入式系统的开发模式和ARM都是只有耳闻,linux接触过一个月左右。
现在想起来有些后怕。
(3) 网上的资源,非常多。
提供一些我常用的。
::URL::/ uClinux的大本营。
::URL::/ 里面有些技术文章非常不错。
::URL::/::URL::/ 这是国产的linux站点。
uClinux-dev@ 这是uClinux的邮件列表,回答问题的都是大牛,非常有帮助,记住把你的邮件设置成纯文本格式。
申请是在:::URL::/mailman/listinfo/uClinux-dev web方式。
(4) 采用以上开发模式,软件的可维护性,可移植性和可扩展性都不错。
(5) 目前该CPU使用还是比较普遍,现货没问题。
(6) 方案提供商的素质吗……..还算可以吧:-)根据以上考虑和目前的开发情况,这套方案还是比较令人满意。
2.开发环境的建立。
先说两句废话为和我以前一样对操作系统(尤其是嵌入式操作系统)迷惑的弟兄解释些概念。
因为总是有人在问是不是一定要用操作系统,我的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)解压到相应路径下,用以上工具编译一遍。
这样最基本的环境就算搭建好了。
以上工作对于做过的人来说比较简单,这里介绍一下帮助没有使用或刚开始使用这种开发模式的弟兄们理清一下思路。
3.应用程序的开发因为目标板上用uClinux,它提供的程序接口和linux下的基本一致,不一致的部分主要在于uClinux不支持MMU(应该说是uClinux是为不带MMU的cpu定制的),最明显的就是fork 函数要用vfork函数替代,这也是编程时,感觉最不爽的一点(没办法,谁让咱们的CPU有生理缺陷)。
另一个不易觉察的差异在于uClinux提供的库uClibc是经过裁减的。
更适合于资源紧张的嵌入式系统(上回分解已经说了,应用程序很大一部分是在和库函数打交道,而且大家最终是链在一起,所以库函数大了,你的程序也小不了)。
于是基于这种开发模式的应用程序开发变成了linux下的程序开发。
而且在实际中一般是编好了程序先在主机上拿主机平台上的编译器编译并且调试一下(linux下的编译器就是gcc 了),当然前提是被调试的程序中需要的硬件条件主机具备,例如我的程序中有一段是针对串口的,于是先在主机编一个串口程序,调通以后拿目标板的编译器重新编译一下(例如arm-elf-gcc?)(如果看了上一章“交叉编译环境”,这里就不会晕了),下载到目标板上运行,一般来说就可以直接用了。