WinCE6.0bootloader的研究

2023-05-16

     为了加载操作系统映像至内存,BootloaderBSP的开发中至关重要。

1.BootLoader的架构

1.1  Bootloader简介

Bootloader是建立在操作系统内核运行之前的一小段程序,通过这段小程序,可以初始化硬件设备、建立系统的内存空间映射图,从而将系统的软硬件环境带到一个已知的状态,以便为最终调用操作系统内核准备好正确的环境。最终,Bootloader把操作系统内核映像加载到RAM中,并将系统控制权传递给它

一个典型的bootloader是由blcommon、OEM代码、EBOOT和网络驱动程序等组成,如图1所示:

 

 

1 Bootloader的架构

    Windows CE提供了BLCOMMON、EBOOT以及网络驱动程序相应的程序库,因此设计时建议尽量复用这些程序库,这样可以快速且高质量地完成Bootloader的开发

1.2 Bootloader启动分析

当打开电源或者复位时,CPU首先执行Startup函数,Startup函数通常由汇编语言代码编写,主要用来建立存储器访问和初始化缓存。然后Startup函数跳转到Boot loader的第一个C语言函数main,该函数会接着调用BLCOMMON框架的BootloaderMain接口函数。Blcommon框架被实现为blcommon.lib库,并与平台特定的Bootloader代码进行链接。Bootloader的工作流程和函数调用如图2所示:

 

 

2 Boot loader的工作流程和函数调用

具体解释如下:

1.系统上电或者复位后执行的第一条语句,主要功能是对目标系统的嵌入式CPU执行最基本的初始化,为CPU准备一个合适的运行环境,如清空TLBcache、关中断、配置PLL、设置内存控制器。

2.调用BootloaderMain函数。进入高级语言的代码处理。

3. BootloaderMain函数调用KernelRelocate函数对Bootloader的全局变量重定位。

4.调用OEMDebugInit函数来初始化Boot loader的调试功能串口,这样就可以使用串口打印调试信息了。

5.调用OEMPlatformInit函数,进一步初始化目标嵌入式硬件平台,很多和平台相关的初始化工作都可以在这个函数中完成,比如时钟、下载传输端口、Flash存储器等。

6.调用OEMPreDownload函数,该函数在下载镜像之前被调用。从流程上来说应该是为下载内核做一些准备工作,该函数执行后,根据返回值得不同可以选择下载内核,或者跳转执行。 最典型的是通过调试串口向用户输出菜单选项然后接收用户的相应输入。

7.如果OEMPreDownload函数返回BL_DOWNLOAD时,将会从主机下载Windows CE image

8.如果OEMPreDownload函数返回BL_JUMP时,直接跳转到Windows CE image所在的位置开始执行或者从本地存储器加载的操作系统镜像中运行。

其中涉及的OEM函数都是需要用户自己实现的,然后被BLCOMMON模块来调用。

2 Bootloader配置文件的编写

在实现Boot loader中需要OEM用户自己编写的部分之后,需要编写以下配置文件:

SOURCES文件:定义了代码的编译方法。编译程序通过SOURCES文件决定如何对代码进行编译和链接

Makefile文件:需要包含Windows CE的通用Makefile

Dirs文件:定义了对应文件夹的子目录,编译器通过Dirs文件确定要编译的文件位置。

Eboot.bib文件:该文件描述了Windows CEEboot的内存的配置。下面以2440通用配置为例:

ExpandedBlockStart.gif 代码
MEMORY
;   Name     Start     Size      Type
;   
-------    --------    --------    ----
    ARGS     
80020800    00000800   RESERVED      ;bootloader和操作系统共享此区域
    BINFS    
80021000    00005000   RESERVED      ;二进制ROM映像文件系统
    STACK    8002c000  
00004000   RESERVED      ;bootloader栈,16KB
    EBOOT    
80038000    00040000   RAMIMAGE      ;eboot的大小256KB,在实现LOGO时候注意不能超过此值
    RAM      800a0000  
00020000   RAM           ;bootloader RAM 128KB

; Area used to cache nk.bin 
while  programming flash
    FLSCACHE 
80200000    01400000   RESERVED 
    DISPLAY  
80100000    00100000   RESERVED

CONFIG
    COMPRESSION
= OFF
    PROFILE
= OFF
    KERNELFIXUPS
= ON
;    ROMOFFSET
= 25FC8000
    SRE
= ON
    ROMSTART
= 80038000
    ROMWIDTH
= 32
    ROMSIZE
= 00040000

MODULES
;   Name            Path                                                              Memory Type
;   
--------------    ----------------------------------------------                      -----------
    nk.exe          $(_TARGETPLATROOT)\target\$(_TGTCPU)\$(WINCEDEBUG)\eboot.exe      EBOOT


 

在实现上述配置文件之后,就可以编译Bootloader的代码,最终生成Eboot.bin的文件,通过对其的烧写,可以顺利完成内核镜像文件的下载。

     这里,我稍微解释一下,可能对初学者有用。eboot.bib和config.bib中都有CONFIG配置区域,二者有什么区别和联系呢?

联系就是二者都是配置选项,毫无疑问,二者的语法意思也是一样的。

不同之处在于,eboot.bib的配置选项是对eboot.bin或者eboot.nb0镜像的创建、加载以及存储方式进行设置,而config.bib的配置选项是对NK.BIN或者NK.NB0镜像的创建、加载以及存储方式进行设置。


转载于:https://www.cnblogs.com/Torres_fans/archive/2010/08/14/1799566.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinCE6.0bootloader的研究 的相关文章

  • ubuntu配置XManager可用

    前提 xff1a 确保XManager所在PC和ubuntu所在主机的网络可相互访问 一 配置ubuntu 1 安装gdm软件 sudo apt get install gdm 安装后配置成默认的light模式即可 2 查看是否已经安装 s
  • ROS 自定义消息类型

    引言 学习ROS的过程中 xff0c 在话题的发布与订阅之间 xff0c 我一直在思考 xff0c 我们能不能定义自己的话题名 xff0c 甚至在编写我们自己的ROS软件包时 xff0c 定义我们自己的消息类型 首先能不能定义自己的话题名
  • char ch= 中 什么意思java_问一下java里的char到底是什么

    我们上课用的联系学java的软件是readytoprogramJAVAIDE xff0c 学到char变量的时候出了点问题 xff0c 教材上教的是让我们输 xff1a charch1 ch2 ch3 ch1 61 c readChar c
  • 理科大学可能类似纹路里

    11月5日 xff0c 第二届上海市政府新闻办公室推出全新形象片 上海 恒新之城 xff0c 以更为开放 更求创新 更讲包容的姿态展示新时代的风采 xff0c 迎接的到来 开放 创新 包容已成为上海最鲜明的品格 xff0c 这种品格是新时代
  • 三星 S10 运行 Ubuntu 系统

    导读DeX 是一种模仿桌面操作系统的用户 UI 界面 xff0c 把支持 DeX 的三星手机用数据线连上外置显示器 xff0c 用户就可以获得一种类似桌面系统的使用体验 三星 S8 Note 8 S9 Note 9 S10 系列都支持 De
  • Ubuntu的妥协将支持精选的32位应用

    据外媒Tom 39 s hardware xff0c Ubuntu开发人员Canonical在早先的时候宣布Ubuntu 19 10将不再更新32位软件包和应用程序 xff0c 引来了诸多应用开发者的不满 现在 xff0c Ubuntu方面
  • Jdk升级到11引起的问题:程序包javax.xml.bind.annotation不存在

    Jdk升级到11引起的问题 xff1a 程序包javax xml bind annotation不存在 Jdk12 都发布了 xff0c 我也下载一个玩一玩吧 刚准备要下载 xff0c 发现之前已经下载了一个11 xff0c 那就11 吧
  • 车载系统测试-功能测试第一天

    一 混动车型测试前注意 1 踩刹车加启动按钮 xff0c 进入ok模式 xff0c OK模式下可以进行常规测试 xff1b 点击启动按钮进入acc on模式 xff1b 在ok模式下 xff0c 充电不可用时可以踩油门进行充电 xff1b
  • 去除office非正版提示的方法(转)

    又是office的问题 每次回家都碰到相关问题 这次是微软正版计划的认证 去百度一下发现是一个 34 Office 正版增值计划通知 KB949810 CHS 34 补丁的问题 症状是 打开Office中的相应组件如WORD xff0c 那
  • 在SQLSERVER中如何检测一个字符串中是否包含另一个字符串

    当charindex返回值大于0时则包含 为0不包含 select CHARINDEX 39 456 39 39 123456 39 SQL语句使用CHARINDEX函数 xff0c 来测试一个字符串中是否包含另一个字符串中的方法 xff1
  • vim全选,全部复制,全部删除

    全选 xff08 高亮显示 xff09 xff1a 按esc后 xff0c 然后ggvG或者ggVG 全部复制 xff1a 按esc后 xff0c 然后ggyG 全部删除 xff1a 按esc后 xff0c 然后dG 解析 xff1a gg
  • FTP命令收集

    FTP FTP命令是Internet用户使用最频繁的命令之一 xff0c 熟悉并灵活应用FTP的内部命令 xff0c 可以大大方便使用者 xff0c 并收到事半功倍之效 如果你想学习使用进行后台FTP下载 xff0c 那么就必须学习FTP指
  • 如何屏蔽Chrome新标签页中8个缩略图

    PS xff1a 该经验本源来百度 雨燕之子 技术流匠师 xff0c 然本文图片等整理均属原创 第一步 xff1a 安装扩展Stylish 第二步 xff1a 安装成功红写入新样式 xff0c 名称自己起个喜欢的就好 xff0c 代码内容
  • VNC 登录上去灰屏,没有shell脚本,鼠标变成X

    CenterOS 1 安装vncserver yum install tigervnc server y 2 vncpasswd 设置pwd 3 etc sysconfig vncservers VNCSERVER 61 34 1 root
  • 计算机编程之高级语言

    高级语言 High level programming language 相对于机器语言 machine language xff0c 是一种指令集的体系 这种指令集 xff0c 称机器码 machine code xff0c 是电脑的CP
  • C/C++ 笔试,难倒我哉

    2012 6 27日下午 xff0c 去了一个软件公司笔试面试 xff0c 3道题目 xff0c 都是 C 语言的编程题 xff0c 题意简单明了 xff0c 写起来好麻烦 xff0c 而且是在纸上写的 xff0c 平常习惯了写写改改 xf
  • 【C++实现python字符串函数库】一:分割函数:split、rsplit

    C 43 43 实现python字符串函数库 split 与rsplit 方法 前言 本系列文章将介绍python提供的字符串函数 xff0c 并尝试使用C 43 43 来实现这些函数 这些C 43 43 函数在这里做单独的分析 xff0c
  • python处理excel链接_Python处理Excel文件实例代码

    由于工作需要 需要检查是否一个查询的一部分内容是有效的 查询存储在Excel中 文本内容页面的标题 和页面的URL格式中的每个细胞的超链接 所以我本能地想到使用Python来读取Excel文件并执行文本分析 然后为每个链接时 执行一个Htt

随机推荐

  • 无所事事的周末

    按理说 xff0c 晚上睡得很早 xff0c 早上应该起得早 不幸的是 xff0c 酒精已经渗入身体 xff0c 身体多个部位都不舒服 早上起的是很迟的 xff0c 已经到了上午十点钟 xff0c 起来后并没有做什么事情 xff0c 和舍友
  • CocosCreator的节点显示和隐藏

    隐藏和显示有两种方式 xff1a 1 禁止节点node的运行 xff0c 方法是x node active 61 false 此时隐藏了节点 xff0c 且节点不再运行 恢复节点正常运行 xff0c x node active 61 tru
  • php获取mysql数据并导出为txt_php提交过来的数据生成为txt文件

    一共两个文件 xff0c 具体链接数据库的部分给直接去除了 xff0c 前台是提交的文字部分 xff0c 一行一个 xff0c 在提交后另一个程序文件进行处理 xff0c 然后按照提交的文件名生成相应的txt 文件 xff0c 并在txt
  • (?!)正则表达式的用法

    xff08 xff1f xff01 xff09 表示不匹配一段字符串中的指定字符串 xff0c 例如 xff1a flag 61 True 指匹配指定部位的布尔值 xff0c 可以写成 xff1a s 43 flag s 43 61 s 4
  • HTML5资源汇总(更新游戏引擎cocos2d-html5)

    我也是现学现用 xff0c 想了解的可以看看效果 xff0c 想知道实现的也有源码 http cocos2d html5 org Cocos2d HTML5 API和Cocos2d x一致 xff0c 同样的代码可以支持cocos2d x
  • Sumo 模型细节_VehicleSpeed

    在仿真中 xff0c 对车速的影响是多方面的 每一种影响都为车速设定了上限 在任何给定情况下的实际速度是所有影响的最小速度 maxSpeed lt vType gt attribute maxSpeed 可以被认为是发动机的最大速度或驾驶员
  • python的一些语法糖

    1 Python中if else语句的多种写法 a b c 61 1 2 3 1 常规 if a gt b c 61 a else c 61 b 2 表达式 c 61 a if a gt b else b 3 二维列表 c 61 b a a
  • Ubuntu下安装使用Xfce4

    安装 xff1a 代码 sudo apt get install xfce4 xfce4 taskbar plugin xfce4 taskbar plugin是我需要 xff0c 你可不用 xff0c 完整安装xfce4 的桌面环境 su
  • 彻底卸载Xubuntu Kubuntu

    卸载Xubuntu sudo apt remove activity log manager apg apport gtk apt offline aptdaemon aptdaemon data atril atril common bi
  • Wincap安装出现“error opening file for writing wpcap.dll”之解决办法

    Wincap安装出现 error opening file for writing wpcap dll 之解决办法 安装Wireshark时 xff0c 一直出现下面的错误 xff0c 选择忽略这个错误 xff0c Wireshark能正常
  • sqlserver调用webapi

    1 开启组件 xff08 2012以上版本支持 xff09 sp configure 39 show advanced options 39 1 GO RECONFIGURE GO sp configure 39 Ole Automatio
  • 贪吃蛇c语言代码 vc++6.0,贪吃蛇代码-C语言版-VC++6.0

    这是一个贪吃蛇代码 运行环境VC 43 43 6 0 该程序不需要graphics h头文件 这是一个贪吃蛇代码 xff0c 运行环境VC 43 43 6 0 亲测完美运行 该程序在dos系统下运行 xff0c 不需要graphics h头
  • indent expected

    缩进问题 检查代码缩进 转载于 https www cnblogs com gcixx p 11448437 html
  • kibana配置文件说明书

    端口号 server port 5601 kibana服务安装的地址 server host 34 192 168 122 21 34 当使用代理时 xff0c 这里可能对应的是加工后的kibana的URL server basePath
  • ORACLE 清理SYSAUX表空间

    在数据库检查中发现SYSAUX表空间占用过大 xff0c SYSAUX是ORACLE10G开始提供的功能 xff0c 用于数据库为SYSTEM表空间减负 用以下语句查出相应的表空间值 select a tablespace name tru
  • Ubuntu怎么切换为中文版

    Ubuntu怎么切换为中文版 1 打开Ubuntu 2 打开设置 系统设置 xff1b 3 进入Language Support xff1b 4 安装语言 xff1b 5 这时在语言菜单中可以看到安装好的汉语 xff1b 6 将安装好的语言
  • django rest framework自定义返回格式

    一 默认response view from rest framework generics import ListAPIView from serializer import IdcSerializer from models impor
  • Go used as value问题

    练习Go变参时遇到一个报错 xff1a used as value 代码如下 xff1a 错误代码 func myfunc arg int for n 61 range arg fmt Printf 34 And the number is
  • 核密度图(直方图的拟合曲线)

    核密度图可以看作是概率密度图 xff0c 其纵轴可以粗略看做是数据出现的次数 xff0c 与横轴围成的面积是一 法一 xff1a seaborn的kdeplot函数专门用于画核密度估计图 参考 xff1a https www jianshu
  • WinCE6.0bootloader的研究

    为了加载操作系统映像至内存 xff0c Bootloader 在 BSP 的开发中至关重要 1 BootLoader的架构 1 1 Bootloader 简介 Bootloader 是建立在操作系统内核运行之前的一小段程序 xff0c 通过