WinCE系统下BootLoader的开发【转载】

Python 爬虫:获取网页数据的 5 种方法 requests:适用于简单的静态网页抓取,易于使用。requestslxml:适合需要高效解析大规模网页内容的情况,支持 XPath 和 CSS 选择器。Selenium:适用于动态网页(JavaScript 渲染)的抓取,模拟浏览器行为获取动态数据。Scrapy:强大的爬虫框架,适合大规模的网页抓取任务,支持异步请求和高级功能。PyQuery:基于 jQuery 语法,适合快速开发,提供简洁的 CSS 选择器语法。 阅读详情

WinCE系统下BootLoader的开发【转载】
 
引言

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

但是,CE并不是一个通用的安装版操作系统,在形形色色的嵌入式硬件设备世界里, 一款CE系统通常只会针对某一种硬件平台生成。所以,作为原始设备生产商,必须根据自己的硬件平台和应用场合定制CE,最主要的工作就是编写适合于自己的板级支持包(BSP)。在BSP中,包含了一个重要的组成部分——BootLoader。创建一未功能完善的BootLoader,是开发WinCE系统的第一步,也是极为关键的一步。本文将结合开发实例,介绍如何开发适合于自己硬件的BootLoader。

1 定制CE操作系统的基本知识

定制CE操作系统是采用微软的工具软件:Platform Builder(PB)。该工具能够根据用户的需求,选择构建具有不同内核功能的CE系统。同时,它也是一个集成的编译环境,可以为所有CE支持的CPU目标代码编译C/C++程序。前面所说的BSP和BootLoader程序就是在该环境下编译,并整合到CE系统中去的。一旦成功地编译了一个CE系统,就会得到一个名为nk.bin的映像文件。只要将该文件下载到目标平台(device端),就能够运行CE了。

2 BootLoader

BootLoader是一段单独的程序代码,它存放于目标平台的非易失存储介质中,如ROM或Flash。在开发CE的过程中,它主要用于启动硬件和下载nk.bin到目标板上,并有一定的监控作用。


图1描述了WinCE的BSP基本结构以及BootLoader所处的位置。

一般来说,对于BootLoader的功能要求并不是严格定义的,不同的场合区别很大。比如,在PC的硬件平台上,由于硬件启动根本就不是通过BootLoader(而是通过BIOS),所以BootLoader就不需要对CPU加电后的初始化做任何工作;而在笔者的开发平台(MIPS32)上,BootLoader是最先被执行的程序,所以就必须包括加电初始化程序。通常,BootLoader必须包含下载CE映像文件的功能。另外,管理监控硬件设备通常也是必须的,因为这可以极大地方便工程开发。由于BootLoader涉及到基本的硬件操作,如CPU的结构、指令等,同时又涉及到以太网下载协议(TFTP,当然也可能通过串口)和策软设定的映像文件格式。因此从零实现的话,会需要相当长的过程。好在微软为每种类型的CPU都提供了某种标准开发板的BootLoader例程,因此通常的做法是:从这些例程中寻找与硬件平台最接近的作为标本程序,然后再从自己的硬件平台上入手做相应的改动。一些新的评估板可能会由第三方的厂商来提供Bootloader。如果硬件平台是从这样的基板设计而来的话,那么最好去寻求这些厂商获取Bootloader来移植,以减少工作量。

笔者使用的硬件平台基于MIPS32架构,下载端口采用的是以太网口,同时还具备一个串口,主机相连,通过超级终端对该平台加以控制。该平台是参考AMD的一款标准估计板设计的,BootLoader以该板的BootLoader为参考进行了移植。

3 编写BootLoader源程序

前面已经提到,由于硬件的不同,BootLoader的功能可能有多有少,此处笔者以自己开发BootLoader的过程进行叙述。


图2是笔者BootLoader的工程流程。

3.1 启动部分

首先要实现初台化硬件的功能。在参考板的BootLoader目录下,会发现一些.s文件,可能会是init.s或者是reset.s等,这样的文件是CPU加电后最先执行的代码。由于此处是用汇编语言编写的,所以与CPU关系紧密。一般参考板的CPU与开发平台的CPU会是相同或者是同一个架构的。笔者使用的是属于同一种CPU的情况,所以对寄存器的定义和初始化流程都可以不加改动。接着就是对于平台配置的分析,包括平台存储空间的分配、外围设备的工作设定等。一般这里的区别是非常大的。所以必须要对CPU寄存器的值作相应设定。这部分工作可能需要CPU提供商方面的帮助。

应该说,这部分工作是BootLoader的一大重点,但由于和实际的硬件非常大,所以不可能做进一步的详细叙述。

3.2 主控部分

从这一部分开始,均用C语言编写。

为了增加BootLoader对平台的控制,一般BootLoader都会设计成支持命令输入的方式,通过串口来接收用户的命令。这种机制中,如果参考板有Loader支持的话,那么可以自己添加有实用价值的命令,完成一些需要的功能。

从图2中可以看出,一般在平台调试完毕后,可以在不用人工干预的情况下自动加载CE(这也是BootLoader必需的功能之一);而在调试阶段,基本上是通过Loader所支持的命令来进行操作的。提供足够丰富的命令,能极大简化和全面测试开发平台。如表1所列,是笔者Loader所提供的命令。

表1

命令 说明

Help_______列出所有支持的命令并加以说明
Eboot _____从开发台下载CE映像并加载
Write______向某一内存地址写入数据
Read______显示某一内存地址的数据
Jump______跳转到某一地址执行程序
Xmodem___从计算机的超级终端接收以Xmodem协议传送的文件
Toy_______测试平台CPU的计数器是否运转
Flash______擦除或者更新Flash中的数据
Tlbread____显示CPU的所有TLB表
Tlbwrit____设置CPU的TLB
Macaddr___设置CPU的MAC地址
Seti_______设置平台的IP地址

这些命令涉及到平台调试的各个方面,像内存检测、Flash操作、文件下载等。借助于这些命令,不仅可以完成硬件平台的部分测试,还完成了作为CE的BootLoader程序最为重要的一个功能——下载CE映像。

3.3 下载部分

在用Platform Builder编译生成CE的映像文件后,接下来就需要将该文件下载到目标板上。如果说硬件调试功能可以由其它的程序代替而不放入BootLoader中,但是下载映像文件却是BootLoader必需的功能。

CE映像文件通常叫做nk.bin,它是Windows CE二进制数据格式文件,不仅包含了有效的程序代码,还有按照一定规则加入的控制信息。当然,也可以选择生成.sre格式的代码文件,但是相于对前一种格式,它的代码要长很多,所需要的下载时间也更长。在这里,我们以下载.bin格式的文件来说明下载的实现。


首先看一下图3所示的BootLoader下载部分的流程图。

通常,在Platform Builder自带的代码中,会包含完成TFTP连接的了基本的函数。

*初始化TFTP连接:用函数EbootInitTFtp()和EbootInitTFtpd()完成。

*登记解析.bin格式数据的回调函数:用EbootTFtpdServerRegister()完成。

*发出连接请求:用EbootSendBootme()完成。

*接收主机端发出的数据包:用EbootTFtpReceiver()完成。

在这里,需要重点说明的有两点。

①对于接收数据包的函数EbootTFtpReceiver(),它只能处理已经存入内存的以太网包,也就是说,从以太网控制器接收数据的功能必须要用户去完成。由于这一功能与硬件密切相关,所以不能使用PB自带的函数来完成。

②函数EbootTFtpdServerRegister()会登记一个回调函数,一般用户可以自己定义这个函数,该函数用于完成,bin格式数据的解析和保存,有效数据至目的地RAM。PB有自带的例程函数可作参考。一般来说,如果目的地就是RAM的话,直接参考例程函数即可。但是如果目的地就是Flash,不要直接存入Flash(字为单位),应先存入内存中待下载完毕以后再导入Flash。当然,这种方法必须要有足够的内存。如果没有足够的内存,也可以缓存部分数据后,分段写入Flash。

3.4 支持DOC

对于WinCE操作系统而言,丰富的多媒体功能是其一大特点,使其成为当前消费类电子产品操作系统中的一个不错选择。但是随之而来的问题是,系统的容易已经大大超过出了传统嵌入式系统上百KB的数量级。一般来说,如果选择了图形界面和汉语支持,容量一般会超过16MB。DOC(Disk o-n Chip)则提供了一种相对廉价的大存储容量的解决方案。

DOC本质上是一种加以软件控制的NAND格式的Flash,通过TFFS这一软件层提供对WinCE的支持。

由于DOC不能像内存一样被直接访问,所以其加载WinCE的过程有些特殊,必须要在BootLoader中加入专门的代码,才能使用DOC来存放WinCE映像文件。

为了说明怎样在Loader文件中提供对DOC的支持,先看一下如何采用DOC系统启动CE,如图4所示。

从图4可以看出,当采用DOC作为存储体的时候,实际上是在启动的时候把映像文件拷贝到内存中执行。为了实现这一启动过程,就必须涉及到DOC的读写操作。首先要从M-SYSTEM的网站上获取DOC的BOOT软件开发包。在这个开发包里,提供了一系列DOC的操作函数。将此开发包嵌入到CE的BootLoader中去,然后按照图4的步骤,调用相应的读写函数完成这一过程。对于开发包中相关函数的说明,笔者就不具体介绍了,可以参考开发包的说明文档。

4 BootLoader的编译、链接和下载

BootLoader程序可以通过PB的集成编译环境编译链接,控制文件为.bib文件,下面是一个简单的BootLoader的.bib文件。

MEMORY

CLI 9fc00000 00050000 RAMIMAGE

RAM 80080000 00070000 RAM

CONFIG

COMPRESSION=ON

SRE=ON

ROMSTART=9fc00000

ROMSIZE=00020000

ROMWIDTH=32

ROMOFFET=000000

MODULES

Nk.exe $(_FLATRELEASEDIR).exe CLI

MEMORY部分 定义了生成的映像文件的目标地址,以及程序运行可以使用的内存空间。

CONFIG部分 COMPRESSION是否对目标代码进行压缩;SRE是否生成格式为sre的目标代码;ROMSTART与ROMSIZE、ROMWIDTH、ROMOFFSET共同定义了开发平台上存放BootLoader物理介质的起始地址、大小、宽度和偏移量。

MODULES部分 定义了BootLoader所包含的文件,一般就只有一个文件:cli.exe。

编译过程中,首先用命令build-c编译生成文件cli.exe,然后用romimage cli.bib命令产生最后的映像文件cli.sre。

对于BootLoader文件的下载;有很多种方法:可以通过仿真器下载;也可以通过其它调试程序下载;还可以直接烧写到Flash中。需要说明的一点是,这些方法可能会要求不同的映像格式。在PB环境下,可以生成的有.sre格式、纯二进制格式(用于直接烧写Flash)以及和CE映像一样的.bin格式。

结语

从CE的BootLoader开发流程可以看出,BootLoader在完成下载CE映像和加载映像的主要功能外,还具有一些调试硬件的功能。当然,这些功能不是必需的,随不同的用户可能有自己的定义。但是不管Loader的功能设计得多么简单或者是多么复杂,都是在开发CE系统中不可跳过的一环。实际上,由于Loader有和CE系统交互数据的区域,所以还有对CE启动过程的控制作用,也是PB控制目标板CE启动的一个窗口。可以说,一个功能齐全的Loader,不论是对调试硬件,还是控制和检测CE系统,甚至是成为产品之后的维护工作,都是大有帮助的。

编写BootLoader是开发WinCE系统第一步,也是关键的一步。只有得到一个稳定工作的Loader程序,才能够更进一步开发WinCE的BSP,直至最后整个系统的成功。

本文转载自:http://www.palmheart.net/modules.php?op=modload&name=News&file=article&sid=187

告别屏幕闪烁:手把手教你用示波器抓取并分析MIPI DSI信号(以RK平台为例) 本文详细介绍了如何利用示波器抓取并分析MIPI DSI信号,以解决LCD屏幕闪烁、花屏等问题。以RK平台为例,从工具准备、示波器参数配置到信号捕获与波形解读,提供了一套完整的调试方案,帮助硬件工程师快速定位和解决显示接口信号完整性问题。 阅读详情

相关推荐

WINCE BOOT文件

WINCE BOOT文件,从软盘上拷贝下的,用来覆盖制作WinCE的U盘启动盘。

WinCE系统BootLoader开发

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

weixin_30908707的博客 183

wince培训教材 pdf

创建自定义工程 实验2 添加USB鼠标及U盘驱动,添加多媒体支持 实验3 下载引导代码和Wince内核 实验4 使用远程工具分析系统特性 实验5 修改Wince选项卡配置实现内核模块的定制

WinCE Boot方式及 Bootloader架构概述

Bootloader的概念就是一个用于引导的loader,在系统上电的时候最先被运行,然后对硬件平台做最基本的初始化,最后把操作系统加载起来。不同的嵌入式操作系统都有自己的Bootloader,但是本质功能都是一样的。在WinCE中用的最多的就是EBOOT,是一个基于网络的Bootloader,而且可以根据需要带有命令行菜单功能,网络调试功能以及文件系统的相关功能。在这里我只谈ARM平台的引导

hao507的专栏 740

Windows下数据的接收和发送

Windows 和 Linux 不同,Windows 区分普通文件和套接字,并定义了专门的接收和发送的函数。 从服务器端发送数据使用 send() 函数,它的原型为: int send(SOCKET sock, const char *buf, int len, int flags); sock 为要发送数据的套接字,buf 为要发送的数据的缓冲区地址,len 为要发送的数据的字节数,f

自学C++,会写HelloWorld 2161

WinCE Bootloader

<br />这段时间的项目需要,使得我花了点时间分析了下wince6的bootloader。这个东西还是有点复杂,真要用文字具体清晰的描述恐怕没有几十页是不成。下面我只根据我自己的理解简短的做个分析。<br />Bootloader要做的事情,这个大家应该很清楚,无外乎是下载内核,烧写Flash,启动OS。当然可以在里面实现其他功能,但不是必须的。<br />Wince6的bootloader当然是烧写到Flash中,通过JTAG工具。如果板子上有nor flash,可以把bootloader烧写到nor

Schedule Plus 893

SQL强制更改登陆用户密码

更改SQL登陆密码   有些时候我们会忘了sa的登陆密码,但是可以登陆windows身份验证模式,这些时候我们就可以使用windows模式执行以下密令,这样就可以修改sql的sa登陆密码了,也可以修改本机的其他用户的登陆密码。 1、在 SQL Server Management Studio 的对象资源管理器中,右键单击服务器,再单击“属性”。 2、在“安全性”页上的“服务器...

dingwen4385的博客 1363

SQL Server数据库用户创建的方法(使用SQL语句)

本文转自:http://database.51cto.com/art/201009/224075.htm 管理SQL Server数据库需要建立数据库用户,下面将为您介绍使用SQL语句来建立SQL Server数据库用户的方法,供您参考,希望对您有所帮助。 要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权:一、获得准许连接 SQL Server 服务器的权利; ...

RSDTE 1万+

mysql server id 更改密码_修改密码 sql语句 怎么写

修改密码 sql语句 怎么写关注:249答案:5mip版解决时间 2021-01-16 06:52提问者这笑,有多危险2021-01-15 17:52修改密码 sql语句 怎么写最佳答案二级知识专家刺眼的青春2021-01-15 19:03修改mysql数据库密码的sql语句为:UPDATe MYSQL.USER SET PASSWORD=PASSWORd('123456') WHERe ...

weixin_39829307的博客 842

如何更改SQL Server 登陆验证方式

下面的文章来源于网络,讲的是怎样配置SQL Server 2005登陆验证方式,但是内容同样适用于SQL Server 2008. 配置SQL Server的身份验证方式 在默认情况下,SQL Server 2005 Express是采用集成的Windows安全验证且禁用了sa登录名。为了工作组环境下不使用不方便的Windows集成安全验证,我们要启用SQL Server 20

janvinal的专栏 2280

SQL Server登陆账号添加与删除

  1)登陆账号添加   1.创建Windows 登陆账户, 语法: exec sp_grantlogin '登陆账号' use master go exec sp_grantlogin 'LAPTOP-R1U6PBGI\xiaoming' --LAPTOP-R1U6PBGI代表本机机器名,xiaoming代表该电脑的一个用户名,这个账号可以通过"计算机管理"中的"本地用户和组"来为该电脑...

iBenxiaohai123的博客 3508

Sql Server 2008修改sa 密码

1、先用Window身份验证方式登陆进去,选择数据库实例,右键选择属性——安全性:把服务器身份验证选项从“Window身份验证模式”改为“SQLServer和Window身份验证模式”。点击确定,关闭当前对象资源管理器。 2、重新用Window验证方式登陆,在左边的树结构中选择“数据库”下面的“安全性”选项——登录名——sa,右键属性——在“SQLServer身份验证”中...

猪猪侠 8599

SQL Server 中如何更改sa的密码

为了更改sa的密码,

Jadei的专栏 1535

用sql语句来修改sa用户的登陆密码

用sql语句来修改sa用户的登陆密码。 步骤一: 打开sql server manager studio,用Windows验证登陆,新建查询,执行以下语句: 步骤二: 1)打开对象资源管理器视图,在数据库链接上右键->属性。 2)在打开的窗口点击安全性,将sql server和windows身份验证模式勾上。 3)展开安全性菜单,将登陆名下的sa属性-状态-登陆-启用 al...

weixin_30402343的博客 772

WINDOWS登陆密码更改后,SQL SERVER不能启动解决方式

http://flyheaven.blog.163.com/blog/static/7401172201211193859628/ 转载: http://hi.baidu.com/xiaoxue1506/item/5bac26102f0b6d562a3e22a1 SQL Server 服务由于登录失败而无法启动症状 在重新启动 SQL Server、SQL Executive

conganguo的专栏 4214

sql server 2008 修改 ‘sa’ 的密码

安装了sqlserver 2008,安的时候选择了windows 身份认证。后来发现这样很不方便,于是想改回来用sqlserver 身份严重。网上找了很多方法,结果很不理想。正确的做法是: (1)用windows身份登录,在服务器上属性 选择混合方式登录。 (2)在查询窗口里写入以下存储过程 EXEC sp_password 'oldpassword', 'newpassword', 'sa'

goobycle 8748

sql server 用户创建与权限管理

要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权:一、获得准许连接 SQL Server 服务器的权利; 二、获得访问特定数据库中数据的权利(select, update, delete, create table ...)。 假设,我们准备建立一个 username 数据库帐户,用来管理数据库 mydb。 一、 windows身份验证 1. 控制面板 &gt; 用户管...

weixin_34032827的博客 2420

SQL Server2005用新建用户名登录提示“该用户与可信 SQL Server 连接无关联” 以及SQL Server2005常见错误及解决方案

1、新建登录名      打开SQL Server Manager管理器!在左面找到 ‘安全性’ 单击右键 选择‘新建”,“登录” 弹出一个对话框,在登录名中输入你的登录号,选择'SQLSERVER身份验证',并输入密码,可以把‘用户下次登录时必须修改密码’取消掉。 点

Mimo 8321

SQL SERVER更改sa用户

,SQL有个超级用户sa,此用户默认情况下,它指派给固定服务器角色 sysadmin,并不能进行更改。一般懂点安全问题的技术人员都会把这个密码修改掉,但修改再复杂的密码都不是绝对安全的,一些暴力破解软件,菜鸟都会用。那怎么办呢,最好的办法就是删除或改名,下面提供方法.修改SA用户名:一:在企业管理器中右击:(local)(windows NT),选属性,选择“服务器设置”,在服务器行为中的“允许对

Ray的专栏 1015

Visio画的卷积神经网络结构图模板【包含卷积池化操作的绘图,以及线性层的绘图】

该资源采用Visio绘图软件制作,包含卷积池化操作的绘图,以及线性层的绘图。供各位网友参考。

上一篇: Palm简史【转载】
下一篇: Palm OS 编程简介
q2360c
博客等级 码龄22年 10粉丝 26原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值