您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第3章 嵌入式开发环境的搭建
NeusoftInstituteofInformation2019年9月14日星期六2019/9/14大连东软信息学院嵌入式系统导论课程组嵌入式系统导论NeusoftInstituteofInformation2019年9月14日星期六2019/9/14第3章嵌入式开发环境的搭建3.1嵌入式开发环境概述13.2Flash程序烧写23.3BootLoader程序33.4内核的裁剪的编译43.5根文件系统的构建53.6驱动程序原理与开发6NeusoftInstituteofInformation2019年9月14日星期六2019/9/143.1嵌入式开发环境概述1.建立开发环境2.配置开发主机,配置MINICOM3.建立引导装载程序bootloader4.下载别人已经移植好的linux操作系统5.建立根文件系统6.建立应用程序的falsh分区7.开发应用程序8.烧写内核、根文件系统、应用程序9.发布产品NeusoftInstituteofInformation2019年9月14日星期六2019/9/14第3章嵌入式开发环境的搭建3.1嵌入式开发环境概述13.2Flash程序烧写23.3BootLoader程序33.4内核的裁剪的编译43.5根文件系统的构建53.6驱动程序原理与开发6NeusoftInstituteofInformation2019年9月14日星期六2019/9/143.2Flash程序烧写•烧写:即利用特殊工具向开发板中下载代码。•实例:向ARM板(裸机)上烧写BootLoader、内核、根文件系统•前提:存在目录。./img,其下有已经准备好的各个部分软件的映像文件(即用交叉编译器编译好的可执行文件),分别为:–VIVI:针对S3C2410的BootLoader映像文件–zImage:经裁剪的Linux内核映像文件–root.cramfs:根文件系统映像文件–sjf2410:完成烧写的程序NeusoftInstituteofInformation2019年9月14日星期六2019/9/143.2Flash程序烧写•具体烧写步骤–1.安装JTAG驱动程序•将整个giveoio目录(JTAG驱动所在目录)复制到c:\WINDOWS下,并将该目录下的giveio.sys文件复制到系统盘驱动目录下,如c:\WINDOWS\system32\drivers•在控制面板中添加该驱动程序–2.设置超级终端•按照波特率115300,数据位8,无奇偶校验,停止位1,数据流控为无进行设置–3.烧写引导程序•使用sjf2410程序对vivi进行第一次烧写•vivi启动后,使用bonpart命令对flash进行分区•使用load命令对vivi进行第二次烧写–4.烧写内核•使用load命令对kernel进行烧写–5.烧写根文件系统•使用load命令对rootfs进行烧写NeusoftInstituteofInformation2019年9月14日星期六2019/9/14第3章嵌入式开发环境的搭建3.1嵌入式开发环境概述13.2Flash程序烧写23.3BootLoader程序33.4内核的裁剪的编译43.5根文件系统的构建53.6驱动程序原理与开发6NeusoftInstituteofInformation2019年9月14日星期六2019/9/143.3.1BootLoader程序原理•对于PC系统,引导加载程序BIOS(固件程序)和位于磁盘MBR(主引导记录)中系统引导程序(LILO和GRUB等)一起组成。BIOS完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的内存中,然后将控制权交给引导程序。引导程序的主要任务就是将内核映像从硬盘上读到内存中,然后跳转到内核的入口点去运行,即开始启动操作系统。•在嵌入式系统中,主要使用flash作为系统的存储煤介,很少用磁盘,因此整个系统的加载启动任务就完全由引导程序(也称为Bootloader)来完成。NeusoftInstituteofInformation2019年9月14日星期六2019/9/14•就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。嵌入式系统中的bootloader概念NeusoftInstituteofInformation2019年9月14日星期六2019/9/14Bootloader的功能1.硬件设备初始化(CPU的主频、SDRAM、中断、串口等)2.内核启动参数3.启动内核4.与主机进行交互,从串口、USB口或者网络口下载映象文件,并可以对FLASH等存储设备进行管理NeusoftInstituteofInformation2019年9月14日星期六2019/9/14Bootloader特点1.依赖于硬件:每种不同的CPU体系结构都有不同的bootloader2.bootloader还依靠具体的嵌入式板级设备的配置NeusoftInstituteofInformation2019年9月14日星期六2019/9/14BootLoader的安装媒介1.系统加电或复位后,所有的处理器通常都从某个预先安排的地址上取指令。比如,ARM在复位时从地址0x0取指。2.嵌入式系统中通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个预先安排的地址上。因此在系统加电后,处理器将首先执行BootLoader程序3.Bootloader是最先被系统执行的程序NeusoftInstituteofInformation2019年9月14日星期六2019/9/14固态存储设备的典型空间分配结构Bootloader参数系统内核根文件系统Flash从低地址到高地址方向NeusoftInstituteofInformation2019年9月14日星期六2019/9/14Bootloader的烧写方式1.通过JTAG口2.通过以太网口3.通过串口4.其中前两种方式比后一种快得多NeusoftInstituteofInformation2019年9月14日星期六2019/9/14BootLoader的控制方式1.主机和目标机之间一般通过串口建立连接,BootLoader软件在执行时通常会通过串口来进行通讯,比如:输出打印信息到串口,从串口读取用户控制字符2.也可以通过JTAG等其他接口通讯NeusoftInstituteofInformation2019年9月14日星期六2019/9/14BootLoader的操作模式•大多数BootLoader都包含两种不同的操作模式:1.启动加载模式2.下载模式•从最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别NeusoftInstituteofInformation2019年9月14日星期六2019/9/14•启动加载模式启动加载模式,称为“自主”(Autonomous)模式–BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式下。BootLoader的操作模式NeusoftInstituteofInformation2019年9月14日星期六2019/9/14•下载模式在下载模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,如:下载内核映像和根文件系统映像等从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader的这种工作模式。工作于这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。BootLoader的操作模式NeusoftInstituteofInformation2019年9月14日星期六2019/9/14BL的典型结构框架大多数BootLoader都分为stage1和stage2两大部分。依赖于处理器体系结构和板级初始化的代码,通常都放在stage1中,用汇编语言实现而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。NeusoftInstituteofInformation2019年9月14日星期六2019/9/14•BootLoader的stage1通常包括以下步骤(以执行的先后顺序):–硬件设备初始化。–为加载BootLoader的stage2准备RAM空间。–拷贝BootLoader的stage2到RAM空间中。–设置好堆栈–跳转到stage2的C入口点。BL的典型结构框架NeusoftInstituteofInformation2019年9月14日星期六2019/9/14•BootLoader的stage2通常包括以下步骤(以执行的先后顺序):–初始化本阶段要使用到的硬件设备。–检测系统内存映射(memorymap)。–将kernel映像和根文件系统映像从flash上读到RAM空间中。–为内核设置启动参数。–调用内核。stage2的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。与普通C语言应用程序不同的是,在编译和链接bootloader这样的程序时,我们不能使用glibc库中的任何支持函数。BL的典型结构框架NeusoftInstituteofInformation2019年9月14日星期六2019/9/143.3.2几种流行的LinuxBootLoader1.U-Boot2.BLOB3.RedBoot4.VIVINeusoftInstituteofInformation2019年9月14日星期六2019/9/143.3.3S3C2410平台上的VIVI分析•vivi是由韩国Mizi公司开发的一种BootLoader,适合于ARM9处理器,支持S3C2410UP-NETARM2410平台的引导程序•启动模式和下载模式•结构简单•支持Linux内核引导,可以传递内核参数•支持分区(bon)•命令行NeusoftInstituteofInformation2019年9月14日星期六2019/9/14vivi的Stage1(文件head.S)1关WATCHDOG:上电后,WATCHDOG默认是开着的2禁止所有中断3初始化系统时钟4初始化内存控制寄存器(一共13个)5检查是否从掉电模式唤醒,若是,则调用WakeupStart函数进行处理6点亮所有LED7初始化UART08将vivi所有代码(包括阶段1和阶段2)从nandflash复制到SDRAM中9跳到bootloader的阶段2运行NeusoftInstituteofInformation2019年9月14日星期六2019/9/14vivi的Stage1(文件head.S)NeusoftInstituteofInformation2019年9月14日星期六2019/9/14vivi的Stage2(文件main.c)1.打印vivi的信息,包括版本号等2.调用若干个初始化函数3.boot_or_vivi():判断是否有“r”,回车或空格键按下,若有,则进入vivishell;若没有,则执行boot命令,启动内核4.boot命令执行后,找到kernel分区,找它的偏移量和大小,执行boot_kernel()函数,拷贝内核映象5.设置linux启动参数,打印NowBootingLinux…6.调用call_linux()函数,启动内核NeusoftInstituteofInformation2019
本文标题:第3章 嵌入式开发环境的搭建
链接地址:https://www.777doc.com/doc-921297 .html