当前位置:首页 » 编程软件 » 开发板主板交叉编译

开发板主板交叉编译

发布时间: 2024-09-08 11:12:59

Ⅰ 无线远程监控系统的实现方式

采用单片机是大多数嵌入式系统设计时的首选方案。由于在片上集成有丰富的外设,具有良好的控制能力,单片机天生就是为嵌放式系统度身定做的,在嵌入式市场上占据了最大的份额。
基于单片机的设计方案一般适用于对数据处理要求不高,运算量不大的远程监控系统。根据需要,单片机可以选用较为低端的4位机或8位机,如8051等,也可选用功能较强的专用芯片,如MSP430FE42X系列。单片机主要用于监测站端的系统控制。片外存储器一般为RAM、EEPROM和Flash等存储器;I/O设备一般为键盘、LCD等供设计调试用的人机交互接口;传感器一般为话筒、摄像头、扬声器和伺服马达一类的设备。无线通信接口实现相对较为复杂。编解码器是可取舍的,对于低速率数据一般没有必要。根据系统的处理任务和信息的类别,编解码器可选用不同的芯生, 如CMX639(用于音频)或LD9320等,也可用编程逻辑器件实现。监测站软件可直接通过C或汇编语言实现,也可在实时操作系统上开发应用软件。对于低档的4位或8位单片机,控制能力较低,系统简单,一般采用直接编写控制程序的方法。对于功能较强大,各设备间交互复杂的系统而言,大多数是利用操作系统来进行任务管理、设备交互,应用软件只是完成上层的数据处理等工作。 众所周知,DSP的数字处理方面能力较强,技术已经很成熟,能处理各种运算的通用、专用芯片也很多。以DSP为核心设计开发的监测站,可以完成高速率数据处理,保证系统实时性方面的要求。
这类设计方案一般适用于数据处理运算量比较大,实时性要求高而对控制能力要求相对较低的监控系统。与以单片机为基础的监控系统不同的是,DSP除了作控制器以外,还可兼作数据计算、编/解码之用。对于较复杂的编/解码以及压缩解压运算(比如对图像视频数据的处理等)是否仍由DSP完成,须综合考虑。若DSP在系统控制和实现传输协议方面负担太重,则这部分运算需要由专门的处理芯片完成;若系统控制和传输协议较简单,或根本没有到上层协议栈,则这部分复杂的运算可由DSP完成。 显然,这种设计方式吸取了单片机和DSP各自的优点:单片机的特点决定其擅长于控制,DSP的内部结构保证较强的数据处理能力。两者的组合可实现一些相当复杂的系统功能,但由于系统中采用了两个处理器,其间的信息交互是设计这类监测站时须着重考虑的问题。只有单片机和DSP之间较好地协同工作,才能充分发挥各自的优点;否则,由于两者间的协调而耗费了大量资源,整体性能未必高于采用单一处理器的系统。实现单片机和DSP间通信协调的常用方法是采用双口RAM。
有些DSP或单片机厂家为了扩大芯片的适用范围,在原有基础上进行扩展,相互间容入了对方的特点,使同一芯片在数据处理和控制方面同时具有较好的性能。比如Microchip公司推出的dsPIC,使客户能方便地将单片机的功能转移到DSP上,推出的产品有dsPIC30FXXX系列。由于DSP和MCU两个功能模块在同一芯片内实现,提高了系统的可靠性、降低了监测站的设计难度并节省印制板空间。这类芯片得到广大用户的青睐。基于MPU的设计实现方式
设计嵌入式产品的另一可选方案是采用基于微处理器的设计方式。与工业控制计算机相比,嵌入式微处理器具有体积小、重量轻、成本低、可靠性高等优点;同时,在该领域技术成熟、产品类型多、选择空间大,满足各种性能需求的处理器比较容易获得。随着采用RISC体系的高性能MPU(比如采用ARM构架的处理器芯片等)的出现,MPU在嵌入式领域中的地位经久不衰;但是,由于在设计监测站时,电路板上必须包括ROM、RAM、Flash、总线接口和各种外设等器件,系统的可靠性将有所下降,技术保密性差,实现难度也较大。
实时操作系统选择和嵌入式实时软件开发
已有的实时操作系统(RTOS)种类繁多,软件结构各异,可适用于复杂程度不同的各种环境,包括循环查询系统、前后台系统、实时多任务系统和多处理机系统等。具体实例有VxWorks、pSOS、QNX、Palm OS、Windows CE、lynx OS和嵌入式linux等。选择适合监测站乃至整个无线远程监控系统的RTOS的重要性是不言而喻的,它可能关系到整个系统研制的成败。选择过程杂而又需要耐心:要了解各RTOS的特点和适用范围,比较其间的区别,才能找到最为合适的一种。选择比较时,需要考虑的因素主要有:
①RTOS能否支持在项目中使用的语言和微处理器;
②RTOS能否与ICE、编译器、汇编器、连接器及源代码调制器共同工作;
③RTOS是否支持设计中要用到的服务,如消息队列、定时和信号量等;
④RTOS能否达到应用产品的性能需求,比如实时性需求;
⑤能否获得产品开发时必要的组件,比如协议栈、能信服务、实时数据库、Web服务等;
⑥RTOS是否能为公开出售的硬件提供设备驱动程序;
⑦使用RTOS是否免费;
⑧能否获得目标代码;
⑨获得的技术支持有多少;
⑩对于需要授权的RTOS,授权方式是怎样的。
嵌入式实时软件的开发与传统软件的开发有许多相似之处,继承了许多传统软件的开发习惯;但由于嵌入式实时软件的功能和运行环境特殊,决定其与传统软件的开发有所区别。嵌入式实时软件的开发使用交叉开发方式。所谓交叉开发是指,程序代码的实现、编译和连接的环境与对其进行调试和运行的环境不同。前者基于普通微机平台,后者则基于嵌入式系统的硬件平台。调试过程多是在有通信连接的宿主机与目标机的配合下进行的,开发完成后需要进行固化和固化测试。另外,开发过程还需要相应的开发工具,包括交叉编译器、交叉调试器和一些仿真软件。嵌入式应用系统以任务为基本执行单元,用多个并发的任务代替通用软件的多个模块,并定义了应用软件任务间的接口。由于整个无线远程监控系统的实时性能受RTOS和应用软件的影响,所以,在软件的需求分析阶段就充分考虑其实时性要求。再加之嵌入式应用软件对稳定性、可靠性、抗干扰等性能的要求都比较严格,所以嵌入式实时软件的开发难度较大。
无线通信的设计实现 无线通信的设计相对于监测站而言较简单,有许多现有的产品和通信系统可以利用,重点只是在于从多种实现方式中作出最优的选择。
常用的实现方式有:利用现有的通信网络(GSM/GPRS、CDMA移动网等)和相应的无线通信产品;通过无线收发设备,如无线Modem,无线网桥等专门的无线局域网;利用收发集成芯片在监测站端实现电路板级与监控中心的无线通信。
利用现有网络实现监测站与监控中心的无线通信 现有的通信网络较多,按业务建网是3G以前通信网络的特点,无线网络也不例外。设计无线远程监控系统可以借用的无线网络主要有:全球数字移动电话系统(GSM)、通用分组无线业务(GPRS)、采用码分多址(CDMA)技术的移动网、蜂窝式数字分组数据(CDPD)系统。
GSM(Globem System for Mobile)是全球最主要的2G标准,能够在低服务成本、低终端成本条件下提供较高的通信质量。就其业务而言,GSM是一个能够提供多种业务的移动ISDN(Integrated Services Digital Network,综合业务数字网络)。
GPRS(General Packet Packet Radio Service)在现有的GSM网络基础上增加一些硬件设备和软件升级,形成一个新的网络逻辑实体。它以分组交换技术为基础,采用IP数据网络协议,提高了现有的GSM网的数据业务传输速率,最高可达170kb/s。GPRS把分组交换技术引入现有GSM系统,使得移动通信和数据网络合二为一,具有“极速传送”、“永远在线”、“价格实惠”等特点。
CDMA(Code Division Multiple Access)网络采用扩展频谱技术,使用多种分集接收方式,使其具有容量大、通信质量好、保密性高和抗干扰能力强等特点。
CDPD(Cellular Digital Data)无线移动数据通信基于数字分组数据通信技术,以蜂窝移动通信为组网形式,是数据朎与移动通信的结合物。这种通信方式基于TCP/IP,系统结构为开放式,提供同层网络无缝连接和多协议网络服务。CDPD网络具有速度快、数据安全性高等特点,可与公用有线数据网络互联互通,非常适合传输实时、突发性和在线数据。
对使监控中心与监测站间的无线通信能利用现有的网络,对于特定的无线网需用相应的接入设备。这类设备市面上有现成的产品可供选择。接入GSM网络的通信模块有西门子的SIEMENS TC35i,接入GPRS可用西门子的MC35GPRS模块,接入CDMA网络的有华立H110 CDMA模块和AnyDATA公司的CDMA Modem(DTS-800/1800),遵循CDPD方式的无线调制解调器(Modem)有OmniSky和NovatelMinstrel。
利用现有的网络组建无线远程监控系统,网络连接如图1所示。其中无线接入模块产品一般都提供有RS232作为外通信接口,有些天线是内置的。利用现有的网络覆盖面广和可漫游等特点,使监测站和控制中心的位置不受距离的限制;但由于利用公网,安全性会有所降低。
通过专用无线收发设备建立无线局域网 这种设计实现方式结构简单,且无须向网络运营商付费;利用专网,安全性高。无线传输以微波作传输媒体,根据调制方式的不同,可分为扩展频谱方式和窄带调制方式两种。扩展频谱方式系统的抗干扰能力和安全性高,对其它电子设备的干扰小。窄带调制方式占用频带少,频带利用率高;通常选择专用频段,需要申请;相邻频道间影响大,通信质量、通信可靠性无法保障。
采用专用无线收发设备建立无线局域网的拓扑结构如图2所示。无线收发设备包括无线Modem和无线网桥等。无线Modem与监测站和控制中心之间采用RS232通信。若采用网桥为网络组建设备,网络拓扑结构将更为灵活,如图3所示。其中在无线网两端的有线网络是可取舍的,可以是以太网、令牌环网或点对点网络等本地局域网。也可以城域网,甚至是因特网,但使用公网时须考虑安全性和费用问题。
利用收发集成芯片在监测站端实现的无线通信 前两种组网方式的一个特点是采用现有的网络系统和产品,无线通信部分不须专门开发,实现较为容易。但由于所购买的产品均是独立器件,使整个系统特别是监测站一端结构复杂、体积庞大,往往在系统推广时会带来不利,且外购产品会增加系统的成本。若能将外购产品的功能与监测站集成在一起,在电路板级实现,将可以避免上述不利因素;但这会增加系统开发的难度,延长研制周期。须权衡利弊,根据项目组的开发实力和系统生命周期作最有利的选择。
采用此方法设计监测站需要实现的部分只是图1、2和3中的无线通信接口(可参看本文的网络版全文)。这部分的硬件实时框图以及处理器、存储器的关系大致如图4所示。各个子模块都有多种芯片可供选择,比如射频前端可用ML2751和RTF6900,实现调制/解调的有ML2722,扩频、解扩可用LD9002DX2和Stel-2000A等。
控制中心的设计实现
控制中心的设计相对于监测站的设计开发来讲较为简单,硬件设计少,除了普通微机(或工作站、工控机)外,还需要网络接入设备(若无线通信采用自行设计的模块实现,则须开发专用的无线网卡插入微机主板的预留总线插槽中)。控制中心的设计开发主要集中在应用软件的设计开发上,一般是基于Windows和Unix等常用操作系统的。当前用于此类软件开始、调试的工具较多,且功能强大,给控制中心软件的设计带来便利。
就软件的实现形式而言,一般除了界面模块外,其余各个功能模块均可设计成动态连接库文件(.dll)。人机接口界面模块可以为该无线远程监控系统的实际应用进行定制,以满足用户在界面美观、操作方便等方面的特殊要求。
采用C/C 语言在VC 开发环境下设计这样的系统软件涉及到的技术较多,包括内存管理、网络通信、多线程管理和数据库编程,甚至ActiveX等。

Ⅱ 什么是嵌入式搞嵌入式是不是等于写代码

随着信息化技术的发展和数字化产品的普及,以计算机技术、芯片技术和软件技术为核心的嵌入式系统再度成为当前研究和应用的热点,通信、计算机、消费电子技术(3C)合一的趋势正在逐步形成,无所不在的网络和无所不在的计算(everything connecting, everywhere computing)正在将人类带入一个崭新的信息社会。一、嵌入式系统 嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件是可裁剪的,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。嵌入式系统最典型的特点是与人们的日常生活紧密相关,任何一个普通人都可能拥有各类形形色色运用了嵌入式技术的电子产品,小到MP3、PDA等微型数字化设备,大到信息家电、智能电器、车载GIS,各种新型嵌入式设备在数量上已经远远超过了通用计算机。这也难怪美国着名未来学家尼葛洛庞帝在1999年1月访华时就预言,4~5年后嵌入式智能工具将成为继PC机和Internet之后计算机工业最伟大的发明。 1.1 历史与现状 虽然嵌入式系统是近几年才开始真正风靡起来的,但事实上嵌入式这个概念却很早就已经存在了,从上个世纪70年代单片机的出现到今天各种嵌入式微处理器、微控制器的广泛应用,嵌入式系统少说也有了近30年的历史。纵观嵌入式系统的发展历程,大致经历了以下四个阶段: 无操作系统阶段 嵌入式系统最初的应用是基于单片机的,大多以可编程控制器的形式出现,具有监测、伺服、设备指示等功能,通常应用于各类工业控制和飞机、导弹等武器装备中,一般没有操作系统的支持,只能通过汇编语言对系统进行直接控制,运行结束后再清除内存。这些装置虽然已经初步具备了嵌入式的应用特点,但仅仅只是使用8位的CPU芯片来执行一些单线程的程序,因此严格地说还谈不上"系统"的概念。 这一阶段嵌入式系统的主要特点是:系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。由于这种嵌入式系统使用简便、价格低廉,因而曾经在工业控制领域中得到了非常广泛的应用,但却无法满足现今对执行效率、存储容量都有较高要求的信息家电等场合的需要。 简单操作系统阶段 20世纪80年代,随着微电子工艺水平的提高,IC制造商开始把嵌入式应用中所需要的微处理器、I/O接口、串行接口以及RAM、ROM等部件统统集成到一片VLSI中,制造出面向I/O设计的微控制器,并一举成为嵌入式系统领域中异军突起的新秀。与此同时,嵌入式系统的程序员也开始基于一些简单的"操作系统"开发嵌入式应用软件,大大缩短了开发周期、提高了开发效率。 这一阶段嵌入式系统的主要特点是:出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),各种简单的嵌入式操作系统开始出现并得到迅速发展。此时的嵌入式操作系统虽然还比较简单,但已经初步具有了一定的兼容性和扩展性,内核精巧且效率高,主要用来控制系统负载以及监控应用程序的运行。 实时操作系统阶段 20世纪90年代,在分布控制、柔性制造、数字化通信和信息家电等巨大需求的牵引下,嵌入式系统进一步飞速发展,而面向实时信号处理算法的DSP产品则向着高速度、高精度、低功耗的方向发展。随着硬件实时性要求的提高,嵌入式系统的软件规模也不断扩大,逐渐形成了实时多任务操作系统(RTOS),并开始成为嵌入式系统的主流。 这一阶段嵌入式系统的主要特点是:操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。此时的嵌入式操作系统已经具备了文件和目录管理、设备管理、多任务、网络、图形用户界面(GUI)等功能,并提供了大量的应用程序接口(API),从而使得应用软件的开发变得更加简单。 面向Internet阶段 21世纪无疑将是一个网络的时代,将嵌入式系统应用到各种网络环境中去的呼声自然也越来越高。目前大多数嵌入式系统还孤立于Internet之外,随着Internet的进一步发展,以及Internet技术与信息家电、工业控制技术等的结合日益紧密,嵌入式设备与Internet的结合才是嵌入式技术的真正未来。 信息时代和数字时代的到来,为嵌入式系统的发展带来了巨大的机遇,同时也对嵌入式系统厂商提出了新的挑战。目前,嵌入式技术与Internet技术的结合正在推动着嵌入式技术的飞速发展,嵌入式系统的研究和应用产生了如下新的显着变化: 新的微处理器层出不穷,嵌入式操作系统自身结构的设计更加便于移植,能够在短时间内支持更多的微处理器。 嵌入式系统的开发成了一项系统工程,开发厂商不仅要提供嵌入式软硬件系统本身,同时还要提供强大的硬件开发工具和软件支持包。 通用计算机上使用的新技术、新观念开始逐步移植到嵌入式系统中,如嵌入式数据库、移动代理、实时CORBA等,嵌入式软件平台得到进一步完善。 各类嵌入式Linux操作系统迅速发展,由于具有源代码开放、系统内核小、执行效率高、网络结构完整等特点,很适合信息家电等嵌入式系统的需要,目前已经形成了能与Windows CE、Palm OS等嵌入式操作系统进行有力竞争的局面。 网络化、信息化的要求随着Internet技术的成熟和带宽的提高而日益突出,以往功能单一的设备如电话、手机、冰箱、微波炉等功能不再单一,结构变得更加复杂,网络互联成为必然趋势。 精简系统内核,优化关键算法,降低功耗和软硬件成本。 提供更加友好的多媒体人机交互界面。 1.2 体系结构 根据国际电气和电子工程师协会(IEEE)的定义,嵌入式系统是"控制、监视或者辅助设备、机器和车间运行的装置"(devices used to control, monitor, or assist the operation of equipment, machinery or plants)。一般而言,整个嵌入式系统的体系结构可以分成四个部分:嵌入式处理器、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件,如图1所示。 图1 嵌入式系统的组成 嵌入式处理器 嵌入式系统的核心是各种类型的嵌入式处理器,嵌入式处理器与通用处理器最大的不同点在于,嵌入式CPU大多工作在为特定用户群所专门设计的系统中,它将通用CPU中许多由板卡完成的任务集成到芯片内部,从而有利于嵌入式系统在设计时趋于小型化,同时还具有很高的效率和可靠性。 嵌入式处理器的体系结构经历了从CISC(复杂指令集)至RISC(精简指令集)和Compact RISC的转变,位数则由4位、8位、16位、32位逐步发展到64位。目前常用的嵌入式处理器可分为低端的嵌入式微控制器(Micro Controller Unit,MCU)、中高端的嵌入式微处理器(Embedded Micro Processor Unit,EMPU)、用于计算机通信领域的嵌入式DSP处理器(Embedded Digital Signal Processor,EDSP)和高度集成的嵌入式片上系统(System On Chip,SOC)。 目前几乎每个半导体制造商都生产嵌入式处理器,并且越来越多的公司开始拥有自主的处理器设计部门,据不完全统计,全世界嵌入式处理器已经超过1000多种,流行的体系结构有30多个系列,其中以ARM、PowerPC、MC 68000、MIPS等使用得最为广泛。 嵌入式外围设备 在嵌入系统硬件系统中,除了中心控制部件(MCU、DSP、EMPU、SOC)以外,用于完成存储、通信、调试、显示等辅助功能的其他部件,事实上都可以算作嵌入式外围设备。目前常用的嵌入式外围设备按功能可以分为存储设备、通信设备和显示设备三类。 存储设备主要用于各类数据的存储,常用的有静态易失型存储器(RAM、SRAM)、动态存储器(DRAM)和非易失型存储器(ROM、EPROM、EEPROM、FLASH)三种,其中FLASH凭借其可擦写次数多、存储速度快、存储容量大、价格便宜等优点,在嵌入式领域内得到了广泛应用。 目前存在的绝大多数通信设备都可以直接在嵌入式系统中应用,包括RS-232接口(串行通信接口)、SPI(串行外围设备接口)、IrDA(红外线接口)、I2C(现场总线)、USB(通用串行总线接口)、Ethernet(以太网接口)等。 由于嵌入式应用场合的特殊性,通常使用的是阴极射线管(CRT)、液晶显示器(LCD)和触摸板(Touch Panel)等外围显示设备。 嵌入式操作系统 为了使嵌入式系统的开发更加方便和快捷,需要有专门负责管理存储器分配、中断处理、任务调度等功能的软件模块,这就是嵌入式操作系统。嵌入式操作系统是用来支持嵌入式应用的系统软件,是嵌入式系统极为重要的组成部分,通常包括与硬件相关的底层驱动程序、系统内核、设备驱动接口、通信协议、图形用户界面(GUI)等。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理复杂的系统资源,能够对硬件进行抽象,能够提供库函数、驱动程序、开发工具集等。但与通用操作系统相比较,嵌入式操作系统在系统实时性、硬件依赖性、软件固化性以及应用专用性等方面,具有更加鲜明的特点。 嵌入式操作系统根据应用场合可以分为两大类:一类是面向消费电子产品的非实时系统,这类设备包括个人数字助理(PDA)、移动电话、机顶盒(STB)等;另一类则是面向控制、通信、医疗等领域的实时操作系统,如WindRiver公司的VxWorks、QNX系统软件公司的QNX等。实时系统(Real Time System)是一种能够在指定或者确定时间内完成系统功能,并且对外部和内部事件在同步或者异步时间内能做出及时响应的系统。在实时系统中,操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关,也就是说,实时系统对逻辑和时序的要求非常严格,如果逻辑和时序控制出现偏差将会产生严重后果。 实时系统主要通过三个性能指标来衡量系统的实时性,即响应时间(Response Time)、生存时间(Survival Time)和吞吐量(Throughput): 响应时间 是实时系统从识别出一个外部事件到做出响应的时间; 生存时间 是数据的有效等待时间,数据只有在这段时间内才是有效的; 吞吐量 是在给定的时间内系统能够处理的事件总数,吞吐量通常比平均响应时间的倒数要小一点。 实时系统根据响应时间可以分为弱实时系统、一般实时系统和强实时系统三种。弱实时系统在设计时的宗旨是使各个任务运行得越快越好,但没有严格限定某一任务必须在多长时间内完成,弱实时系统更多关注的是程序运行结果的正确与否,以及系统安全性能等其他方面,对任务执行时间的要求相对来讲较为宽松,一般响应时间可以是数十秒或者更长。一般实时系统是弱实时系统和强实时系统的一种折衷,它的响应时间可以在秒的数量级上,广泛应用于消费电子设备中。强实时系统则要求各个任务不仅要保证执行过程和结果的正确性,同时还要保证在限定的时间内完成任务,响应时间通常要求在毫秒甚至微秒的数量级上,这对涉及到医疗、安全、军事的软硬件系统来说是至关重要的。 时限(deadline)是实时系统中的一个重要概念,指的是对任务截止时间的要求,根据时限对系统性能的影响程度,实时系统又可以分为软实时系统(soft real-time-system)和硬实时系统(hard real-time-system)。软实时指的是虽然对系统响应时间有所限定,但如果系统响应时间不能满足要求,并不会导致系统产生致命的错误或者崩溃;硬实时则指的是对系统响应时间有严格的限定,如果系统响应时间不能满足要求,就会引起系统产生致命的错误或者崩溃。如果一个任务在时限到达之时尚未完成,对软实时系统来说还是可以容忍的,最多只会降低系统性能,但对硬实时系统来说则是无法接受的,因为这样带来的后果根本无法预测,甚至可能是灾难性的。在目前实际运用的实时系统中,通常允许软硬两种实时性同时存在,其中一些事件没有时限要求,另外一些事件的时限要求是软实时的,而对系统产生关键影响的那些事件的时限要求则是硬实时的。 嵌入式应用软件 嵌入式应用软件是针对特定应用领域,基于某一固定的硬件平台,用来达到用户预期目标的计算机软件,由于用户任务可能有时间和精度上的要求,因此有些嵌入式应用软件需要特定嵌入式操作系统的支持。嵌入式应用软件和普通应用软件有一定的区别,它不仅要求其准确性、安全性和稳定性等方面能够满足实际应用的需要,而且还要尽可能地进行优化,以减少对系统资源的消耗,降低硬件成本。 1.3 关键问题 嵌入式系统是将先进的计算机技术、半导体技术以及电子技术与特定行业的具体应用相结合的产物,因此必然是一个技术密集、资金密集、高度分散、不断创新的知识集成系统,嵌入式系统的开发充满了竞争、机遇与创新,需要解决好如下一些关键问题: 内核精巧 嵌入式系统的应用领域一般都是小型电子装置,系统资源相对有限,因此对内核的要求相当高,较之传统的操作系统来讲要小得多,例如ENEA公司推出的OSE分布式嵌入式系统,整个内核只有5KB。 面向应用 嵌入式系统通常是面向用户、面向产品、面向特定应用的。嵌入式系统中的CPU大多工作在为特定用户群定制的环境中,具有低耗、体积小、集成度高等特点,在进行软硬件设计时必须突出效率、去除冗余,针对用户的具体需求对系统进行合理的配置,方能达到理想的性能。 系统精简 嵌入式系统中的系统软件和应用软件通常没有明显的区别,不要求其功能及实现上过于复杂,这样一方面有利于控制系统成本,另一方面也有利于保证系统安全。 性能优化 嵌入式系统通常都要求有一定的实时性保障,为了提高执行速度和系统性能,嵌入式系统中的软件一般都固化在存储芯片或者处理器的内部存储器件当中,而不是存贮在磁盘等外部载体中。由于嵌入式系统的运算速度和存储容量存在一定程度上的限制,而且大部分系统都必须有较高的实时性保证,因此对软件质量(特别是可靠性方面)有着较高的要求。 专业开发 嵌入式系统本身并不具备自主开发能力,用户不能直接在其上进行二次开发。当系统完成之后,用户如果需要修改其中某个程序的功能,必须借助一套完整的开发工具和环境。嵌入式系统中专用的开发工具和环境通常是基于通用计算机上的软硬件设备,以及各种逻辑分析仪、混合信号示波器等。 回页首 二、嵌入式Linux Linux从1991年问世到现在,短短的十几年时间已经发展成为功能强大、设计完善的操作系统之一,不仅可以与各种传统的商业操作系统分庭抗争,在新兴的嵌入式操作系统领域内也获得了飞速发展。嵌入式Linux(Embedded Linux)是指对标准Linux经过小型化裁剪处理之后,能够固化在容量只有几K或者几M字节的存储器芯片或者单片机中,适合于特定嵌入式应用场合的专用Linux操作系统。 2.1 优势 嵌入式Linux的开发和研究是操作系统领域中的一个热点,目前已经开发成功的嵌入式系统中,大约有一半使用的是Linux。Linux之所以能在嵌入式系统市场上取得如此辉煌的成果,与其自身的优良特性是分不开的。 广泛的硬件支持 Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,目前已经成功移植到数十种硬件平台,几乎能够运行在所有流行的CPU上。Linux有着异常丰富的驱动程序资源,支持各种主流硬件设备和最新硬件技术,甚至可以在没有存储管理单元(MMU)的处理器上运行,这些都进一步促进了Linux在嵌入式系统中的应用。 内核高效稳定 Linux内核的高效和稳定已经在各个领域内得到了大量事实的验证,Linux的内核设计非常精巧,分成进程调度、内存管理、进程间通信、虚拟文件系统和网络接口五大部分,其独特的模块机制可以根据用户的需要,实时地将某些模块插入到内核或从内核中移走。这些特性使得Linux系统内核可以裁剪得非常小巧,很适合于嵌入式系统的需要。 开放源码,软件丰富 Linux是开放源代码的自由操作系统,它为用户提供了最大限度的自由度,由于嵌入式系统千差万别,往往需要针对具体的应用进行修改和优化,因而获得源代码就变得至关重要了。Linux的软件资源十分丰富,每一种通用程序在Linux上几乎都可以找到,并且数量还在不断增加。在Linux上开发嵌入式应用软件一般不用从头做起,而是可以选择一个类似的自由软件做为原型,在其上进行二次开发。 优秀的开发工具 开发嵌入式系统的关键是需要有一套完善的开发和调试工具。传统的嵌入式开发调试工具是在线仿真器(In-Circuit Emulator,ICE),它通过取代目标板的微处理器,给目标程序提供一个完整的仿真环境,从而使开发者能够非常清楚地了解到程序在目标板上的工作状态,便于监视和调试程序。在线仿真器的价格非常昂贵,而且只适合做非常底层的调试,如果使用的是嵌入式Linux,一旦软硬件能够支持正常的串口功能时,即使不用在线仿真器也可以很好地进行开发和调试工作,从而节省了一笔不小的开发费用。嵌入式Linux为开发者提供了一套完整的工具链(Tool Chain),它利用GNU的gcc做编译器,用gdb、kgdb、xgdb做调试工具,能够很方便地实现从操作系统到应用软件各个级别的调试。 完善的网络通信和文件管理机制 Linux至诞生之日起就与Internet密不可分,支持所有标准的Internet网络协议,并且很容易移植到嵌入式系统当中。此外,Linux还支持ext2、fat16、fat32、romfs等文件系统,这些都为开发嵌入式系统应用打下了很好的基础。 2.2 挑战 目前,嵌入式Linux系统的研发热潮正在蓬勃兴起,并且占据了很大的市场份额,除了一些传统的Linux公司(如RedHat、MontaVista等)正在从事嵌入式Linux的开发和应用之外,IBM、Intel、Motorola等着名企业也开始进行嵌入式Linux的研究。虽然前景一片灿烂,但就目前而言,嵌入式Linux的研究成果与市场的真正要求仍有一段差距,要开发出真正成熟的嵌入式Linux系统,还需要从以下几个方面做出努力。 提高系统实时性 Linux虽然已经被成功地应用到了PDA、移动电话、车载电视、机顶盒、网络微波炉等各种嵌入式设备上,但在医疗、航空、交通、工业控制等对实时性要求非常严格的场合中还无法直接应用,原因在于现有的Linux是一个通用的操作系统,虽然它也采用了许多技术来加快系统的运行和响应速度,并且符合POSIX 1003.1b标准,但从本质上来说并不是一个嵌入式实时操作系统。Linux的内核调度策略基本上是沿用UNIX系统的,将它直接应用于嵌入式实时环境会有许多缺陷,如在运行内核线程时中断被关闭,分时调度策略存在时间上的不确定性,以及缺乏高精度的计时器等等。正因如此,利用Linux作为底层操作系统,在其上进行实时化改造,从而构建出一个具有实时处理能力的嵌入式系统,是现在日益流行的解决方案。 改善内核结构 Linux内核采用的是整体式结构(Monolithic),整个内核是一个单独的、非常大的程序,这样虽然能够使系统的各个部分直接沟通,有效地缩短任务之间的切换时间,提高系统响应速度,但与嵌入式系统存储容量小、资源有限的特点不相符合。嵌入式系统经常采用的是另一种称为微内核(Microkernel)的体系结构,即内核本身只提供一些最基本的操作系统功能,如任务调度、内存管理、中断处理等,而类似于文件系统和网络协议等附加功能则运行在用户空间中,并且可以根据实际需要进行取舍。Microkernel的执行效率虽然比不上Monolithic,但却大大减小了内核的体积,便于维护和移植,更能满足嵌入式系统的要求。可以考虑将Linux内核部分改造成Microkernel,使Linux在具有很高性能的同时,又能满足嵌入式系统体积小的要求。 完善集成开发平台 引入嵌入式Linux系统集成开发平台,是嵌入式Linux进一步发展和应用的内在要求。传统上的嵌入式系统都是面向具体应用场合的,软件和硬件之间必须紧密配合,但随着嵌入式系统规模的不断扩大和应用领域的不断扩展,嵌入式操作系统的出现就成了一种必然,因为只有这样才能促成嵌入式系统朝层次化和模块化的方向发展。很显然,嵌入式集成开发平台也是符合上述发展趋势的,一个优秀的嵌入式集成开发环境能够提供比较完备的仿真功能,可以实现嵌入式应用软件和嵌入式硬件的同步开发,从而摆脱了"嵌入式应用软件的开发依赖于嵌入式硬件的开发,并且以嵌入式硬件的开发为前提"的不利局面。一个完整的嵌入式集成开发平台通常包括编译器、连接器、调试器、跟踪器、优化器和集成用户界面,目前Linux在基于图形界面的特定系统定制平台的研究上,与Windows CE等商业嵌入式操作系统相比还有很大差距,整体集成开发环境有待提高和完善。 回页首 三、关键技术 嵌入式系统是一种根据特定用途所专门开发的系统,它只完成预期要完成的功能,因此其开发过程和开发环境同传统的软件开发相比有着显着的不同。 3.1 开发流程 在嵌入式系统的应用开发中,整个系统的开发过程如图2所示: 图2 嵌入式系统的开发流程 嵌入式系统发展到今天,对应于各种微处理器的硬件平台一般都是通用的、固定的、成熟的,这就大大减少了由硬件系统引入错误的机会。此外,由于嵌入式操作系统屏蔽了底层硬件的复杂性,使得开发者通过操作系统提供的API函数就可以完成大部分工作,因此大大简化了开发过程,提高了系统的稳定性。嵌入式系统的开发者现在已经从反复进行硬件平台设计的过程中解脱出来,从而可以将主要精力放在满足特定的需求上。 嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。 需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个显着特点,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式,如图3所示。 图3 交叉开发环境 宿主机(Host)是一台通用计算机(如PC机或者工作站),它通过串口或者以太网接口与目标机通信。宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如Windows和Linux),而且还有各种各样优秀的开发工具(如WindRiver的Tornado、Microsoft的Embedded Visual C++等),能够大大提高嵌入式应用软件的开发速度和效率。 目标机(Target)一般在嵌入式应用软件开发期间使用,用来区别与嵌入式系统通信的宿主机,它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统,但软硬件资源通常都比较有限。嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。在采用宿主机/目标机模式开发嵌入式应用软件时,首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,然后通过串口或者以网络将交叉编译生成的目标代码传输并装载到目标机上,并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,最后目标机在特定环境下脱离宿主机单独运行。 建立交叉开发环境是进行嵌入式软件开发的第一步,目前常用的交叉开发环境主要有开放和商业两种类型。开放的交叉开发环境的典型代表是GNU工具链、目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Software Development Toolkit、SDS Cross compiler、WindRiver Tornado、Microsoft Embedded Visual C++等。 3.2 交叉编译和链接 在完成嵌入式软件的编码之后,需要进行编译和链接以生成可执行代码,由于开发过程大多是在使用Intel公司x86系列CPU的通用计算机上进行的,而目标环境的处理器芯片却大多为ARM、MIPS、PowerPC、DragonBall等系列的微处理器,这就要求在建立好的交叉开发环境中进行交叉编译和链接。 交叉编译器和交叉链接器是能够在宿主机上运行,并且能够生成在目标机上直接运行的二进制代码的编译器和链接器。例如在基于ARM体系结构的gcc交叉开发环境中,arm-linux-gcc是交叉编译器,arm-linux-ld是交叉链接器。通常情况下,并不是每一种体系结构的嵌入式微处理器都只对应于一种交叉编译器和交叉链接器,比如对于M68K体系结构的gcc交叉开发环境而言,就对应于多种不同的编译器和链接器。如果使用的是COFF格式的可执行文件,那么在编译Linux内核时需要使用m68k-coff-gcc和m68k-coff-ld,而在编译应用程序时则需要使用m68k-coff-pic-gcc和m68k-coff-pic-ld。 嵌入式系统在链接过程中通常都要求使用较小的函数库,以便最后产生的可执行代码能够尽可能地小,因此实际运用时一般使用经过特殊处理的函数库。对于嵌入式Linux系统来讲,功能越来越强、体积越来越大的C语言函数库glibc和数学函数库libm已经很难满足实际的需要,因此需要采用它们的精化版本uClibc、uClibm和newlib等。 目前嵌入式的集成开发环境都支持交叉编译和交叉链接,如WindRiver Tornado和GNU工具链等,编写好的嵌入式软件经过交叉编译和交叉链接后通常会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件。 3.3 交叉调试 嵌入式软件经过编译和链接后即进入调试阶段,调试是软件开发过程中必不可少的一个环节,嵌入式软件开发过程中的交叉调 ~

Ⅲ 嵌入式中的移植是什么意思,移植系统呢

与其它操作系统相比,Linux最大的特点:它是一款遵循GPL的操作系统,我们可以自由
地使用、修改、和扩展它。正是由于这一特色,Linux受到越来越多人士的青睐。于是,
一个经常会被探讨的问题出现了,即关于Linux系统的移植。对于操作系统而言,这种移
植通常是跨平台的、与硬件相关的,即硬件系统结构、甚至CPU不同。下面就让我们来看
看在Linux系统移植方面,我们都需要做些什么。
一、Linux系统移植的两大部分
对于系统移植而言,Linux系统实际上由两个比较独立的部分组成,即内核部分和系
统部分。通常启动一个Linux系统的过程是这样的:一个不隶属于任何操作系统的加载程
序将Linux部分内核调肢兄慧入内存,并将控制权交给内存中Linux内核的第一行代码。加载程
序的工作就完了,此后Linux要将自己的剩余部分全部加载到内存(如果有的话,视硬件
平台的不同而不同),初始化所有的设备,在内存中建立好所需的数据结构(有关进程
、设备、内存等)。到此为止Linux内核的工作告一段落,内核已经控制了所有硬件设备
。至于操作和使用这些硬件设备,则轮到系统部分上场了。内核加载根设备并启动init
守护进程,init守护进程会根据配置文件加载文件系统、配置网络、服务进程、终端等
。一旦终端初始化完毕,我们就会看到系统的欢迎界面了。小结一下:
(1)内核部分初始化和控制所有硬件设备(严格说不是所有,而是绝大部分),为内存
管理、进程管理、设备读写等工作做好一切准备。
(2)系统部分加载必需的设备,配置各种环境以便用户可以使用整个系统。
二、系统移植所必需的环境
在进一步叙述之前,我们有必要提一下做系统移植所必需的环境。
首先,需要一个新版本的gcc。对于一个准备系统移植的程序员而言,“新”到什么
程度应该心里有数。做跨平台编译,gcc也许是最好的选择。另外,Linux内核依赖许多
gcc特有的特性,非它不可。如果你已经会使用gcc并实地操练过多回,那你只需要再进
一步巩固一下跨平台编译的操作即可。两种编译环境是可用的:非目标平台上的Linux或
目标平台上的非Linux系统,除非你的开发平台过于特殊,否则你一定能够找到你能用的
gcc。
其次,编译链接库是必需的,而且必须是目标平台的编译链接库。通常这历答是一个枯
燥、繁琐、又丝毫没有成就感的过程。幸运的话,会有现成的链接库可以用。否则,你
需要自己用gcc建立它。
最后,需要目标平台的所有文档,越多越好。如果有一定的开发支持/仿真环境,L
oader(加载程序)则最好,这些可以帮助你减少移植过程中浪费在琐事上的时间。
三、Linux系统移植
接下来我们从内核和系统两个方面描述一下移植中的关键。
(1) 内存移植
Linux系统采用了相对来说并不是很灵活的单一内核机制,但这丝毫没有影响Linux
系统的平台无关性和可扩展性。Linux使用了两种途径分别解决这些问题,很干净利落,
丝毫不拖泥带水,而且十分清晰易懂。分离硬件相关代码和硬件无关代码,使上层代码
永远不必关心低层换用了什么代码,如何完成了操作。不论对x86上还是在Alpha平台上
分配一块内存,对上层代码而言没什么不同。硬件相关部分的代码不多,占总代码量的
很少一部分。所以对更换硬件平台来说,没有什么真正的负担。另一方面,Linux使用内
核机制很好地解决了扩展的问题,一堆代码可以在需要的时候轻松地加载或卸下,象随
身听,需要的时候带上,不需要时则锁在抽屉里。
Linux内核可以视为由五个功能部分组成:进程管理(包括调度和通信)、内存管理
、设备管理、虚拟文件系统、网络。它们之间有着复杂的调用关系,但幸运的是,在移
植中不会触及到太多,因为Linux内核良好的分层结构将硬件相关的代码独立出来。何谓
硬件相关,何谓无关?以进程管理为例,对进程的时间片轮转调度算法在所有平台的Li
nux中都是一样的,它是与平台无关的;而用来在进程中切换的实现在不同的CPU上是不
同的,因此需要针对该平台编写代码,这就是平台相关的。上面所讲的五个部分的顺序
不是随便排的,从前到后分别代表着它们与硬件设备的相关程度。越靠前越高,后面的
两个虚拟文件系统和网络则几乎与平台无关,它们由设备管理中所支持尘森的驱动程序提供
底层支持。因此,在做系统移植的时候,需要改动的就是进程管理、内存管理和设备管
理中被独立出来的那部分即硬件相关部分的代码。在Linux代码树下,这部分代码全部在
arch目录下。
如果你的目标平台已经被Linux核心所支持的话,那么你是幸运的,因为已经没有太
多的工作让你去做。只要你的交叉编译环境是正确的,你只需要简单的配置、编译就可
以得到目标代码。否则,需要你去编写,或修改一些代码。只需修改平台相关部分的代
码即可。但需要对目标平台,主要是对CPU的透彻理解。在Linux的代码树下,可以看到
,这部分的典型代码量为:2万行左右C代码和2千行左右的汇编(C代码中通常包含许多
伪汇编指令,因此实际上纯C代码要少很多),这部分工作量是不可小看的。它包含了对
绝大多数硬件的底层操作,涉及IRQ、内存页表、快表、浮点处理、时钟、多处理器同步
等问题,频繁的端口编程意味着需要你将目标平台的文档用C语言重写一遍。这就是为什
么说目标平台的文档极其重要。
代码量最大的部分是被核心直接调用的底层支持部分,这部分代码在arch/xxx/ker
nel下(xxx是平台名称)。这些代码重写了内核所需调用的所有函数。因为接口函数是固
定的,所以这里更象是为硬件平台编写API。不同的系统平台,主要有以下几方面的不同

进程管理底层代码:从硬件系统的角度来看,进程管理就是CPU的管理。在不同的硬
件平台上,这有很大的不同。CPU中用的寄存器结构不同,上下文切换的方式、现场的保
存和恢复、栈的处理都不同,这些内容主要由CPU开发手册所描述。通常来说,CPU的所
有功能和状态对于Linux不一定有意义。实现时,需要在最小的开发代价和最好的系统性
能之间加以权衡。
* BIOS接口代码:这一名称似乎并不太准确,因为它沿用了PC一贯的叫法。但在不致引
起混淆的情况下我们还是这么叫它。在通用平台上,通常有基本输入输出系统供操作系
统使用,在PC上是BIOS,在SPARC上是PROM,在很多非通用系统上甚至并没有这样的东西
。多数情况下,Linux不依赖基本输入输出系统,但在某些系统里,Linux需要通过基本
输入输出系统中得到重要的设备参数。移植中,这部分代码通常需要完全改写。
* 时钟、中断等板上设备支持代码:即使在同一种CPU的平台上,也会存在不同的板上外
设,异种CPU平台上更是如此。不同的系统组态需要不同的初始化代码。很典型的例子就
是MIPS平台,看看arc/mips/的代码,与其它系统比较一下就知道。因为MIPS平台被OEM
得最广,在嵌入式领域应用最多(相对其它几种CPU而言)。甚至同一种MIPS芯片被不同
厂家封装再配上不同的芯片组。因此要为这些不同的MIPS平台分别编写不同的代码。
* 特殊结构代码:如多处理器支持等。其实每一种CPU都是十分特殊的,熟悉x86平台的
人都知道x86系列CPU着名的实模式与虚模式的区别,而在SPARC平台上根本就没有这个概
念。这就导致了很大的不同:PC机上的Linux在获得控制权后不久就开始切换到虚模式,
SPARC机器上则没有这段代码。又如电源管理的支持更是多种多样,不同的CPU有着不同
的实现方式(特殊的电源管理方式甚至被厂商标榜)。在这种情况下,除非放弃对电源
管理的支持,否则必须重写代码。
还有一部分代码量不多,但不能忽视的部分是在arch/xxx/mm/下的内存管理部分。
所有与平台相关的内存管理代码全部在这里。这部分代码完成内存的初始化和各种与内
存管理相关的数据结构的建立。Linux使用了基于页式管理的虚拟存储技术,而CPU发展
的趋势是:为了提高性能,实现内存管理的功能单元统统被集成到CPU中。因此内存管理
成为一个与CPU十分相关的工作。同时内存管理的效率也是最影响系统性能的因素之一。
内存可以说是计算机系统中最频繁访问的设备,如果每次内存访问时多占用一个时钟周
期,那就有可能将系统性能降低到不可忍受。在Linux系统里,不同平台上的内存管理代
码的差异程度是令人吃惊的,可以说是差异最大的。不同的CPU有不同的内存管理方式,
同一种CPU还会有不同的内存管理模式。Linux是从32位硬件平台上发展起来的操作系统
,但是现在已经有数种64位平台出现。在64位平台上,可用内存范围增大到原来的232倍
,其间差异可略窥一斑了。鉴于这部分代码的重要性和复杂性,移植工作在这里变得相
当谨慎。有些平台上甚至只是用最保守的内存管理模式。如在SPARC平台上的页面大小可
以是多种尺寸,为了简单和可靠起见,SPARC版的Linux只是用了8K页面这一种模式。这
一状况直到2.4版才得以改善。
除了上面所讲的之外,还有一些代码需要考虑,但相对来说次要一些。如浮点运算
的支持。较完美的做法是对FPU编程,由硬件完成浮点运算。但在某些时候,浮点并不重
要,甚至CPU根本就不支持浮点。这时候就可以根据需求来取舍。
对于内核移植的讨论到此为止。实际上,还有一些移植工作需要同时考虑,但很难
说这是属于内核范畴还是属于驱动程序范畴,比如说显示设备的支持,和内核十分相关
,但在逻辑上又不属于内核,并且在移植上也更像是驱动程序的开发。因此不在这里讨
论。
(2)系统移植
当内核移植完毕后,可以说所有的移植工作就已经完成大半了。就是说,当内核在
交叉编译成功后,加载到目标平台上正常启动,并出现类似VFS: Can抰 mount root fi
le system的提示时,则表示可以开始系统移植方面的工作了。系统移植实际上是一个最
小系统的重建过程。许多Linux爱好者有过建立Linux系统应急盘的经验,与其不同的是
,你需要使用目标平台上的二进制代码生成这个最小系统。包括:init、libc库、驱动
模块、必需的应用程序和系统配置脚本。一旦这些工作完成,移植工作就进入联调阶段
了。
一个比较容易的系统部分移植办法是:先着手建立开发平台上的最小系统,保证这
套最小系统在开发平台上正确运行。这样可以避免由于最小系统本身的逻辑错误而带来
的麻烦。由于最小系统中是多个应用程序相互配合工作,有时出现的问题不在代码本身
而在系统的逻辑结构上。
Linux系统移植工作至少要包括上述的内容,除此之外,有一些看不见的开发工作也
是不可忽视的,如某个特殊设备的驱动程序,为调试内核而做的远程调试工作等。另外
,同样的一次移植工作,显然符合最小功能集的移植和完美移植是不一样的;向16位移
植和向64位移植也是不一样的。
在移植中通常会遇见的问题是试运行时锁死或崩溃,在系统部分移植时要好办些,
因为可以容易地定位错误根源,而在核心移植时确实很让人头疼。虽然可以通过串口对
运行着的内核进行调试,但是在多任务情况下,有很多现象是不可重现的。又如,在初
始化的开始,很多设备还没法确定状态,甚至串口还没有初始化。对于这种情况没有什
么很好的解决办法,好的开发/仿真平台很重要,另外要多增加反映系统运行状态的调试
代码;再者要吃透硬件平台的文档。硬件平台厂商的专业支持也是很重要的。
还有一点很重要:Linux本身是基于GPL的操作系统,移植时,可以充分发挥GPL的优
势,让更多的爱好者参与进来,向共同的目标前进。

Ⅳ 编译基于linux内核2.6的驱动一定要在电脑上用2.6内核的操作系统吗

RH9 ?那你的升级还不如直接去作一个 LFS 。

内核驱动是要匹配内核版本的,而且要匹配小版本,2.6.9 、2.6.11 .2.6.2x (忘了具体版本)都有接口修改。最近内核接口变化非常大,很多驱动接口变动的都要修改驱动才能支持。

如果你真的想用 RH 升级,给你的升级路线是:
升级 moles-init-tools -> 升级内核
不过这样你的系统可能会有问题,一般用应该没问题,但驱动编译可能会过不去,或者就算编译成功,测试成功,也不能保证可以在别人的机器上使用。(因为编译驱动是和内核版本以及 gcc 版本相关的)
这样的话,你可能需要升级 glibc -> gcc ->binutils -> glibc -> gcc (这两个是在新环境重新编译)-> 重新编译内核 -> 升级或者重新编译基础软件环境 -> 重新编译全部系统。
大概全自动脚本协助的状态下(也就是说排除操作时的时间损耗,找资料的时间损耗)。大概需要 48 小时 - 72 小时吧。机器性能特别好,也需要大概 36 小时以上,之后因为你的 Linux 环境已经升级,你所有想安装的软件都要自己编译安装。

不过注意,RH9 自带的 gcc 是 3.x (好象是 3.2 ),现在 gcc 是 4.3 。其中加强了语法检查,以及别的东西。glibc 也跨过多个版本(RH9 好几年前的,真想不起来他是什么版本了。反正非常古老),可以说现在的程序接口,已经和过去不同了。
你用 RH9 开发,现在来说应该只有你自己的机器可以运行,换到别人的机器上,那就需要把别人的机器改回 RH9 (这在新计算机上面是不可能的,不兼容很多硬件的),并且根据你的升级去升级软件,才能使用。

当然,这里有个除非,除非你开发的驱动不是用在你当前的计算机上面,而是通过交叉编译而运行在另外一个系统上面,这样的话,只要你的交叉编译环境版本正确,那就没问题(不过我还是质疑这个交叉编译用的 gcc 和 binutils 能否在你的机器上面编译出来&运行。)
--------------------
RH4 是什么?比 RH9 还老的版本?
还是 RHEL 4 ?这个也不新。

理论上在开发板上面加载是和当前系统无关的,但你需要一个能在当前系统上面运行的交叉编译环境,用这个交叉编译环境来编译一个在你的目标 CPU、主板上目标内核兼容的驱动程序。

这个是嵌入式开发的基础知识,如果你连这个都不会,暂时不要看 Linux 驱动开发,先去看看“交叉编译程序”相关的信息。

因为 arm 上面的 CPU 指令架构与 x86 完全不同,所以这两个内核版本不同没有关系,只要是针对 arm 的内核&架构编写的驱动,并且用交叉编译器编译为 arm 的二进制指令,就能使用。

热点内容
安卓手机怎么转移苹果系统 发布:2024-09-17 04:19:07 浏览:934
sql从表中查询数据 发布:2024-09-17 04:19:07 浏览:972
米粒泥解压 发布:2024-09-17 04:19:01 浏览:729
2010word加密方法 发布:2024-09-17 04:17:36 浏览:282
crv哪个配置性价比高2021 发布:2024-09-17 04:07:51 浏览:36
wincc图形编译在哪里 发布:2024-09-17 03:58:26 浏览:978
androidubuntu 发布:2024-09-17 03:50:27 浏览:702
识梦源码 发布:2024-09-17 03:50:18 浏览:27
诺基亚密码忘了打什么电话 发布:2024-09-17 03:27:09 浏览:556
树深度优先算法 发布:2024-09-17 03:26:58 浏览:474