B1、WinCE6.0内核启动流程-------之bootloader解释

Win10下Fastboot模式下设备无法识别的解决方案 在使用Android Debug Bridge (ADB) 和 Fastboot 工具时,有时可能会遇到Windows 10无法在Fastboot模式下识别Android设备的问题。这种情况通常需要手动安装Bootloader驱动程序,并可能需要禁用驱动程序签名强制。本文将详细介绍如何解决此问题。 阅读详情

 

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的工作流程和函数调用

具体解释如下:

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

1.系统上电或者复位后执行的第一条语句,主要功能是对目标系统的嵌入式CPU执行最基本的初始化,为CPU准备一个合适的运行环境,如清空TLB和cache、关中断、配置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 CE下Eboot的内存的配置。

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

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

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

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

 

Win10:fastboot驱动问题解决方案 Win10:fastboot驱动问题解决方案。 阅读详情

相关推荐

WinCE6.0的EBOOT概要

在开发的过程中使用EBOOT,可以提高开发效率。前一篇介绍NBOOT加载EBOOT的方法时提到,NBOOT必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。本文粗略的介绍了WinCE6、0下EBOOT的内容,但没有涉及具体的代码实现,相关代码可以参考目录C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT。EBOOT在实现必备功能的前提下,我们还可以扩展其功能,譬如说初始化LCD,并显示特定的启动画面,显示加载映像的进度等。

智光工作室 1026

Windows系统安装adb/fastboot驱动教程

1

m0_60352504的博客 5万+

WinCE6.0嵌入式系统移植实战详解

WinCE6.0是微软推出的一款模块化、可裁剪的嵌入式操作系统,广泛应用于工业控制、智能设备及手持终端等领域。其核心架构采用微内核设计,包含OAL(OEM适配层)、内核(Kernel)、设备驱动(Drivers)与上层应用接口(GWES、Filesys等),具备良好的实时性与可移植性。系统通过模块化组件实现灵活配置,开发者可根据硬件平台特性进行定制化裁剪与功能扩展。移植WinCE6.0至新硬件平台,需完成Bootloader引导、OAL适配、驱动开发及系统集成等关键步骤。

weixin_36078669的博客 957

WinCE6.0bootloader的研究

为了加载操作系统映像至内存,Bootloader在BSP的开发中至关重要。 1.BootLoader的架构 1.1 Bootloader简介 Bootloader是建立在操作系统内核运行之前的一小段程序,通过这段小程序,可以初始化硬件设备、建立系统的内存空间映射图,从而将系统的软硬件环境带到一个已知的状态,以便为最终调用操作系统内核准备好正确的环境。最终,Bootloader把操作...

weixin_30847271的博客 159

基于WinCE 6.0的2416板级支持包(BSP)开发实战

BSP全称为“板级支持包”,它并非操作系统的组成部分,而是作为操作系统与具体硬件之间的适配层存在。在WinCE架构中,操作系统本身被设计为高度模块化和可裁剪的微内核系统,而BSP则负责将这些模块与实际物理设备进行绑定。以S3C2416为例,该处理器采用ARM926EJ-S架构,集成了多种外设控制器(如UART、I²C、USB、PWM等),但WinCE内核并不直接知道这些外设的存在或地址映射方式。

weixin_36444661的博客 1079

WinCE6中Boot Loader工作流程

本文档主要讲述了Windows CE 6.0中Boot Loader的整个工作流程,且列出各函数及所在文件位置。 本文档适用了WinCE6开发的初学者

Bootloader的启动与功能

Bootloader介绍 Bootloader可以解释为启动引导程序,相当于我们用windows的电脑开机时都会有一段启动的时间,在windows上被称为BIOS启动,。Bootloader在不同的CPU架构和不同的操作系统有不同的标准,如针对X86架构的LILO,针对ARM架构的armboot等,下面以一款arm板子讲解,一通百通 S5P6818启动过程(一通百通) 查看数据手册可知道芯片一共有五种启动设备的方式 具体启动方式由我们自己配置一共寄存器,RST_CFG寄存器,这个寄存器里面的值和芯片引脚

m0_46217142的博客 2280

Qwen2.5-Omni实战:5分钟搞定多模态AI模型本地部署(含Thinker-Talker架构解析)

本文详细介绍了Qwen2.5-Omni多模态AI模型的本地部署流程,包括硬件配置、环境准备和实战应用开发。特别解析了其创新的Thinker-Talker架构,该架构通过TMRoPE位置编码实现跨模态同步处理,大幅提升多模态任务效率。5分钟即可完成部署,适合开发者快速实现文本、图像和音频的联合处理。

weixin_29085865的博客 171

SD卡引导WinCE启动引发的种种有关…

SD卡引导WinCE启动引发的种种问题 前几天在调试SD卡引导WinCE内核的Bootloader,功能调试成功后系统可以从SD卡启动,但是发现有以下问题: SD卡只能工作在5MHz以下,确切的说SDIPRE的预分频值只能是13,如果换成其它频率,那么在Bootloader运行完毕跳转到内核启动地址(比如0x30200000)的时候会卡死,不知道是什么原因。这样的话从上电开机到内核初始化大约需要

无语僧 1414

从补码原理到实践:RISC-V中addi指令的符号扩展机制详解

本文深入解析了RISC-V架构中addi指令的符号扩展机制。从补码的数学原理出发,详细阐述了12位立即数在指令编码中如何通过符号位进行扩展,并结合lui指令,揭示了加载任意32位立即数的正确方法与实践陷阱,帮助开发者编写高效可靠的底层代码。

weixin_29161719的博客 139

K-近邻算法: k-nearest neighbor classification (kNN) 详细介绍

@创建于:2020.04.09 @修改于:2020.04.09,2024.06.22 文章目录1、kNN介绍2、k近邻法的三要素详解2.1 距离度量2.2 k值的选择2.3 分类决策规则3、k近邻法的实现:kd树4、Python实现过程5、优缺点6、常见问题 1、kNN介绍 kNN是一个基本而简单的分类算法,作为监督学习,那么KNN模型需要的是有标签的训练数据,对于新样本的类别由与新样本距离最近的k个训练样本点按照分类...

chenhepg的博客 9万+

SD卡加载和引导WinCE内核映像的实现

传统的嵌入式系统大部分使用NOR Flash或者NAND Flash等非易失闪存来存储数据和引导系统启动,但是由于读写Flash存储设备需要专用接口,使得传统方法有很多不便之处。本文提出了一种使用SD卡(Secure Digital Memory Card)加载和引导内核WinCE内核映像的方法,可以通过嵌入式系统的SD卡接口方便地实现内核的引导和更新。   当一款基于WinCE操作系统的嵌入式

cjwsimple 1717

单细胞分析(五)——使用Harmony进行数据整合和去批次

为了保证单细胞RNA测序数据的准确性和可靠性,需要对数据进行样本去批次处理。去批次的方法包括Harmony,SeuratV3等,这些方法可以有效地消除批次效应和技术噪声,并提高单细胞RNA测序数据的质量,为后续的数据分析提供更加可靠的基础。

阅读文献,记录学习笔记 3万+

Wince bootloader和内核定制

Wince bootloader和内核定制 l BootLoader 之Eboot        NBOOT nboot是从NAND flash读image到内存并执行,也可以读eboot.nb0到内存中并执行,eboot是下载并烧写image到内存并执行。将nboot.nb0烧到第0块,将eboot.nb0烧到第2块。启动时nboot从flash读出eboot并执行之。

JasonBUG 884

1998年高教社杯全国大学生数学建模竞赛 B 题:《灾情巡视路线》真题解析与 MATLAB 解决方案

🏆 本文已收录于专栏:《滚雪球学数学建模(含历年真题)》,持续更新最新及历年数学建模竞赛资料,每篇内容力求做到“问题讲透、模型讲清、代码可用、论文可参考”,帮助你从零开始逐步建立完整的数学建模知识体系。

**My Coding Family** 883

DeepSeek如何构建可扩展的 AI 驱动交易系统,基于 MetaTrader 5 与 Python 利用先进的数据处理、机器学习和容器化部署来优化算法交易。

MT5 Python API 架构设计分为三层:通信层:利用异步消息传递(例如 ZeroMQ 或标准套接字编程)支持每秒数万个数据请求。转换层: C++ 动态库有效地将 MT5 命令转换为 Python 对象(反之亦然),从而优化速度和内存使用率。接口层:提供Pythonic API,封装了所有终端功能,包括:1)实时价格订阅(滴答或秒级更新)2)历史数据检索(从M1到更高的时间范围)3)订单流监控(交易详情和市场深度)4)策略执行引擎(用于算法交易)

iCloudEnd的博客 1381

WinCE Bootloader的烧写与内核影像下载

WinCE操作系统和其他OS不同,它具有两级Bootloader来引导内核镜像(Nboot和Eboot)。在Bootloader阶段,比起其他系统Bootloader来讲要复杂。         Nboot(NandFlash Bootloader)是WinCE的第一级Bootloader,位于Nand Flash的Block0。主要负责初始化Flash,读取TOC(Table of Con

moqingxinai2008的专栏 589

Vue3 - Element Plus 全局修改更换主题色配置详细教程,element-plus自定义主题色全局替换主色调强力解决方案,支持动态修改主题颜色/动态皮肤,将默认蓝色主题色更换为其他颜色!

vue3,nuxt3,element-plus,组件库,主题色,修改主题颜色,更换主题色,如何修改组件默认主题蓝色,项目主题色定制,修改失败,主题色覆盖不了,:root直接修改,hover颜色没改,自定义主题色,vue3全局设置elementPlus主题色最新详细修改教程,怎么修改全局的颜色,scss变量,覆盖原来的主题色改为自己的颜色,统一替换,有没有好办法,颜色不变,失败,无效,动态主题切换,主题颜色怎么在项目里直接改,plus主题色更换,覆盖默认主题色,最强最好用,设置主题色,换肤,皮肤,动态更换

🏆 前端领域优质创作者 1万+

WinCE6.0 EBOOT概要

为一个新的硬件设备定制WinCE6、0操作系统的主要步骤如下: 1、针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。 2、利用创建的BSP,定制一个系统设计(OS Design)。即通过VS2005创建一个Platform

DriverMonkey的专栏 1116

Apollo Planning决策规划算法代码详细解析 (1):Scenario选择

本文重点讲解Apollo代码中怎样配置Scenario以及选择当前Scenario,Scenario决策是Apollo规划算法的第一步,本文会对代码进行详细解析,也会梳理整个决策流程,码字不易,喜欢的朋友们麻烦点个关注与赞。 在本文你将学到下面这些内容: 规划器planer的种类; 规划器planer的主要函数及逻辑; 场景管理类ScenarioManager的运行机制; 场景注册方法; 场景决策流程,如何选择当前场景 详细的apollo决策规划代码分析 代码具体过程如下: 1、Scenar

自动驾驶Player的博客 1万+

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

WinCE系统下BootLoader的开发

Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统。它最大程度继承了桌面版Windows操作系统的丰富功能,同时又副入了许多新特性,以适应嵌入式领域的实际情况和要求。无论是商业应用需求,还是人们的多媒体消费需求,都能被采用CE操作系统的设备很轻松的满足。最新的.NET版本较之3.0版本,在实时性和稳定性上有大幅度提高,开始广泛地被平板电脑、数码相机、彩屏手机、PDA等多种高性能产

S5PV210开发板-保定芯灵思 661

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

wince6移植之内核启动

到目前,我移植的s3c2440bsp在wince6下可以跑到oeminit了,并且已经跑完。下面的事情似乎就是移植相关的drivers了。 其实从可以编译nk.nb0到可以跑完oal没有什么太多要做的事情。首先调整了下config.bib文件中的nk的地址,以至于可以让原来现成的bootloader与其配套。修改debug.c中的调试串口的初始化,由...

weixin_33827731的博客 146

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

WinCE移植流程综述-基础,入门,总结,详细

本文转载,地址:http://bbs.manbu.cc/viewthread.php?tid=9636,版权问题,马上删除此帖献给喜欢<span class="t_tag" onclick="function onclick(){tagshow(event)}">折腾的G友,这是关于<span class="t_tag" onclick="function oncl

1062

Wince系统自启动程序开发与部署指南

嵌入式系统中的自启动程序是实现设备自动化运行的关键技术。通过注册表机制控制程序启动顺序,需要严格遵循内存管理和异常处理规范。在Wince系统中,启动流程分为Bootloader、内核加载和Shell启动三个阶段,其中注册表路径HKEY_LOCAL_MACHINE\init是控制自启动的核心。开发时需注意无GUI依赖、精简内存占用等要求,推荐使用Visual Studio 2008+Platform Builder组合。实际部署中,可通过直接修改注册表或导入REG文件实现,高级场景还可定制系统镜像。典型问题如

weixin_30693683的博客 388
上一篇: B2、WINCE6.0内核的启动过程----------之OAL解释
__poly__
博客等级 码龄15年 0粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值