Linux启动代码编程实验.ppt

上传人:za****8 文档编号:2957277 上传时间:2019-12-05 格式:PPT 页数:32 大小:812.51KB
返回 下载 相关 举报
Linux启动代码编程实验.ppt_第1页
第1页 / 共32页
Linux启动代码编程实验.ppt_第2页
第2页 / 共32页
Linux启动代码编程实验.ppt_第3页
第3页 / 共32页
点击查看更多>>
资源描述
1,第4章,Linux启动代码编程实验,2,BootLoader的基本概念,BootLoader是系统加电后运行的第一段软件代码。 嵌入式系统中,整个系统的加载启动任务完全由 BootLoader来完成。比如在一个基于ARM920T core的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。 简单地说,BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。 通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的 BootLoader 是很困难的。,3,Bootloader总结,功能 硬件初始化 引导操作系统 下载程序(串口、网口、USB) 烧写flash 特征 程序复位运行入口点 通常用汇编语言+C语言编写 代码量较小,4,BootLoader 的移植和修改,BootLoader除了依赖于 CPU 的体系结构外,BootLoader 实际上也依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其他外设的类型等。 对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU而构建的,如果他们的硬件资源和配置不一致的话,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。,5,BootLoader 的安装,系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。比如,S3C2410在复位时都从地址 0x00000000 取它的第一条指令。 嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被安排这个起始地址上,因此在系统加电后,CPU将首先执行BootLoader程序。 也就是说对于基于S3C2410的这套系统,我们的BootLoader是从0地址开始存放的,而这块起始地址需要采用可引导的固态存储设备如FLASH。,6,用来控制 BootLoader 的设备或机制,串口通讯是最简单也是最廉价的一种双机通讯设备,所以往往在BootLoader中主机和目标机之间都通过串口建立连接,BootLoader 程序在执行时通常会通过串口来进行 I/O,比如:输出打印信息到串口,从串口读取用户控制字符等。当然如果认为串口通讯速度不够,也可以采用网络或者USB通讯,那么相应的在BootLoader中就需要编写各自的驱动。,7,Boot Loader 的操作模式,启动加载模式:这种模式也称为“自主“(Autonomous)模式。也即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。 下载模式:在这种模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,比如:下载应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被 BootLoader写到目标机上的固态存储设备中。BootLoader 的这种模式通常在系统更新时使用。工作于这种模式下的 BootLoader 通常都会向它的终端用户提供一个简单的命令行接口。,8,BootLoader与主机间文件传输的通信设备及协议,最常见的情况就是,目标机上的 BootLoader 通过串口与主机之间进行文件传输,传输可以简单的采用直接数据收发,当然在串口上也可以采用xmodemymodemzmodem 协议以及在以太网上采用TFTP协议。,9,BootLoader的主要任务与典型结构框架,从操作系统的角度看,BootLoader的总目标就是正确地调用内核来执行。 大多数BootLoader都分为stage1和stage2两大部分。 依赖于CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的,也就是前面说的启动代码。 而stage2 则通常用C语言来实现,这样可以实现复杂的功能,而且代码会具有更好的可读性和可移植性。,10,BootLoader的主要任务与典型结构框架,BootLoader的stage1通常包括以下步骤 为加载 BootLoader 的 stage2 准备 RAM 空间 拷贝 BootLoader 的 stage2 到 RAM 空间中 设置好堆栈 跳转到 stage2 的 C 入口点 BootLoader的stage2通常包括以下步骤 初始化本阶段要使用到的硬件设备 调用应用程序或启动内核,11,Stage 1初始化流程图,stage 1的功能: RAM初始化,设置各个部件的时钟和片选,将BootLoader拷贝到RAM中,设置堆栈,调用Stage 2。 注意:在本阶段,特别是在堆栈设置之前,进行函数调用(也有些汇编子程序不需要使用堆栈)或者使用堆栈保存数据将产生不可预知的结果;,12,Stage 2,stage 2的功能: 初始化串口,显示菜单,通过控制台获取用户输入,并执行相应的命令操作。 stage 2的代码通常用C语言编写,以便于实现更复杂的功能,以及取得更好的代码可读性和可移植性。但是与普通C语言应用程序不同的是,在编译和链接Boot Loader这样的程序时,不能使用任何glibc库中支持的函数。因此,从哪里跳转进main()函数就成为需要解决的问题。直接把main()函数的起始地址作为整个第二阶段执行映像的入口点,或许是最直接的想法。 但是这样做有两个缺点: 无法通过main()函数传递函数参数; 无法处理main()函数返回的情况。 一种较为巧妙的方法是利用trampoline(弹簧床)的概念,即用汇编语言编写一段trampoline小程序,并将这段小程序作为第二阶段可执行映像的执行入口点。可以在trampoline汇编小程序中用CPU跳转指令跳人到main()函数中去执行;而当main()函数返回时,CPU执行路径显然会再次回到trampoline程序。简而言之,这种方法的思想就是用这段trampoline小程序作为main()函数的外部包裹(External Wrapper)。,13,VIVI,VIVI是韩国Mizi公司开发的一种Boot Loader,适合于ARM9处理器,支持S3C2410X。本实验系统采用的Boot Loader就是VIVI 同所有的Boot Loader一样,VIVI也有两种工作模式,即启动加载模式和下载模式。在正常运行时,都工作在启动加载模式。 VIVI提供了MTD(Memory Technolog Device) 通过修改代码就可以从不同的存储器启动。,14,VIVI编译及使用实验,【实验目的】 了解以VIVI为Boot Load的Linux系统。 通过实验掌握VIVI工作原理及移植过程。 通过实验掌握VIVI的配置、编译、构造和使用。 【实验设备】 硬件:EDUKIT-III实验平台,S3C2410核心子板,Embest JTAG仿真器套件, PC机。 软件:Windows XP操作系统,Cygwin Unix模拟平台。 【实验内容】 配置及编译VIVI。 烧写VIVI映像到Flash中作为Linux系统的Boot Loader,并运行。 【实验原理】,15,1Boot Loader的作用 Boot Loader是嵌入式系统中,处理器加电复位后首先执行的一段代码。Boot Loader与硬件密切相关,其代码主要由汇编语言和C语言编写。对于不同的系统,Boot Loader的功能有所不同,但主要作用是基本相同的,有以下几点: 初始化CPU运行的时钟频率; 初始化Flash和内存的数据宽度、读写访问周期和刷新周期; 初始化中断系统; 初始化系统中各种片内、片外设备和IO端口; 初始化系统各种运行模式下的寄存器和堆栈; 加载和引导操作系统,16,2VIVI的启动方式 VIVI可以从Nand Flash中启动,也可以从Nor Flash中启动。选择从不同类型的Flash上启动,其使用方法会有一些差别: 如果VIVI是烧写到Nand Flash中的,那么VIVI将从Nand Flash启动。由于NandFlash没有专门的地址线,所以它在系统中根本就没有地址空间(其结构是共用地址和数据总线,分时发送地址和数据),因此只适合用来存放数据,而不能够直接在其上执行程序指令。S3C2410专门内置了一个Nand Flash控制器,通过在芯片内设置名叫Step Stone的4 KB RAM来完成Nand Flash的启动功能。因此,通过Nand Flash启动的启动代码不能超过4KB。 如果VIVI是烧写到Nor Flash中的,那么VIVI将从Nor Flash启动。因为Nor Flash具有XIP特性(能够直接在其上执行程序指令),所以VIVI将一直在Nor Flash上运行,直到进入main()函数中的mem_map_init()函数,17,3.VIVI操作命令 Load part,param,boot,flash,bon,help 4.配置和编译VIVI 5.烧写VIVI映像,18,VIVI编译及使用实验,【实验步骤】 复制EDUKIT-III 2410的VIVI补丁文件ViVi-20030929.tar.bz2.edukit2410.patch到$SOURCEDIR/patch目录下。 运行Cygwin VIVI源代码直接使用4.1节中介绍的代码,并按以下命令打入补丁(P140) 编译VIVI (在Cygwin窗口中输入如下命令:书P140) 把编译好的VIVI烧到实验箱Nor Flash(0x00x20000)中 实验箱加电运行VIVI (运行VIVI后可在超级终端上看到类似书P141的输出结果) 复位重新运行VIVI,按非Return键,进入ViVi提示符后,执行help命令,19,【实验 过程】,运行Cygwin,20,【实验 过程】,清除老文件,运行配置命令,21,【实验 过程】,加载配置文件,22,【实验 过程】,输入已存在的配置文件名,配置文件名,23,【实验 过程】,保存,退出,24,【实验 过程】,运行配置命令后的结果,25,【实验 过程】,编译,链接VIVI,生成boot image文件,26,【实验 过程】,VIVI boot image文件所在目录,27,【实验 过程】,连接并口线到仿真器,启动烧录程序,调配置文件,28,【实验 过程】,进行设置,29,【实验 过程】,开始烧录,30,【实验 过程】,连接好串口线,在PC机上启动超级终端程序, 实验箱加电运行VIVI,31,【实验 过程】,复位后,重新运行VIVI,按非Return键,进入ViVi提示符后, 执行help命令,32,实训题,1.安装ViVi源码,并安装好补丁程序(参见书P106.若已安装好,跳过!注意:补丁程序只能安装一次,多次安装可能编译出错). 2.编译,链接VIVI,生成boot image文件.连接并口线到仿真器,启动烧录程序,烧录VIVI image文件到Nor Flash中 3.按老师所讲实验过程和步骤,运行VIVI,观察实验结果. 4.按实验报告格式要求,写出实验报告.实验报告重点写实验中出现的问题和解决的方法,少量的截图.实验报告统一交学习委员,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


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

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


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