如何实现WINCE 启动画面(开机logo)? (PXA300+ Monahans L )

时间:2020-12-26 18:02:23
如题CPU 是PXA300 BSP Monahans L
现在没有启动画面,要实现启动画面,下载内核时的提示画面,都是静态的不需要动画.或者只显示一些提示语类似"OS image downloading...". 虽然看到很多人在网上问这个问题了,但有些地方还不清楚,所以再问一下.
有种方案是把图片放在flash里,在eboot里去读出图片更新显示buffer.

这种方法
1.不知道何时放图片到flash里?
2.图片放到flash的什么地址?
3.显示buffer的地址如何定义?

说一下我现在的状态.在C:\WINCE500\PLATFORM\ZYLONITE_MHL\SRC\BOOTLOADER\EBOOT\main.c里的OEMPlatformInit()函数里加了LCD 的显示函数InitLCDC();这个函数是bsp里就有的,就显示了红绿蓝3个色条.
void DrawBuffer(void)
{
    UINT32 *fb = (UINT32 *) BMAN_FB_PHY_ADX;    // realize fhy==vir
    int x, line;
/*
    // R
    for(line=0; line<105; line++)
        for(x=0; x<120; x++)
            *fb++ = 0xF800F800;
    // G
    for(line=0; line<105; line++)
        for(x=0; x<120; x++)
            *fb++ = 0x07E007E0;

    // B
    for(line=0; line<110; line++)
        for(x=0; x<120; x++)
            *fb++ = 0x001F001F;
}
地址原来定义如下
#define BMAN_FB_PHY_ADX 0x80200000
这样在eboot时这个画面会显示出来但是在下载内核到7%时屏就会花掉,后来我改了地址如下
#define BMAN_FB_PHY_ADX 0x820b0000
改后下载时这个画面就不会变化了,但下载完启动时屏就会花掉之后变白屏,好想给清屏了.

Loading Image from Flash...
Start block: 5
Number of blocks: 472
Image start address in RAM: 0x800B0000
LoadImageFromFlash: Block: 0x00000005 (5), pImageBufferRAM: 0x800B0000, numBloc
ks 0x01D8 (472)
blockSize = 0x00020000 (131072), sectorsPerBlock = 0x00000040 (64)
numBlocks = 0x1D8

...............................................................................
...............................................................................
........................................( 程序走到这里显示屏就花掉).................
...............................................................................
...............................................................................
.............................................................................
Loading Image from Flash Done!

)....................................

reset后启动也是一样,开始有显示图画,后面就没有了.


10 个解决方案

#1


#define BMAN_FB_PHY_ADX 0x820b0000 
改后下载时这个画面就不会变化了,但下载完启动时屏就会花掉之后变白屏,好想给清屏了. 


可能是地址的问题,确定这里空闲吗,后面没有对它的操作吗

#2


对RAM 和FLASH 的配置我还不清楚在哪个文件里看,该怎么看.不好意思,水平比较低:(请知道的告诉我一下吧,谢谢啦!
0x820b0000 地址我是在config.bib里看到的,不知道是不是空闲.
下面是config.bib文件
----------------config.bib----------------

;
; Copyright (c) Microsoft Corporation.  All rights reserved.
;
;
; Use of this source code is subject to the terms of the Microsoft end-user
; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
; If you did not accept the terms of the EULA, you are not authorized to use
; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
; install media.
;
; Memory Map
; ----------
;*****************************************************************************
;*     RAM Layout: Nand boot; non IU
;*     ------------------------------
;*      --------------------------------------> 8400_0000 for x16 
;*      |                               |
;*      |                               |
;*      |        NK RAM                 |
;*      |                               |
;*      --------------------------------------> 820B_0000 *autosize can alter the start
;*      |        Start OS (NK)          |
;*      |                               |
;*      --------------------------------------> 800B_0000
;*      |                               |
;*      |        IPL RAM (188k)         |
;*      --------------------------------------> 8008_1000
;*      |                               |
;*      |        IPL NK (128k)          |
;*      --------------------------------------> 8006_1000
;*      |        RESUME ARGS(2k)        |
;* --------------------------------------> 8006_0800
;*      |        EBT ARGS(2K)           |
;*      --------------------------------------> 8006_0000
;*      |        IPL Stack (60k)        |
;*      |        EBT Stack (60k)        |
;*      --------------------------------------> 8005_1000
;*      |        IPL Stack (4k)         |
;*      |        EBT Pagetables (4k)    |
;*      --------------------------------------> 8005_0000
;*      |                               |
;*      |        EBT RAM (64K)          |
;*      --------------------------------------> 8004_0000
;*      |                               |
;*      |        EBT NK (256K)          |
;*      --------------------------------------> 8000_0000
;*
;******************************************************************************

MEMORY

;   Name     Start     Size      Type
;   -------  --------  --------  ----
    ARGS     80060000  00001000  RESERVED
    NK       800B0000  02000000  RAMIMAGE
  ;    RAM      820B0000  01F50000  RAM
;   IMM      reserve 224K
IF BSP_MONAHANS_L
    ;RAM      820B0000  01F50000  RAM
    ;
    ; Temp locale to copy SRAM data for L
    RAM      820B0000   01F10000 RAM
    IMCPY    83FC0000 00040000 RESERVED 
ELSE
    RAM      820B0000  01F18000  RAM
ENDIF
    

CONFIG

    AUTOSIZE=ON
    KERNELFIXUPS=ON
    COMPRESSION=ON
    FSRAMPERCENT=0x0A0A0A0A

IF IMGPROFILER   
    PROFILE=ON
ELSE
    PROFILE=OFF
ENDIF

;
; ROMFLAGS is a bitmask of options for the kernel
;   ROMFLAGS    0x0001      Disallow Paging
;   ROMFLAGS    0x0002      Not all KMode
;   ROMFLAGS    0x0010      Trust Module only
;
IF IMGTRUSTROMONLY
    IF IMGNOTALLKMODE
       ROMFLAGS=12
    ELSE
       ROMFLAGS=10
    ENDIF
ELSE
    IF IMGNOTALLKMODE
       ROMFLAGS=02
    ELSE
       ROMFLAGS=00
    ENDIF
ENDIF

;
; NOR nbo
;
;ROMSTART=97C00000

; ram image .nb0
ROMSTART=800B0000

; From memory.cfg.xml
; NAND flash size
; Totals should add up to total NAND - reserved
; (From memory.cfg.xml - 0x03F90000)
IF IMGULDR
; Give ULDR less ROM
    ROMSIZE=00590000
ELSE
; Give OS rest of space.
    ROMSIZE=03A00000
ENDIF IMGULDR

; NB0 file should contain image
ROMWIDTH=32



#3


这种方法 
1.不知道何时放图片到flash里? 
2.图片放到flash的什么地址? 
3.显示buffer的地址如何定义? 




说下我现在的做法吧
1.图片是和Nboot、Eboot、NK一样事先就放在Flash里面的
2.至于放在Flash哪个地址,这个就看你喜欢了,我的顺序是 Block0 是Nboot Block1是Eboot,接着是图片,再接着就是NK了,这个地址嘛,你自己定,随你高兴,只要你先显示的时候把你图片的内容放到LCD显示的缓存就可以了

#4


#define BMAN_FB_PHY_ADX 0x80200000 
这样在eboot时这个画面会显示出来但是在下载内核到7%时屏就会花掉,后来我改了地址如下 
#define BMAN_FB_PHY_ADX 0x820b0000 
改后下载时这个画面就不会变化了,但下载完启动时屏就会花掉之后变白屏,好想给清屏了. 


查一下你给LCD缓存的内容对不对就行了,这种看下代码就很清楚了

#5


引用 3 楼 xuweiyue 的回复:
这种方法 
1.不知道何时放图片到flash里? 
2.图片放到flash的什么地址? 
3.显示buffer的地址如何定义? 


说下我现在的做法吧 
1.图片是和Nboot、Eboot、NK一样事先就放在Flash里面的 
2.至于放在Flash哪个地址,这个就看你喜欢了,我的顺序是 Block0 是Nboot Block1是Eboot,接着是图片,再接着就是NK了,这个地址嘛,你自己定,随你高兴,只要你先显示的时候把你图片的内容放到LCD显示的缓存就可以了

1.图片数据是用烧写BootImage.nb0的软件烧写进去的吗?只要自己指定flash的offset.
  这个图片数据是什么文家格式的呢?xx.c?
2.我在哪里可以查到我的flash的使用情况,怎么知道哪块flash是空闲的,而且我怎么保证我存放图片的flash不被wince系统使用到?

#6


问题还没解决,快晕了..:(

#7


1.图片数据是用烧写BootImage.nb0的软件烧写进去的吗?只要自己指定flash的offset. 
  这个图片数据是什么文家格式的呢?xx.c? 
图片数据一般是通过bootloader来烧写,格式看你代码里怎么用的,现成的工具很多,把BMP转换成.c的,当成文件来处理就可以了

2.我在哪里可以查到我的flash的使用情况,怎么知道哪块flash是空闲的,而且我怎么保证我存放图片的flash不被wince系统使用到?
这个是查不到的,除了去看自己的Bootloader
你的Flash驱动可以指定被CE访问的空间,这之外的CE是不会来使用的

#8


图片数据一般是通过bootloader来烧写?不好意思,能不能说详细点?

#9


比较方便的是将图片转换成像素的数组,
编译到EBOOT里去吧。
没试过,直接烧写图片文件到Flash。

#10


这次解决问题托的时间好长,终于要结贴了,呵呵.没有得到满意的答复.
简单说下最后的解决方法,
1.在eboot里简单显示了几个单词,所以没有讲图片存到flash里.现在也不知道这种方法要怎么作.
2.通过调整frame buffer地址到0xa3bb0000 并在config.bib将这段地址设置为reserved.在oeminit()里在初始化一下buffer就可以一直显示了.

结贴!

#1


#define BMAN_FB_PHY_ADX 0x820b0000 
改后下载时这个画面就不会变化了,但下载完启动时屏就会花掉之后变白屏,好想给清屏了. 


可能是地址的问题,确定这里空闲吗,后面没有对它的操作吗

#2


对RAM 和FLASH 的配置我还不清楚在哪个文件里看,该怎么看.不好意思,水平比较低:(请知道的告诉我一下吧,谢谢啦!
0x820b0000 地址我是在config.bib里看到的,不知道是不是空闲.
下面是config.bib文件
----------------config.bib----------------

;
; Copyright (c) Microsoft Corporation.  All rights reserved.
;
;
; Use of this source code is subject to the terms of the Microsoft end-user
; license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
; If you did not accept the terms of the EULA, you are not authorized to use
; this source code. For a copy of the EULA, please see the LICENSE.RTF on your
; install media.
;
; Memory Map
; ----------
;*****************************************************************************
;*     RAM Layout: Nand boot; non IU
;*     ------------------------------
;*      --------------------------------------> 8400_0000 for x16 
;*      |                               |
;*      |                               |
;*      |        NK RAM                 |
;*      |                               |
;*      --------------------------------------> 820B_0000 *autosize can alter the start
;*      |        Start OS (NK)          |
;*      |                               |
;*      --------------------------------------> 800B_0000
;*      |                               |
;*      |        IPL RAM (188k)         |
;*      --------------------------------------> 8008_1000
;*      |                               |
;*      |        IPL NK (128k)          |
;*      --------------------------------------> 8006_1000
;*      |        RESUME ARGS(2k)        |
;* --------------------------------------> 8006_0800
;*      |        EBT ARGS(2K)           |
;*      --------------------------------------> 8006_0000
;*      |        IPL Stack (60k)        |
;*      |        EBT Stack (60k)        |
;*      --------------------------------------> 8005_1000
;*      |        IPL Stack (4k)         |
;*      |        EBT Pagetables (4k)    |
;*      --------------------------------------> 8005_0000
;*      |                               |
;*      |        EBT RAM (64K)          |
;*      --------------------------------------> 8004_0000
;*      |                               |
;*      |        EBT NK (256K)          |
;*      --------------------------------------> 8000_0000
;*
;******************************************************************************

MEMORY

;   Name     Start     Size      Type
;   -------  --------  --------  ----
    ARGS     80060000  00001000  RESERVED
    NK       800B0000  02000000  RAMIMAGE
  ;    RAM      820B0000  01F50000  RAM
;   IMM      reserve 224K
IF BSP_MONAHANS_L
    ;RAM      820B0000  01F50000  RAM
    ;
    ; Temp locale to copy SRAM data for L
    RAM      820B0000   01F10000 RAM
    IMCPY    83FC0000 00040000 RESERVED 
ELSE
    RAM      820B0000  01F18000  RAM
ENDIF
    

CONFIG

    AUTOSIZE=ON
    KERNELFIXUPS=ON
    COMPRESSION=ON
    FSRAMPERCENT=0x0A0A0A0A

IF IMGPROFILER   
    PROFILE=ON
ELSE
    PROFILE=OFF
ENDIF

;
; ROMFLAGS is a bitmask of options for the kernel
;   ROMFLAGS    0x0001      Disallow Paging
;   ROMFLAGS    0x0002      Not all KMode
;   ROMFLAGS    0x0010      Trust Module only
;
IF IMGTRUSTROMONLY
    IF IMGNOTALLKMODE
       ROMFLAGS=12
    ELSE
       ROMFLAGS=10
    ENDIF
ELSE
    IF IMGNOTALLKMODE
       ROMFLAGS=02
    ELSE
       ROMFLAGS=00
    ENDIF
ENDIF

;
; NOR nbo
;
;ROMSTART=97C00000

; ram image .nb0
ROMSTART=800B0000

; From memory.cfg.xml
; NAND flash size
; Totals should add up to total NAND - reserved
; (From memory.cfg.xml - 0x03F90000)
IF IMGULDR
; Give ULDR less ROM
    ROMSIZE=00590000
ELSE
; Give OS rest of space.
    ROMSIZE=03A00000
ENDIF IMGULDR

; NB0 file should contain image
ROMWIDTH=32



#3


这种方法 
1.不知道何时放图片到flash里? 
2.图片放到flash的什么地址? 
3.显示buffer的地址如何定义? 




说下我现在的做法吧
1.图片是和Nboot、Eboot、NK一样事先就放在Flash里面的
2.至于放在Flash哪个地址,这个就看你喜欢了,我的顺序是 Block0 是Nboot Block1是Eboot,接着是图片,再接着就是NK了,这个地址嘛,你自己定,随你高兴,只要你先显示的时候把你图片的内容放到LCD显示的缓存就可以了

#4


#define BMAN_FB_PHY_ADX 0x80200000 
这样在eboot时这个画面会显示出来但是在下载内核到7%时屏就会花掉,后来我改了地址如下 
#define BMAN_FB_PHY_ADX 0x820b0000 
改后下载时这个画面就不会变化了,但下载完启动时屏就会花掉之后变白屏,好想给清屏了. 


查一下你给LCD缓存的内容对不对就行了,这种看下代码就很清楚了

#5


引用 3 楼 xuweiyue 的回复:
这种方法 
1.不知道何时放图片到flash里? 
2.图片放到flash的什么地址? 
3.显示buffer的地址如何定义? 


说下我现在的做法吧 
1.图片是和Nboot、Eboot、NK一样事先就放在Flash里面的 
2.至于放在Flash哪个地址,这个就看你喜欢了,我的顺序是 Block0 是Nboot Block1是Eboot,接着是图片,再接着就是NK了,这个地址嘛,你自己定,随你高兴,只要你先显示的时候把你图片的内容放到LCD显示的缓存就可以了

1.图片数据是用烧写BootImage.nb0的软件烧写进去的吗?只要自己指定flash的offset.
  这个图片数据是什么文家格式的呢?xx.c?
2.我在哪里可以查到我的flash的使用情况,怎么知道哪块flash是空闲的,而且我怎么保证我存放图片的flash不被wince系统使用到?

#6


问题还没解决,快晕了..:(

#7


1.图片数据是用烧写BootImage.nb0的软件烧写进去的吗?只要自己指定flash的offset. 
  这个图片数据是什么文家格式的呢?xx.c? 
图片数据一般是通过bootloader来烧写,格式看你代码里怎么用的,现成的工具很多,把BMP转换成.c的,当成文件来处理就可以了

2.我在哪里可以查到我的flash的使用情况,怎么知道哪块flash是空闲的,而且我怎么保证我存放图片的flash不被wince系统使用到?
这个是查不到的,除了去看自己的Bootloader
你的Flash驱动可以指定被CE访问的空间,这之外的CE是不会来使用的

#8


图片数据一般是通过bootloader来烧写?不好意思,能不能说详细点?

#9


比较方便的是将图片转换成像素的数组,
编译到EBOOT里去吧。
没试过,直接烧写图片文件到Flash。

#10


这次解决问题托的时间好长,终于要结贴了,呵呵.没有得到满意的答复.
简单说下最后的解决方法,
1.在eboot里简单显示了几个单词,所以没有讲图片存到flash里.现在也不知道这种方法要怎么作.
2.通过调整frame buffer地址到0xa3bb0000 并在config.bib将这段地址设置为reserved.在oeminit()里在初始化一下buffer就可以一直显示了.

结贴!