도와주세요!!
글 수 15,339
2003.08.27 14:20:38 (*.186.47.173)
6678
적용되지 않는거 맞습니다.. 맞고요..
제가 몇개의 프로젝트를 진행하면서 해상도가 다른 여러개의 마이크로윈도우
를 가지고 있는데 그게 PC버전과 프레임버퍼를 모두 가지고 있었는데 잘못 알
고 있었습니다.
일단 말씀 하신 것처럼 X11이 N로 되어 있으면 해상도에 관련이 없어 집니다.
프레임버퍼에 해상도를 조절하는 것은 커널에서 합니다.
저희가 제공하는 X5용 커널을 기준으로 kernellinuxdriversvideo 디렉토리
아레에 pxafb.h 파일 제일 아래쪽에 해상도 별로 구별해 놓은 부분이 있습니
다.
X5 에서는 해당 파일에 640 * 480
// 640 X 480 X 65535
#define LCD_PIXCLOCK 25000000
#define LCD_BPP PXAFB_BPP
#define LCD_XRES 640
#define LCD_YRES 480
#define LCD_HORIZONTAL_SYNC_PULSE_WIDTH 2
#define LCD_VERTICAL_SYNC_PULSE_WIDTH 2
#define LCD_BEGIN_OF_LINE_WAIT_COUNT 10
#define LCD_BEGIN_FRAME_WAIT_COUNT 29
#define LCD_END_OF_LINE_WAIT_COUNT 10
#define LCD_END_OF_FRAME_WAIT_COUNT 29
#define LCD_SYNC (FB_SYNC_HOR_HIGH_ACT |
FB_SYNC_VERT_HIGH_ACT)
#define LCD_LCCR0 0x003008F8
#define LCD_LCCR3 (0x0040FF02 | (PXAFB_BPP_BITS <<
24))
800 * 600 모드..
// 800 X 600 X 65535 ==============================
#define LCD_PIXCLOCK 25000000
#define LCD_BPP PXAFB_BPP
#define LCD_XRES 800
#define LCD_YRES 600
#define LCD_HORIZONTAL_SYNC_PULSE_WIDTH 2
#define LCD_VERTICAL_SYNC_PULSE_WIDTH 2
#define LCD_BEGIN_OF_LINE_WAIT_COUNT 10
#define LCD_BEGIN_FRAME_WAIT_COUNT 29
#define LCD_END_OF_LINE_WAIT_COUNT 10
#define LCD_END_OF_FRAME_WAIT_COUNT 29
#define LCD_SYNC (FB_SYNC_HOR_HIGH_ACT |
FB_SYNC_VERT_HIGH_ACT)
#define LCD_LCCR0 0x003008F8
#define LCD_LCCR3 (0x0440FF02 | (PXAFB_BPP_BITS <<
24))
이상과 같이 해주시면 됩니다. 커널을 컴파일 하셔서 다운로드 하신후 사용하
시기 바랍니다.
마이크로윈도우에 관한 것은 저희가 저희 자체 프로젝트는 진행을 하고 있지
만 외부 기술지원까지는 아직 하지 않고 있습니다. 따라서 좀더 효과적인 지원
을 해드리지 못해 안타깝습니다.
지금 진행되는 프로젝트들이 어느정도 마무리가되어 시간적인 여유가 생기면
함께 공유할 부분에 대해 생각해 보겠습니다.
덧붙여서 옆자리 푸지님께서 SA1110에서는 800*600 모드를 테스트 해보지 않
아서 모른답니다. 저도 지금 해당 커널 소스를 살펴 봤더니 무지 헷갈리게 되
어 있어서 어느 부분이 해상도에 관련된 부분인지 잘 모르겠습니다.
SA1110 커널의 경우 파일은 sa1100fb.c 이고 335 번째 라인부터 해상도에 관련
된 부분인것 같습니다.
mac wrote..
: 빨간장미님...
: 저도 혹시나 해서 해보긴 했는데.. X11=N으로 하고
: 아래에 1027, 768로 해서 해상도가 바뀐다고요...
:
: 저는 아무리 해도 안되는 데요.. 그 부분을 if문 밖으로 가져 와도 안돼고 암
: 튼
: 저는 안됩니다.. 되신다니 정말 신기하군요..
: 괜찮으시면.....
: 그렇게 해서 800*600으로 컴파일된 데모
: 하나만 올려 주세요 저도 한번 해보게요...
:
: 그리구요 제가 나름대로 살펴 본 결과 순전히 제생각이지만..
: src/drivers디렉토리의 scr_fb.c 에서 스크린 사이즈 정보를 얻어 오는 것 같
: 습니다.
: fb_open 함수의 아래 라인을
:
: if(fb < 0) {
: EPRINTF("Error opening %s: %m. Check kernel config
",
: env);
: return NULL;
: }
: if(ioctl(fb, FBIOGET_FSCREENINFO, &fb_fix) == -1 ||
: ioctl(fb, FBIOGET_VSCREENINFO, &fb_var) == -1) {
: EPRINTF("Error reading screen info: %m
");
: goto fail;
: }
: /* setup screen device from framebuffer info*/
: type = fb_fix.type;
: visual = fb_fix.visual;
:
:
: psd->portrait = MWPORTRAIT_NONE;
: psd->xres = psd->xvirtres = fb_var.xres;
: psd->yres = psd->yvirtres = fb_var.yres;
:
:
:
: 여기에서
: ioctl(fb, FBIOGET_VSCREENINFO, &fb_var) == -1)에서 스크린 사이즈 값 을
: 읽어와서
: 그 값을 psd의 xres, yres에 넣는 것 같은데
:
: 참고로 제일 마지막 두줄 인
: psd->xres = psd->xvirtres = fb_var.xres;
: psd->yres = psd->yvirtres = fb_var.yres;
: 를
: psd->xres = psd->xvirtres = 640;
: psd->yres = psd->yvirtres = 480;
: 이렇게 하면 똑 같이 잘 동작합니다.
: 그라나.
: psd->xres = psd->xvirtres = 800;
: psd->yres = psd->yvirtres = 600;
: 해서 컴파일 하고 Ezboard에서 돌리면
:
: Error mmaping /dev/fb0: Invalid argument
: Cannot initialise screen
:
: 이런 에러가 나옵니다.
: 에러가 나는 부분은 fb_open함수의
:
: /* mmap framebuffer into this address space*/
: psd->size = (psd->size + getpagesize () - 1)
: / getpagesize () * getpagesize ();
: psd->addr = mmap(NULL, psd->size,
: PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);
: if(psd->addr == NULL || psd->addr == (unsigned char *)-1) {
: EPRINTF("Error mmaping %s: %m
", env);
: goto fail;
: }
: 여기 부분이고요
:
:
: FBIOGET_VSCREENINFO 는 0x4600으로 세팅되어 있습니다..
: 제 생각에 이 번호가 아마도 H/W의 번지 수 같은데 이 부분에서 해상도를 읽
: 어 오는 것 아닌가요
: 맞다면 여기 읽어오는 부분에서 바꾸어 줘야 해상도가 바뀔 것 같은데
: ioctl을 잘 모르니 막히는 군요..
:
: 제 생각이 맞나요.. 맞다면 여기에서 어떻게 진행 해야 할까요..
:
: 읽어 주셔서 감솨 합니다.
:
:
: PS. LCD SET는 언제 들어 오나요.. 옛날 쫀드기 같은 케이블에다가 와이어 연
: 결하는 쌩노가다에 화면 조정에 넘 시간이 걸려서리.. 하지만 꼭 해결하고 싶
: 어요.. Help me~~
제가 몇개의 프로젝트를 진행하면서 해상도가 다른 여러개의 마이크로윈도우
를 가지고 있는데 그게 PC버전과 프레임버퍼를 모두 가지고 있었는데 잘못 알
고 있었습니다.
일단 말씀 하신 것처럼 X11이 N로 되어 있으면 해상도에 관련이 없어 집니다.
프레임버퍼에 해상도를 조절하는 것은 커널에서 합니다.
저희가 제공하는 X5용 커널을 기준으로 kernellinuxdriversvideo 디렉토리
아레에 pxafb.h 파일 제일 아래쪽에 해상도 별로 구별해 놓은 부분이 있습니
다.
X5 에서는 해당 파일에 640 * 480
// 640 X 480 X 65535
#define LCD_PIXCLOCK 25000000
#define LCD_BPP PXAFB_BPP
#define LCD_XRES 640
#define LCD_YRES 480
#define LCD_HORIZONTAL_SYNC_PULSE_WIDTH 2
#define LCD_VERTICAL_SYNC_PULSE_WIDTH 2
#define LCD_BEGIN_OF_LINE_WAIT_COUNT 10
#define LCD_BEGIN_FRAME_WAIT_COUNT 29
#define LCD_END_OF_LINE_WAIT_COUNT 10
#define LCD_END_OF_FRAME_WAIT_COUNT 29
#define LCD_SYNC (FB_SYNC_HOR_HIGH_ACT |
FB_SYNC_VERT_HIGH_ACT)
#define LCD_LCCR0 0x003008F8
#define LCD_LCCR3 (0x0040FF02 | (PXAFB_BPP_BITS <<
24))
800 * 600 모드..
// 800 X 600 X 65535 ==============================
#define LCD_PIXCLOCK 25000000
#define LCD_BPP PXAFB_BPP
#define LCD_XRES 800
#define LCD_YRES 600
#define LCD_HORIZONTAL_SYNC_PULSE_WIDTH 2
#define LCD_VERTICAL_SYNC_PULSE_WIDTH 2
#define LCD_BEGIN_OF_LINE_WAIT_COUNT 10
#define LCD_BEGIN_FRAME_WAIT_COUNT 29
#define LCD_END_OF_LINE_WAIT_COUNT 10
#define LCD_END_OF_FRAME_WAIT_COUNT 29
#define LCD_SYNC (FB_SYNC_HOR_HIGH_ACT |
FB_SYNC_VERT_HIGH_ACT)
#define LCD_LCCR0 0x003008F8
#define LCD_LCCR3 (0x0440FF02 | (PXAFB_BPP_BITS <<
24))
이상과 같이 해주시면 됩니다. 커널을 컴파일 하셔서 다운로드 하신후 사용하
시기 바랍니다.
마이크로윈도우에 관한 것은 저희가 저희 자체 프로젝트는 진행을 하고 있지
만 외부 기술지원까지는 아직 하지 않고 있습니다. 따라서 좀더 효과적인 지원
을 해드리지 못해 안타깝습니다.
지금 진행되는 프로젝트들이 어느정도 마무리가되어 시간적인 여유가 생기면
함께 공유할 부분에 대해 생각해 보겠습니다.
덧붙여서 옆자리 푸지님께서 SA1110에서는 800*600 모드를 테스트 해보지 않
아서 모른답니다. 저도 지금 해당 커널 소스를 살펴 봤더니 무지 헷갈리게 되
어 있어서 어느 부분이 해상도에 관련된 부분인지 잘 모르겠습니다.
SA1110 커널의 경우 파일은 sa1100fb.c 이고 335 번째 라인부터 해상도에 관련
된 부분인것 같습니다.
mac wrote..
: 빨간장미님...
: 저도 혹시나 해서 해보긴 했는데.. X11=N으로 하고
: 아래에 1027, 768로 해서 해상도가 바뀐다고요...
:
: 저는 아무리 해도 안되는 데요.. 그 부분을 if문 밖으로 가져 와도 안돼고 암
: 튼
: 저는 안됩니다.. 되신다니 정말 신기하군요..
: 괜찮으시면.....
: 그렇게 해서 800*600으로 컴파일된 데모
: 하나만 올려 주세요 저도 한번 해보게요...
:
: 그리구요 제가 나름대로 살펴 본 결과 순전히 제생각이지만..
: src/drivers디렉토리의 scr_fb.c 에서 스크린 사이즈 정보를 얻어 오는 것 같
: 습니다.
: fb_open 함수의 아래 라인을
:
: if(fb < 0) {
: EPRINTF("Error opening %s: %m. Check kernel config
",
: env);
: return NULL;
: }
: if(ioctl(fb, FBIOGET_FSCREENINFO, &fb_fix) == -1 ||
: ioctl(fb, FBIOGET_VSCREENINFO, &fb_var) == -1) {
: EPRINTF("Error reading screen info: %m
");
: goto fail;
: }
: /* setup screen device from framebuffer info*/
: type = fb_fix.type;
: visual = fb_fix.visual;
:
:
: psd->portrait = MWPORTRAIT_NONE;
: psd->xres = psd->xvirtres = fb_var.xres;
: psd->yres = psd->yvirtres = fb_var.yres;
:
:
:
: 여기에서
: ioctl(fb, FBIOGET_VSCREENINFO, &fb_var) == -1)에서 스크린 사이즈 값 을
: 읽어와서
: 그 값을 psd의 xres, yres에 넣는 것 같은데
:
: 참고로 제일 마지막 두줄 인
: psd->xres = psd->xvirtres = fb_var.xres;
: psd->yres = psd->yvirtres = fb_var.yres;
: 를
: psd->xres = psd->xvirtres = 640;
: psd->yres = psd->yvirtres = 480;
: 이렇게 하면 똑 같이 잘 동작합니다.
: 그라나.
: psd->xres = psd->xvirtres = 800;
: psd->yres = psd->yvirtres = 600;
: 해서 컴파일 하고 Ezboard에서 돌리면
:
: Error mmaping /dev/fb0: Invalid argument
: Cannot initialise screen
:
: 이런 에러가 나옵니다.
: 에러가 나는 부분은 fb_open함수의
:
: /* mmap framebuffer into this address space*/
: psd->size = (psd->size + getpagesize () - 1)
: / getpagesize () * getpagesize ();
: psd->addr = mmap(NULL, psd->size,
: PROT_READ|PROT_WRITE,MAP_SHARED,fb,0);
: if(psd->addr == NULL || psd->addr == (unsigned char *)-1) {
: EPRINTF("Error mmaping %s: %m
", env);
: goto fail;
: }
: 여기 부분이고요
:
:
: FBIOGET_VSCREENINFO 는 0x4600으로 세팅되어 있습니다..
: 제 생각에 이 번호가 아마도 H/W의 번지 수 같은데 이 부분에서 해상도를 읽
: 어 오는 것 아닌가요
: 맞다면 여기 읽어오는 부분에서 바꾸어 줘야 해상도가 바뀔 것 같은데
: ioctl을 잘 모르니 막히는 군요..
:
: 제 생각이 맞나요.. 맞다면 여기에서 어떻게 진행 해야 할까요..
:
: 읽어 주셔서 감솨 합니다.
:
:
: PS. LCD SET는 언제 들어 오나요.. 옛날 쫀드기 같은 케이블에다가 와이어 연
: 결하는 쌩노가다에 화면 조정에 넘 시간이 걸려서리.. 하지만 꼭 해결하고 싶
: 어요.. Help me~~