2014-11-12 8 views
1

/proc/.../myode에서 파일을 여는 데 커널 내에서 filp_open 함수를 사용하려고합니다. O_RDONLY 플래그를 사용할 때 열 수 있지만 O_RDWR 또는 O_WRONLY와 함께 작동하지 않습니다. 실제로 내 장치의 부팅 순서가 깨졌습니다.filp_open이 O_RDWR 또는 O_WRONLY와 함께 작동하지 않습니다.

문제가 무엇인지 아는 사람이 있습니까?

코드 :

struct file* file_open(const char* path, int flags, int rights) { 
    struct file* filp = NULL; 
    mm_segment_t oldfs; 
    int err = 0; 
    oldfs = get_fs(); 
    set_fs(get_ds()); 

    filp = filp_open(path, flags, rights); 

    set_fs(oldfs); 
    if(IS_ERR(filp)) { 
     err = PTR_ERR(filp); 
     return NULL; 
    } 
    return filp; 
} 

난과 같이이 메서드를 호출하고있다 : 당신이 오류 검사하기 전에 주소 변환을 켜기 멀뚱히

struct file *fp = NULL; 
fp = file_open("/proc/.../mynode", O_WRONLY,0); 

답변

0

나는 이해할 수 없었다. 커널 주소 공간에서 filp_open을 호출 했으므로 (get_ds가 여기에 있다고 가정 함) 따라서 동일한 공간에서 오류 검사를 수행하는 것이 좋습니다. 이것은 filp가 임의의 주소로 변환되는 이유와 장치 부팅 순서가 깨지는 이유 일 수 있습니다. 이 문제를 조사한 후에도 문제가 지속되면 대상 파일 sys에이 파일에 대한 쓰기 권한이 없을 수 있습니다.