第5章 嵌入式Linux开发环境的搭建

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章嵌入式Linux开发环境的搭建嵌入式开发环境的搭建U-Boot嵌入式交叉编译环境的搭建交叉开发概念模型minicomtftp主机目标板下载内核映像各种连接方式挂接NFS文件系统Linux系统Cross-Tools-ChainLinux内核网线串口线并口线USB电缆JTAG电缆minicom目标板Linux内核配置和编译Linux内核的移植硬件Linux内核(与体系结构无关代码)移植工作部分交叉编译部分x86ARMMIPS其它体系本硬件平台移植(配置、定时器、串口等驱动)Linux主机环境搭建到互联网下载Linux系统光盘文件目前最著名的发行版本:红帽(redhat)、ubuntu、fedora、OpenSuse(原Suse)、Debian等安装方式独立安装Linux系统。Windows下安装一套模拟Linux环境的的软件(如Cygwin)。虚拟机安装Linux。根文件系统BootLoaderMinicomLinux下的Minicom很像Windows下面的超级终端,利用Minicom作为被开发目标板的终端,实现目标板相关信息的显示与交互,适于在Linux通过超级终端对嵌入式设备的管理以及对嵌入操作系统的升级。tftp服务tftp是用来下载远程文件的最简单网络协议,它基于UDP协议而实现。嵌入式Linux的tftp开发环境包括两个方面:一是嵌入式Linux宿主机的tftp-server支持二是嵌入式linux目标机的tftp-client支持。配置宿主机上的tftp服务,主要为以后下载相应的内核映像和文件系统做准备。在嵌入式Linux的开发过程中,开发者需要在Linux服务器上进行所有的软件开发,交叉编译后,通用tftp方式将可执行文件下载到嵌入式系统运行。DHCP服务目标板的Bootloader或者内核都需要分配IP地址。这可以通过动态主机配置协议(DHCPDynamicHostConfigurationProtocol)或者BOOTP协议实现。BOOTP协议可以给计算机分配IP地址并且通过网络获取映像文件的路径;DHCP则是向后兼容BOOTP的协议拓展。Linux操作系统的主机一般包含dhcpd的软件包,可以配置DHCP服务。配置服务的操作需要root用户的权限。busyboxbusybox是构造文件系统最常用的软件工具包,它被非常形象地称为嵌入式Linux系统中的“瑞士军刀”,因为它将许多常用的Linux命令和工具结合到了一个单独的可执行程序(busybox)中。虽然与相应的GNU工具比较起来,busybox所提供的功能和参数略少,但在比较小的系统(例如启动盘)或者嵌入式系统中已经足够了。busybox在设计上就充分考虑了硬件资源受限的特殊工作环境。它采用一种很巧妙的办法减少自己的体积:所有的命令都通过“插件”的方式集中到一个可执行文件中,在实际应用过程中通过不同的符号链接来确定到底要执行哪个操作。采用单一执行文件的方式最大限度地共享了程序代码,甚至连文件头、内存中的程序控制块等其他系统资源都共享了,对于资源比较紧张的系统来说,真是最合适不过了。在busybox的编译过程中,可以非常方便地加减它的“插件”,最后的符号链接也可以由编译系统自动生成。NFS文件系统(1)NFS为NetworkFileSystem的简称,最早是由Sun公司提出发展起来的,其目的就是让不同的机器、不同的操作系统之间通过网络可以彼此共享文件。NFS可以让不同的主机通过网络将远端的NFS服务器共享出来的文件安装到自己的系统中,从客户端看来,使用NFS的远端文件就像是使用本地文件一样。在嵌入式中使用NFS会使应用程序的开发变得十分方便,并且不用反复地进行烧写映像文件。NFS的使用分为服务端和客户端,其中服务端是提供要共享的文件而客户端则通过挂载(“mount”)这一动作来实现对共享文件的访问操作。下面主要介绍NFS服务端的使用。在嵌入式开发中,通常NFS服务端在宿主机上运行,而客户端在目标板上运行。NFS文件系统(2)NFS服务端是通过读入它的配置文件“/etc/exports”来决定所共享的文件目录的。在这个配置文件中,每一行都代表一项要共享的文件目录以及所指定的客户端对它的操作权限。客户端可以根据相应的权限,对该目录下的所有目录文件进行访问。[共享的目录][客户端主机名称或IP][参数1,参数2…]在这里,主机名或IP是可供共享的客户端主机名或IP,若对所有的IP都可以访问,则可用“*”表示。这里的参数有很多种组合方式U-BootLinux启动过程自解压、跳到入口、初始化硬件、数据结构、驱动程序、挂接根文件系统。从inittab获取运行级别,检测与初始化系统环境,启动与级别相应的服务项、启动终端等待用户登录;祖先进程,控制其他进程。嵌入式系统由Bootloader完成从预定地址执行(0xFFFF0000),硬件初始化,跳到启动盘第一扇区将Linux内核映像装入内存,跳到内核映像入口。Bootloader的概念BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。Bootloader的概念Bootloader是一段可执行程序,完成的主要功能是将可执行文件(一般是操作系统)搬移到内存中,然后将控制权交给这段可执行文件(操作系统)。cpuloaderflashOSmemoryOSBootloader的工作模式(一)下载模式对研发人员来说,Bootloader一般需要工作在这种模式下,特别是调试内核或者Bootloader本身的时候。通过串口终端与Bootloader进行交互,可以操作系统硬件。比如通过网口或者串口下载内核,烧写Flash等等。Bootloader的工作模式(二)启动加载模式嵌入式产品发布的时候,Bootloader必须工作在该模式下。这种情况下,Bootloader必须完成硬件自检、配置,并从Flash中将内核拷贝到SDRAM中,并跳转到内核入口,实现自启动,而不需要人为的干预。Bootloader的安装媒介系统上电时或复位以后,都从芯片厂商预先安排的一个地址处取第一条指令执行(对S3C2410芯片,从0x0处开始)。由于上电或复位需要运行的第一段程序就是Bootloader,故必须把Bootloader放入该地址。将Bootloader写入固态存储设备,永久保存,系统上电后将自动执行Bootloader。Bootloader的烧写Bootloader可以配置系统。没有Bootloader,系统就不能启动。Bootloader可以实现自烧写。但是系统中没有还没有Bootloader的时候,怎么启动?————JTAG烧写。典型的Flash存储空间分配图bootloader启动参数内核根文件系统BootloaderMonitor描述X86ARMPowerPCLILO否Linux磁盘引导程序是否否GRUB否GNU的LILO替代程序是否否Loadlin否从DOS引导Linux是否否ROLO否从ROM引导Linux而不需要BIOS是否否Etherboot否通过以太网卡启动Linux系统的固件是否否LinuxBIOS否完全替代BUIS的Linux引导程序是否否BLOB是LART等硬件平台的引导程序否是否U-Boot是通用引导程序是是是RedBoot是基于eCos的引导程序是是是Vivi是Mizi公司针对SAMSUNG的ARMCPU设计的引导程序否是否提供较多命令接口U-Boot简介1999年由德国DENX软件工程中心的WolfgangDenk发起,全称UniversalBootloader。特点:★支持多种硬件构架:包括ARM、x86、PPC、MIPS、m68k、NIOS、Blackfin★支持多种操作系统:包括Linux、VxWorks、NETBSD、QNX、RTEMS、ARTOS、LynxOS★支持多达216种以上的开发板★开放源代码,遵循GPL条款★易于移植、调试官方网站:目录结构●board目标板相关文件,主要包含硬件初始化、SDRAM初始化●common独立于处理器体系结构的通用代码●cpu与处理器相关的文件,包含cpu初始化、串口初始化、中断初始化等代码●docU-Boot的说明文档●drivers设备驱动代码,如Flash驱动、网卡驱动、串口驱动等●net网络功能的上层文件,实现各种协议,如nfs、tftp、arp等U-Boot目录结构●fsU-Boot支持的文件系统的实现,如cramfs、fat、ext2、jffs2等●includeU-Boot使用的头文件,包括不同硬件构架的头文件●lib_xxx处理器相关文件,如我们要使用的lib_arm,与arm体系结构相关的文件大多数引导系统都分为stage1和stage2两大部分。依赖于处理器体系结构和板级初始化的代码通常都放在stage1中,用汇编实现;而stage2则通常用C语言来实现,这样可以实现更复杂的功能,同时代码具有更好的可读性和可移植性。引导系统的stage1:1)硬件设备初始化。2)为加载引导系统的stage2准备RAM空间。3)拷贝引导系统的stage2到RAM空间中。4)设置好堆栈。5)跳转到stage2的C入口点引导系统的stage2:1)初始化本阶段要用到的硬件设备。2)检测系统内存映射(memorymap)。3)将内核映像和根文件系统映像从flash上读到RAM空间中。4)为内核设置启动参数。5)调用内核。U-Boot启动可分为两个阶段U-Boot启动流程之stage1第一阶段的代码位于cpu/arm920t/start.S中,依次完成以下功能:1、系统上电,进入svc模式2、关闭看门狗,禁止所有中断3、进行初级硬件初始化4、将自身代码拷贝到SDRAM中5、设置堆栈6、清空bss段7、跳转到C语言实现的stage2中从NANDFlash启动经典2410试验箱不带NORFlash,只能从NANDFlash启动。由硬件实现选择从NAND启动。系统上电或者复位时NANDFlash控制器自动将NANDFlash的前4KB拷贝到一段内置RAM,并将这段RAM映射到0x00000000处。NORFlash与NANDFlash比较NORFlashNANDFlash接口时序同SRAM,易使用地址/数据线复用,数据位较窄读取速度较快读取速度较慢擦除速度慢,以64—128KB的块为单位擦除速度快,以8—32KB的块为单位写入速度慢(因为一般要先擦除)写入速度快随机存取速度较快,支持XIP,适用于代码存储。在嵌入式系统中,常用于存放引导程序、根文件系统等。顺序读取速度较快,随机存取速度慢,适用于数据存储(如大容量的多媒体应用)。在嵌入式系统中,常用于存放用户文件系统等。单片容量较小,1-32MB单片容量较大,8-128MB,提高了单元密度最大擦写次数10万次最大擦写次数100万次进入SVC模式start_code:/**setthecputoSVC32mode*/mrsr0,cpsrbicr0,r0,#0x1forrr0,r0,#0xd3msrcpsr,r0看门狗和中断处理ldrr0,=pWTCONmovr1,#0x0strr1,[r0]/**maskallIRQsbysettingallbitsintheINTMR-default*/movr1,#0xffffffffldrr0,=INTMSKstrr1,[

1 / 62
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功