搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
从前慢现在也慢
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
Git常用命令和GUI工具_gui常用命令
2
git撤销已经push到远端的commit
3
红黑树详细图解_红黑树floor
4
mysql中异常错误ERROR:2002的解决方法_error 2002
5
系统架构08 - 信息安全(上)_软件架构信息安全
6
HTML、Vue——微信H5跳转小程序_html 打开微信小程序
7
开源热门项目推荐:探索技术的无限可能
8
10G Ethernet Subsystem 基于K7芯片的UDP通讯
9
Qt5.14.2 for Android 环境配置及开发_qt 5.14 android
10
【NLP】文本自动摘要任务的心得总结
当前位置:
article
> 正文
SD卡加载和引导WinCE内核映像的实现_sd wince
作者:从前慢现在也慢 | 2024-06-17 11:06:03
赞
踩
sd wince
传统的嵌入式系统大部分使用NOR Flash或者NAND Flash等非易失闪存来存储数据和引导系统启动,但是由于读写Flash存储设备需要专用接口,使得传统方法有很多不便之处。本文提出了一种使用SD卡(Secure Digital Memory Card)加载和引导内核WinCE内核映像的方法,可以通过嵌入式系统的SD卡接口方便地实现内核的引导和更新。
当一款基于WinCE操作系统的嵌入式设备投入使用后,如果在使用的过程中对设备产生了新的需求,把固件系统返回生产厂家进行升级是一件极其麻烦的事情,但是从厂家拷贝符合需求的新内核到SD卡中,使用SD卡更新WinCE系统却是一件轻而易举的事情。因此,SD卡加载和引导WinCE内核有着很好的应用前景。
1 系统架构
本文采用的硬件核心芯片为Samsung公司的S3C6410处理器,S3C6410是一个16/32位RISC微处理器,含丰富的外设接口,支持高速SD/MMC卡,SD卡通过读卡器在PC机上进行读写。
软件平台包括内核引导代码Bootloader、嵌入式操作系统软件开发平台。由于WinCE 6.0良好的用户界面和丰富的Windows API函数的支持,大量的车载终端设备和工控设备使用了Windows CE作为内部的操作系统。平台开发工具为Platform Builder,在Visual Studio 2005中把Platform Builder作为一个插件集成在了套件中,可以实现WinCE系统设计、配置、构建、测试和调试等所需的所有功能。
2 IROM启动方式原理
为了支持MCU从无法执行程序的非易失性存储设备(例如NAND Flash或者SD/MCC卡)执行启动程序,三星公司设计了一种“Stepping Stone”技术,也就是IROM启动方式。IROM方式的系统引导框图如图1所示。
图1 系统引导框图
2.1 BL1的加载
从什么类型的设备拷贝BL1到Stepping Stone中,是系统通过引脚GPN[15:13]来判断的。若GPN[15:13]设置为111,就从SD/MMC(CH1)卡中拷贝程序BL1到地址Stepping Stone中。
对于SD/MMC卡,SD卡的最后一个块(即block,每个block为512 B)要预留下来,倒数第二个block指定用于SD卡的标签(Signature),从[LAST18]到[LAST3]这16块一共8 KB,用于保存BL1代码;而对于SDHC卡,SD卡的最后1025个块(512.5 KB)要预留下来,倒数第1026个块指定用于SD卡的标签(Signature),从[LAST1042]到[LAST1027]这16块一共8 KB,用于保存BL1代码,代码分布结构如表1所列。
表1 SD/SDHC卡引导代码分布结构
拷贝BL1程序代码的过程,是由S3C6410芯片中IROM的代码执行的,无法更改,因此要根据卡的种类把BL1代码放到卡的合适的位置。
2.2 BL2的加载
BL1的代码功能首先执行启动文件start.s,start.s的主要任务是对系统进行初始化,为处理器建立良好的运行环境。start.s执行完毕后,跳转到main.c中执行。main.c的主要任务是执行函数CopyMovitoMem(HSMMC_CHANNEL,MOVI_BL2_POS,MOVI_BL2_BLKCNT,(uint*)BL2_BASE,MOVI_INIT_REQUIRED)指令。
CopyMovitoMem是IROM启动后为用户提供使用的一个函数,函数的指针位于地址0x0C004008中。为了确定BL2代码的起始位置,IROM提供了一个记录SD/MMC卡总扇区的参数globalBlockSizeHide,存放在地址0x0C003FFC中。参数HSMMC_CHANNEL由SD卡插入哪个卡槽决定。参数MOVI_BL2_POS是说明要从SD/MMC中拷贝的第几个扇区开始,对于SD/MMC卡其值为globalBlockSizeHide18BL2,对于SDHC卡其值为globalBlockSizeHide1042BL2。参数MOVI_BL2_BLKCNT为拷贝扇区的数目,这是由BL2代码大小决定的,比如若BL2为512 KB,则提前定义#define MOVI_BL2_BLKCNT (0x80000/0x200)。参数BL2_BASE为拷贝到什么位置上,为内存中代码存储的地址。参数MOVI_INIT_REQUIRED决定是否对SD卡进行初始化操作,通常赋值为1。
代码拷贝完成后,指针是如何跳到BL2中运行的呢?在main.c文件的最后,执行((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))(),处理器就跳到BL2中运行。
3 SD卡加载和引导WinCE内核的实现
3.1 BL2的加载的实现
为了实现SD卡加载和引导内核映像的功能,首先要使WinCE 6.0的Bootloader支持SD卡启动。为了实现这一目的,把Bootloader分成两块:一块称为Stepldr,大小为8 KB,编译链接后产生的就是代码BL1;另一块称为EBOOT,除了通常的利用网口和串口下载更新内核的代码外,添加利用SD卡下载和更新内核代码,以及FAT32文件系统代码,构成新的EBOOT代码,编译链接后就是代码BL2。
当执行完IROM代码后,系统指针跳转到BL1首地址。处理器首先执行startup.s代码,为CPU准备一个合适的运行环境。然后,跳转到main.c函数。在这里,主要调用CopyMovitoMem函数实现BL2下载并跳转到相应位置执行。所以main.c主函数为:
void main(void){
CopyMovitoMem(1,globalBlockSizeHide18EBOOT_NB0_SIZE, EBOOT_NB0_SIZE, (unsigned int *)LOAD_ADDRESS_PHYSICAL, 1);
((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))();
}
3.2 内核加载和更新的实现
BL2是由EBOOT编译产生的,为了实现从SD卡加载和引导内核的功能,需要完成以下3步工作:
① 把SD卡驱动移植进EBOOT;
② 把FAT文件系统移植进EBOOT;
③ 在EBOOT中下载内核镜像部分,添加通过SD卡下载镜像功能。
SD卡驱动部分可参考WinCE 6.0的BSP包的关于SD卡驱动源码。在SDInterface.c文件中暴露SD卡读写函数接口供OEM函数OEMPreDownload调用。FAT文件系统使用网络上的开源DLL库,把库的函数接口放在fat.h文件中供SD卡操作函数调用[5]。为了实现SD卡下载镜像,首先在PC机上把相应内核的bin类型文件拷贝到SD卡中,当Bootloader执行到OEMPreDownload函数时,调用SDInterface.c对SD/MMC卡接口进行初始化,然后下载镜像到SDRAM中,实现WinCE内核的加载。接着就可以把Bootloader和NK存储到系统的Flash中以便下次使用,实现WinCE内核的更新[6]。
3.3 程序写入SD卡的方法
为了识别SD卡,首先要把SD卡格式化成FAT32文件系统。有两种方法可以把代码写入SD卡。
方法一:Samsung公司设计了在PC机运行的应用程序IROM_Fusing_Tool.exe和IROM_Fusing_Tool_SDHC.exe,分别适合于把代码写到SD/MMC卡和SDHC卡中,修改EBOOT下的makefile.c文件,可以把代码BL2和BL1编译成一个文件EBOOT_SD.nb0,然后通过上述工具就可以把EBOOT_SD.nb0写到SD卡的相应位置。
方法二:使用WinHex软件直接读写SD卡数据,该软件可以方便地把相关代码写到SD卡的合适位置。
结语
使用SD/MMC卡在Samsung公司的S3C6410处理器上加载和引导WinCE内核,已经成功实现。与传统的NAND Flash引导系统启动的方式相比,使用SD卡更加方便简单,为WinCE嵌入式系统加载和引导内核提供了一种很好的解决方案。
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/730899
推荐阅读
article
Linux
下永久修改
MAC
地址
和
ifconfig
命令总结(转)_
linux
永久配置ip
mac
...
1. 固定一个
MAC
地址
,特别是在使用多个虚拟机的时候
linux
环境下:用root身份登录,在/etc/rc.d/rc....
赞
踩
article
ubuntu
安装
docker
(在线和
离线
方式)教程_
docker
19.03.14
ubantu
离线
安...
安装
docker
在线
安装
离线
安装
在线
安装
终端敲入命令wget -qO- https://get.
docker
.com/ ...
赞
踩
article
测试
用例
常见的7种
设计
方法
_
用例
设计
方法
...
测试
用例
常见的7种
设计
方法
,CoCode自动生成
测试
用例
工具助力提高
测试
用例
编写效率和覆盖性。_
用例
设计
方法
用例
设计
方法
...
赞
踩
article
Java
基础-
数组
Array介绍_
array
java
...
目录一、一维
数组
1、
数组
的定义2、
数组
的定义格式3、
数组
初始化概述动态初始化静态初始化两种初始化方式的使用场景4、数据元...
赞
踩
article
【语言基础】
java
中的
Array
初始化
、
内存
特征
、
遍历方式
、
数组
扩容
(
合并与追加
)
、
缩容
(
删除元素...
目录一.
Array
初始化
二.
Array
内存
特征三.
数组
的遍历方式一.
Array
初始化
静态创建:int[]
array
=...
赞
踩
article
【
自然语言
处理
NLP】
Bert
中的
特殊
词元
表示_
bert
cls
...
在BERT中,<
cls
>和
是
特殊
的
词元
(token),用于标记序列的位置和边界。它们帮助模型更好地理解和
处理
特...
赞
踩
article
分布式
版本
控制
工具
Git
_上机1 -
分布式
版本
管理工具
...
GIT基础操作_上机1 -
分布式
版本
管理工具
上机1 -
分布式
版本
管理工具
...
赞
踩
article
kafka
listeners
和
advertised
.
listeners
的应用_adverti...
介绍区别在公司内网部署
kafka
集群只需要用到
listeners
,所以一直也不用管
advertised
.list...
赞
踩
article
hdfs
的
元
数据
辅助关联
和
redis
数据
持久
化汇总对比_
redis
和
hdfs
的
关系...
hdfs
的
元
数据
辅助关联在Hadoop
的
集群当中,NameNode
的
所有
元
数据
信息都保存在了FsImage(镜像文件)与...
赞
踩
article
c
语言
检测
Android
设备
接入,
Android
利用广播监听
usb
连接状态(变化情况)...
废话不多说了,直接给大家贴代码了,具体代码如下所示:pa
c
kage
c
om.lgs.test.test
c
ode.re
c
e...
赞
踩
article
mysql
多
条件
查询
_
多
条件
查询
、
多
条件
求和、
多
条件
计数、
多
条件
判断...
实际工作中,数据的统计分析都是附加
条件
的,而且都是
多
个
条件
,所以,关于
多
条件
查询
、
多
条件
求和、
多
条件
计数、
多
条件
判断等函...
赞
踩
article
2024年最全
HuggingFace
入门教程
--
环境
搭建
_
拥抱脸
,
2024年最新物联网
嵌入式
开发开发...
2.1 安装python3-venv创建虚拟
环境
需要使用
,
我们先安装一下。使用命令命令新建一个虚拟
环境
。上述命令新建了一...
赞
踩
article
精准
安全
运维,
统信
UOS
服务器版
V20(1070)
漏洞
修复
指南丨年度
更新
_
统信
官网在哪发布
漏洞
...
1070版本不仅继承了
统信
UOS
服务器版
V20强
安全
、高稳定、高性能、易维护和泛兼容的优异特性,还延续了其优良的补丁和更...
赞
踩
article
出租车
系统
设计...
线路用于电池容量检测时,首先对电池剩余容量放电,当放电至终止电压时,转入8 小时充电,充电完毕后,再进行放电,记录开始放...
赞
踩
article
企业
微信
聊天记录
智能
分析
技术
:深度学习与
自然语言
处理的融合应用_
分析
聊天记录
ai...
企业
微信
的
聊天记录
分析
是一个多维度的
技术
问题,涉及数据采集、文本挖掘、情感
分析
、图像识别等多个
技术
领域。通过这项
技术
,企...
赞
踩
article
linux
搭建
docker
环境
八步曲
_
linux
安装
docker
及其相关
环境
...
1、yum -y update2、yum remove -y
docker
docker
-common containe...
赞
踩
article
Ubuntu
Linux
下编译安装
PostgreSQL
和
pgAdmin
...
本文假设读者已经分别下载解压出
PostgreSQL
9.1 (http://www.postgresql.org/ftp...
赞
踩
article
HTTP
之
option
s预
请求
nginx
解决跨域
postman
调试跨域问题_
http
op...
预
请求
就是复杂
请求
(可能对服务器数据产生副作用的
HTTP
请求
方法,如put,delete都会对服务器数据进行修改,所以要...
赞
踩
article
LeetCode
-168.
Excel
表列
名称
(
java
)
_
excle
列
的
名称
java
...
金三银四,又到了刷题月。有时间
的
话,希望大家还是尽量刷起来咯。帮助往往不是直接体现出来
的
,但会让你对很多东西
的
底层实现了...
赞
踩
article
vTESTstudio
概述...
CANoe 创建的测试用例用Test Modules执行,
vTESTstudio
创建的测试用例用Test Units执...
赞
踩
相关标签
linux
interface
up
虚拟机
c
docker
测试用例
编写测试用例方法
CoCode自动生成测试用例
用例设计方法
CoCode测试管理
java
自然语言处理
bert
深度学习
git
kafka
大数据
Redis
c语言检测Android设备接入
mysql多条件查询
物联网
嵌入式硬件
学习
安全