嵌入式Linux开发环境的搭建

上传人:唐****1 文档编号:243432835 上传时间:2024-09-23 格式:PPT 页数:42 大小:1.22MB
返回 下载 相关 举报
嵌入式Linux开发环境的搭建_第1页
第1页 / 共42页
嵌入式Linux开发环境的搭建_第2页
第2页 / 共42页
嵌入式Linux开发环境的搭建_第3页
第3页 / 共42页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,www.embedu.org,*,本章的要求,第5章、嵌入式Linux开发环境的搭建,掌握嵌入式交叉编译环境的搭建,掌握嵌入式主机通信环境的配置,学会使用交叉编译工具链,学会配置,Linux,下的,minicom,和,Windows,下的超级终端,学会在,Linux,下和,Windows,下配置,TFTP,服务,学会配置,NFS,服务,学会编译,Linux,内核,学会搭建,Linux,的根文件系统,熟悉嵌入式,Linux,的内核相关代码的分布情况,掌握,Bootloader,的原理,了解,U-Boot,的代码结构和移植,www.embedu.org,本章的主要内容,5.1 嵌入式开发环境的搭建,5.2 U-Boot移植,5.3 实验内容创建Linux内核和文件系统,www.embedu.org,5.1 嵌入式开发环境的搭建,www.embedu.org,嵌入式交叉编译环境的搭建 (1),搭建交叉编译环境是嵌入式开发的第一步,也是必备一步。搭建交叉编译环境的方法很多,不同的体系结构、不同的操作内容甚至是不同版本的内核,都会用到不同的交叉编译器 。,交叉编译器完整的安装一般涉及到多个软件的安装(读者可以从ftp:/gcc.gnu.org/pub/下载),包括binutils、gcc、glibc等软件。其中,binutils主要用于生成一些辅助工具,如objdump、as、ld等;gcc是用来生成交叉编译器的,主要生成arm-linux-gcc交叉编译工具(应该说,生成此工具后已经搭建起了交叉编译环境,可以编译Linux内核了,但由于没有提供标准用户函数库,用户程序还无法编译);glibc主要是提供用户程序所使用的一些基本的函数库。这样,交叉编译环境就完全搭建起来了。,www.embedu.org,嵌入式交叉编译环境的搭建 (2),第1步,取得Binutils、GCC、Glibc 源码。,第2步,配置并编译Binutils 取得我们所需要的汇编和连接程序。,第3步,配置并编译GCC 源码生成GCC 编译器。一般是C 编译器首先生成,然后以这个为基础在结合下一步生成的Glibc 的C 函数库,再编译生成其它编译器。,第4步,配置Glibc 并编译生成Glibc 的C 函数库。,第5步,再次配置和编译GCC 源码,生成其它语言的编译器,如C+编译器等。,www.embedu.org,超级终端的使用,www.embedu.org,minicom的使用(1),键入“ctrl+A Z”,键入“ctrl+A O”,键入“O”,www.embedu.org,minicom的使用(2),键入“A”,键入“E”,www.embedu.org,minicom的使用(3),www.embedu.org,Linux下tftp服务配置(1),rootlocalhost tftpboot# vim /etc/xinetd.d/tftp,# default: off,# description: The tftp server serves files using the trivial file transfer ,# protocol. The tftp protocol is often used to boot diskless ,# workstations, download configuration files to network-aware printers, ,# and to start the installation process for some operating systems.,service tftp,socket_type = dgram /* 使用数据报套接字*/,protocol = udp /* 使用UDP协议 */,wait = yes /* 允许等待 */,user = root /* 用户 */,server = /usr/sbin/in.tftpd /*,服务程序*,/,server_args = -s /tftpboot /* 服务器端的根目录*/,disable = no /* 使能 */,per_source = 11,cps = 100 2,flags = IPv4,www.embedu.org,Linux下tftp服务配置(2),rootlocalhost tftpboot#,service xinetd restart,(或者使用/etc/init.d/xinetd restart,而且因发行版的不同具体路径会有所不同),关闭 xinetd: 确定 ,启动 xinetd: 确定 ,rootlocalhost tftpboot#,netstat au | grep tftp,Active Internet connections (servers and established),Proto Recv-Q Send-Q Local Address Foreign Address State,udp 0 0 *:tftp *:*,=tftpboot 0x30200000 zImage,TFTP from server 192.168.1.1; our IP address is 192.168.1.100,Filename zImage.,Load address: 0x30200000,Loading: #,done,Bytes transferred = 881988 (d7544 hex),www.embedu.org,Windows下tftp服务(tftpd32)配置,www.embedu.org,串口下载 使用DNW工具,串口配置,下载界面,启动Bootloader,www.embedu.org,内核配置(1),make menuconfig,处理器选择,www.embedu.org,内核配置(2),启动选项-串口设置,退出并保存,www.embedu.org,建立依赖关系,由于内核源码树中的大多数文件都与一些头文件有依赖关系,因此要顺利建立内核,内核源码树中的每个Makefile都必须知道这些依赖关系。建立依赖关系通常在第一次编译内核的时候(或者源码目录树的结构发生变化的时候)进行,它会在内核源码树中每个子目录产生一个“.depend”文件。运行“make dep”即可。在编译linux2.6版本的内核通常不需要这个过程,直接输入“make”即可。,www.embedu.org,创建内核镜像,建立内核可以使用“make”、“make zImage”或“make bzImage”,这里建立的为压缩的内核映像。通常在Linux中,内核映像分为压缩的内核映像和未压缩的内核映像。其中,压缩的内核映像通常名为zImage,位于“arch/$(ARCH)/boot”目录中。而未压缩的内核映像通常名为vmlinux,位于源码树的根目录中。,www.embedu.org,Linux内核源码目录结构,/include子目录包含了建立内核代码时所需的大部分包含文件,这个模块利用其他模块重建内核。,/init子目录包含了内核的初始化代码,这里的代码是内核工作的起始入口。,/arch子目录包含了所有处理器体系结构特定的内核代码。如:arm、i386、alpha。,/drivers子目录包含了内核中所有的设备驱动程序,如块设备和SCSI设备。,/fs子目录包含了所有的文件系统的代码,如:ext2,vfat等。,/net子目录包含了内核的网络相关代码。,/mm子目录包含了所有内存管理代码。,/ipc子目录包含了进程间通信代码。,/kernel子目录包含了内核核心代码。,www.embedu.org,为什么需要文件系统?,www.embedu.org,嵌入式文件系统,嵌入式Linux也支持多种文件系统。虽然在嵌入式中,由于资源受限的原因,它的文件系统和PC机Linux的文件系统有较大的区别,但是,它们的总体架构是一样的,都是采用目录树的结构。在嵌入式中常见的文件系统有cramfs、romfs、jffs、yaffs等 。,cramfs文件系统是一种经过压缩的、极为简单的只读文件系统,因此非常适合嵌入式系统。,www.embedu.org,busybox,busybox是构造文件系统最常用的软件工具包,它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序(busybox)中。,虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中已经足够了。,busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。,www.embedu.org,使用busybox创建文件系统(1),rootlocalhost fs2410#,tar jxvf busybox-1.00.tar.bz2,rootlocalhost fs2410# cd busybox-1.00,rootlocalhost busybox-1.00#,make defconfig,/* 首先进行默认配置 */,rootlocalhost busybox-1.00#,make menuconfig,www.embedu.org,使用busybox创建文件系统(2),#,make,#,make install PREFIX=/home/david/fs2410/cramfs,rootlocalhost cramfs# ls,bin linuxrc sbin usr,rootlocalhost cramfs#,mkdir mnt root var tmp proc boot etc lib,rootlocalhost cramfs#,mkdir /var/lock,log,mail,run,spool,如果,busybox,是动态编译的(即在配置,busybox,时没选中静态编译),则把所需的交叉编译的动态链接库文件复制到,lib,目录中。,接下来,需要创建一些重要文件。首先要创建,/etc/,inittab,和,/etc/,fstab,文件。,inittab,是,Linux,启动之后第一个被访问的脚本文件,而,fstab,文件是定义了文件系统的各个“挂接点”,需要与实际的系统相配合。接下来要创建用户和用户组文件。,www.embedu.org,创建文件系统映像,rootlocalhost fs2410#,mkdir cramfs,rootlocalhost fs2410#,mount fs2410.cramgs cramfs o loop,rootlocalhost fs2410# ls cramfs,bin dev etc home lib linuxrc proc Qtopia ramdisk sbin testshell tmp usr var,rootlocalhost fs2410#,mkdir backup_cramfs,rootlocalhost fs2410#,tar cvf backup.cramfs.tar cramfs/,rootlocalhost fs2410#,mv backup.cramfs.tar backup_cramfs/,rootlocalhost fs2410#,umount cramfs,rootlocalhost fs2410#,cd backup_cramfs,rootlocalhost backup_cramfs#,tar zvf backup.cramfs.tar,rootlocalhost backup_cramfs#,rm backup.cramfs.tar,因为cramfs文件系统是只读的,所以不能在这个挂载目录下直接进行修改,因此需要将文件系统中的内容复制到另一个目录中 。,rootlocalhost fs2410# cp /hello backup_cramfs/cramfs/,rootlocalhost fs2410#,mkcramfs backup_cramfs/cramfs/ new.cramfs,www.embedu.org,NFS文件系统(1),NFS为Network File System的简称,最早是由Sun公司提出发展起来的,其目的就是让不同的机器、不同的操作系统之间通过网络可以彼此共享文件。NFS可以让不同的主机通过网络将远端的NFS服务器共享出来的文件安装到自己的系统中,从客户端看来,使用NFS的远端文件就像是使用本地文件一样。在嵌入式中使用NFS会使应用程序的开发变得十分方便,并且不用反复地进行烧写映像文件。,NFS的使用分为服务端和客户端,其中服务端是提供要共享的文件而客户端则通过挂载(“mount”)这一动作来实现对共享文件的访问操作。下面主要介绍NFS服务端的使用。在嵌入式开发中,通常NFS服务端在宿主机上运行,而客户端在目标板上运行。,www.embedu.org,NFS文件系统(2),NFS服务端是通过读入它的配置文件“/etc/exports”来决定所共享的文件目录的。在这个配置文件中,每一行都代表一项要共享的文件目录以及所指定的客户端对它的操作权限。客户端可以根据相应的权限,对该目录下的所有目录文件进行访问。,共享的目录 客户端主机名称或IP 参数1,参数2,在这里,主机名或IP是可供共享的客户端主机名或IP,若对所有的IP都可以访问,则可用“*”表示。这里的参数有很多种组合方式,www.embedu.org,NFS文件系统(3),rootlocalhost fs#,cat /etc/exports,/root/workplace 192.168.2.*(rw,no_root_squash),rootlocalhost fs#,service portmap start,启动 portmap: 确定,rootlocalhost fs#,service nfs start,启动 NFS 服务: 确定,关掉 NFS 配额: 确定,启动 NFS 守护进程: 确定,启动 NFS mountd: 确定,www.embedu.org,其它命令,exportfs命令可以重新扫描“/etc/exports”,使用户在修改了“/etc/exports”配置文件之后不需要每次重启NFS服务。,showmount命令用于显示当前的挂载情况,www.embedu.org,5.2 U-Boot移植,www.embedu.org,Bootloader介绍,简单地说,Bootloader就是在操作系统内核运行之前运行的一段程序,它类似于PC机中的BIOS程序。通过这段程序,可以完成硬件设备的初始化,并建立内存空间的映射关系,从而将系统的软硬件环境带到一个合适的状态,为最终加载系统内核做好准备。,通常,Bootloader比较依赖于硬件平台,特别是在嵌入式系统中,更为如此。因此,在嵌入式世界里建立一个通用的Bootloader是一件比较困难的事情。,www.embedu.org,Bootloader与哪些相关?,Bootloader所支持的CPU和嵌入式开发板,Bootloader的存储位置,Bootloader的启动过程分为单阶段和多阶段两种。通常多阶段的Bootloader能提供更为复杂的功能,以及更好的可移植性。,Bootloader的操作模式,Bootloader与主机之间进行文件传输所用的通信设备及协议,最常见的情况就是,目标机上的Bootloader通过串口与主机之间进行文件传输,传输协议通常是xmodem/ ymodem/zmodem等。但是,串口传输的速度是有限的,因此通过以太网连接并借助TFTP等一些协议来下载文件是个更好的选择。,www.embedu.org,Bootloader启动流程 stage1,基本的硬件初始化,包括屏蔽所有的中断、设置CPU的速度和时钟频率、RAM初始化、初始化外围设备、关闭CPU内部指令和数据cache等。,为加载stage2准备RAM空间,通常为了获得更快的执行速度,通常把stage2加载到RAM空间中来执行,因此必须为加载Bootloader的stage2准备好一段可用的RAM空间。,拷贝stage2到RAM中,在这里要确定两点:stage2的可执行映像在固态存储设备的存放起始地址和终止地址;RAM空间的起始地址。,设置堆栈指针sp,这是为执行stage2的C语言代码做好准备。,www.embedu.org,Bootloader启动流程 stage2,用汇编语言跳转到main入口函数,由于stage2的代码通常用C语言来实现,目的是实现更复杂的功能和取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在编译和链接Bootloader这样的程序时,不能使用glibc库中的任何支持函数。,初始化本阶段要使用到的硬件设备,包括初始化串口、初始化计时器等。在初始化这些设备之前、可以输出一些打印信息。,检测系统的内存映射,所谓内存映射就是指在整个4GB物理地址空间中指出哪些地址范围被分配用来寻址系统的内存。,加载内核映像和根文件系统映像,这里包括规划内存占用的布局和从Flash上拷贝数据。,设置内核的启动参数。,www.embedu.org,U-Boot特点,开放源码;,支持多种嵌入式操作系统内核,如Linux、NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS;,支持多个处理器系列,如PowerPC、ARM、x86、MIPS、XScale;,较高的可靠性和稳定性;,高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求和产品发布等;,丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;,较为丰富的开发调试文档与强大的网络技术支持。,www.embedu.org,U-Boot功能,系统引导:支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统。支持NFS挂载,并从FLASH中引导压缩或非压缩系统内核。,基本辅助功能:强大的操作系统接口功能;可灵活设置、传递多个关键参数给操作系统,适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最为强劲;支持目标板环境参数多种存储方式,如FLASH、NVRAM、EEPROM;CRC32校验,可校验FLASH中内核、RAMDISK映像文件是否完好。,设备驱动:串口、SDRAM、FLASH、以太网、LCD、NVRAM、EEPROM、键盘、USB、PCMCIA、PCI、RTC等驱动支持。,上电自检功能:SDRAM、FLASH大小自动检测;SDRAM故障检测;CPU型号。,特殊功能:XIP内核引导。,www.embedu.org,U-Boot源码结构 (1),board:和一些已有开发板有关的代码,比如makefile和U-Boot.lds等都和具体开发板的硬件和地址分配有关。,common:与体系结构无关的代码,用来实现各种命令的C程序。,cpu:包含CPU相关代码,其中的子目录都是以U-BOOT所支持的CPU为名,比如有子目录arm926ejs、mips、mpc8260和nios等,每个特定的子目录中都包括cpu.c和interrupt.c,start.S等。其中cpu.c初始化CPU、设置指令Cache和数据Cache等;interrupt.c设置系统的各种中断和异常,比如快速中断、开关中断、时钟中断、软件中断、预取中止和未定义指令等;汇编代码文件start.S是U-BOOT启动时执行的第一个文件,它主要是设置系统堆栈和工作方式,为进入C程序奠定基础。,disk:disk驱动的分区相关代码。,doc:文档。,www.embedu.org,U-Boot源码结构 (2),drivers:通用设备驱动程序,比如各种网卡、支持CFI的Flash、串口和USB总线等。,fs:支持文件系统的文件,U-BOOT现在支持cramfs、fat、fdos、jffs2和registerfs等。,include:头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和对文件系统支持的文件。,net:与网络有关的代码,BOOTP协议、TFTP协议、RARP协议和NFS文件系统的实现。,lib_arm:与ARM体系结构相关的代码。,tools:创建S-Record格式文件和U-BOOT images的工具。,www.embedu.org,U-Boot重要代码,cpu/arm920t/start.S,interrupts.c,cpu.c,memsetup.S,www.embedu.org,U-Boot移植主要步骤,建立自己的开发板类型 (Makefile ),修改程序链接地址 (board/s3c2410/config.mk ),修改中断禁止的部分 (/cpu/arm920t/start.S),因为在fs2410开发板启动时是直接从nand flash加载代码,所以应该启动代码 (/cpu/arm920t/start.S),修改内存配置(board/fs2410/lowlevel_init.S),加入nand flash读函数(board/fs2410/nand_read.c),加入nand flash的初始化函数,(board/fs2410/fs2410.c),修改外设控制器相关宏(board/fs2410/fs2410.c),提供nand flash相关宏定义(include/configs/fs2410.h),加入nand flash设备(include/linux/mtd/nand_ids.h),设置nand flash环境(common/env_nand.c),www.embedu.org,5.3 实验 - 创建Linux内核和文件系统,www.embedu.org,实验目的和内容,实验目的,通过移植Linux内核,熟悉嵌入式开发环境的搭建和Linux内核的编译配置。通过创建文件系统,熟练掌握使用busybox创建文件系统和如何创建文件系统映像文件。由于具体步骤在前面已经详细讲解过了,因此,相关部分请读者查阅本章前面内容。,实验内容,首先在Linux环境下配置minicom,使之能够正常显示串口的信息。然后再编译配置Linux2.6内核,并下载到开发板。接下来,用busybox创建文件系统并完善所缺的内容。用mkcramfs创建cramfs映像文件并下载到开发板。在linux内核和文件系统加载完了之后,在开发板上启动linux。,www.embedu.org,思考与练习,1适当更改Linux内核配置,再进行编译下载查看结果。,2配置NFS服务。,3. 深入研究一下U-Boot源码以及移植的具体步骤。,www.embedu.org,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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


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

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


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