ubuntu 在 R40e 上 還有 Debian 在 Sempron 2600 上

2011年5月18日 星期三

re-enable the splash screen in u-boot

因為原來就有了,只是後來被 disable掉,所以是 "re-enable"

從 commit log 中找出當初disable 的 rev,找出 diff:
diff --git a/include/configs/mx51_bbg_android.h b/include/configs/mx51_bbg_android.h index 7b054e3..a460954 100644 --- a/include/configs/mx51_bbg_android.h +++ b/include/configs/mx51_bbg_android.h @@ -349,7 +349,6 @@ #undef CONFIG_JFFS2_CMDLINE #define CONFIG_JFFS2_DEV "nand0" -#define CONFIG_SPLASH_SCREEN #ifdef CONFIG_SPLASH_SCREEN /* * Framebuffer and LCD 重新把他加回去。

然後grep 一下 CONFIG_SPLASH_SCREEN 的code.

function implememt 都在 common/lcd.c

hardware driver 在 drivers/video/mxc_ipuv2.c

另外還有 board specific setting 在 board/freescale/mx51_bbg/mx51_bbg.c



有兩組 DI (display Interface) : DI0, DI1,在 code 中 drivers/video/ipu_common.c 用 data structure clk 宣告一個 array ipu_clk[2] 描述兩個 interface 的 clk setting。

決定 interface 的 argument..
ipu_common.c : int ipu_probe(int di, ipu_di_clk_parent_t di_clk_parent, int di_clk_val).. if (di_clk_parent == DI_PCLK_LDB) { clk_set_parent(g_pixel_clk[di], g_di_clk[di]); } else { clk_set_parent(g_pixel_clk[0], g_ipu_clk); clk_set_parent(g_pixel_clk[1], g_ipu_clk); } clk_enable(g_ipu_clk);
所以要看 di_clk_parent 是否是 1,還有 di 的值。

在 drivers/video/mxc_ipuv3_fb.c
int ipuv3_fb_init(struct fb_videomode *mode, int di, int interface_pix_fmt, ipu_di_clk_parent_t di_clk_parent, int di_clk_val) { int ret; ret = ipu_probe(di, di_clk_parent, di_clk_val);
參數 di, di_clk_parent ...

在 board/freescale/mx51_bbg/mx51_bbg.c void lcd_enable(void) { .... .... gpio config .... ret = ipuv3_fb_init(&claa_wvga, 1, IPU_PIX_FMT_RGB565, DI_PCLK_PLL3, 0); di_parent = DI_PCLK_PLL3,
di = 1.

所以是用 DI1.



follow kernel 的內容新增一個pvi_2003a_wvga .並且把 di 由 1 改為 0.
從 kernel boot message 可以看到這個設計是以 di0 作 primary。
同時 format 改為 RGB24



檢查一下 gpio 的設定..
DI1_DISP_CLK : No Muxing ..
DI1_PIN2 : ALT0 才是 ipu. 電路作DISP1_HSYNC 用
DI1_PIN3 : ALT0 是 ipu,作 DISP1_VSYNC 用
DI1_PIN15 : No Muxing, ipu, 作 DISP1_DRDY -- 接到 image processor,當 DE 用
DISP1_DAT 0 ~ 5 : No Muxing.
DISP1_DAT 6 ~ 23 : ALT0 是 ipu

看了一下,這些 pin default 都是 ALT0.

在cls command 的 do function 加入填寫螢幕的動作,查各bit 的有效顏色..
0. 1. 2. 3. 4    - green
5. 6. 7. 8. 9.10 - blue
11.12.13.14.15    - red
所以是 565沒錯。

修改到此,可以試試看 bmp 的 function 了。因為 option 只有 CONFIG_BMP_8BPP. 所以只有 support 8bpp 的 bmp format.

follow 這一篇 U-Boot display support 產生 8bpp 的 bmp file,叫 u-boot load 進 ram 然後 show出來..

  1. 先用 gimp create 一個 800x480, backgroupe 是白色,中間隨便的圖案。
    如果是用現成的圖,先用 gimp打開,然後 save as,選 windows bmp file,save 時,advance option 選 16bit 565 的格式
  2. 使用 imagemagick 轉成 8bpp: $ convert 00.bmp -colors 256 -compress none splash.bmp
  3. copy splash.bmp 到 boot sd 的 partition 1
  4. boot,進入 uboot console.
  5. uboot load spalsh.bmp 進 memory: fatload mmc 0:1 0x92000000 splash.bmp
  6. 用 bmp display 顯示出來 bmp display 0x92000000

在 boot env 加上 splashimage=0x90800000 後,開機竟然show 一個原廠的畫面...
找了一下,發現在 boared/freescale/common 下有 bmp 的 c arrary source..

只要在 bootargument 有 define splashimage='address' 指定 splash 的 memory location,
就會把 bmp array data 顯示出來。

這一篇 的內容,把 splash.bmp 轉成 c array.
$ hexdump -e '16/1 "0x%02X,"' -e '"\n"' splash.bmp -v -v option 是要他不要把重複的以 '*' 代替,忠實的顯示出來。

output pipe 到 dummy_800x480.c,修改 Makefile。

完成。

沒有留言:

標籤

網誌存檔