嵌入式Linux平台

2024-08-12

嵌入式Linux平台(精选9篇)

嵌入式Linux平台 篇1

1 引言

根据用于快速成型系统的STL文件中三角形信息利用方式的不同, 已有的STL模型快速切片算法主要可以分为3类。第一种为基于拓扑信息的切片算法。该类算法提取三角形的点, 边和面信息建立其拓扑关系, 通过查找拓扑关系邻接表, 可以直接获得有相封闭轮廓线。其优点在于无需对整个所有交点排序, 局限性在于获取模型整体拓扑信息的处理时间较长。第二种算法为基于三角形位置信息的切片算法。该类算法根据三角形顶点坐标沿垂直方向投影进行分组排序。其优点在于可以减少对无关位置的三角形的判断, 缺点在于必须读入整个文件进行三角形的排序, 分组排序耗时较长。第三种算法为分层邻接排序的切片算法。该方法根据三角形坐标在切片方向上的投影的最大值与最小值反求与三角形相交的切片平面, 按照顶点坐标值的大小将其归入相应的层, 并建立层内间的拓扑关系。该方法读取一次信息即可建立有序的交点链表, 优点是处理信息时间较快, 缺点是容错能力差。综上所述, 第三种算法在切片速度上比前两种算法快, 占用的内存空间较小, 不足之处在于使用公共边与切片平面的位置关系进行判断, 当遇到网格裂缝, 重叠或者顶点错误时会丢弃部分三角面片, 从而造成路径的缺失, 降低切片路径的精度。

本文在第三种算法的基础上提出了适用于嵌入式Linux平台的保存索引的分层邻接排序算法。该算法首先求出每一个三角形的各点Z坐标的最大值与最小值, 然后根据用户传入的切片层高, 反求出与三角形相交的各个切片平面, 并将其存入切片数组当中。将切片平面切割每个三角面片后得到得的端点插入到该切片平面层的I¬_FMT链表中, 同时保存该端点的线段索引或是端点索引。遍历全部三角形后形成从第一层到最后一层的端点链表, 遍历每层的端点链表, 根据每一层线段链表中的线段索引或是端点索引来快速连接各层的各个交点, 则形成每层的切片轮廓线。这种方法不使用公共边来进行位置关系的判断, 直接使用三角面片与切片层的位置关系来进行判断。此外在遍历完各层链表后还可以进行切片路径的多边形拟合, 以修正部分错误的线段。

2 基于线段的分层邻接排序算法

切片平面与单独的三角面片的位置关系有4种, 我们在算法中需要将其分开处理。如图1a所示, 当切片三角形与切片平面只有一个顶点相交时, 此时存储该端点坐标, 并且将该端点的索引存入数据结构中。如图1b所示, 当切片三角形与切片平面相切时, 此时存储该端点两端坐标, 并且将两端端点的索引存入数据结构中。如图1c所示, 当切片三角形一条边与切片平面相交时, 除了存储两点坐标, 将端点的索引与交点的线段索引也存储到数据结构中。如图1d所示, 当切片三角形的两条边与切片平面相交时, 除了存储两交点坐标, 将两端点的线段索引也存储到数据结构中。

为了辅助基于线段的分层邻接排序算法, 在使用perl语言实现的过程中, 需要自定义一个关键的结构体I_FMT, 该结构体定义如下:

算法步骤如下:

1) 顺序读入一个面片信息, 计算其端点的最大值与最小值, 根据传递的切片平面厚度, 得到分层平面并建立平面索引链表。

2) 判断该三角面片的切片平面是否全部完成, 若没有, 取出下一个切片平面, 若完成, 则转向步骤6。

3) 判断该切片平面与三角面片的位置关系, 分别取出该三角面片的三条边来与该切片平面相交。若该线段两端点的Z坐标与该切片平面坐标相同, 即为图1b的情形, 直接保存两端的端点以及端点索引到I_FMT结构体中, 返回步骤2, 否则继续下一步。

4) 若线段端点正好在切片平面上, 则取出端点, 并且取出该端点的索引号存入临时的Point数组, 若线段与平面相交, 则根据空间线段方程求出交点, 取出该交点所在线段的索引号, 同样也存入临时的Point数组中。

5) 遍历该面片的Point数组, 若有线段的索引号, 则根据该线段的邻接拓扑关系, 将同样拥有该线段的面片找到, 将面片索引指针存入I_FMT结构体中。若有同样有某一端端点, 则将该端点索引存入I_FMT结构体中。最后保存本面片的ID号, 转向步骤2。

6) 判断是否读取完所有的三角面片, 若没有, 则转向步骤1, 若读取完, 则此时的切片平面已经包含了所有可能的面片信息。继续下一步。

7) 取出每一切片平面的I_FMT结构链表, 首先根据其是否有邻接三角面片, 若有, 则按照其邻接三角面片的索引号来查询下一个面片, 获得下一个轨迹点, 如果没有邻接三角平面, 则查询邻接的端点索引号, 获得下一个轨迹点。若以上操作失败, 则将该层线段扔入拟合失败数组中。

8) 尝试拟合失败的层, 如将拥有相同端点只是方向不同的两个线段删除一个, 重新拟合该层。

9) 重复步骤7直到所有切片平面完成, 至此基本路径完成, 输出切片路径。

3 软件运行结果

本文选择不同复杂度的4种STL模型:不规则台阶, 圆筒, 方框, 蚊香盒。硬件平台中PC机的CPU为2.70GHz, 内存3.19GB;嵌入式ARM上的CPU为Samsung的S5PV210, 运行主频1Ghz, 内存为512MB。分别在PC机上和在ARM上进行切片, 测试结果如表1所示。

由表1可见, 在ARM上切片的时间与PC机上切片的时间成正线性关系, 在ARM上切片的时间为在PC机上切片时间的10倍左右。随着面片数量的增加, 计算时间显著增加。从表中可以得出, 利用ARM开发板进行切片可行, 该算法在资源有限的ARM嵌入式平台上能够较快得到G代码轨迹。

4 结束语

本文提出了一种基于嵌入式FDM上位机的切片算法, 并且通过ARM平台检验了其有效性。后PC时代嵌入式技术得到迅猛发展, 将嵌入式GUI运用到快速成型领域是当前信息化时代发展的趋势之一, 具有广阔的市场前景。

参考文献

[1]蔡小康.智能化的快速成形切片算法.中国机械工程, 1997 (05) :49-51.

[2]Choi, S.H.and K.T.Kwok, Hierarchical slice contours for layered-manufacturing.Computers in Industry, 2002.48 (3) :p.219-239.

[3]张宜生, 崔树标与等, STL面片邻接拓扑关系重构及其应用.计算机应用与软件, 2001.18 (3) :47-50.

[4]Luo, R.C., et al.Efficient 3D CAD model slicing for rapid prototyping manufacturing systems.in Industrial Electronics Society, 1999.IECON'99Proceedings.The 25th Annual Conference of the IEEE.1999.

[5]Haipeng, P.and Z.Tianrui, Generation and optimization of slice profile data in rapid prototyping and manufacturing.Journal of Materials Processing Technology, 2007.187-188:p.623-626.

[6]王素, 刘恒, 朱心雄.STL模型的分层邻接排序快速切片算法.计算机辅助设计与图形学学报, 2011 (04) :600-606.

嵌入式Linux平台 篇2

关键词:路由器 MVF5272 uClinux A0DV

引言

随着社会信息化进程和互联网的飞迅发展,对无线环境下提供数据服务的需求变得更加迫切。传统的无线移动网络通常以固定的基础设施为支撑,无法满足人们对日益增长的通信业务的要求,一种新型的无线网络――AdHoc网络应运而生。Ad Hoc网络又称移动自组网、多跳网络,具备细网灵活、快捷,不受有线网络的影响等特点,可广泛应用于军事和救援等无法或不便预先铺设网络设施的场合。此外,Ad Hoc网络朝着网络互连的方向发展,Internet的接入是其中一项主要内容。

Ad Hoc无线网络具有自身的特殊性,在组建实际使用的无线工作网络时,必须充分考虑网络的应用规模和扩展性,以及应用的可靠程度及实时性要求,选择合适的网络拓扑结构。目前Ad Hoc无线网络正朝着大规模方向发展,逐渐呈现分级化的趋势,以两级式的网络为代表。在两级式网络中,拓扑如图1所示。网络分为骨干网、子网两级。子网级中,每个子网都可以构成独立的Ad Hoc网络,可采用不同的路由协议。骨干网由多协议路由器节点和普通节点构成,其中,普通节点主要完成骨干网中的数据和控制信息的分发;而多协议路由器除了具备普通节点的功能外还要负责实现对子网的管理、控制和数据交互,是骨干网的核心设备。

1 多协议路由器的功能

多协议路由器作为骨干网的一个节点,运行一定的`Ad Hoc网络路由协议,实现骨干网络由寻址的功能。

在分级式Ad Hoc网络中,多协议路由器通过和子网网关进行交互实现对子网的管理。子网内的通信类似于一般的Ad Hoc网络;而子网间的通信需要通过子网网关节点和骨干网节点进行中转,可分为两种情况―同一路由器下同构/异构子网间的通信以及不同路由器下同构/异构子网间的通信。为了实现子网间的有效通信,路由器需要完成多种协议之间的相互转换。

Internet接入的需求使得分级式Ad Hoc网络必须存在一个接入点AP(Access Point)。考虑到网络环境,这个功能需要由多协议路由器实现。

嵌入式Linux平台 篇3

随着近几年嵌入式系统总体能力的提升, 嵌入式多媒体应用越来越丰富。从低端的MP3播放器, 中端的workman, 到高端的智能手机, 音乐播放功能已经成为系统默认具备的功能。

嵌入式系统的存储能力已经跨入G时代。随身可携带的歌曲数量从几十首, 已经上升至几百首, 甚至上万首。

随机播放机能存在一种需求, 要将播放列表中的歌曲随机播放一遍, 在所有歌曲都播放一遍之前, 不能出现有重复播放的情况。

1 嵌入式系统的特点

嵌入式系统的能力现在虽然已经提升不少, 但和个人计算机相比较, 运算能力仍然无法匹敌个人计算机。并且还存在以下几种嵌入式系统特有的特点:

*运算数据通常不能被交换到外部存储设备上, 程序可以使用的内存无法超过物理内存容量。

*人机交互需要快速的实时响应, 耗时过长的程序给用户较差的性能体验。

*外部存储器多为FLASH设备, 写入寿命有限制, 程序设计需要尽可能减少FLASH的写操作。

因此, 在嵌入式系统中, 随机播放的算法需要在时间以及空间的设计中, 获得一个平衡, 这样才能让用户有最好的体验。

2 算法的目标

*需要随机播放的总数是可变化。

*在总数给定的情况下, 随机产生的序列不能出现重复。

*时间和空间使用是平衡的, 满足嵌入式系统的特点。

3 解决方案

为了能够达成上述目标, 主要采用下面几种技术方案:

*将随机序列的产生, 分配到每一次歌曲切换的时候, 而不是在初始化的过程中全部生成。

*将随机序列中某一个随机数的产生, 分解为按照16进制数位分别产生, 避免因为歌曲总量的提高导致时间出现指数级别的增长, 尽可能控制为线性增长。

*采用bitmap标示已经产生的随机数。

*采用用时申请的方式动态申请内存。

*记录随机序列产生的结果, 并提供回溯查询功能。

基于上面的技术方案, 在本设计中将整体算法划分为两个部分:

*随机数列产生器, 用于产生不重复的随机数列。

*随机数列记录器, 用于记录已经随机数列, 并向外部提供访问接口。

4 数据结构设计

4.1 顶层数据结构

顶层数据结构 (shuffle_t) 包含随机数列产生器和随机数列记录器。

下面是数据结构定义:

在内存中的数据关系如图1所示。

4.2 随机数列产生器数据结构

随机数列产生器的数据结构 (random_t) 包含三个部分:

*动态增长的bitmap池。

*优化的16以内的随机数产生器。

*按数位顺序产生, 代有检测功能的随机数列控制器。

下面是数据结构定义:

在内存中的数据关系如图2所示。

当随机数列最大值为255, 并且32至255已经都产生时, 随机数列产生器数据结构信息如图3所示。

4.3 随机数列记录器数据结构

随机数列记录器的数据结构 (sequence_t) 包含两个部分:

*动态增长的记录数组

*游标

下面是数据结构定义:

在内存中的数据关系如图4所示。

5 关键算法流程图

某一个随机数的产生, 是按照数位从高到低产生的, 只有在最大数值范围内的随机数, 并且是新的随机数才是合法的随机数。

因此, 即使是32位范围的随机数, 也只有8个数位, 采取递归调用的方式并不会因为函数层次太深而占用太多的堆栈, 并且代码实现比较方便。

图5至图7, 采用软件设计中通用的PAD图, 直观的展示了随机数列中某一个随机数的产生流程。

6 测试结果

在S5PV210开发板上进行测试, (CPU为cortex-A8 1G ARM单核处理器, 内存为200Mhz 512M的DDR2) , 重复产生最大值分别为15, 255, 4095和65535的随机数列1000次, 并记录下随机数列的总体消耗时间、平均消耗时间以及某一个随机数产生的最大消耗时间。

表1和表2是测试结果。单位是微秒。

7 结束语

从测试结果可以看到, 总体耗时和随机数列的最大值成正比;而平均耗时和数位的个数成正比;最大耗时不固定, 基本上也体现出和随着数位个数增加。

平均产生一个随机数为几个纳秒, 最大可能为几个毫秒。在嵌入式Linux平台下, 已经基本达成算法的目标。

参考文献

[1]严蔚敏, 吴伟民.数据结构:C语言版[M].北京:清华大学出版社, 1996.

[2]韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社, 2008.

嵌入式linux流程 篇4

“宿主机/目标板”开发模式

在软件设计上,如图5-4所示为结合ARM硬件环境及ADS软件开发环境所设计的嵌入式系统开发流程图。整个开发过程基本包括以下几个步骤。

(1)源代码编写:编写源C/C++及汇编程序;

(2)程序编译:通过专用编译器编译程序;

(3)软件仿真调试:在SDK中仿真软件运行情况;

(4)程序下载:通过JTAG、USB、UART方式下载到目标板上;

(5)软硬件测试、调试:通过JTAG等方式联合调试程序;

(6)下载固化:程序无误,下载到产品上生产。

嵌入式系统软件开发流程

2.2 嵌入式系统开发流程

当前,嵌入式开发已经逐步规范化,在遵循一般工程开发流程的基础上,嵌入式开发有其自身的一些特点,如图5-5所示为嵌入式系统开发的一般流程。主要包括系统需求分析(要求有严格规范的技术要求)、体系结构设计、软硬件及机械系统设计、系统集成、系统测试,最终得到最终产品。

嵌入式开发流程

(1)系统需求分析。确定设计任务和设计目标,并提炼出设计规格说明书,作为正式设计指导和验收的标准。系统的需求一般分功能性需求和非功能性需求两方面。功能性需求是系统的基本功能,如输入输出信号、操作方式等;非功能需求包括系统性能、成本、功耗、体积、重量等因素。

(2)体系结构设计。描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分,以及系统的软件、硬件选型等。一个好的体系结构是设计成功与否的关键。

(3)硬件/软件协同设计。基于体系结构,对系统的软件、硬件进行详细设计。为了缩短产品开发周期,设计往往是并行的。嵌入式系统设计的工作大部分都集中在软件设计上,采用面向对象技术、软件组件技术、模块化设计是现代软件工程经常采用的方法。

(4)系统集成。把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。

(5)系统测试。对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。

嵌入式系统开发模式最大特点是软件、硬件综合开发。这是因为嵌入式产品是软硬件的结合体,软件针对硬件开发、固化、不可修改。

如果在一个嵌入式系统中使用Linux技术开发,根据应用需求的不同有不同的配置开发方法,但是,一般情况下都需要经过如下的过程。

(1)建立开发环境,操作系统一般使用Redhat Linux,选择定制安装或全部安装,通过网络下载相应的GCC交叉编译器进行安装(比如,arm-1inux-gcc、arnl-uclibc-gcc),或者安装产品厂家提供的相关交叉编译器;

(2)配置开发主机,配置MINICOM,一般的参数为波特率115200 Baud/s,数据位8位,停止位为1,9,无奇偶校验,软件硬件流控设为无。在Windows下的超级终端的配置也是这样。MINICOM软件的作用是作为调试嵌入式开发板的信息输出的监视器和键盘输入的工具。配置网络主要是配置NFS网络文件系统,需要关闭防火墙,简化嵌入式网络调试环境设置过程。

(3)建立引导装载程序BOOTLOADER,从网络上下载一些公开源代码的BOOTLOADER,如U.BOOT、BLOB、VIVI、LILO、ARM-BOOT、RED-BOOT等,根据具体芯片进行移植修改。有些芯片没有内置引导装载程序,比如,三星的ARV17、ARM9系列芯片,这样就需要编写开发板上FLASH的烧写程序,读者可以在网上下载相应的烧写程序,也有Linux下的公开源代码的J-FLASH程序。如果不能烧写自己的开发板,就需要根据自己的具体电路进行源代码修改。这是让系统可以正常运行的第一步。如果用户购买了厂家的仿真器比较容易烧写FLASH,虽然无法了解其中的核心技术,但对于需要迅速开发自己的应用的人来说可以极大提高开发速度。

(4)下载已经移植好的Linux操作系统,如MCLiunx、ARM-Linux、PPC-Linux等,如果有专门针对所使用的CPU移植好的Linux操作系统那是再好不过,下载后再添加特定硬件的驱动程序,然后进行调试修改,对于带MMU的CPU可以使用模块方式调试驱动,而对于MCLiunx这样的系统只能编译内核进行调试。

(5)建立根文件系统,可以从http://www.busy.box.net下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统,再根据自己的应用需要添加其他的程序。由于默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs genromfs等工具产生烧写映像文件。

(6)建立应用程序的FLASH磁盘分区,一般使用JFFS2或YAFFS文件系统,这需要在内核中提供这些文件系统的驱动,有的系统使用一个线性FLASH(NOR型)512KB~32MB,有的系统使用非线性FLASH(NAND型)8MB~512MB,有的两个同时使用,需要根据应用规划FLASH的分区方案。

(7)开发应用程序,可以放入根文件系统中,也可以放入YAFFS、JFFS2文件系统中,有的应用不使用根文件系统,直接将应用程序和内核设计在一起,这有点类似于μC/OS-II的方式。

(8)烧写内核、根文件系统和应用程序,发布产品。

嵌入式Linux平台 篇5

针对上述问题, 本文提出基于Linux平台的嵌入式网络管理软件的快速开发方案, 通过SNMP协议对被管网络设备进行管控操作。具有实现简单, 开发速度快等特点, 很好地实现了网络管控设备的敏捷开发。

1 嵌入式网管软件简介

随着网络的规模迅速增加, 节点数随之大幅增多, 不同厂家, 不同类型的大量网络设备加入网络后, 增加了网络的复杂度。由于这些网络设备大多采用了封闭的配置管理手段, 因此给传统上集中式的网络管理带来极大不便。以思科、华为、中兴等厂家的路由器为例, 其配置手段虽然多种多样, 但都存在操作繁琐等缺点。为此, 需要培训大量的网络维护人员来维护着网络的快速开通和通畅。目前在网络控制管理方面, 集中式与分布式相结合的方式已经成为必然趋势。然而单纯增加分布式网络管控设备的数量又不利于降低系统整体功耗。

为减少分布式网管设备的功耗, 加快网络开通速度, 在此利用嵌入式系统低功耗、高效率的特点, 以及各网络设备大多支持SNMP协议的特点, 把嵌入式技术与网络管理技术相结合进行研究, 设计并实现嵌入式网管系统, 以达到高效率、低功耗和分布式的目的。

嵌入式网管软件基于Intel i7硬件平台和RHEL 6.3 Linux操作系统, 与管控设备上的其它软件模块处于同一平台。采用NET-SNMP软件包开发网络管控设备与被管设备之间的接口软件, 并为管控设备的上层软件模块提供开放的API接口。上层应用软件通过调用API函数向被管设备下发管控命令, 从而实现网管管理。

2 SNMP协议

简单网络管理协议 (Simple Network Management Protocol, SNMP) 是很著名的网络管理协议, 被广泛应用于数据通讯领域以及用于监视应用。SNMP在最初设计时首要的目的是简单——即对于被管设备 (硬件资源有限) 而言, 在其上面易于实现代理。

SNMP到目前为止有三个版本, 其中SNMP vl是SNMP的经典版本, 其后的版本均是在此版本之上进行的升级和改进, 但在实际应用中SNMP v2c使用最多。

SNMP定义了5种报文:get-request操作:从代理进程处提取一个或多个参数值。get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。set-request操作:设置代理进程的一个或多个参数值。getresponse操作:返回的一个或多个参数值。这个操作是由代理进程发出的。它是前面3中操作的响应操作。trap操作:代理进程主动发出的报文, 通知管理进程有某些事情发生。前面的3个操作是由管理进程向代理进程发出的。后面两个是代理进程发给管理进程的。

3 NET-SNMP软件包介绍

NET-SNMP是一套优秀的开源snmp工具包, 使用它可以开发snmp代理程序, 也可以开发snmp管理程序, 目前最新的版本已经支持snmp v3。

NET-SNMP源于卡耐基梅隆大学的SNMP软件包CMU snmp 2.1.2.1, 后由加州大学Davis分校 (Universityof Califoniaat Davis) 开发与维护, 被命名为UCD-SNMP。2000年11月UCD-SNMP项目转到由Source Forge (www.sourceforge.net) 管理, 并更名为NET-SNMP。UCD-SNMP4.2是以UCD-SNMP命名的最后的一个主要版本。也就是说, 以后发布的UCD-SNMP 4.2.x只是修改软件包中的Bugs;而大的修改版本以NET-SNMP命名, 并发布为NET-SNMP 5.x。NET-SNMP 5.7.1是目前较新版本。

NET-SNMP的主要内容包括:

(1) 完整的API用于SNMP (支持V1、V2、V3版本) 应用开发 (包括c、perl、Python等的API) ;

(2) 一个可扩展的SNMP代理程序 (snmpd) ;开发员可以扩展自己的代理程序;

(3) 一套工具命令集 (snmpget、snmpset、snmptrap、snmpwalk、snmp等) ;

(4) 一个trap接收进程, 用于接收和显示trap。并可以将trap记录到日志文件里;

(5) 一个图形化的MIB浏览工具 (tkmib:基于Tk/Perl的) 。

使用NET-SNMP软件包开发代理端软件比较常用, 互联网上可以查到很多相关资料, 本文不再重复。这里主要介绍应用NET-SNMP开发管理端软件的方法。

4 嵌入式网管软件的实现

嵌入式网管软件在Linux操作系统上进行应用开发, 根据功能不同可分为三个软件模块:网管通信模块、控制命令处理模块及控制管理模块。如图1所示。

其中控制管理模块负责生成管控命令, 并通过内部消息将之下发给控制命令处理模块, 等待接收响应结果。

控制命令处理模块负责管控命令的解析与网管通信命令的封装, 能从控制管理模块获取的管控指令解析出具体信息, 并通过调用网管通信模块的API函数实现查询和配置管理。

网管通信模块主要负责与管理站进行SNMP协议通信及与控制命令处理模块通信, 能将控制命令处理模块的指令封装成SNMP协议报文转发给被管设备。

下面分别介绍嵌入式网管软件的实现方法。

4.1 安装NET-SNMP软件包

之所以要先安装一个可运行的NET-SNMP系统, 是因为我们开发程序运行环境需要使用SNMP协议的配置文件;另外, 还可以利用NET-SNMP提供的命令工具来测试程序。

NET-SNMP包目前可以移植的版本包括各种UNIX (基于SYSTEM V内核及基于BSD内核) 、Linux、Windows版本。目前NET-SNMP包的安装主要有程序编译安装与二进制文件安装两种方式, 源程序安装可以从NET-SNMP的官网下载。

Linux系统下安装net-snmp-5.7.1步骤:

(1) 下载net-snmp-5.7.1.tar.gz文件

(2) 使用命令tar–xvf net-snmp-5.7.1.tar.gz解压

(3) 进入net-snmp-5.7.1文件夹, 执行./configure--prefix=/usr/net-snmp/--enableembedded-perl--enable-shared--with-perlmodules

(4) 执行make

(5) 执行make install

4.2 配置NET-SNMP

使用NET-SNMP之前需要进行环境设置, 否则无法查询到希望的结果。配置NET-SNMP重要的是配置snmpd.conf文件, 其中最重要的是配置共同体 (community) 。因为共同体定义了认证、访问控制和代理的特性, 每个共同体拥有一个唯一的名字, 共同体中的管理端必须使用该共同体的community进行GET和SET操作。所以, 共同体也是访问口令。还有就是trap/notifi cation的发送地址, 即trapsink或trap2sink项, trapsink对应snmp vl的trap, trap2sink对应snmp v2的notifi cation。

配置snmpd.conf文件, 可以直接手动修改/usr/net-snmp/share/snmp路径下的同名文件。将文件中rwcommunity、rocommunity所对应的读写、只读团体名修改为系统所需字段即可。其余修改内容可参考NET-SNMP相关帮助自行决定。

4.3 编写网管通信模块API函数

为了实现SNMP协议通信, 网管通信模块需要利用net-snmp-5.7.1实现管理端的三个功能, get, getnext, set。

下面以set命令为例, 简单说明函数的实现方式。

首先编写网管通信模块程序需包含以下三个头文件:

实现set命令的基本步骤:

(1) 调用init_snmp ("set") 函数初始化snmp;

(2) 调用snmp_sess_init (&session) 初始化结构session, 然后用一些赋值语句设置session;

(3) 调用snmp_open (&session) , 打开SNMP session;

(4) 调用snmp_pdu_create (SNMP_MSG_SET) 创建snmp pdu;

(5) 调用snmp_parse_oid根据mib分析parse oid;

(6) 调用snmp_add_var为SET request添加对象名及值;

(7) 调用snmp_synch_response发送SET request报文。

函数中的session字段是名为netsnmp_session的结构, 在其中定义了SNMP协议的版本、团体名及发送UDP端口号等内容, 需特别注意。

5 结束语

本文首先介绍了嵌入式网管软件的意义和特点;然后给出了SNMP协议本身的管理模型和基本原理。在此基础上结合NET-SNMP软件包详细地介绍了在嵌入式网管软件在Linux平台下的开发过程。

摘要:本文首先概要介绍了简单网络管理协议 (SNMP) 和NETSNMP软件包。在此基础上介绍了如何利用NET-SNMP软件开发包在Linux系统上实现嵌入式SNMP网络管理软件的基本流程。为种类繁多的网络设备提供了一种简单、快速的嵌入式网管开发方法。

关键词:Linux,NET-SNMP,SNMP,网络管理

参考文献

[1]胡方炜.基于嵌入式Linux系统的SNMP代理开发研究[D].浙江工业大学, 2004.

[2]IETF.RFCll57 A Simple Network Management Protocol (SNMP) .May 1990.

[3]IETF.RFCl901.Introduction to Community?based SNMPv2.January 1996.

嵌入式Linux平台 篇6

1 系统概述

系统由三个部分组成,即视频服务器、视频点播客户端及MPlayer播放器。视频服务器主要提供片源服务,本系统选择Linux下的vsftpd作为服务器软件。首先,服务器启动FTP服务,提供视频信息服务,当客户端软件启动时,用户可以向视频服务器请求节目资源,获得资源后更新客户端播放列表,此时用户可以点播播放列表中的视频资源,通过视频服务器实时传输媒体数据,客户端接收视频数据并播放;用户也可请求扩展存储U盘中节目资源,更新客户端播放列表,通过点播播放列表,播放视频信息;用户还可以通过打开文件对话框,寻找本地的视频文件,进行视频点播。

2 系统设计与实现

2.1 硬件环境

系统硬件采用Mini2440的ARM9开发板,它采用Samsung S3C2440微处理器,该处理器采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行的稳定性,视频输出在3.5寸的LCD屏,板载64 M SDRAM与256 M的Nand Flash,提供一个100 M以太网RJ-45接口(采用DM9000网络芯片),一路立体声音频输出接口,一路麦克风接口,一个USB Host,一个USB Slave B型接口和一个SD卡存储接口。

2.2 播放器

MPlayer是GNU/Linux平台上一款开源的多媒体播放器,它能播放几乎所有流行的音频和视频格式,播放器本身自带了多种类型的解码器,并且广泛地支持音视频输出驱动。MPlayer播放器具有启动快、占用内存少的特点。播放器启动后,主程序mplayer.c文件负责分流、解码、输出3个模块的文件调度。

2.3 视频点播客户端的设计

2.4.1网络播放模块设计

网络播放模块通过设置FTP服务器的IP地址,连接到服务器,获取服务器上的视频节目后,更新到客户端的播放列表中,用户再根据自己的需要点播视频。

将服务器的视频信息更新到客户端播放列表的核心代码如下:

2.3.2调用MPlayer播放器

MPlayer播放器在开发板中的播放界面,默认是从(0,0)坐标位置开始,为了使播放器能够准确定位,修改MPlayer安装目录的libvo目录下vo_fbdev.c文件,更改为d=center+fb_line_len*(y+25)+fb_pixel_size*x (从坐标(0,15)位置开始播放)。

3 系统验证

基于嵌入式Linux平台的视频点播系统,以其直观的图形界面与用户进行交互,通过调用MPlayer播放器,解决了视频编解码问题,系统利用自动挂载U盘,一定程度上解决了嵌入式设备存储容量小的缺陷。后续的工作将针对局域网,将该系统应用到更多的实际场景中。

摘要:基于嵌入式Linux操作系统和Mini2440开发板,开发了一套C/S架构的网络视频点播系统。首先,以Linux系统中的vsftpd作为服务器软件,建立FTP站点服务;其次,客户端采用QTE图形界面,显示网络服务器和扩展存储设备上的视频节目信息;最后,通过调用MPlayer播放器控件播放点播视频。测试证明本系统具有良好的播放性能和较好的用户体验。

关键词:嵌入式Linux,视频点播,MPlayer播放器,C/S模式

参考文献

[1]孟庆昌,牛欣源.Linux教程[M].北京:电子工业出版社,2007.

嵌入式Linux平台 篇7

Linux操作系统是可裁剪的、模块化的操作系统,采用X86平台,通过OS所提供的一些基本命令,采取了一些办法,将一个Linux操作系统定制成了符合目标系统要求的操作平台。在保留基本的OS系统结构和必要网络功能的同时,将其大小控制在16M左右,使该操作系统能够安装运行在约64M的电子硬盘上,并最终稳定的运行于内存中。

2 采用X86作为嵌入式平台

说到嵌入式平台,就不能不先介绍嵌入式系统。所谓嵌入式系统:指以应用为中心、以计算机技术为基础、软硬件适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算件可裁剪系统。

选择合适的硬件平台是一件很麻烦的事,受很多因素影响。由于嵌入式系统是面向用户、面向产品、面向应用的。如果独立于应用自行发展,则会失去市场。而嵌入式处理器的功耗、体积、成本、可靠性、速度、处理能力、电磁兼容性等方面均受到应用要求的制约。另外,除了要满足嵌入式系统本身的特点外,还要考虑目标系统设计的指导原则、个人偏见、过去产品的影响和其他一些因素。但费用往往是考虑的主要因素,而且价格也需从整个系统进行考虑。

依现在的情况来看,根据Intel公司制定的标准制造出来的兼容X86处理器,表现出了低廉的成本、良好的兼容性、极高的市场占有率以及优秀的性能,在很好满足了嵌入式系统性能要求的同时,也很好地满足了各方面的需求。采用这一熟悉的平台,客户接受起来比较容易,另外也容易上手。

总体说来,基于成本、兼容性、通用性、可靠性4方面的考虑,决定采用X86平台作为Linux嵌入式系统的载体。

3 Linux系统启动过程

系统引导过程:指的是从系统通电工作,到控制台显示login:提示符或者显示图形化登录介面为止的这一段系统运行过程。每一个操作系统都有自己的初始化程序,下面就具体介绍一下Linux的初始化流程。

3.1 加电或复位

当计算机系统的电源开关或复位按钮被按下时,CPU进入复位状态,它将内存中的所有数据清零,指令由内存中地址FFFF:0000开始执行(这个地址一定在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),此处的内容一般是一个jump指令,jump到另一个位于ROM BIOS中的位置,开始执行一系列的动作。系统就是通过这个方法进入BIOS启动过程的.

3.2 BIOS的启动

BIOS中启动程序的主要任务如下:首先是上电自检;然后对系统内的硬件设备进行监测和连接,并把测试所得的数据存放到BIOS数据区,以便操作系统在启动时或启动后使用。最后,BIOS将从软盘或硬盘上读入Boot loader。如果从硬盘启动,BIOS读入该盘的零柱面零磁道上的MBR,这个扇区上的代码用于从分区中读取内核映像并启动内核。但是硬盘上的内核是保存在文件系统中的,因此硬盘引导扇区中的代码需要提供定位内核映像在文件系统中的位置的功能,以便正常装载和运行内核。

3.3 Boot loader

Boot loader通常是一段汇编代码,存放在MBR中,其主要作用就是将系统启动代码读入内存。Linux环境下的Boot loader程序通常是LILO(LILO是Linux Loader的简称),其主要功能就是引导Linux操作系统的启动。它不但可以引导Linux,还可以引导其他操作系统,如DOS、Windows等等。LILO配置文件提供了以下信息:启动操作系统的设备名,各种操作系统的启动分区映像位置,启动运行状态,启动时所使用的显示模式。下面是所用的Linux系统中的lilo.conf文件的范例:

当系统启动时,BIOS程序运行完毕即运行LILO以引导操作系统,屏幕显示“LILO boot:”,此时用户可以等待系统时间过后自动启动默认的操作系统,如果没有设置delay项则系统将一直等待。按Tab键将显示系统中可引导映像的列表,选择合适的映象标识后,LILO将从指定的内核映像加载操作系统。此后,控制权交给操作系统,由操作系统的启动程序来完成余下的工作。

3.4 操作系统初始化

系统的启动顺序及相关文件就在核心源码目录下,依次看以下几个文件:

/arch/boot/bootsect.s,/arch/boot/setup.s,/arch/boot/head.s,/init/main.c

(1)bootsect.S是Linux kernel的第一个程序,包括了Linux自己的bootstrap程序。实际上,bootsect.S文件是一个实模式下的汇编语言程序,是一段长度为512字节的数据块,经过汇编后生成的二进制代码保存在引导区中。在此把大家所熟知的MSDOS与Linux的开机部份做个粗浅的比较:MSDOS由位于磁盘上bootsector的boot程序负责把IO.SYS载入内存中,而IO.SYS则负有把DOS的kernel--MSDOS.SYS载入内存的重责大任。而Linux则是由位于bootsector的bootsect.S程序负责把setup.S及Linux的kernel载入内存中,再将控制权交给setup.S。

(2)setup.S是用汇编语言编写的16位启动程序,负责Linux系统的实模式下的初始化。首先,setup.S对已经调入内存的操作系统代码进行检查,然后通过BIOS中断获取内存容量信息,设置键盘的响应速度,设置显示器的基本模式,获取硬盘信息,检测是否有PS/2鼠标。之后,操作系统就准备让CPU进入保护模式,另外,在实模式下,还需对8259中断控制器进行编程,协处理器也需要重新复位。完成以上工作后,Setup.S设置保护模式的标志位,重新取指令后,就进入保护模式下的启动阶段,同时把控制权交给Head.S这段32位汇编代码。

(3)Head.S是保护模式下OS的启动代码。内核初始化模块将从地址0X100000开始执行,对于压缩内核,首先执行arch/i386/boot/compressed目录下的head.S,再转入执行arch/i386/kernel目录下的head.S。在此阶段,内核初始化模块主要负责初始化数据区、寄存器、idt表和页表,进行状态检查,最后执行start_kernel()模块。接下来系统设置内核启动参数gdt、idt、ldt 3个寄存器并准备启动内核,当3个寄存器设置完成后,系统调用start_kernel()函数以启动内核。

(4)main.c位于/init/main.c中,其中的start_kernel()函数是main.c甚至整个操作系统初始化最重要的函数,一旦执行完,整个操作系统的初始化也就完成了。start_kernel()程序要完成系统初始化需要调用一系列函数以初始化内核数据结构,主要函数包括:

setup_arch():该函数主要用于和处理器、内存等最基本的硬件相关部分的初始化,如初始化处理器的类型。

paging_init():该函数的具体作用是把线性地址中尚未映射到物理地址上的部分通过页机制进行映射。

trap_init():该函数用于设置各种入口地址,如异常事件处理程序入口、系统调用入口、调用门等。

init_IRQ():该函数用于设置基准时钟和中断门。

sched_init():该函数用于设置和启动第一个进程init_task。

time_init():该函数用于读取实时时间,重新设置时钟中断IRQ 0的中断服务程序入口等。

parse_options():这个函数把启动时得到的参数如debug、init等,从命令行的字符串中分离出来,并把这些参数赋给相应的变量。

console_init():此函数用于对终端的初始化,如控制台和显示器。

kmalloc_init():对内存进行检查,如果发现某块内存的长度超过了整个内存的长度,将其标志为非法。

inode_init():该函数用于初始化INODE结点。

name_cache_init():系统调用namei()函数根据文件名查找对应的索引节点。

buffer_init():这个函数用来对文件系统缓冲区初始化。

mem_init():用于初始化zero_page页,即虚拟地址从0开始的页面,并为管理页面空间的mem_map[]数据结构中已被占用的页面加上标记。

启动到目前状态,仅剩/etc目录下的启动配置文件。(其实,启动的每一个过程都有相应的程序在屏幕上反映与这些过程相应的信息。可以使用dmesg|more命令回顾此开机信息)这些文件一旦运行,启动的全过程就将结束而系统会进入用户态。也就是说:当Start_kernel()函数执行完毕后,内核的启动也将完成,然后由内核加载根文件系统。根文件系统的位置则可以在编译内核时指定,也可以通过LILO或者rdev等引导程序指定;文件系统的类型将由系统自动检测决定(一般加载为只读文件系统)。如果根文件系统加载失败,则内核将不能启动,整个系统也将终止运行。最后,系统将调用函数用以创建init进程。

3.5 init进程与inittab文件

init进程是内核引导结束后系统启动的第一个用户进程,该进程启动后将完成以下任务:设置主机名,检查安装磁盘和文件系统,清空临时文件目录/tmp,打开系统日志,启动各种后台服务进程,为每个终端和虚拟控制台启动一个getty进程,执行/etc/rc下的命令文件,此后,getty会在每个终端上显示login提示符,等待用户登录。init进程启动的服务是依据配置文件/etc/inittab进行的(inittab文件具体分析见附录2)。

当执行完rc.sysinit并返回inittab后,init进程会根据inittab所设定的运行级别去执行/etc/rc.d目录下的相应的rc文件。如运行级别为3,相应的rc文件即为rc3.d。这些文件将运行不同的启动程序去初始化各个运行级别下的系统环境,这部分启动程序最重要的作用之一是启动系统的守护进程。做完这一步,init进程将执行getty进程从而等待用户的登录,至此,Linux系统的启动过程完毕。

4 Linux文件系统分析与定制

基于目标系统大小的考虑,对于Linux的内核的分析并未深入,而是更关心它的文件系统结构。Linux操作系统采用了一种整体式结构,因此其文件系统错综复杂。具体的文件系统目录结构及目录下列出的相关程序、命令部分不仅多而且大。对其主要功能尤其感兴趣,因为只要简单地通过删除它们,就可以很快缩小目标系统的大小。现将根目录下的各主要的子目录及其功能列举如下:

/bin目录通常是放置系统的一些基本命令文件的目录

/boot存放MBR的复制,非常重要,今后会用到它下面的Linux核心

/dev目录,系统设备文件目录

/etc目录包含了许多重要的系统配置文件,和一些系统初始化文件

/etc/rc,/etc/rc.d,/etc/rc?.d存放系统启动或改变运行级别时执行到的程序文件

/etc/fstab列出系统启动时,将由mount-a命令自动安装的文件系统的描述信息

/etc/inittab守护进程init的配置文件,在每次系统初启或改变运行级别时读取

/etc/mtab系统当前已经安装的文件系统的列表,mount程序在每次执行后自动更新这个文件

/home用户文件的主目录,该目录下,一般只有子目录,其中每一个目录代表一个用户

/lib目录下放置了系统的一些库文件

/mnt存放临时的映射文件系统

/proc这个文件系统是一个虚拟的文件系统,它不是建立在硬盘上,而是由系统核心在内存中建立。这个文件系统用于提供系统需要的信息,如有关进程的信息等

/root超级用户的根目录

/sbin目录下放置一些系统扩展命令

/tmp存放临时文件的目录,其中存放以测试为目的的文件,或是有中间结果的文件

/usr目录下的文件,用户目录,目录下放置了一些用户经常需要使用的程序和一些配置数据。

/usr/bin目录存放增加的用户命令程序。

/usr/lib存放库文件及一些无需改变的数据文件,包括一些配置数据。

/usr/sbin目录下放置了用户需要使用的高级指令。

/usr/src存放程序的源代码。

/var目录,存放着系统运行期间所需改变的数据文件,这些文件是各个Linux系统独有的,不能在多个系统间共享,主要是一些系统参数和配置。

其他目录都为空目录,有:

/opt

/lost+found

大体结构就是这样。在此基础上,使用rm命令就可以删除许多目录或文件,如/sbin、/usr/bin下的高级命令、/lib下的多余的库文件、/bin下的某些命令等。其中,对于命令和一般文件的删改比较容易,只要弄清所删节内容的作用或含义即可,删除命令rm辅以相应的参数,就可轻松完成删除相应目录和命令的作用。同时,必须作好备份和记录,如果出现了意外的问题,也能够有个补救的措施。如果导致系统的彻底崩溃,只有重新安装系统。这时,此前记录下来的可删除的内容就起到大作用了。

5 裁剪后OS的目录与结构

(1)裁减后的系统体系结构如下:

bin boot dev etc home lib lost+found mnt opt root proc sbin tmp usr var

/bin目录中的内容有:

包括最基本的系统程序。

/sbin目录也放了一个系统程序,分别是:

/dev目录中包含了所有的设备文件,因为它们是特殊文件,基本不占用空间,所以全部拷贝。

/lib目录中包含了程序所需的库文件。有:

其中几个重要文件为:

libc.so.6:C语言的函数库,几乎每个程序都需要。

ld-linux.so.2:载入动态库所需的函数库。

libproc.so.2.0.0:与proc文件系统相关的库。

libcrypt.so.1:加密函数库。

libtermcap.so.2:与处理终端相关的库。

libpthread.so.0:处理线程相关的库。

其余的一些或者与处理网络有关系,或者是太小,我也没有真正弄清它到底是与什么有关,因此没有动。

/etc目录中包含了一些系统所需的配置文件,主要有:

ld.so.cache是动态载入库的缓存,记录了动态载入库所在的位置,读它便可以避免到每个目录盲目的搜索。

profiles文件存放了shell的一些环境变量。

hosts文件设定用户自己的IP与名字的对照表。

host.conf文件说明了如何查询节点名。

services和protocols分别说明了系统可用的服务和协议。

resov.conf设定系统的名字服务器。

termcap记录了系统可用的终端。

mtab、fstab、inittab文件前面已经介绍过,这里就不再说了。

/boot目录完全拷贝,它下面是一些关于系统核心的东西。

System.map System.map-2.2.12-20 boot.0300 boot.b chain.b nitrd-2.2.12-20.img

kernel.h map module-info module-info-2.2.12-20 vmlinux-2.2.12-20 vmlinuz

/usr下面只保留以下6个目录:

bin etc lib sbin share tmp

/tmp留出来存放一些程序所需的临时文件.

/var留出来用来做系统日志:

cache db lib local lock log preserve run spool state tmp

/proc不是一个真正的文件系统,是内存的一部分的镜像,无需拷贝。只需在装载系统时,在电子盘中创建一个/proc目录即可。

/lost+found目录也仅需创建即可。

6 改进

6.1 系统装载

往60M的电子盘上安装已裁剪后的系统时,采取直接拷贝即可。先将裁剪后系统所在盘设为主盘,将电子盘设为从盘。从主盘进入系统后,就切换到根目录,然后挂上电子盘至/mnt目录.

#mount/dev/hdc1/mnt

格式化电子盘,然后拷贝。使用cp-apd R命令,直接将根目录下的各子目录分别完全拷贝到/mnt目录下(直接拷贝目录)。拷贝完成后,卸载/mnt,关闭系统,将电子盘设为主盘,重新启动系统。这时,看到系统不能正常引导!这是由于拷贝过去的系统的引导程序LILO的设置还保留了原主盘上的相应参数。只需在原主盘下使用:

#mkbootdisk-device/dev/fd0或者

#dd if=boot.img of=/dev/fd0 bs=1440k

命令制作一张Linux的引导盘。使用此引导盘从软驱引导,重新启动系统进入电子盘,login登录后,输入LILO命令执行一次,下次就可以直接从电子盘上启动了。

6.2 运行改进

上面讲到,裁剪后的系统已经完整地装入了64M的电子盘,但是,由于电子盘的寿命有限,因此,必须尽可能地延长电子盘的使用寿命。而最好的方法就是少读少写!也就是说,要尽可能地少在电子盘上进行操作,除了必须的数据备份之外,要让电子盘所干的工作全部由内存代替。

7 结语

Linux系统作为分时多任务操作系统,是由全世界范围的黑客高手共同发展起来的,在网络支持方面做得非常出色。光支持的协议就有:ftp、telnet、rlogin、slip、plip、X.25、ipx、Apple Talk和Samba、Apache、TCP/IP等。它最大的优点在于多任务、多用户下的高效性,安全性和稳定性。而最吸引人的一点是:Linux下的任何软件都是免费的,这也是本课题选用Linux系统作为嵌入式系统的重要原因。

摘要:根据目标系统要求,介绍了Linux操作系统的启动过程,如何对Linux操作系统进行定制,以及裁减后的系统的安装和运行方法的改进。

关键词:Linux,操作系统,嵌入式平台,嵌入式系统,内存

参考文献

[1]施威铭研究室.LINUX指令参考手册.北京:中国青年出版社,2000.

[2]陈莉群.LINUX操作系统内核分析.北京:人民邮电出版社,1999.

[3]徐严明.LINUX编程指南.北京:科学出版社,1999.

[4]高峰.LINUX系统管理.北京:科学出版社,2000.

嵌入式Linux平台 篇8

嵌入式系统是以计算机技术为基础,软硬件可剪裁,适用于特定应用,并且对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统[1]。目前,嵌入式系统已成为近年来发展很快的计算机方面的学科方向,并迅速渗透到控制、自动化、仪器仪表等学科,主要应用于信息家电、移动计算设备、网络设备、工业控制、仿真、医疗仪器等领域。

嵌入式系统的体系结构包括硬件和软件两大部分,其中硬件部分包括嵌入式处理器及外围设备,软件部分包括嵌入式操作系统和嵌入式应用软件。

2 ARM-Linux嵌入式系统平台构建

嵌入式系统平台的构建包括硬件平台和软件平台两部分,其构建过程如下:

1)嵌入式微处理器的选择

嵌入式微处理器的种类很多,由于ARM处理器具有体积小、功耗和成本低但性能高,同时支持Thumb/ARM指令集,指令长度固定等特点[1],最终选定了博创创科技有限公司的经典ARM9 开发板UP- TECH2410,其核心是三星公司的32 位ARM920T处理器S3C2410,非常适合嵌入式系统的设计应用。

2)嵌入式操作系统的选择

现在,应用在嵌入式系统中的操作系统很多,如Linux、Windows CE、Vx Works等。嵌入式Linux有着源码开放、支持多种体系结构并支持多种硬件平台的移植、内核可定制、占用资源少、运行稳定且速度快等优势,成为嵌入式系统开发的首选。

3)交叉编译器的构建

由于嵌入式系统硬件上存在存储空间小、处理器频率低、缺少存储、输入输出设备等局限性,一般嵌入式开发采用交叉编译环境,由宿主机(平时使用的桌面计算机)和目标板(嵌入式开发板)两部分构成。在宿主机上编写代码,并通过交叉编译工具编译出能够在目标板上运行的程序,然后下载到目标板上测试执行,最后利用宿主机上的调试工具对目标板上运行的程序进行远程调试。目标板通过串口、并口或以太网接口和宿主机通信。

4)Boot Loader的移植

Boot Loader的作用是引导和加载内核。目前Boot Loader的版本很多,如vivi、Redboot、U-boot[2]等,不同的Boot Loader支持的体系结构有所不同。由于U-boot支持Arm体系结构和Linux操作系统的引导,同时具有一定的通用性,因此选择U-Boot作为引导程序。

5)内核移植

内核移植是指将基于x86 体系的Linux移植到基于ARM体系的嵌入式Linux。内核是嵌入式系统的系统软件,占有非常重要的地位。进行内核移植时先根据硬件体系结构配置内核,然后通过交叉编译器编译内核,最后通过Windows平台的超级终端或Linux平台的Minicom将内核烧写到开发板[3]。

6)根文件系统的移植

Linux操作系统启动时需要挂载根文件系统才能正常工作,常见的根文件系统有Cramfs、Rom FSJFFS2、NFS等。通常选择根文件系统需从是否可写、保存、压缩等方面去选取。由于Cramfs具有简单、压缩只读的特点,非常适合嵌入式系统,因此选择构建Cramfs根文件系统。

嵌入式系统的平台已经基本搭建起来。如果在开发过程中需要使用外围设备,还需开发相应的驱动程序;如不需要,即可进行上层应用程序的开发。

3 基于ARM-Linux平台绘图板的实现

基于ARM-Linux嵌入式系统平台开发了绘图板,主要包括以下三个模块:鼠标绘图模块:可以使用鼠标在画板上自由绘图;工具选择模块:包括画笔的颜色,画笔的线宽,画笔的风格的选择及清除功能;文件选择模块:包括图像文件的打开、保存、退出。 首先在PC机上基于Windows平台使用Qt Windows开发调试绘图板程序,然后将程序移植到Linux操作系统使用Qt/X11 重新编译,然后使用Linux平台的Qt/E进行交叉编译生成可执行程序,通过串口或网口下载到ARM平台,重新运行程序。经过测试,在开发板上能够成功运行,画笔颜色选择功能

如图1所示。

4 总结

通过构建ARM-Linux嵌入式系统平台,并基于该平台借助Qt开发环境实现了绘图板程序,经测试程序运行正常,对于从事嵌入式应用开发,具有一定的参考价值。

摘要:该文介绍了ARM-Linux嵌入式系统平台的构建过程,并基于该平台实现了绘图板,经测试,能正常运行。

嵌入式Linux平台 篇9

1 嵌入式开发软件平台搭建

嵌入式软件开发一般遵循“宿主机一目标板”的开发模式。其中核心内容主要是宿主机交叉编译环境[2]以及TFTP和NFS环境的搭建。在本文给出的实验示例中,宿主机上安装的是目前比较流行的RHEL 6版本。

1.1 宿主机交叉编译环境的搭建

因为成本原因,嵌入式系统的资源往往是有限的,因此直接在嵌入式系统的硬件平台上编写软件比较困难。这时候就需要交叉编译。所谓交叉编译就是在某个主机平台上(比如PC上)用交叉编译器编译出可在其他平台上(比如ARM上)运行的代码的过程。嵌入式系统交叉编译环境如图1所示。

下面就介绍如何搭建宿主机交叉编译环境。本文在测试时使用的交叉编译器版本为arm-linux-gcc-3.4.1.tgz,硬件方面使用的是上海双实科技提供的基于S3C2440的开发板。

安装交叉编译器arm-linux-gcc-3.4.1.tgz步骤如下:(通过U盘拷贝到系统中,并放置根目录下)

添加下面一句

1.2 TFTP的搭建

TFTP是一种传输文件的简单协议,它没有FTP协议那么多特征,不支持目录列表及用户认证[3],但是实现快捷,被广泛应用于嵌入式开发领域。TFTP也是基于传统的C/S模式进行工作,TFTP开发环境的构建分为宿主机端的tftp-server支持以及目标板的tftp-client支持。

1.2.1 构建宿主机tftp开发环境

1)首先利用配置好的本地yum源安装tftp服务软件包

2)修改配置文件

在RHEL 6系统中TFTP服务默认情况下是禁用的,所以要修改/etc/xinetd.d/tftp文件来开启服务。操作如下:

将配置选项disable=yes改为disable=no,保存退出

3)重新启动tftp-server

1.2.2 构建目标板tftp开发环境

一般来说,目标板都能够支持tftp-client,所以嵌入式目标板tftp环境一般就不需要再配置了。在目标板可以通过类似命令tftp–r a.c–g 211.65.180.1下载文件。

1.3 NFS开发环境的搭建

tftp服务只在需要下载或传输文件至开发板时使用。在应用程序开发环节,通常都要

搭建好NFS环境[4]。NFS是系统间进行文件共享的一种网络协议,在NFS的应用结构中有服务器和客户机两种角色,NFS客户端通过挂载NFS文件系统的方式访问NFS服务器中输出的共享目录。因此,NFS方式比ftp方式有着更高的执行效率。

1.3.1 宿主机NFS开发环境的建立

1)安装NFS服务器

2)关闭服务器端防火墙

3)配置NFS服务器

在宿主机端以root的身份登录。使用vi编辑器编辑/etc/exports文件,该文件中默认内容为空,可以添加如下内容:

添加的内容表示允许IP为211.65.180.1的计算机以读写的权限来访问共享目录/home/share。

4)启动RPC服务(在RHEL6中用rpcbind服务代替之前的portmap服务)

5)启动NFS服务器

1.3.2 目标机NFS开发环境的建立

目标板如果不支持NFS,则需要重新编译内核,添加相应的选项。

1)配置内核支持NFS客户端

将内核源代码拷贝到相关目录下,然后输入命令make menuconfig,在出现的图形界面中选择Load an Alternate Configuration File菜单载入配置文件,添加内核对NFS的支持,然后保存退出,用命令make u Image编译内核,将生成的u Image重新下载到目标板启动即可。

2)目标板对NFS共享目录的挂栽

2 结束语

本文对构建基于ARM的嵌入式Linux软件开发环境进行了探究。作者在宿主机上安装了内核较新的Linux企业版本RHEL 6,着重研究了交叉编译环境的建立,TFTP和NFS的配置,从实验结果来看,提供了一种可靠性较高的方法。

摘要:嵌入式软件开发是当前热门技术,而构建嵌入式软件开发环境是进行嵌入式软件开发的基础。该文对如何搭建基于ARM的嵌入式Linux软件开发平台进行了探究。根据软件开发的一般流程,从交叉编译环境的建立,到TFTP和NFS的配置,都进行了详细的论述,并通过实验证明了平台的可用性。

关键词:嵌入式系统,ARM,Linux,交叉编译

参考文献

[1]苟军年.ARM-Linux嵌入式软件开发平台的搭建.计算机时代[J].2010(11):53-55.

[2]张欢庆,高丽,宋承祥.基于ARM的嵌入式Linux交叉编译环境的研究与实现[J].计算机与数字工程,2012,40(2):151-153.

[3]李怀刚,邱建新.网络安装Linux的技术原理分析及实现[J].计算机应用与软件,2006,23(9):110-112.

上一篇:中小学教师怎样做课题下一篇:山东淄博