Wince bootloader和内核定制

来源:互联网 发布:电话号码修改软件 编辑:程序博客网 时间:2024/05/23 01:57

Wince bootloader和内核定制

l BootLoader Eboot

 
 
*   NBOOT
nboot是从NAND flash读image到内存并执行,也可以读eboot.nb0到内存中并执行,eboot是下载并烧写image到内存并执行。将nboot.nb0烧到第0块,将eboot.nb0烧到第2块。启动时nboot从flash读出eboot并执行之。
NBOOT->EBOOT->USB download NK.NB0 to memory-> jump to start address of nk.nb0 in Memory-> WINCE start.
    Memory layout on NAND flash:
ü  Block 0 has the NAND boot loader (NBOOT.BIN)
ü  Block 1 is the TOC block which specifies the layout on the NAND
ü  Block 2 is the start block for secondary bootloader
ü  Block n is the start of image. n is defined in the block 1 structure
TOC (Table Of Contents) : This block shows links to a subset of the available pages, filtered upon current visitor access privileges. This makes it easy to deliver custom access to different sections of your site.
   The layout on the first sector of TOC block is:
    typedef struct _TOC_SECTOR {
        DWORD               dwSignature;        //  4 bytes
        IMAGE_DESCRIPTOR    id[4];              //  480 bytes
        UCHAR               Pad[32];            //  32 bytes
        } TOC_SECTOR, *PTOC_SECTOR;
 
Nboot做了大部分的硬件初始化,然后将会在nand flash第一块内存(TOC)中查找images的位置!这个TOC定义在loader.h中,我在我的pb里面搜索了一下,路径如下
 
几个文件中的定义都是一样的,下面的代码是我从里面拷贝下来的!与上面的有所不同!可能是版本不同吧!
typedef struct _TOC {
    DWORD               dwSignature;
              BYTE                                              udid[8]; //
        // How to boot the images in this TOC This could be moved into the image descriptor if desired,                       . // but I prefer to conserve space.
    BOOT_CFG            BootCfg;
    IMAGE_DESCRIPTOR    id[MAX_TOC_DESCRIPTORS]; // Array of Image Descriptors.
//    UCHAR Pad[12];      // align on SECTOR_SIZE
    CHAININFO           chainInfo;
} TOC, *PTOC;           // 512 bytes
tocblock1 file,同样是使用SJF烧写到第一个(0为第一个)内存块的!
整个过程就很明显了:第一步,先烧写nboot.bin 到nand flash的第0个内存块!
                    第二步,烧写 tocblock1 file 到nand flash 的第一个内存块!
                    第三步,烧写 eboot.nb0 到nand flash 的第二块内存开始的地方!
 
*   EBOOT
  BinFS
在移植使用BOOTLOADER下载镜像的时候我法相,他会调用EBOOT中的一段代码去对nand进行一些操作,主要工作是格式化nand并简历文件系统!这个文件系统就是ROM image filesystem(BINFS)二进制文件系统!也称之为闪存文件系统。
EBOOT启动菜单中,我们会看到有两项是关于格式化FLASH的命令!一个是低格选项:
Low-level FORMAT Boot Media
他的代码解释如下:
// low-level format
// N.B: this erases images, BinFs, FATFS, user data, etc.
// However, we don't format Bootloaders & TOC bolcks; use JTAG for this.
另外一个是:Format Boot Media for BinFS
// format the boot media for BinFS
// N.B: this does not destroy our OEM reserved sections (TOC, bootloaders, etc)
// N.B: format offset by # of reserved blocks, decrease the ttl # blocks available by that amount.
   主要理解一下Format Boot Media for BinFS的过程!
在选择了这个选项之后,他首先会判断flash是否存在,然后调用WINCE的库函数BP_LowLevelFormat。这个函数的原型:
BOOL BP_LowLevelFormat(
  DWORD dwStartBlock,
  DWORD dwNumBlocks,
  DWORD dwFlags
);
 
文章还不是很完善,大家一起交流,如果问题,请提出来,大家一起塔讨论
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 3d右边工具栏消失了怎么办 3d菜单栏消失了怎么办 觉得自己性无能不敢谈对象怎么办 护士面试时被问到病人坠床怎么办 三次元仪器坏了怎么办 运动同手同脚怎么办 狗狗突然害怕不敢走路怎么办 一岁半宝宝因为害怕不敢走路怎么办 猫把背拱起来怎么办 穿猫跟鞋走路不稳怎么办 狗狗后腿内八字怎么办 快走后小腿粗了怎么办? 猫的嘴巴烂了怎么办 苹果8丢了已关机怎么办 肚子吃多了难受怎么办 喝水喝的肚子胀怎么办 肚子吃撑了难受怎么办 肚子撑得想吐怎么办 吃饭吃的太饱怎么办 吃饭吃的太撑怎么办 跑步迈不开步子怎么办 踏步走步子反了怎么办 微信不支持计步怎么办 肝癌二次介入后头晕心慌怎么办 跑步跑得胃疼怎么办 如果世界上的猪都死了怎么办 我和我老婆吵架怎么办 我和我老婆吵架了怎么办 智障人士父母死后怎么办 依赖性太强的人怎么办 高考只有一门写准考证号怎么办 ps做动画不流畅怎么办 ff15引擎剑卖了怎么办 fgo从者满了怎么办 游泳池的水喝了怎么办 月球没有水怎么办秒懂 请了新财神旧的怎么办 报警校体检没过怎么办 ae中建立了文本打不出字怎么办 宝宝3岁内八字怎么办 一岁半宝宝走路内八字怎么办