搭建Linux交叉编译开发环境

上传人:张姑****py 文档编号:243434758 上传时间:2024-09-23 格式:PPT 页数:40 大小:142.50KB
返回 下载 相关 举报
搭建Linux交叉编译开发环境_第1页
第1页 / 共40页
搭建Linux交叉编译开发环境_第2页
第2页 / 共40页
搭建Linux交叉编译开发环境_第3页
第3页 / 共40页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第二章 搭建,Linux,交叉编译开发环境,Cross compiling environment,什么是交叉编译呢?简单地说,就是在一个平台上生成另一个平台上的可执行代码。这里需要注意的是所谓平台,实际上包含两个概念:体系结构(,Architecture,)和操作系统(,Operating System,)。同一个体系结构可以运行不同的操作系统;同一个操作系统也可以在不同的体系结构上运行。,2.1,什么是交叉编译,2.2.1,编译工具链,以下是一个基于,RedHat linux,的交叉编译环境的建立过程。,整个编译过程包括:,下载源文件、补丁和建立编译的目录;,建立内核头文件;,建立二进制工具(,binutils,);,建立初始编译器(,bootstrap gcc,);,建立,c,库,(glibc),;,建立全套编译器(,full gcc,)。,2.2,建立交叉编译开发工具链,需求:下载源文件、补丁和建立编译的目录,a,下载:,binutils-2.11.2.tar, diff-2.4.9-ac9-rmk1-np1, gcc-2.95.3.tar, glibc-2.2.4.tar, glibc-linuxthreads-2.2.4.tar, linux-2.4.9.tar, patch-2.4.9-ac9, patch-2.4.9-ac9-rmk1, patch-2.4.9-ac9-rmk2,b,建目录:将所有的源代码放到/,usr/tmp/,下;,交叉编译器将安装在/,opt/host/armv5/,2.2,建立交叉编译开发工具链,建立整个,tool chain,的步骤,2.2,建立交叉编译开发工具链,(1) Installing binutils,# cd /tmp,# tar zxvf binutils-2.11.2.tar.gz,# cd binutils-2.11.2,# ./configure -target=armv,5,-unknown-linux -prefix=/opt/host/armv,5,# make,# make install,2.2,建立交叉编译开发工具链,注意:这样就在,/,opt/host/armv,5,/bin,下产生了,binutils,,它们的作用如下:,addr2line,将要找的地址转成文件和行号,它要使用,debug,信息。,ar,产生、修改和解开一个存档文件。,asgnu,的汇编器。,2.2,建立交叉编译开发工具链,c+filtC+,和,java,中有一种重载函数,所用的重载函数最后会被编译转化成汇编的标号,,c+filt,就是实现这种反向的转化,根据标号得到函数名。,gaspgnu,汇编器预编译器。,2.2,建立交叉编译开发工具链,ldgnu,的连接器。,nm,列出目标文件的符号和对应的地址。,objcopy,将某种格式的目标文件转化成另外格式的目标文件。,objdump,显示目标文件的信息。,2.2,建立交叉编译开发工具链,ranlib,为一个存档文件产生一个索引,并将这个索引存入存档文件中。,readelf,显示,elf,格式的目标文件的信息。,size,显示目标文件各个节的大小和目标文件的大小。,strings,打印出目标文件中可以打印的字符串,有个默认的长度,为,4,。,strip,剥掉目标文件的所有的符号信息。,2.2,建立交叉编译开发工具链,(2)输出工具的路径,使得以后的编译工作能看到这些工具:,# export PATH=/opt/host/armv,5,/bin:$PATH,2.2,建立交叉编译开发工具链,(3)建立编译需要使用的头文件,# cd /tmp,# tar zxvf linux-2.4.9.tar.gz,# mv linux linux-2.4.9-ac9-rmk1-np1,# mv patch-2.4.9-ac9.gz patch-2.4.9-ac9-rmk1.bz2 diff-2.4.9-ac9-rmk1-np1.gz ./linux-2.4.9-,ac9-rmk1-np1,2.2,建立交叉编译开发工具链,#,cd linux-2.4.9-ac9-rmk1-np1 : kernel 2.4.9,# gzip -cd patch-2.4.9-ac9.gz | patch -p1 : Alan Cox patch,# bzip2 -cd patch-2.4.9-ac9-rmk1.bz2 | patch -p1 : Russell King patch,# gzip -cd diff-2.4.9-ac9-rmk1-np1.gz | patch -p1 : Nicholas Pitre patch,# make menuconfig : Do to create ARM header files. When you exit, select save item.,# make dep : Also do to create header files.,#,cd /opt/host/armv4l/armv4l-unknown-linux,# cd include : If not existing, make include directory.,# cp -a /usr/include/* . : Copy all header files under /usr/include dir to the current dir.,# ln -s /tmp/linux-2.4.9-ac9-rmk1-np1/include/asm-arm asm,# ln -s /tmp/linux-2.4.9-ac9-rmk1-np1/include/linux linux,注意:要把,linux,的头文件拷做来作为编译的头文件的原因是,我们要编译的是给,ARM,处理器使用的编译器,那么就需要一个用于,ARM,处理器的,Linux,内核系统的头文件,(4)编译,ARM-GCC,交叉编译器,#,cd gcc-2.95.3,# ./configure -target=armv4l-unknown-linux -prefix=/opt/host/armv4l,# make LANGUAGES=c,# make LANGUAGES=c install,注意:,gccgnu,的,C,语言编译器。,unprotoize,将,ANSI C,的源码转化为,K&R C,的形式,去掉函数原型中的参数类型。,cppgnu,的,C,的预编译器。,gcovgcc,的辅助测试工具,可以用它来分析和优化程序。,2.2,建立交叉编译开发工具链,建立,c,库,(glibc),#,cd /tmp,# tar zxvf glibc-2.2.4.tar.gz,# mv glibc-linuxthreads-2.2.4.tar.gz ./glibc-2.2.4,# cd glibc-2.2.4,# tar zxvf glibc-linuxthreads-2.2.4.tar.gz,2.2,建立交叉编译开发工具链,# CC=armv,5,-unknown-linux-gcc ./configure arm-linux -enable-add-ons,-build=i686-pc-linux-gnu -disable-iconv,-with-headers=/tmp/linux-2.4.9-ac9-rmk1-np1/include,-prefix=/opt/host/armv4l,# make,# make install,2.2,建立交叉编译开发工具链,注意:,glibc,主要是程序运行所需要的库函数的集合,包括输入输出,数学,,io,控制等等,2.2,建立交叉编译开发工具链,(6),安装,g+,# cd /tmp/gcc-2.95.3,# ./configure -target=armv4l-unknown-linux,-with-libs=/opt/host/armv4l/lib,-with-headers=/opt/host/armv4l/include,-prefix=/opt/host/armv4l,# make LANGUAGES=c c+,# make LANGUAGES=c c+ install,2.2,建立交叉编译开发工具链,注意:,g+gnu,的,c+,编译器。,protoize,与,unprotoize,相反,将,K&R C,的源码转化为,ANSI C,的形式,函数原型中加入参数类型。,c+gnu,的,c+,编译器。,2.2,建立交叉编译开发工具链,2.2.2,下载工具链,这里主要介绍一下,Denx,公司发布的一整套开放源码的嵌入式,Linux,开发工具链,ELDK,(,Embedded Linux Development Kit,),ELDK,可以安装和运行在以下主机环境中:,Fedora Core 1, 2 , 3,Red Hat Linux 7.3, 8.0, 9,SuSE Linux 8.x, 9.0, 9.1, 9.2,2.2,建立交叉编译开发工具链,Debian 3.0 (Woody) and testing (Sarge),Ubuntu 4.10,FreeBSD 5.0,Suse Linux 7.2, 7.3,Mandrake 8.2,Slackware 8.1beta2,Gentoo Linux 1.4_rc2,ELDK,同时支持,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,配置,samba,Samba,服务使,Linux,和,Windows,之间实现文件共享,方便对文件的编辑。,1),修改,samba,配置文件,/etc/samba/smb.conf,2),为,Samba,创建一个单独的口令文件。要根据你的现存,/etc/passwd,文件来创建,3),改变,Samba,口令文件的权限许可,因此只有根用户才有读写权限,2.3,配置主机服务,4),要设置每个,Samba,用户的口令,使用以下命令(把,username,替换为每个用户的用户名),5),加密口令必须在,Samba,配置文件中被启用,6),在,shell,提示下键入,service smb restart,来确定,smb,服务被启动,7),为避免每次启动主机都要手工启动,samba,服务,使用命令使得,samba,服务在每次系统启动时都默认执行,2.3,配置主机服务,2.3.2,配置,DHCP,DHCP,是动态主机配置协议。这个协议用于向计算机自动提供,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,配置主机服务,重新启动,NFS,服务,为避免每次启动主机都要手工启动,dhcp,服务,使用命令使得,dhcp,服务在每次系统启动时都默认执行,2.3,配置主机服务,本章主要向读者介绍了如何搭建一个嵌入式,Linux,交叉编译开发环境。我们首先介绍了“什么是交叉编译”,接着向读者展示了建立交叉编译开发工具链的两种方法。在自己动手编译一个工具链,或者直接下载制作好的工具链之后,我们就可以交叉编译应用程序了。在嵌入式软件开发过程中,有些主机服务是必要的,同时也会为我们的开发工作带来便利,因此我们在本章最后介绍了四个主机服务的配置方法。,2.4,本章小结,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!