QT2440 LCD開機如何顯示

我們生活周遭存在太多太多的 embedded system ,過去 embedded system 有專屬的 OS,現在 linux 也可以應用在嵌入式環境,不過本版將廣泛討論所有嵌入式系統不只 linux 喔,歡迎有這方面經驗或有興趣的朋友一同進來討論。

版主: chester

QT2440 LCD開機如何顯示

文章harlan » 週五 6月 29, 2007 4:51 pm

請問各位大大, 我的QT2440在開機時, LCD沒有出現任何開機訊息, 但是外接uart就會出現在終端機上! kernel 是2.4.18, 不知是那裡需要設定 ? or .... ?

謝謝
harlan
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週五 6月 29, 2007 4:49 pm

文章leeg » 週日 7月 01, 2007 11:36 pm

你可以參考linux/Documentation/kernel-parameters.txt
裡面的"video"參數

參數的格式則是在
Linux/Documentation/fb/modedb.txt
leeg
可愛的小學生
可愛的小學生
 
文章: 6
註冊時間: 週日 6月 24, 2007 12:15 am

文章harlan » 週二 7月 10, 2007 8:32 am

我大概知道原因了, 原因是出自X windows沒有裝起來嗎 ?

請問我應該是在make kernel時設定? 在make menuconfig時設? 還是在燒進去之後再安裝相關套件?

看來這塊需要惡補... 謝謝
harlan
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週五 6月 29, 2007 4:49 pm

文章訪客 » 週二 7月 10, 2007 4:08 pm

安裝 x window.
在gnome-terminal 裡輸入
apt-get install x-window-system x-window-system-core
後按enter
訪客
 

文章訪客 » 週三 7月 11, 2007 6:32 am

不好意思,我還是不太懂這和x windows有什麼關係?

我只是開機時沒有出現任何訊息,例如一些module載入的資訊。可是接上uart之後就會出現在終端機上。應該和x windows沒有關係......
訪客
 

文章hmchen » 週三 7月 11, 2007 3:56 pm

最有可能的原因應該是 bootloader 傳給 linux kernel 的參數中
含有類似 "console=/dev/ttyS1,115200" 這樣的字串
這會讓 kernel 以 uart1 作為 console 的顯示裝置, 而非 LCD

<< 以下的東西純屬經驗推測 XD , 萬一試不出來小弟可不負責 @@ >>
如果你需要以 LCD 作為 console, 可以試著把上述字串從 kernel 開機參數中移除, 參數可能放在
1. bootloader 在 flash 的設定區塊 (如 redboot, u-boot)
2. kernel 本身 (當 bootloader 沒有傳遞開機參數時才使用)
3. 寫死在 bootloader 的 source code 中

並且將 framebuffer console 啟動, 讓 LCD 能具有 console 能力

不過, 假設運氣很好成功了, 那要怎麼進行命令列操作咧?
難不成要接 USB keyboard ? 我看又還是得在 ttyS1另外開個 getty
那還不如乖乖的接 uart 用 serial console 操作

如果只是想知道 LCD 有沒有壞, 直接用 dd 把隨便一個檔案餵進
/dev/fb0 看畫面有沒有一堆亂七八糟的東西就知道了
或是開 framebuffer console + boot logo, LCD 應該會出現一隻小企鵝
hmchen
可愛的小學生
可愛的小學生
 
文章: 38
註冊時間: 週二 6月 08, 2004 7:34 pm
來自: 台灣共和國

文章harlan » 週三 7月 11, 2007 10:18 pm

感謝hmchen大大, 我的開機畫面有出現小企鵝, 後來改成自製的圖片.

可是我用dd送到/dev/fb0之後, 訊息是
0+1 records in
0+1 records out

應該要先檢查fb是否正常, 接著檢查bootloader傳給kernel的參數.

一開始希望輸出是LCD, 後來想改成X windows, 謝謝
harlan
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週五 6月 29, 2007 4:49 pm

文章hmchen » 週三 7月 11, 2007 10:38 pm

至少看到小企鵝就表示 LCD 有正確驅動了(如果小企鵝顏色看起來正確的話)
正規透過 framebuffer 顯示圖像的方法當然不是用 dd 啦
還是要透過 kernel 提供的一些 API 才是正途, 通常是
1. 取得 frame buffer 的解析度, color depth
2. 用 mmap 取得 frame buffer 的起始位址
3. 對 frame buffer 對應的位置中填入 RGB 值, 就可以看見東西了~

另外 2440要跑 X-Window 恐怕比較吃力, 多數板子只配了 64MB 的 RAM
比較可行的是用 QPE / GPE 這些接驅動 FB 的輕量化圖形介面系統
hmchen
可愛的小學生
可愛的小學生
 
文章: 38
註冊時間: 週二 6月 08, 2004 7:34 pm
來自: 台灣共和國

文章harlan » 週四 7月 12, 2007 8:48 am

感謝hmchen大大.

我從uart上面接收開機資訊有看到install S3C2440 frame buffer, 所以應該是有安裝frame buffer了. 我會寫一隻小程式直接試試看是否有東西, 應該是沒什麼問題.

前文中您曾提及到"讓 LCD 能具有 console 能力", 請問這方面應該在那改設定值 ? 因為我打算一步一步的做

謝謝
harlan
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週五 6月 29, 2007 4:49 pm

文章hmchen » 週一 7月 16, 2007 10:26 am

前文中您曾提及到"讓 LCD 能具有 console 能力", 請問這方面應該在那改設定值 ? 因為我打算一步一步的做

今天花了一點時間測試了下之前說的作法, 確實是可行的
開啟 kernel 的 framebuffer console 選項後,
再把 bootloader 跟 kernel 中有關 serial console 的設定都拿掉
開機時就能看到 kernel boot messages 顯示在 LCD 上了

開啟 framebuffer console 的方法, (kernel 2.6.x)
代碼: 選擇全部
Device Drivers -->
  Graphics support -->
    Console display driver support -->
       [*] Framebuffer Console support  (把這個勾起來)


透過 framebuffer 顯示的方法

代碼: 選擇全部
struct fb_var_screeninfo vinfo;
struct fb_fix_screeninfo finfo;
__u8 *fb_buf;
__u32 screensize;

int fbfd = open("/dev/fb0", O_RDWR);
if(fbfd<0) {
  printf("Error: cannot open framebuffer device.\n");
  return -1;
}
// Get fixed screen information
if (ioctl(fbfd, FBIOGET_FSCREENINFO, &finfo)) {      
  printf("Error reading fixed information.\n");
  close(fbfd);
  return -1;
}

// Get variable screen information
if (ioctl(fbfd, FBIOGET_VSCREENINFO, &vinfo)) {
  printf("Error reading variable information.\n");
  close(fbfd);
  return -1;
}

printf("%dx%d, %dbpp\n", vinfo.xres, vinfo.yres, vinfo.bits_per_pixel );
fb_xres = vinfo.xres;
fb_yres = vinfo.yres;
fb_bpp  = vinfo.bits_per_pixel;

screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
fb_buf = (char *)mmap(0, screensize, PROT_READ | PROT_WRITE, MAP_SHARED, fbfd, 0);
if ((int)fb_buf == -1) {
  printf("Error: failed to map framebuffer device to memory.\n");
  close(fbfd);
  return -1;
}

之後只要對 fb_buf 內填入 RGB 像素值就可以顯示到 LCD 上了
比如在RGB565格式下, x=20, y=10 的位置顯示一個 白色的點:

*(((__u16 *)fb_buf)+vinfo.xres*10+20) = 0xffff;
hmchen
可愛的小學生
可愛的小學生
 
文章: 38
註冊時間: 週二 6月 08, 2004 7:34 pm
來自: 台灣共和國

文章harlan » 週五 7月 20, 2007 8:31 am

感謝, 我也是將在bootloader上的parameter去除就可以了, 可是我正在實驗將lcd和uart開機資訊共存的方式, 這是之前版上朋友提到的, 直接在 bootloader 後面接上參數或許可以.
harlan
可愛的小學生
可愛的小學生
 
文章: 11
註冊時間: 週五 6月 29, 2007 4:49 pm


回到 embedded system

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客