2011-04-25 5 views
3

안드로이드 장치 용으로 androidvncserver을 포팅/컴파일하고 있었지만 루트로 실행하면 mmap 오류가 발생합니다.android mmap failed : 잘못된 인수 (errno 22)

기분을 상하게하는 코드는 다음과 같습니다 : 나는 더이 문제를 디버깅하는 방법에 대한 생각을 찾고

/* Android does not use /dev/fb0. */ 
#define FB_DEVICE "/dev/graphics/fb0" 

if ((fbfd = open(FB_DEVICE, O_RDONLY)) == -1) 
{ 
    printf("cannot open fb device %s\n", FB_DEVICE); 
    exit(EXIT_FAILURE); 
} 

<SNIP> 

fbmmap = mmap(NULL, pixels * bytespp, PROT_READ, MAP_SHARED, fbfd, 0); 
if (fbmmap == MAP_FAILED) 
{ 
    printf("mmap failed errno = %d\n", errno); 
    exit(EXIT_FAILURE); 
} 

.

레코드의 경우 pixels = 614400 및 bytespp = 4입니다. 또한,는/dev/그래픽/FB0는 루트 (그룹 = 그래픽)가 소유하고, 660

답변

1

prmatta의 권한을 가지고 있습니다,

오류 코드 (22)는 EINVAL입니다. 당신을 알려줍니다 mmap() 문서에서

...

EINVAL 우리는 시작하거나 길이 또는 오프셋 좋아하지 않는다. 예 : 크기가 너무 커서 ( ) 페이지 경계에 정렬되지 않았거나 페이지 경계에 정렬되지 않았습니다.

아마도 메모리를 정렬하지 않았습니까?

+2

prmatta는 모든 시스템이 동일한 페이지 크기를 사용하는 것은 아니므로 올바른 매크로 상수를 사용해야한다는 것을 알아 두어야합니다. 나는 _POSIX_PAGESIZE가 당신이 원하는 것이라고 믿습니다. –

관련 문제