百科狗-知识改变命运!
--

Linux下的交叉编译环境设置

小肉包1年前 (2023-12-19)阅读数 7#综合百科
文章标签操作系统系统

采用交叉编译的主要原因在于,多数嵌入式目标系统不能提供足够的资源供编译过程使用,因而只好将编译工程转移到高性能的主机中进行。

linux下的交叉编译环境重要包括以下几个部分:

1.对目标系统的编译器gcc

2.对目标系统的二进制工具binutils

3.目标系统的标准c库glibc

4.目标系统的linux内核头文件

交叉编译环境的建立步骤

一、下载源代码 下载包括binutils、gcc、glibc及linux内核的源代码(需要注意的是,glibc和内核源代码的版本必须与目标机上实际使用的版本保持一致),并设定shell变量PREFIX指定可执行程序的安装路径。

二、编译binutils 首先运行configure文件,并使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,然后执行make install。

三、配置linux内核头文件

首先执行make mrproper进行清理工作,然后执行make config ARCH=arm(或make menuconfig/xconfig ARCH=arm)进行配置(注意,一定要在命令行中使用ARCH=arm指定cpu架构,因为缺省架构为主机的cpu架构),这一步需要根据目标机的实际情况进行详细的配置,笔者进行的实验中目标机为HP的ipaq-hp3630 PDA,因而设置system type为SA11X0,SA11X0 Implementations中选择Compaq iPAQ H3600/H3700。

配置完成之后,需要将内核头文件拷贝到安装目录: cp -dR include/asm-arm $PREFIX/arm-linux/include/asm cp -dR include/linux $PREFIX/arm-linux/include/linux

四、第一次编译gcc

首先运行configure文件,使用--prefix=$PREFIX参数指定安装路径,使用--target=arm-linux参数指定目标机类型,并使用--disable-threads、--disable-shared、--enable-languages=c参数,然后执行make install。这一步将生成一个最简的gcc。由于编译整个gcc是需要目标机的glibc库的,它现在还不存在,因此需要首先生成一个最简的gcc,它只需要具备编译目标机glibc库的能力即可。

五、交叉编译glibc

这一步骤生成的代码是针对目标机cpu的,因此它属于一个交叉编译过程。该过程要用到linux内核头文件,默认路径为$PREFIX/arm-linux/sys-linux,因而需要在$PREFIX/arm-linux中建立一个名为sys-linux的软连接,使其内核头文件所在的include目录;或者,也可以在接下来要执行的configure命令中使用--with-headers参数指定linux内核头文件的实际路径。

configure的运行参数设置如下(因为是交叉编译,所以要将编译器变量CC设为arm-linux-gcc): CC=arm-linux-gcc ./configure --prefix=$PREFIX/arm-linux --host=arm-linux --enable-add-ons 最后,按以上配置执行configure和make install,glibc的交叉编译过程就算完成了,这里需要指出的是,glibc的安装路径设置为$PREFIXARCH=arm/arm-linux,如果此处设置不当,第二次编译gcc时可能找不到glibc的头文件和库。

六、第二次编译gcc

运行configure,参数设置为--prefix=$PREFIX --target=arm-linux --enable-languages=c,c++。

运行make install。

到此为止整个交叉编译环境就完全生成了。

几点注意事项

第一点、在第一次编译gcc的时候可能会出现找不到stdio.h的错误,解决办法是修改gcc/config/arm/t-linux文件,在TARGET_LIBGCC2_CFLAGS变量的设定中增加-Dinhibit_libc和-D__gthr_posix_h。

linux系统调用 shell命令 c库函数怎么区分

目前为止应用在手机上的操作系统主要有PalmOS、SymbianOS、WindowsMobile、、MacOS、Android、HopenOS和LinuxOS,WinowsPhone等9种。

Android以Java为编程语言,从接口到功能,都有层出不穷的变化,其中Activity等同于J2ME的MIDlet,一个Activity类(class)负责创建视窗(window),一个活动中的Activity就是在foreground(前景)模式,背景运行的程序叫做Service。两者之间通过由和AIDL连结,达到复数程序同时运行的效果。如果运行中的Activity全部画面被其他Activity取代时,该Activity便被停止(stopped),甚至被系统清除(kill)。

View等同于J2ME的Displayable,程序人员可以通过View类与“XMLlayout”档将UI放置在视窗上,Android1.5的版本可以利用View打造出所谓的Widgets,其实Widget只是View的一种,所以可以使用xml来设计layout,HTC的AndroidHero手机即含有大量的widget。至于ViewGroup是各种layout的基础抽象类(abstractclass),ViewGroup之内还可以有ViewGroup。View的构造函数不需要再Activity中调用,但是Displayable的是必须的,在Activity中,要通过()来从XML中取得View,Android的View类的显示很大程度上是从XML中读取的。View与事件(event)息息相关,两者之间通过Listener结合在一起,每一个View都可以注册一个eventlistener,例如:当View要处理用户触碰(touch)的事件时,就要向Android框架注册View.。另外还有Image等同于J2ME的BitMap。

操作系统与应用程序的沟通桥梁,应用分为两层:函数层(Library)和虚拟机(VirtualMachine)。Bionic是Android改良libc的版本。Android同时包含了Webkit,所谓的Webkit就是AppleSafari浏览器背后的引擎。Surfaceflinger是就2D或3D的内容显示到屏幕上。Android使用工具链(Toolchain)为Google自制的BionicLibc。

Android采用OpenCORE作为基础多媒体框架。OpenCORE可分7大块:PVPlayer、PVAuthor、Codec、PacketVideoMultimediaFramework(PVMF)、OperatingSystemLibrary(OSCL)、Common、OpenMAX。

Android使用skia为核心图形引擎,搭配OpenGL/ES。skia与LinuxCairo功能相当,但相较于LinuxCairo,skia功能还只是雏形的。2005年Skia公司被Google收购,2007年初,SkiaGL源码被公开,到目前为止Skia也是GoogleChrome的图形引擎。

Android的多媒体数据库采用SQLite数据库系统。数据库又分为共用数据库及私用数据库。用户可通过类(Column)取得共用数据库。

Android的中间层多以Java实现,并且采用特殊的Dalvik虚拟机(DalvikVirtualMachine)。Dalvik虚拟机是一种“暂存器型态”(RegisterBased)的Java虚拟机,变量皆存放于暂存器中,虚拟机的指令相对减少。

Dalvik虚拟机可以有多个实例(instance),每个Android应用程序都用一个自属的Dalvik虚拟机来运行,让系统在运行程序时可达到优化。Dalvik虚拟机并非运行Java字节码(Bytecode),而是运行一种称为.dex格式的文件。

Android的HAL(硬件抽像层)是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Androidframework与Linuxkernel隔开,让Android不至过度依赖Linuxkernel,以达成kernelindependent的概念,也让Androidframework的开发能在不考量驱动程序实现的前提下进行发展。

HALstub是一种代理人(proxy)的概念,stub是以*.so档的形式存在。Stub向HAL“提供”操作函数(operations),并由Androidruntime向HAL取得stub的operations,再callback这些操作函数。HAL里包含了许多的stub(代理人)。Runtime只要说明“类型”,即moleID,就可以取得操作函数。

Android是运行于Linuxkernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNUGPL授权证所约束的部份,例如Android将驱动程序移到userspace,使得Linuxdriver与Linuxkernel彻底分开。bionic/libc/kernel/并非标准的kernelheaderfiles。Android的kernelheader是利用工具由Linuxkernelheader所产生的,这样做是为了保留常数、数据结构与宏。

到目前为止Android的Linuxkernel控制包括安全(Security),存储器管理(MemoryManagement),程序管理(ProcessManagement),网络堆栈(NetworkStack),驱动程序模型(DriverModel)等。下载Android源码之前,先要安装其构建工具Repo来初始化源码。Repo是Android用来辅助Git工作的一个工具。

很多玩家用户可能会奇怪:“为什么Android会用甜点作为它们系统版本的代号?”这个命名方法开始于Andoird1.5发布的时候。作为每个版本代表的甜点的尺寸越变越大,然后按照26个字母数序:纸杯蛋糕,甜甜圈,松饼,冻酸奶,姜饼,蜂巢。在Symbian发展阶段,出现了三个分支:分别是Crystal、Pearl和Quarz。前两个主要针对通讯器市场,也是出现在手机上最多的,是今后智能手机操作系统的主力军。第一款基于Symabian系统的手机是2000年上市的某款爱立信手机。而真正较为成熟的同时引起人们注意的则是2001年上市的诺基亚9210,它采用了Crystal分支的系统。而2002年推出的诺基亚7650与3650则是SymbianPearl分系的机型,其中7650是第一款基于2.5G网的智能手机产品,他们都属于Symbian的6.0版本。索尼爱立信推出的一款机型也使用了Symbian的Pearl分支,版本已经发展到7.0,是专为3G网络而开发的,可以说代表了当今最强大的手机操作系统。此外,Symbian从6.0版本就开始支持外接存储设备,如MMC,CF卡等,这让它强大的扩展能力得以充分发挥,使存放更多的软件以及各种大容量的多媒体文件成为了可能。

Symbian按版本来分,继2005年二月Symbian推出一款新的手机操作系统软件OSv9.0,到目前为止已先后有了6.0、6.1、7.0、7.0s、8.0、9.0几种版本。1999年3月Symbian推出了Symbian5.0操作系统,它的主要内核集合了网络,无线文字,电子邮件,名片薄以及个人信息助理,同时还具有支持标准网络页面的浏览器,配合java语言的支持,使得Symbian可以运行小型的应用程序。不过这个版本采用的机型甚少,基本上与EPOC没有太多的差别。

Symbian6.0则在5.0的基础上增加了,GPRS、WAP1.2浏览器以及蓝牙技术的支持,用户可以运行第三方基于C和J2ME开发的程序。而Symbian6.1则是和Symbian6.0相比主要增加了对USB的支持。Symbian6.0的主要特点是:支持语音通话和数据通信,支持Bluetooth和WAP,配备安全性功能(SSL,HTTPS,WTLS),采用16bitUnicode,支持多语言显示,采用“3.0”和“JavaPhone1.0”。

Symbian7.0则支持多模式和3G手机(专区),可以让制造商们可以面向全世界推出可以运行于所有网络之上的SymbianOS手机,而且可以不对代码进行重大改动的情况下就可以重新使用许多到目前为止已有的软件应用。7.0包含一些新的通讯、消息、联网和应用开发技术,并对一些与安全和认证相关的功能进行了改进。SymbianOS7.0的其他功能包括:支持灵活的用户界面,例如Nokia的Series60;支持几种音频/图像格式和许多面向游戏开发人员的API;全力的加密和认证管理,基于安全通讯协议(包括HTTPS、WTLS和SSL)及认证的应用安装;和Over-the-air(OTA)SyncML同步支持。

2004年2月,Symbian在授权LG等公司的时候,发布了Symbian8.0版本。该版本改善了实时系统性能,提高了原有操作系统的兼容能力。此外,SymbianOS8.0的软件工具改进了远程接入控制系统功能,运用调节装置消除手机用户使用增值服务时会受到的干扰。这个系统包含了绝对现代化的多媒体和Java设备,支持多种标准,其中包括JSR118,CLDC1.1(JSR139),MobileMedia(JSR135),3D图像数据(JSR184),JTWI1.0c(JSR185)。最后,新版OS还支持SDIO。

2005年二月,英国著名手机软件制造商Symbian推出一款新的手机操作系统软件OSv9.0,它支持更高像素数码相机与三维游戏动画。该操作系统软件对运行环境要求较高,到目前为止运行在由英国芯片开发商ARM提供的快速处理器芯片,并且需要相关设计与其它工具的支持来帮助手机生产商在开发其它版本时能够节约时间和降低成本。该软件可以处理200万像素的数字,甚至能够向无线耳机传送立体声音乐,更可喜的是,它不需要同步软件就能够从PC上导出MP3文件。

Series60是智能手机中应用最广泛的系统版本。Series60系统还分为6.0OS、7.0OS和8.0OS三个版本。区别Series60的最直观因素在于屏幕的分辨率,Series60支持的分辨率为176*208像素,但以后S60还会支持240*320像素、352*416像素等。S60是拥有最多第三方软件或游戏的界面。

识别Series80界面最简单的办法就是看手机是否支持全键盘,例如诺基亚高端系列的9210、9300甚至9500,都采用全键盘的。识别Series90的最简便方法是:会采用触摸屏幕,分辨率也高达640*320像素。Series90应该是手机游戏、娱乐的最强平台,但因为采用Series90界面的手机型号太少,第三方软件的支持很少,所以S60依旧是玩家首选。

S40或S60是指诺基亚手机的上层平台。S60都是智能手机,所用底层操作系统是Symbian。诺基亚128*128屏幕都是S401.0。而128*160是S402.0。

另外S40中,3100支持javaMIDP1.0,所以最大支持64KB的java;6230支持javaMIDP2.0,所以最大支持128KB的java40和60,包括90,还有以前的30,都是针对与nokia不同的操作系统而言40,是nokia自行研制的手机操作系统,面对于中低端客户,支持kjava的开发,其处理器效率不高,内存偏低,屏幕大小128*128。

S60,是基于Symbian操作系统,也就是以前的epoc,其处理器为arm9,处理效率很高,内存颇大,屏幕大小为208*176同时支持kjava和C的开发90,属于手持式设备,也是Symbian操作系统但是功能强劲,等同于一个PDA了。

其实技术来上说,S40跟S60是区别在系统平台上,就好像WIN98跟WIN2000,但手机不像PC,屏幕大小的确是个关口,以致于平台不容易做到向下兼容,但有的游戏也同样做出不同版本来的。

S40比S60不单单是屏幕上的差距,更大的是性能上的差距,一般来说,S60开发出来的游戏质量都比S40高好多,但可惜,S60比S40的机子又贵上了很多。由于Linux具有源代码开放、软件授权费用低、应用开发人才资源丰富等优点,便于开发个人和行业应用。这一特点非常重要,因为丰富的应用是智能手机的优越性体现和关键卖点所在。从应用开发的角度看,由于Linux的源代码是开放的,有利于独立软件开发商(ISV)开发出硬件利用效率高、功能更强大的应用软件,也方便行业用户开发自己的安全、可控认证系统。

采用Linux操作系统的理由是降低智能手机的生产成本。Linux开发起来最大的特点是从根本上开放源代码,与其他系统相比,采用开放源代码的Linux手机操作系统能够大大降低成本。而且开放源代码还有一个好处是允许手机制造商根据实际情况,有针对性地开发适合自己手机的Linux操作系统,这样既能让自己的产品有特色,又能避免受制于人,还能够满足用户多方面的应用。手机的应用就由通话和简单的邮件传输,发展到Web浏览和拍照摄影,照片编辑,动画播放等多个方面,这样一来,手机软件的开发规模是5倍以上。基于这个原因,开发LinuxOS,开发者教育等各方面的成本就削减了不少,从而上市的产品便会更具竞争力。

Linux操作系统在使用中的优点也是十分明显的。首先,对于消费来说,采用的应用于智能手机上的Linux操作系统和我们常说的应用于电脑上的Linux操作系统是一个系统,而且都是全免费操作系统。在操作系统上的免费,就等于节省了产品的生产成本,附加到消费者身上的也就少了,给大家带来了实惠。Linux操作系统系统资源占用率较低,而且性能比较稳定,这都是大家公认的。使用起来能带来急速体验,在同硬件配置上,能获得其他智能手机操作系统得不到的快乐。如果以Linux平台的系统资源占用程度同体积庞大。

早在2000年,韩国公司Palm就推出了第一台采用Linux的Tynux手机。2003年1月,NEC宣布将在其手机中使用Linux操作系统,代表着Linux成功进军手机领域。摩托罗拉A760却抢现发布抢先,进入市场,抢了NEC头筹,随后,采用Linux手机智能系统得手机开始多起来了,韩国手机巨头三星,LG也先后加入了Linux手机智能系统阵营。就国产手机而言,各大国内厂商推出智能手机开始升温到已经进入一个飞速发展的阶段。

列入国家863计划的中兴智能手机e3的推出,代表着国产手机在Linux智能手机上的最高成就。国产手机能否借Linux打个翻身仗,还是个疑问。支持LINUX操作系统的机型:摩托罗拉A768I、摩托罗拉A780、飞利浦968、海尔N60、中兴E3。

由于智能手机结合了强大的硬件运行能力以及开放的软件操作系统,因此无论是娱乐还是商务应用,智能手机的功能都能够在强大的第三方软件的支持下获得无限的扩展。因此,在未来的手机市场上,智能手机将引领整个手机发展的潮流,而不是局限于高端手机。手机未来的趋势是开放系统会逐步地挤掉封闭系统和专有系统。WindowsMobile包括PocketPC、SmartPhone以及PocketPCPhone三大平台体系,WindowsMobile具有录音、音视频播放等多媒体功能。由于大多数机型支持彩色显示,因此耗电量极大,并且由于WindowsCE本身对于资源的巨大吞噬作用,所以在能耗方面WindowsCE系统要明显逊于Palm操作系统。在功能扩展方面微软比较倾向于集成使用,用户可以根据自己的需要增加内存、摄像头、调制解调器等设备。

针对中国用户而言,WindowsMoblie的中文操作系统已经比较成熟。到目前为止,摩托罗拉、ARM、ST、NeoMagic、德州仪器、Intel、三星、现代都已经生产了针对该系统的处理器;有数十家制造商生产基于Smartphone和PocketPC技术的移动设备,有35家运营商分销这些产品。

SmartPhone手机源于WindowsMobile家族,WindowsMobile家族主要包括PocketPC、PocketPCPhoneEdition、Smartphone、PortableMediaCenter这4个系列产品。

Linux下的交叉编译环境设置

为了积极进入更加广阔的移动通信市场,微软把在PDA市场所使用的PocketPC操作系统,改良加入电话的功能,成为新型的PocketPCPhone,并在2002年时积极的向手机市场迈进,推出基于Smartphone的手机系统。

虽然Smartphone和PocketPCPhone手机都是基于微软WindowsCE系统的产品,由于在基本设计出发点不同,所以操作、应用程序上也有所不同。它们的软件不能通用,操作上PPC手机一般是采用触摸屏操作,而Smartphone手机只能使用手机的按键来操作。

虽然PPC手机的功能十分强大,但由于它高昂的价格和硕大的体积不是每个用户都能够认可的,SmartPhone的出现就是为了让智能手机更加大众化,以类似于普通手机的体积和相对低廉的价格使用户感受到智能手机给我们到来的便利,当然也为微软公司获得更多的利润。

Smartphone手机中使用的操作系统有和两个版本,这两个版本实质上并没有太大的变化,只是2003系统增加了对新硬件技术的支持,就像Windows2000和XP这种版本的升级相似。到目前为止我们市场上出售的的SmartPhone手机主要是采用的操作系统。BlackBerry.是一种领先的无线解决方案,可供移动专业人员用来实现与客户、同事和业务运作所需的信息连接。这是一种经证明有效的优秀平台,它为世界各地的移动用户提供了与大量业务信息和通信的安全的无线连接。

电子邮件-BlackBerry安全无线延伸移动商业用户其的企业电子邮件帐户、即使他们在办公室外、也可轻松处理电邮、就像从没有离开办公桌。用户可以在旅途中发送、接收、归档和删除邮件、并阅读电邮附件、支持格式:如Microsoft.Word、、.、Adobe.PDF、Corel.WordPerfect.、HTML和ASCII)。BlackBerry解决方案的“始终在线”推入技术可以自动传递电邮、用户不需要执行任何操作就可接收通信。HOPEN产品解决方案——智能手机,HMAP(HopenMobileApplicationPlatform)是基于嵌入式实时操作系统的智能手机解决方案,可以广泛应用于普通手机、PDA手机、智能手机、远程信息处理等无线终端设备。

首先,命令应该是好和其他两个区分开来的了,因为命令都是可以直接敲在shell上面回车执行的,而系统调用和库函数都不行;

其次,Linux系统调用和C库函数都是函数的形式,即都是“func(args)”的形式,但系统调用是

由系统内核对外提供的服务接口;C库函数和你自己写的普通的函数没有本质的区别,只是在C标准库中而已,Linux上面glibc就是C函数库。从表面上看两者不太好区分,不过,你可以从它们需要包含的头文件来区分,C库函数像printf在中,std就是标准(standard)的缩写形式,因此在中的函数,基本都是C库函数;像 ssize_t read(int fd, void *buf, size_t count);这样很多的系统调用是包含在中的,unistd意思是UNIX Standard,从这个意义就可以区分了。

希望对你有所帮助,如还有问题,可随时联系我:-)

鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com

免责声明:我们致力于保护作者版权,注重分享,当前被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理!邮箱:344225443@qq.com)

图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

内容声明:本文中引用的各种信息及资料(包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主体(包括但不限于公司、媒体、协会等机构)的官方网站或公开发表的信息。部分内容参考包括:(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供参考使用,不准确地方联系删除处理!本站为非盈利性质站点,本着为中国教育事业出一份力,发布内容不收取任何费用也不接任何广告!)