uboot 引导wince NK.nb0

wince开发板启动盘工具 嵌入式开发板烧写镜像时会用到USboot的方法,这时需要创建dos启动盘,该工具用于快速创建启动盘 立即下载
版权归作者原所有

==========================================================================================================

关于Uboot启动网上有例子,
一、wince 启动过程分析
    我用的是utu2440的开发板,板子自带的启动文件包括NBOOT1、NBOOT2、EBOOT、wince内核,各个文件作用是:
NBOOT1:S3C2440对于NAND FLash,最大加载4K的代码运行,可以直接运行这个程序,NBOOT1启动后会从FLASH中加载NBOOT2
NBOOT2:主要实现从FLASH中读取wince内核、加载eboot、显示启动画面
EBOOT:实现对FLASH进行分区、格式化和烧写WINCE内核镜像文件,这里要注意的是EBOOT在烧写 wince内核镜像的过程中会把NK.bin解压为NB.nb0再写入到flash中。
二、分析UBOOT启动wince的可能性
    对于NBOOT1、NBOOT2的功能完全可以用UBOOT代替,本身UBOOT已经实现NAND falsh 启动,再就是wince内核文件 NK.nb0 可以直接加载到内存的 0x30200000,然后使用 uboot的 go 指令直接运行wince内核文件。
    比较难办的就是eboot功能的uboot实现,eboot的分区功能在flash中创建了一个binfs的分区用于存放wince内核镜像文件,在 wince中可以直接支持binfs分区,可以看到镜像文件。如果要在uboot中实现这个功能,则必须为uboot添加对flash分区的功能,为了测 试实现的可能性花了两天做了不少实现,发现要想做好这个功能实在是太花时间、精力了,只好作罢(如果哪位兄弟能提供帮助就太好了)。
    在去掉binfs支持后,uboot可以实现将NK.nb0烧写到flash中,然后启动时读取到0x30200000位置,最后用go命令加载启动 wince,这么来看应该是很简单的事了(后来证明此时的想法太。。。。。。)
三、测试可能性
    使用uboot将nk.nb0加载到0x3020000中,然后go 0x30200000,等了一会果真看到了wince的界面,这一步成功了,下一步就可以直接烧写了。但是很快发现,使用这种方法启动一次wince后就 无法再启动uboot,通过读取flash的内容发现,wince把uboot的flash块给格式化了。是什么原因呢?
    原来是因为这个wince内核有自动分区格式化功能,上面已经说了uboot中不实现分区格式化的功能,所以在wince中就必须添加这个功能。但是这样 一来wince就会格式化uboot,通过阅读eboot发现,eboot在格式化的时候会把eboot区标记为坏块,这样wince就不会进行格式化 了,看来必须首先解决这个问题。
四、FLASH 管理区域划分
    我的FLASH大小是64M,wince 内核文件加上uboot不超过32M,这样就定义FLASH的前32M由uboot进行管理,这32M对wince来说是不存在的,后32M归于 wince进行存储,在wince中进行管理。
    如果要阻止wicne格式化前32M,可以再uboot中对前32M全部标记为坏块,但是这样一来uboot本身对flash所有操作也会首先做坏块检 测。如果这么做的话,每次uboot对flash读写时取消坏块标记,操作完成后在标记为坏块。思路应该是可行的,但是感觉这么做太麻烦了。当然条条大路 通罗马,我们可以逆向思维一下,为何不能修改wince内核来屏蔽前32M flash空间呢?
    通过阅读wince的bsp,发现有个很重要的宏定义
loader.h中
// NAND Boot (loads into SteppingStone) @ Block 0

#define NBOOT_BLOCK 0
#define NBOOT_BLOCK_SIZE 1
#define NBOOT_SECTOR BLOCK_TO_SECTOR(NBOOT_BLOCK)

// TOC @ Block 1

#define TOC_BLOCK 1
#define TOC_BLOCK_SIZE 1
#define TOC_SECTOR BLOCK_TO_SECTOR(TOC_BLOCK)

// Eboot @ Block 2

#define EBOOT_BLOCK 2
#define EBOOT_SECTOR_SIZE FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE)
#define EBOOT_BLOCK_SIZE SECTOR_TO_BLOCK(EBOOT_SECTOR_SIZE)
#define EBOOT_SECTOR BLOCK_TO_SECTOR(EBOOT_BLOCK)

//#define RESERVED_BOOT_BLOCKS (NBOOT_BLOCK_SIZE + TOC_BLOCK_SIZE + EBOOT_BLOCK_SIZE)/*这个参数是定义预览 block 的数量,默认是NBOOT + TOC + EBOOT,我为了屏蔽前面32M空间,需要修改此定义*/
#define RESERVED_BOOT_BLOCKS SECTOR_TO_BLOCK(FILE_TO_SECTOR_SIZE(0x2000000))

// Images start after OEM Reserved Blocks

#define IMAGE_START_BLOCK RESERVED_BOOT_BLOCKS
#define IMAGE_START_SECTOR BLOCK_TO_SECTOR(IMAGE_START_BLOCK)
    修改RESERVED_BOOT_BLOCKS 后重新编译wince(由于我用的是win7,不支持wince5的编译,只好用虚拟机来编译,速度真是 太折磨人了),希望能够一次成功,重烧uboot,下载wince内核文件NK.nb0,启动wince,失望,还是失望,uboot依旧被擦除了。
    为了搞清楚问题的原因,打开wince的调试信息, 特别是NAND FLash驱动的所有调试信息。重新编译、下载运行。发现wince开始擦除的位置是正确的,在擦除未完时此时我复位了开发板,uboot可以正常启动。 重来,等擦除操作完成了以后我再复位,发现uboot不能启动了,这可真是奇怪了,开始擦除的位置是正确的,每次block会递增,怎么会擦除前面的 block 呢?再来一遍,发现问题了,wince的整个擦除起始位置是正确的,但是结束 block 是错误的,我的FLASH整个 block 是4096个,wince从正确的起始位置开始,擦除了 4096 个块,估计就是这个原因导致把 uboot 给擦除了。
    阅读了一下wince的fmd驱动,这里初始化flash,发现有一句很不可理解
// pFlashInfo->dwNumBlocks            = NUM_BLOCKS ;/*这是原来的定义,修改为下面的值*/

pFlashInfo->dwNumBlocks            = NUM_BLOCKS - IMAGE_START_BLOCK ;

    按照道理来讲,初始化flash block数量时至少应该屏蔽nbot eboot两部分,但是这个bsp中未屏蔽,在网上查询了一下,的确有的bsp是定义为
NUM_BLOCKS - IMAGE_START_BLOCK,我觉得这样定义更合理。也许是bsp从三星出来到我手上中间经过不少人修改,留下了这个bug吧。
    重新编译,加载,一切正常,wince可正常启动。
    最后把wince内核文件烧写到flash中,uboot启动时自动加载,一切正常。
    经过这样修改以后,wince启动时如果没有检测到有效的mbr,则会自动分区格式化,第二次再启动时就不会再格式化了,剩余的32M空间可以存储用户文 件。在wince的存储管理中可以看到flash大小为32M,的确已经成功屏蔽了前面的32M空间。
至此,该工作告一段落,uboot可以正常烧写、加载wince了。

Wince启动自动进行分区,我想把剩余的分区格式化显示为“本地硬盘” ,本来Eboot引导时候可以显示。分析注册表后,进行如下修改,在Uboot引导也可也显示分区的盘符。
在[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\SMFLASH]中加上"IClass"="{A4E7EDDA-E575-4252-9D6B-4195D48BB865}"
【网络安全】AntSword蚁剑新手快速入门(附实战案例) 蚁剑(AntSword)是一款开源的跨平台WebShell管理工具,它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。蚁剑的特点主要有如下几点:1.支持多平台。包括macOS、Linux 32位、Linux 64位、Linux armv7l、Linux arm64、Windows 32位、Windows 64位。2.完善的文档。中国蚁剑文档地址。3.多项功能。文件管理功能、虚拟终端功能、数据库管理功能。4.内置代理功能。 阅读详情

相关推荐

中国传媒大学计算机考研初复试经验贴

中传的计算机专业考研的话主要分为两大学院:计网学院和国重,大部分专业在计网学院。

DoKiDoK的博客 1561

uboot替代eboot烧写、启动

uboot替代eboot烧写、启动

king_sundi的专栏 1698

20240128 C#与SCPI协议实战:轻量级仪器控制库ScpiNet应用指南

本文详细介绍了轻量级C#库ScpiNet在仪器控制中的应用。相较于传统的NI-VISA,ScpiNet无需安装庞大运行时,通过纯C#实现直接与USB或以太网设备通信,支持跨厂商SCPI仪器。文章提供了从快速连接到实战封装、错误处理的完整指南,帮助开发者构建简洁高效的自动化测试系统。

h9j8k7l6m5n的博客 548

两周来的学习小结

 构建自己的交叉编译环境嵌入式设备由于不具备一定的处理器能力和存储空间,程序开发一般用PC来完成,然后将可执行文件下载到嵌入式系统中运行。这是目前嵌入式程序开发的 不二选择——Host/target模式。但这引发了一个问题:由于Host和target的处理器体系结构不同,我们不能直接用PC上既有的程序开发工 具,必须使用跨平台开发工具,即在Host上生成能在Target上运行格式的目标文件

linux学习专栏 3461

基于aarch64分析kernel源码 六:kernel_init进程(1号进程)、kthreadd进程(2号进程)

kernel_init进程(1号进程)、kthreadd进程(2号进程)分析

OnlyLove_的博客 764

三极管吸潮失效分析案例

案例背景三极管也称为晶体三极管,它被视为电子电路中最重要的器件之一。三极管顾名思义具有三个电极,它最主要的功能是电流放大和开关作用。本次失效案例中的三极管在仓库存放一段时间后,在PCBA测试过程中集中发生不良。分析过程1.外观检测对失效样品进行外观检测,未发现明显破损、裂纹等不良。2.X-ray检测对失效样品进行X-ray检测,金线、绑定点未发现异常。3.开封检测对失效样品进行开封检测,发现存在键合点脱落的现象,键合点附近的晶圆破损。4.SEM检测对失效样品进行SEM检测,发现晶圆键合点位置有裂纹和破损,金

sy220504的博客 1043

MTK的各个分区的说明

for gki 用的,如果没有对应的image,则说明暂时只是空的,没有实际用到,创建是为了后期方便OTA(前提是partition layout 变)这个是google partition。:geniezone, 如果对应的config打开是会有image的,这个分区如果没有对应的load,则说明暂时没有用到 --422 423是没有被打开的。: 是存储google恢复出厂设置保护信息的,理论上清空这个分区就不需要密码了,同时frp存储了设置里面的oem unlocking的标志位。

NO1loneliness的博客 5053

微信小程序 - 完美解决“code“:“NO_AUTH“,“message“:“商户号该产品权限未开通,请前往商户平台>产品中心检查后重试“(微信小程序报错问题排查解决)

微信小程序NO_AUTH: 商户号该产品权限未开通,请前往商户平台>产品中心检查后重试?微信小程序提示商户号该产品权限未开通,请前往商户平台>产品中心检查后重试,微信小程序"code":"NO_AUTH"错误码怎么解决,报错信息如下:httpResponseBody[{"code":"NO_AUTH","message":"商户号该产品权限未开通,请前往商户平台>产品中心检查后重试"}],微信小程序支付问题,如何解决这个问题,虚拟支付商户号,虚拟支付商户号里面没有产品支付的页面,排查商户号没问题,商户号配置

🏆 前端领域优质创作者 4444

注册表中查看主分区位置

分析病毒过程中,偶然发现的,记录下。以后不需要借助工具了 \Registry\Machine\System\CurrentControlSet\Control\SystemBootDevice 转载于:https://www.cnblogs.com/phoenix--/archive/2012/11/13/2767507.html...

weixin_30294021的博客 190

OpenClaw小白使用全攻略

OpenClaw全能技能解锁指南:从基础到进阶 摘要: 本文提供OpenClaw AI智能体的完整使用教程,帮助用户从安装后"不知道如何用"到熟练掌握核心功能。教程包含:1)控制台5大区域详解和3个必做初始化设置;2)文件管理、浏览器自动化、文档生成等5大基础功能实操,每个功能配有详细操作步骤、指令模板和效果演示;3)10+高频场景解决方案,如整理文件、搜集资料、写总结等;4)进阶技巧和常见问题解答。通过清晰的图文指引,即使电脑小白也能快速上手,实现办公自动化、提升工作效率。

通俗易懂学IT 3059

Classic AUTOSAR精讲专栏目录

欢迎大家来到钢琴上的汽车软件创建的《Classic AUTOSAR精讲系列专栏》,期待在这里能够与大家一起进步,分享成功,分享喜悦!下面蓝色的文章标题都是传送门,点击直接跳转到对应文章。

酒无忧的博客 3911

Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin NK.nb0的关系

来自:http://hi.baidu.com/zj41342626/blog/item/f9bd66d3a3671fd1a9ec9adb.html 一、在掌上电脑里要使用NAND FLASH存储数据和程序,但是必须有NOR FLASH来启动。除了SAMSUNG处理器,其他用在掌上电脑的主流处理器还不支持直接由NAND FLASH启动程序。因此,必须先用一片小的NOR FLASH启动机器,再把OS等软件从NAND FLASH载入SDRAM中运行。 二、Bootloader的概念就是一个用于引导的l

张金泉的专栏 945

UEFI 基础教程 (零) - 目录

UEFI 基础教程 (十八) — UEFI Build Process简单分析。UEFI 基础教程 (十五) — 获取UEFI MemoryMap。UEFI 基础教程 (六)   —  PROTOCOL 简单使用。UEFI 基础教程 (十)   —  FileIO 简单使用。UEFI 基础教程 (一)   —  搭建UEFI开发环境。UEFI 基础教程 (九)   —  EVENT 简单使用。UEFI 基础教程 (七)   —  HOB 简单使用。UEFI 基础教程 (八)   —  PCD 简单使用。..

技术联盟 1537

理清一下Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin NK.nb0的关系

理清一下Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin NK.nb0的关系 一、在掌上电脑里要使用NAND FLASH存储数据和程序,但是必须有NOR FLASH来启动。除了SAMSUNG处理器,其他用在

zhang20072844的专栏 1241

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

android 蓝牙通讯demo

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

Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin N...

<br /> <br />理清一下Bootloader NORFLASH NANDFlash EBOOT NBOOT UBOOT SDRAM NK.bin NK.nb0的关系<br />一、在掌上电脑里要使用NAND FLASH存储数据和程序,但是必须有NOR FLASH来启动。除了SAMSUNG处理器,其他用在掌上电脑的主流处理器还不支持直接由NAND FLASH启动程序。因此,必须先用一片小的NOR FLASH启动机器,再把OS等软件从NAND FLASH载入SDRAM中运行。<br />二、Bootl

1011

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

uboot->eboot->NK.bin

原文地址 http://blog.csdn.net/sannik/article/details/8204912  楼主的经验不错,非常感谢!我对uboot和linux 刚开始接触,但是要做这个uboot引导wince,所以很有帮助,先照着玩玩先!希望可以成功! 最近在s5pv210平台上,尝试uboot去引导eboot,然后由eboot加载内核镜像NK(xip.bin)。

lqxandroid2012的专栏 2124

flash 分区配置

uboot 与系统内核中 MTD分区的关系: 分区只是内核的概念,就是说A~B地址放内核,C~D地址放文件系统,等等。 1:在内核MTD中可以定义分区A~B,C~D。。。。。。并与以绝对的地址赋上值。 bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统。。。这些起始地址在MTD的分区信息中能找到。 bootloader对分区的概念不重要,只要它能把内核烧到A位置,把文件系统烧到C位置。 所以,在bootloader对Flash进行操作时,哪块区域放什

zz460833359的博客 1336

3.移植uboot-使板卡支持nor、nand

在上一章,我们添加了nor,nand启动后,uboot启动出如下图所示:           上面的Flash: *** failed *** 是属于uboot第二阶段函数board_init_r()里的代码, 代码如下所示(位于arch/arm/lib/board.c): /*第二阶段*/ void board_init_r(gd_t *id, ulong dest_addr...

weixin_34343308的博客 237

WinCE NAND flash - FAL

WinCE NAND flash - FALFrom ESSLabWiki1. IntroductionFlash與一般常見的Disk不同,其特性是無法重複對同一塊記憶體位置去做Write的動作,必須要Erase那塊記憶體位置才可以做Write的動作。因此一般的File System,如FAT16、FAT32、NFTS…,無法直接在Flash Memory上使用;若是想要沿用這些Fil

renpine的专栏 5586

WinCE下存储设备的遍历以及磁盘分区的格式化、扫描和碎片整理类

    由于需要在WinCE下对某个磁盘分区进行格式化,在网上查找了相关资料整理出了一个类与大家分享,不足之处请指教。/******************************************************************** created: 2010/03/17 created: 17:3:2010 14:14 filename: f:/个人

WeroCPP的专栏 5313

U盘完美启动WinE6.0成功

1、用U盘制作DOS启动盘,把loadcepc.exe文件、EBOOT.bin和vesatest.exe文件拷贝到U盘上。也可以直接把WINCE BOOT文件(该文件从WinCE软启动盘制作得到)拷贝到U盘的根目录。(文中所用到的文件地址附后) 2、在DOS启动后,输入esatest测试下,看看机器支持多少的分辨率。一般支持800x600x16 在AOTOEXEC.bat文件(上面WINCE

blacet的专栏 6461

[转]NandFlash的分区实现

NandFlash的分区实现提到分区就需要知道MBR,了解分区表。什么是MBR     硬盘的0柱面、0磁头、1扇区称为主引导扇区,NANDFLASH由BLOCK和Sector组成,所以NANDFLASH的第0 BLOCK,第1 Sector为主引导扇区,FDISK程序写到该扇区的内容称为主引导记录(MBR)。该记录占用512个字节,它用于硬盘启动时将系统控制权交给用户指定的,并在分区表中登记了的某个操作系统区。 MBR的组成一个扇区的硬盘主引导记录MBR由如图6-15所示的4个部分组成。主引导程序(偏移地

修炼WINCE 9071

WinCE下制作CEPC启动盘

<br />http://jkflyfox.spaces.live.com/blog/cns!C936FCDDF997BA5F!1329.entry

rxy1212的专栏 1179
上一篇: uboot 自引导内核(小寿原创)
下一篇: wince -- uboot 启动 wince
简单并快乐着
博客等级 码龄15年 473粉丝 96原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值