도와주세요!!
글 수 15,339
2008.12.18 19:25:57 (*.89.242.205)
9186
카메라 드라이버에서 다음과 같이 물리주소를 등록해서 가상 주소값을 얻었습니다.
pp_virt_buf = ioremap_nocache(pp_phys_buf, RAM_MEM);
pp_phys_buf의 값은 0x57b00000이고 메모리 크기는 10M 입니다.
그런데 프레임버퍼1(FB1)의 fb_map_video_memory함수에서
fbi->map_size_f1 = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
fbi->map_cpu_f1 = dma_alloc_writecombine(fbi->dev, fbi->map_size_f1, &fbi->map_dma_f1, GFP_KERNEL);
와 같이 메모리를 얻었는데 fbi->map_dma_f1의 값이 0x57c00000 입니다.
이 값은 카메라 드라이버에서 이미 할당된 영역과 중첩됩니다.
그래서 카메라를 기동 시키면 프레임 버퍼에 바로 카메라 영상이 나타납니다.
시작주소가 일치 하지 않기 때문에 프레임버퍼로 나타난 카메라 영상은 좀 깨진 이미지가 나타납니다.
제가 궁금한 것은 어떻게 다른 드라이버에서 사용하는 메모리 영역을 다른 드라이버에서 할당 받을 수 있는가 입니다.
카메라에서 사용하는 하는 메모리영역과 FB1이 사용하는 메모리 영역이 어떻게 저렇게 할당될 수 있을까요?
또하나 궁금한 것은 FB0의 경우에는 할당된 물리주소 값이 FB1과는 아주 멀리 떨어진 0x50600000
입니다.
프레임 버퍼의 주소는 커널에서 어떻게 할당 받는지 궁금합니다.
pp_virt_buf = ioremap_nocache(pp_phys_buf, RAM_MEM);
pp_phys_buf의 값은 0x57b00000이고 메모리 크기는 10M 입니다.
그런데 프레임버퍼1(FB1)의 fb_map_video_memory함수에서
fbi->map_size_f1 = PAGE_ALIGN(fbi->fb.fix.smem_len + PAGE_SIZE);
fbi->map_cpu_f1 = dma_alloc_writecombine(fbi->dev, fbi->map_size_f1, &fbi->map_dma_f1, GFP_KERNEL);
와 같이 메모리를 얻었는데 fbi->map_dma_f1의 값이 0x57c00000 입니다.
이 값은 카메라 드라이버에서 이미 할당된 영역과 중첩됩니다.
그래서 카메라를 기동 시키면 프레임 버퍼에 바로 카메라 영상이 나타납니다.
시작주소가 일치 하지 않기 때문에 프레임버퍼로 나타난 카메라 영상은 좀 깨진 이미지가 나타납니다.
제가 궁금한 것은 어떻게 다른 드라이버에서 사용하는 메모리 영역을 다른 드라이버에서 할당 받을 수 있는가 입니다.
카메라에서 사용하는 하는 메모리영역과 FB1이 사용하는 메모리 영역이 어떻게 저렇게 할당될 수 있을까요?
또하나 궁금한 것은 FB0의 경우에는 할당된 물리주소 값이 FB1과는 아주 멀리 떨어진 0x50600000
입니다.
프레임 버퍼의 주소는 커널에서 어떻게 할당 받는지 궁금합니다.