- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(mips启动流程
AP93
启
动
流
程
1、u-boot启动流程
AP93 u-boot启动过程主要分为二个阶段stage 1和stage 2。程序从start.S的_start开始执行。首先,初始化中断向量,寄存器清零,大致包括32个通用寄存器reg0-reg31和协处理器的一些寄存器:CP0_WATCHLO,CP0_WATCHHI,CP0_CAUSE, CP0_COUNT,CP0_COMPARE等等。之后,配置寄存器CP0_STATUS,设置所使用的协处理器,中断以及cpu运行级别(核心级)。配置gp寄存器,把GOT段的地址赋给gp寄存器。这时,开始执行lowlevel_init.S的lowlevel_init,主要目的是工作频率配置,比如cpu的主频,总线(AHB),DDR工作频率等。然后,调用cache.S的mips_cache_reset对cache进行初始化。这时,配置栈的地址进行调用函数board_init_f(board.c)进入函数board_init_f后,首先做一系列初始化:timer_init 时钟初始化env_init 环境变量初始化(取得环境变量存放的地址)init_baudrate 串口速率serial_init 串口初始化init_func_ram 初始化内存,配置ddr controlle……
这一系列工作完成后,串口和内存都已经可以用了。然后,就要把内存进行划分,在内存的最后一部分,留出u-boot代码大小的空间,准备把u-boot代码从flash搬移到这里。然后,是堆的空间,malloc的内存就来自于这里。内存划分好,就准备进行relocate code了。relocate code的意思是这样的。通常u-boot的执行代码肯定是在flash上(当调试的时候也可以放在ram上)。当启动起来以后,要把它从flash上搬移到ram里运行。这个工作就叫做relocate code。就把u-boot的执行代码直接从flash里copy到ram的相应区域。之后,就进入board.c的board_init_r函数,在这个函数里初始化 malloc,flash,pci 以及外设(比如,网口),最后进入命令行Linux kernel。
图1 stage 1
图2 stage 2
2、内核启动部分
内核完成启动后,会解压缩初始化内存盘,并把它挂载为根文件系统,随后运行这个小文件系统里的启动脚本,完成一些特殊任务,例如启动时显示炫耀画面(bootsplash)、加载真实文件系统所在设备的硬件驱动模块以及其它重要模块等等,然后卸载初始化内存盘,并根据引导管理器传递过来的真实根目录的位置,使用新加载的初始化内存盘里的额外驱动以及必要的配置信息识别出真实根文件系统存放的设备,以只读方式加载真实根文件系统,并探测是否有一些重要目录和文件(例如:/sbin/init、/etc/fstab),如果根文件系统加载出错,就会报告:内核惊恐,找不到 init。如果根文件系统顺利加载,则运行常规开机文件系统检查[对哪些设备上的文件系统进行检查,取决于/etc/fstab 配置文件里每行配置语句里最后的一个字段,那是一个数字,除了根文件系统是 1(强制),其它均为 0(不检测) 或者 2(总是检测)],根据/etc/fstab 配置文件里指定的文件系统自动启动相应文件系统专用的 fsck工具扫描文件系统,遇到问题通常会自动修正错误,然后再以可读写方式重新挂载真实根文件系统,接着搜索并执行 /sbin/init 可执行程序(也可以是脚本),这样 init 成为系统里第一个进程,至此内核已将引导权交给 init 进程。
图3 内核启动流程
3、init进程执行
Init 进程首先会搜索并运行启动脚本/etc/rc.d/rc
图4 init进程执行流程
其中vstart的具体启动流程如下:
图5 vstart 启动流程
4、版本相关命令
4.1 版本相关信息定义
/etc/versionflag的定义:
byte0: 目标版本,0:app0;1:app1
byte1: 失败次数
byte2: 启动方式,0:flash;1:tftp
byte3: 当前运行版本,0:app0;1:app1
4.2查看版本信息的相关命令vlist详解
vlist –ver0 显示app0的版本号
vlist –ver1 显示app1的版本号
vlist –running 显示当前运行的版本号
vlist –target 获取目标版本号
4.3版本烧写方式、版本选择命令vflag
vflag change 当前版本和备用版本的切换
vflag tftp 从服务器将包下载到ram中,再进行启动版本
您可能关注的文档
最近下载
- 智慧城市云计算大数据中心项目深化设计方案(403页word).docx VIP
- 全国高中青年数学教师优质课大赛一等奖《基本不等式》教学设计.doc VIP
- 中华民族共同体概论第一讲 中华民族共同体基础理论part1.pptx VIP
- 儿童绘本改编与创作教案.pdf VIP
- JGJ-T291-2012:现浇塑性混凝土防渗芯墙施工技术规程.pdf VIP
- 实施指南《GB_T18944.2-2022柔性多孔聚合物材料海绵和发泡橡胶制品规范第2部分:模制品与挤出制品》实施指南.docx VIP
- 2022新能源风电场接入集控中心技术方案.doc VIP
- 白头翁的故事培智.ppt VIP
- 应聘人员登记表单.docx VIP
- 5S_培训教材.ppt VIP
文档评论(0)