嵌入式系统开发环境的建立

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

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

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

资源描述

armlinux系统开发流程1、开发目标硬件系统2、建立交叉编译工具3、开发bootloader4、移植linux内核5、开发一个文件系统6、开发相关硬件的驱动程序7、开发上层应用程序8、烧写bootloader、内核、文件系统等。嵌入式交叉编译环境简介交叉编译就是在一个平台上生成另一个平台上的可执行代码。这里说的平台分别指的是主机平台Host和目标平台Target。就我们在ARM平台上移植Linux来说,Host是一台一般的PC机,它通过串口或网络接口与Target通信;Target是arm-linux平台(这里说的arm指的是平台所使用的CPU是ARM9处理器,linux指的是运行的操作系统是Linux)。我们在Host上开发程序,并在这个平台上运行交叉编译器CrossComplier,编译我们的程序,而由CrossComplier生成的程序将在Target上运行需要交叉编译的原因:首先,在项目的起始阶段,目标平台尚未建立,因此需要做交叉编译,以生成我们所需要的Bootloader以及kernel(因为Bootloader和kernel的源码需要经过交叉编译后才可以在目标平台上运行);其次,当目标平台能启动之后,由于目标平台上资源的限制,当我们编译大型程序时,依然可能需要用到交叉编译。如何建立交叉编译工具链构建交叉工具链通常有以下3种方法:1.分步骤手工编译分步编译和安装交叉编译工具链所需要的库和源代码,最终生成交叉编译工具链。2.通过脚本编译通过crosstool脚本工具来实现一次编译生成交叉编译工具链3.直接获取交叉编译工具链直接通过网上下载已经制作好的交叉编译工具链。ftp:arm.kernel.org.ukftp:kernel.orgftp:gnu.orgLinux内核代码linux-2.6.10.tar.gzglibc库glibc-2.3.2.tar.gz工具程序binutils-2.15.tar.bz2内核线程包glibc-linuxthreads-2.3.2.tar.gz编译器gcc-3.3.6.tar.gz配置开发板PXA270嵌入式系统的宿主机交叉编译环境arm-linux.tar.gz提供ARM系统开发的交叉编译器/usr/local/arm-linux/binvi/etc/profilepathmunge/usr/local/arm-linux/bincparm-linux.tar.gz/usr/localcd/usr/localtar-xzfarm-linux.tar.gz目标机与主机的通讯方式1、minicomminicom很像Windows下面的超级终端,我們利用minicom作为目标板的终端显示视窗;通过串口控制目标板2、从菜单中选择SerialPortSetup配置minicom1、#minicom-s3、“A”以设置“SerialDevice”。如果使用串口1,则输入/dev/ttyS0。如果使用串口2,则输入/dev/ttyS1。4、“E”键进入设置“bps/par/Bits”(波特率)界面,再按“I”以设置波特率为115200设置被保存到“/etc/minirc.dfl”目标板上电后,目标板的启动过程显示在minicom;CTR+A+s---zmodern2NFS服务NFS服务可以使网络上的同为Linux或Unix系统主机共享文件系统。NFS可以将远程文件系统载入在本地文件系统下。远程的硬盘、目录和光驱都可以变成本地主机目录树中的一个子目录。载入后与处理自己的文件系统一样使用即可。不只方便,也节省了重复保存文件的空间、传输文件的时间及网络带宽。NFS特点NFS系统也是使用C/S体系结构,就是有服务器端与客户端服务器端提供共享的文件系统,必须把文件系统输出(export)出去客户端则要把文件系统载入到自己的系统下使用NFS,需要在服务器端设置输出,在客户端设置载入NFS服务器端配置(1)关闭防火墙(2)配置共享目录----客户端主机IP范围(3)主机IP(4)启动NFS服务NFS客户端(1)设置客户端IP地址(2)挂载共享目录mount-tnfs主机ip:共享目录挂载点注意事项:关闭防火墙,主机与客户端在同一ip段具体配置步骤服务器端1)关闭防火墙具体配置步骤2)配置NFS服务器具体配置步骤2-1)设置共享目录和主机范围具体配置步骤2-2)设置其他选项具体配置步骤2-3)设置其他选项具体配置步骤3)设置NFS服务器的IP具体配置步骤4)启动NFS服务具体配置步骤客户端1)配置ip具体配置步骤2)挂载NFS/etc/exports它的基本格式是Directoryhost(权限选项、用户映像、)Directory:表示打算共享的目录名称;Host:共享这个目录的主机名称;权限选项:定义安全选项;权限选项1)ro:只读,只允许客户机挂载这个文件系统为只读模式。2)rw:明确指定共享目录为读/写权限。用户映像来限定某些用户对NFS共享文件的使用权限no_root_squash:其他安全选项1)Insecure:以非安全端口的方式访问,即默认用户端口是1024或者更高,而NFS服务器默认的安全的服务器端口应该是低于1024的。2)Sync:根据请求进行同步。例:vi/etc/exports/home/ls192.168.0.50(rw,insecure,no_root_squash)表示共享的目录为/home/ls,允许访问的客户机地址为192.168.0.50的主机,权限为可读可写(rw),非安全方式访问(insecure),让客户机的根用户在服务器上拥有根权限。例:vi/etc/exports/home/ls*(rw)表示共享的目录为/home/ls,允许任意主机访问,权限可读可写Bootloader是什么?Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。基于ARM处理器核的CPU在复位时通常都从地址0x00000000取它的第一条指令。在这个地址处安排的就是Bootloader。Bootloader是在操作系统运行之前执行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映像表,从而建立适当的系统软硬件环境,为最终调用操作系统内核做好准备。3BootloaderBootloader参数系统内核根文件系统从低地址到高地址方向Flash几种发布的BootloaderBootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。操作模式大多数Bootloader都有两种不同的操作模式:“启动加载”模式和“下载”模式。其区别对于开发人员才有意义。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。1、启动加载(Bootloading)模式即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。启动加载模式是Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。2、下载(Downloading)模式下载方式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标机上的FLASH类固态存储设备中。下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。如在U-BOOT下,将出现“#”提示符;在vivi下出现“vivi”提示符。下载(Downloading)模式示例Bootloader启动过程大多数BootLoader启动都分为stage1和stage2两大部分。依赖于处理器体系结构和板级初始化的代码,通常都放在stage1中,用汇编语言实现而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。BootLoader的stage1通常包括以下步骤(以执行的先后顺序):1.硬件设备初始化。2.为加载BootLoader的stage2准备RAM空间。3.拷贝BootLoader的stage2到RAM空间中。4.设置好堆栈5.跳转到stage2的C入口点。Stage1主要工作是硬件初始化,并准备第二阶段的C语言运行环境关闭处理器内部指令/数据cache等设置CPU的速度和时钟频率RAM初始化初始化led等为了获得更快的执行速度,通常把阶段2的代码加载到RAM空间中来执行。准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。stage2_start.........stage1为stage2可执行映像准备的RAM地址范围,大小:1MBramdisk...(blank)内核映像...(blank)stage2可执行映像可能的最大大小:1MBstage1可执行映像大小:1MBRAM地址空间Flash地址空间堆栈指针sp:stage_end-40x0001,0000(64KB)0x0000,0400(1KB)0x0000,0000...(blank)BootLoader的stage2通常包括以下步骤(以执行的先后顺序):1.初始化本阶段要使用到的硬件设备。2.检测系统内存映射(memorymap)。3.将kernel映像和根文件系统映像从flash上读到RAM空间中。4.为内核设置启动参数。5.调用内核。stage2的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。与普通C语言应用程序不同的是,在编译和链接bootloader这样的程序时,我们不能使用glibc库中的任何支持函数。Stage2的主要目的是运行Linux内核,在此之前需要完成硬件和内存初始化工作。Bootloader调用Linuxkernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。2)、CPU模式:CPU必须设置为SVC模式,必须禁止中断(IRQs和FIQs)。3)、MMU和Cache的设置:MMU必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭。viviBootloader源码分析vivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。vivi有两种工作模式,在启动时可以选择。在vivi启动时,通过串行口发出如下信息:PressReturntostarttheLinuxnow,anyotherkeyforvivi按回车键启动LinuxOS,按其它键进入vivi命令接口模式,可以使用vivi提供的命令进行一些操作。vivi源代码目录结构vivi源代码包含的目录有:arch、Documentation、drivers、init、include、lib、scripts、test、util等10目录,共300多个文件。各个目录内容如下:1、arch(architecture)目录它下面的文件为与CPU硬件相关

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

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

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

×
保存成功