[Q] 리눅스 커널에서 Frame Buffer를 위한 LCD Controller 값 설정 방법
글쓴이: lovelyphy07 / 작성시간: 목, 2010/01/14 - 8:55오후
리눅스 커널을 제가 사용하는 보드에 포팅하려고 수정하고 있습니다. (PXA270)
Frame Buffer를 위해서 LCD Controller 설정을 하려고 합니다.
그런데 설정이 잘못되어서 그런지, 화면이 나오기는 하는데 왼쪽부분이 짤리고,
약 13분 뒤에 화면이 꺼져버리는 기현상이 발생합니다....
아니 왜 잘 나오다가 꺼져버리는 것일까요.. 화면도 짤리고 ㅠ
이런 경우에는 어떤값을 바꾸어야 하는지 궁금합니다 ㅠ
커널 버젼은 2.6.28이고요, linux/arm/arch/mach-pxa/lpd270.c를 수정하고 있습니다.
아래 코드 중에서 주석문 뒤에 있는 숫자는, 시도해본 값들이고요, 즉 총 4번의 시도를 해본 것이지요.
아래 값중에서 특이할만하다 싶은 것은 오직 hsync_len에서 96값이 잘못되었다고 dmesg에서 나온 것 뿐입니다.
많은 분들의 관심 부탁드립니다 ㅠ
static struct pxafb_mode_info robot_lcd_mode __initdata = { .pixclock = 25000, .xres = 670, .yres = 500, .bpp = 16, .hsync_len = 5, //96, 5, 5 .left_margin = 24, //24, 24, 30 .right_margin = 6, //40, 6, 10 .vsync_len = 2, //2, 2, 2 .upper_margin = 8, //10, 8, 8 .lower_margin = 23, //33, 23, 23 .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT, };
static struct pxafb_mach_info robot_lcd_mach = { .modes = &robot_lcd_mode, .num_modes = 1, .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL | LCD_ALTERNATE_MAPPING, .lccr0 = LCCR0_LDDALT | LCCR0_OUC | LCCR0_PAS, .lccr3 = LCCR3_PCP, };
Forums:
LCD 사양
저 값들은요
사용하시는 LCD마다 달라요.
사용하시는 LCD 모듈의 문서를 참고하세요.
문제는..
문제는.. 화면이 나오긴 하는데, 몇분 뒤에 꺼진다는 겁니다...
화면이 잘 안나오다가 꺼진다든지, 아예 안나온다든지 하면 이해가 되는데, 잘 나오다가 꺼지다니요.. ㅠㅠ
값은 tinyvga에서 제공하는 640x480@60Hz 값을 해보았습니다.
혹시 menuconfig에서 따로 또 추가해줘야하는 것이 있는지요? 2.6.28 버젼에서 Device Driver / Graphic Driver/ 아래 PXA관련항목은 거의다 체크하였습니다.
fb 콘솔 상태에서는
fb 콘솔 상태에서는 화면보호기(?)가 작동합니다.
짐작하신바와는 달리 매우 정상적으로 작동하고 있는 상태라는 겁니다.
자세한 것은... 화면 제대로 나오게 만들고 난 뒤에 알아보고 궁리하셔도 늦지 않습니다.
(아마도 궁리할 필요가 없을 지도 모릅니다. 뭘 올리려고 하시는 지 몰라도... 대부분의 툴킷에서 이 정도 쯤은 자체해결합니다.)
OTL
오오오오오오오
말씀하신 바가 맞는듯 하옵니다.
화면은 당연히 제대로 나오고 있고요.. 그래서 지금 궁리하고 있답니다 ^^
툴킷을 말씀하셨는데, 저는 지금 fb를 메모리 매핑하여 직접 뿌리고 있는 실정입니다. 어떤 툴킷을 이용하여 화면보호기를 해제할 수 있는지요?
툴킷이라 언급한
툴킷이라 언급한 것은 GDI framework 을 제공하는 라이브러리(들)을 뜻합니다.
보통 HID framework 까지 같이 제공됩니다.
SDL 의 경우,
http://www.libsdl.org/cgi/viewvc.cgi/trunk/SDL/src/video/fbcon/SDL_fbevents.c?revision=4211&view=markup
에서 graphic mode 진입 코드를 확인하실 수 있습니다.
Android 는
http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=libs/surfaceflinger/DisplayHardware/DisplayHardwareBase.cpp;h=1d09f84dca840be28ae8aaba1bfbb2ddcdb275b0;hb=HEAD#l147
다른 툴킷에서도 대동소이한 일이 벌어집니다.
저런 식으로 했을 때 얻어지는 시각적인 효과는 세 가지입니다.
fb 콘솔의 화면보호기 해제.
fb 콘솔의 커서 깜빡임 해제.
fb 콘솔로의 출력 해제.
마지막을 제외한 나머지 두가지는 커널 vc가 제공하는 vt 에뮬을 통해 escape sequence 로도 해결할 수 있습니다.
http://lxr.linux.no/#linux+v2.6.32/drivers/char/vt.c#L1388
http://lxr.linux.no/#linux+v2.6.32/drivers/char/vt.c#L1458
보통... 이렇게(심지어 이것보다 더 장황하게) 글을 올리면,
대부분 삽질포기하고 커널 소스코드를 수정해버리시더군요.
아무거나 마음에 드는 것으로 선택해서 열심히 파고들어 보세요.
OTL
=_=;;아.. 예...
=_=;; 마지막 말씀보고 깜짝 놀랐습니다..
답변이 언제 올라올지 몰라서 그냥 커널에서 fb console을 해제시켜버렸거든요;;;
이제 사용하면서 화면보호기도 해제할 수 있게되었습니다! 감사합니다 +_+
댓글 달기