搭建Linux交叉编译开发环境_第1页
搭建Linux交叉编译开发环境_第2页
搭建Linux交叉编译开发环境_第3页
搭建Linux交叉编译开发环境_第4页
搭建Linux交叉编译开发环境_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二章搭建

Linux交叉编译开发环境

Crosscompilingenvironment什么是交叉编译呢?简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构〔Architecture〕和操作系统〔OperatingSystem〕。同一个体系结构可以运行不同的操作系统;同一个操作系统也可以在不同的体系结构上运行。2.1什么是交叉编译

2.2.1编译工具链以下是一个基于RedHatlinux的交叉编译环境的建立过程。整个编译过程包括:下载源文件、补丁和建立编译的目录;建立内核头文件;建立二进制工具〔binutils〕;建立初始编译器〔bootstrapgcc〕;建立c库(glibc);建立全套编译器〔fullgcc〕。2.2建立交叉编译开发工具链

需求:下载源文件、补丁和建立编译的目录

a,下载: b,建目录:将所有的源代码放到/usr/tmp/下; 交叉编译器将安装在/opt/host/armv5/

2.2建立交叉编译开发工具链

建立整个toolchain的步骤

2.2建立交叉编译开发工具链(1)Installingbinutils#cd/tmp#./configure--target=armv5-unknown-linux--prefix=/opt/host/armv5#make#makeinstall2.2建立交叉编译开发工具链注意:这样就在/opt/host/armv5/bin下产生了binutils,它们的作用如下:addr2line——将要找的地址转成文件和行号,它要使用debug信息。ar——产生、修改和解开一个存档文件。as——gnu的汇编器。2.2建立交叉编译开发工具链c++filt——C++和java中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,c++filt就是实现这种反向的转化,根据标号得到函数名。gasp——gnu汇编器预编译器。2.2建立交叉编译开发工具链ld——gnu的连接器。nm——列出目标文件的符号和对应的地址。objcopy——将某种格式的目标文件转化成另外格式的目标文件。objdump——显示目标文件的信息。2.2建立交叉编译开发工具链ranlib——为一个存档文件产生一个索引,并将这个索引存入存档文件中。readelf——显示elf格式的目标文件的信息。size——显示目标文件各个节的大小和目标文件的大小。strings——打印出目标文件中可以打印的字符串,有个默认的长度,为4。strip——剥掉目标文件的所有的符号信息。2.2建立交叉编译开发工具链〔2〕输出工具的路径,使得以后的编译工作能看到这些工具: #exportPATH=/opt/host/armv5/bin:$PATH2.2建立交叉编译开发工具链〔3〕建立编译需要使用的头文件#cd/tmpac9-rmk1-np12.2建立交叉编译开发工具链##gzip-cdpatch-2.4.9-ac9.gz|patch-p1:AlanCoxpatch#bzip2-cdpatch-2.4.9-ac9-rmk1.bz2|patch-p1:RussellKingpatch#gzip-cddiff-2.4.9-ac9-rmk1-np1.gz|patch-p1:NicholasPitrepatch#makemenuconfig:DotocreateARMheaderfiles.Whenyouexit,selectsaveitem.#makedep:Alsodotocreateheaderfiles.#cd/opt/host/armv4l/armv4l-unknown-linux#cdinclude:Ifnotexisting,makeincludedirectory.#cp-a/usr/include/*.:Copyallheaderfilesunder/usr/includedirtothecurrentdir.注意:要把linux的头文件拷做来作为编译的头文件的原因是,我们要编译的是给ARM处理器使用的编译器,那么就需要一个用于ARM处理器的Linux内核系统的头文件〔4〕编译ARM-GCC交叉编译器##./configure--target=armv4l-unknown-linux--prefix=/opt/host/armv4l#makeLANGUAGES=c#makeLANGUAGES=cinstall注意:gcc——gnu的C语言编译器。unprotoize——将ANSIC的源码转化为K&RC的形式,去掉函数原型中的参数类型。cpp——gnu的C的预编译器。gcov——gcc的辅助测试工具,可以用它来分析和优化程序。2.2建立交叉编译开发工具链建立c库(glibc)

#cd/tmp2.2建立交叉编译开发工具链#CC=armv5-unknown-linux-gcc./configurearm-linux--enable-add-ons--build=i686-pc-linux-gnu--disable-iconv--prefix=/opt/host/armv4l#make#makeinstall2.2建立交叉编译开发工具链注意:glibc主要是程序运行所需要的库函数的集合,包括输入输出,数学,io控制等等2.2建立交叉编译开发工具链 〔6〕安装g++#./configure--target=armv4l-unknown-linux--with-libs=/opt/host/armv4l/lib--with-headers=/opt/host/armv4l/include--prefix=/opt/host/armv4l#makeLANGUAGES="cc++"#makeLANGUAGES="cc++"install2.2建立交叉编译开发工具链注意:g++——gnu的c++编译器。protoize——与unprotoize相反,将K&RC的源码转化为ANSIC的形式,函数原型中参加参数类型。c++——gnu的c++编译器。2.2建立交叉编译开发工具链2.2.2下载工具链这里主要介绍一下Denx公司发布的一整套开放源码的嵌入式Linux开发工具链——ELDK〔EmbeddedLinuxDevelopmentKit〕ELDK可以安装和运行在以下主机环境中:FedoraCore1,2,3RedHatLinux7.3,8.0,9SuSELinux8.x,9.0,9.1,9.22.2建立交叉编译开发工具链Debian3.0(Woody)andtesting(Sarge)Ubuntu4.10FreeBSD5.0SuseLinux7.2,7.3Mandrake8.2Slackware8.1beta2GentooLinux1.4_rc2ELDK同时支持ARM、PPC、MIPS等多种处理器。2.2建立交叉编译开发工具链 ELDK包括了一个安装工具和许多RPM包,他们可以安装到用户的交叉编译的主机的硬盘中。ELDK的RPM包可以分为2种:嵌入式Linux开发工具;为目标处理器编译好的工具和元件。其中,第一局部包括执行在开发主机上的交叉编译工具,有GNU交叉编译器GCC、Binutils和GDB等。第二局部是一些已经编译好的、可以在目标开发板上运行的工具和库。这些工具和库可以用来建立一个Linux的Roofs文件系统。2.2建立交叉编译开发工具链2.2.3验证工具链 注意: 通过上述两种方式建立的工具链,还需要经过验证方可使用,我们主要通过实际编译一个例子程序来验证。2.2建立交叉编译开发工具链在嵌入式软件开发过程中,有些主机效劳是必要的,同时也会为我们的开发工作带来便利。这里主要介绍四种主机效劳:samba、DHCP、TFTP和NFS。

2.3配置主机效劳

2.3.1配置sambaSamba效劳使Linux和Windows之间实现文件共享,方便对文件的编辑。 1) 修改samba配置文件/etc/samba/smb.conf 2) 为Samba创立一个单独的口令文件。要根据你的现存/etc/passwd文件来创立 3) 改变Samba口令文件的权限许可,因此只有根用户才有读写权限

2.3配置主机效劳

4) 要设置每个Samba用户的口令,使用以下命令〔把username替换为每个用户的用户名〕 5) 加密口令必须在Samba配置文件中被启用 6) 在shell提示下键入servicesmbrestart来确定smb效劳被启动 7) 为防止每次启动主机都要手工启动samba效劳,使用命令使得samba效劳在每次系统启动时都默认执行

2.3配置主机效劳

2.3.2配置DHCPDHCP是动态主机配置协议。这个协议用于向计算机自动提供IP地址,子网掩码和路由信息。在开发的过程中,目标系统并没有自己的静态IP地址,它是在启动时向DHCP效劳器申请,因此需要在主机上配置DHCP效劳,以便在目标系统请求IP时,动态为它分配IP地址。DHCP效劳的配置文件为/etc/dhcpd.conf,通过修改该文件进行配置。etc/dhcpd.conf通常包括三局部:parameters、declarations、option。

2.3配置主机效劳

(1) DHCP配置文件中的parameters〔参数〕:说明如何执行任务,是否要执行任务,或将哪些网络配置选项发送给客户 (2) DHCP配置文件中的declarations〔声明〕:用来描述网络布局、提供客户的IP地址等 (3) DHCP配置文件中的option〔选项〕:用来配置DHCP可选参数,全部用option关键字作为开始

2.3配置主机效劳

重新启动dhcp效劳为防止每次启动主机都要手工启动dhcp效劳,使用命令使得dhcp效劳在每次系统启动时都默认执行

2.3配置主机效劳

2.3.3配置TFTP 在目标系统的开发过程中,Linux内核是从主机下载到目标系统上解压并运行的,因此主机必须提供这种文件传输效劳。Tftp是一种简单的文件传输协议,多用于嵌入系统应用中,因此主机需要配置tftp效劳,供下载内核时使用

2.3配置主机效劳

修改配置参数在主机上创立/tftpboot目录,以供存放内核重新启动tftp效劳为防止每次启动主机都要手工启动tftp效劳,使用命令使得tftp效劳在每次系统启动时都默认执行

2.3配置主机效劳

2.3.4配置NFS 网络文件系统〔NFS〕是一种在网络上的机器间共享文件的方法,在开发的过程中,目标系统没有足够的本地存储设备供使用,它可以通过主机提供的NFS效劳,使用在主机上的文件系统,就如同位于本地硬盘驱动器上一样

2.3配置主机效劳

修改NFS配置文件 注意: 上面格式表示,同一共享目录提供给两个不同的主机,但提供给这两台主机的权限和参数可以是不同的。可以设定的参数主要有以下几种:

2.3配置主机效劳

rw:可读写的权限;ro:只读的权限;root_squash:root用户的所有请求映射成如anonymous用户一样的权限〔默认〕;no_root_squash:保存共享文件的UID和GID〔默认〕;all_squash:共享文件的UID和GID映射匿名用户anonymous,适合公用目录;

2.3配置主机效劳

no_all_squash:保存共享文件的UID和GID〔默认〕;sync:资料同步写入到内存与硬盘当中;async:资料会先暂存于内存当中,而非直接写入硬盘;secure

:NFS通过1024以下的平安TCP/IP端口发送;insecure:NFS通过1024以上的端口发送;hide

:在NFS共享目录中不共享其子目录;no_hide

:共享NFS目录的子目录

2.3配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论