您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第5章嵌入式Linux开发环境的搭建
章、嵌入式Linux开发环境的搭建掌握嵌入式交叉编译环境的搭建掌握嵌入式主机通信环境的配置学会使用交叉编译工具链学会配置Linux下的minicom和Windows下的超级终端学会在Linux下和Windows下配置TFTP服务学会配置NFS服务学会编译Linux内核学会搭建Linux的根文件系统熟悉嵌入式Linux的内核相关代码的分布情况掌握Bootloader的原理了解U-Boot的代码结构和移植本章的主要内容5.1嵌入式开发环境的搭建5.2U-Boot移植5.3实验内容——创建Linux内核和文件系统嵌入式交叉编译环境的搭建(1)搭建交叉编译环境是嵌入式开发的第一步,也是必备一步。搭建交叉编译环境的方法很多,不同的体系结构、不同的操作内容甚至是不同版本的内核,都会用到不同的交叉编译器。交叉编译器完整的安装一般涉及到多个软件的安装(读者可以从下载),包括binutils、gcc、glibc等软件。其中,binutils主要用于生成一些辅助工具,如objdump、as、ld等;gcc是用来生成交叉编译器的,主要生成arm-linux-gcc交叉编译工具(应该说,生成此工具后已经搭建起了交叉编译环境,可以编译Linux内核了,但由于没有提供标准用户函数库,用户程序还无法编译);glibc主要是提供用户程序所使用的一些基本的函数库。这样,交叉编译环境就完全搭建起来了。嵌入式交叉编译环境的搭建(2)第1步,取得Binutils、GCC、Glibc源码。第2步,配置并编译Binutils取得我们所需要的汇编和连接程序。第3步,配置并编译GCC源码生成GCC编译器。一般是C编译器首先生成,然后以这个为基础在结合下一步生成的Glibc的C函数库,再编译生成其它编译器。第4步,配置Glibc并编译生成Glibc的C函数库。第5步,再次配置和编译GCC源码,生成其它语言的编译器,如C++编译器等。的使用(1)键入“ctrl+AZ”键入“ctrl+AO”键入“O”的使用(2)键入“A”键入“E”的使用(3)服务配置(1)[root@localhosttftpboot]#vim/etc/xinetd.d/tftp#default:off#description:Thetftpserverservesfilesusingthetrivialfiletransfer\#protocol.Thetftpprotocolisoftenusedtobootdiskless\#workstations,downloadconfigurationfilestonetwork-awareprinters,\#andtostarttheinstallationprocessforsomeoperatingsystems.servicetftp{socket_type=dgram/*使用数据报套接字*/protocol=udp/*使用UDP协议*/wait=yes/*允许等待*/user=root/*用户*/server=/usr/sbin/in.tftpd/*服务程序*/server_args=-s/tftpboot/*服务器端的根目录*/disable=no/*使能*/per_source=11cps=1002flags=IPv4}服务配置(2)[root@localhosttftpboot]#servicexinetdrestart(或者使用/etc/init.d/xinetdrestart,而且因发行版的不同具体路径会有所不同)关闭xinetd:[确定]启动xinetd:[确定][root@localhosttftpboot]#netstat–au|greptftpActiveInternetconnections(serversandestablished)ProtoRecv-QSend-QLocalAddressForeignAddressStateudp00*:tftp*:*=tftpboot0x30200000zImageTFTPfromserver192.168.1.1;ourIPaddressis192.168.1.100Filename'zImage'.Loadaddress:0x30200000Loading:############################################################################################################################################################################doneBytestransferred=881988(d7544hex)服务(tftpd32)配置串口下载–使用DNW工具串口配置下载界面启动Bootloader内核配置(1)makemenuconfig处理器选择内核配置(2)启动选项-串口设置退出并保存建立依赖关系由于内核源码树中的大多数文件都与一些头文件有依赖关系,因此要顺利建立内核,内核源码树中的每个Makefile都必须知道这些依赖关系。建立依赖关系通常在第一次编译内核的时候(或者源码目录树的结构发生变化的时候)进行,它会在内核源码树中每个子目录产生一个“.depend”文件。运行“makedep”即可。在编译linux2.6版本的内核通常不需要这个过程,直接输入“make”即可。创建内核镜像建立内核可以使用“make”、“makezImage”或“makebzImage”,这里建立的为压缩的内核映像。通常在Linux中,内核映像分为压缩的内核映像和未压缩的内核映像。其中,压缩的内核映像通常名为zImage,位于“arch/$(ARCH)/boot”目录中。而未压缩的内核映像通常名为vmlinux,位于源码树的根目录中。内核源码目录结构/include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。/init子目录包含了内核的初始化代码,这里的代码是内核工作的起始入口。/arch子目录包含了所有处理器体系结构特定的内核代码。如:arm、i386、alpha。/drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。/fs子目录包含了所有的文件系统的代码,如:ext2,vfat等。/net子目录包含了内核的网络相关代码。/mm子目录包含了所有内存管理代码。/ipc子目录包含了进程间通信代码。/kernel子目录包含了内核核心代码。为什么需要文件系统?嵌入式文件系统嵌入式Linux也支持多种文件系统。虽然在嵌入式中,由于资源受限的原因,它的文件系统和PC机Linux的文件系统有较大的区别,但是,它们的总体架构是一样的,都是采用目录树的结构。在嵌入式中常见的文件系统有cramfs、romfs、jffs、yaffs等。cramfs文件系统是一种经过压缩的、极为简单的只读文件系统,因此非常适合嵌入式系统。busybox是构造文件系统最常用的软件工具包,它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序(busybox)中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中已经足够了。busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。创建文件系统(1)[root@localhostfs2410]#tarjxvfbusybox-1.00.tar.bz2[root@localhostfs2410]#cdbusybox-1.00[root@localhostbusybox-1.00]#makedefconfig/*首先进行默认配置*/[root@localhostbusybox-1.00]#makemenuconfig创建文件系统(2)#make#makeinstallPREFIX=/home/david/fs2410/cramfs[root@localhostcramfs]#lsbinlinuxrcsbinusr[root@localhostcramfs]#mkdirmntrootvartmpprocbootetclib[root@localhostcramfs]#mkdir/var/{lock,log,mail,run,spool}如果busybox是动态编译的(即在配置busybox时没选中静态编译),则把所需的交叉编译的动态链接库文件复制到lib目录中。接下来,需要创建一些重要文件。首先要创建/etc/inittab和/etc/fstab文件。inittab是Linux启动之后第一个被访问的脚本文件,而fstab文件是定义了文件系统的各个“挂接点”,需要与实际的系统相配合。接下来要创建用户和用户组文件。创建文件系统映像[root@localhostfs2410]#mkdircramfs[root@localhostfs2410]#mountfs2410.cramgscramfs–oloop[root@localhostfs2410]#lscramfsbindevetchomeliblinuxrcprocQtopiaramdisksbintestshelltmpusrvar[root@localhostfs2410]#mkdirbackup_cramfs[root@localhostfs2410]#tarcvfbackup.cramfs.tarcramfs/[root@localhostfs2410]#mvbackup.cramfs.tarbackup_cramfs/[root@localhostfs2410]#umountcramfs[root@localhostfs2410]#cdbackup_cramfs[root@localhostbackup_cramfs]#tarzvfbackup.cramfs.tar[root@localhostbackup_cramfs]#rmbackup.cramfs.tar因为cramfs文件系统是只读的,所以不能在这个挂载目录下直接进行修改,因此需要将文件系统中的内容复制到另一个目录中。[root@loca
本文标题:第5章嵌入式Linux开发环境的搭建
链接地址:https://www.777doc.com/doc-921379 .html