在內核中增加啓動logo是比較簡單的.make menuconfig->device driver->graphics support->logo configuration,裏面的全都選上.編譯內核的時候會將driver/video/logo中的圖片轉換爲C語言的數組,編譯進內核.所以如果需要更換圖片,只需要將另外一張PPM圖片覆蓋就可以了.下面是PPM圖片製作的過程.
1. 首先在linux中安裝netpbm包.我使用的是ubuntu 10.04,輸入以下命令
a) Sudo apt-get install netpbm
2. 首先使用 Photoshop 製作 png 文件(Windows下),或者使用最簡單的畫圖工具另存爲png圖片即可.
3. 再將png圖片轉成pnm
# pngtopnm uclinux_logo.png > uclinux_logo.pnm
4. 然後將pnm圖片的顏色數限制在224
# pnmquant 224 uclinux_logo.pnm > logo_linux_clut224.pnm
5. 最後將pnm圖片轉換成我們需要的ppm
# pnmtoplainpnm logo_linux_clut224.pnm > logo_linux_clut224.ppm
6. 將 logo_linux_clut224.ppm 替換 linux-2.6/drivers/video/logo 中對應的圖像
Dm355具有三個display窗口,video display, osd display, attribute display.video display使用的是V4L2,顯示緩存使用的是user buffer.而osd display和attribute display使用的是FB實現的.不支持user buffer.所以選擇OSD窗口顯示logo.通過kconfig和makefile找出davinci FB實現文件是driver/video/davincifb.c文件.我們只看初始化部分,分別註冊了四個窗口,呵呵.osd窗口就是在這裏初始化的.:davincifb_init_window函數.這個函數的 return 0 上面加入下面這些語句:
#if !defined(CONFIG_FRAMEBUFFER_CONSOLE) && defined(CONFIG_LOGO)
if(is_osd_win(info))
{
if (fb_prepare_logo(info, FB_ROTATE_UR)) {
/* Start display and show logo on boot */
fb_set_cmap(&info->cmap, info);
fb_show_logo(info, FB_ROTATE_UR);
}
}
#endif
重新編譯內核,啓動dm355 EVM板,在電視機的左上角將顯示一張圖片.呵呵,成功了.
通過修改fbmem.c中的fb_show_logo函數的image.dx, image.dy的值,可能調整圖片顯示的位置.