2014-11-12 1 views
1

Я пытаюсь использовать функцию filp_open из ядра, чтобы открыть файл в /proc/.../mynode. Я могу открыть его, когда я использую флаг O_RDONLY, но он не работает с O_RDWR или O_WRONLY; Infact его нарушает последовательность загрузки моего устройства.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 может не иметь права на запись в этот файл.

Смежные вопросы