2016-12-22 2 views
1

은 내가이 책의 예제는 매우 사용되지 않는 것을 깨달았다 그러나 리눅스 커널 모듈 프로그래밍 가이드proc_dir_entry에 대해 inode_operation을 정의하는 방법은 무엇입니까?

를 사용하여 리눅스 커널 모듈을 작성하는 방법을 배우려고 노력하고있다. 다음은이 책의 예제 중 하나입니다. 나는 소스 코드를 보았을 때

static struct proc_dir_entry *Our_Proc_File; 
static int module_permission(struct inode *inode, int op, struct nameidata *nd) 
{ 

    if (op == 4 || (op == 2 && current−>euid == 0)) 
      return 0; 
    return −EACCES; 
} 
static struct inode_operations Inode_Ops_4_Our_Proc_File = { 
    .permission = module_permission 
} 
static struct file_operations File_Ops_4_Our_Proc_File = { 
    // ... 
}; 

int init_module() 
{ 
    Our_Proc_File = create_proc_entry(PROC_ENTRY_FILENAME, 0644, NULL); 
    // above line should use proc_create() 
    if (Our_Proc_File == NULL) { 
      remove_proc_entry(PROC_ENTRY_FILENAME, &proc_root); 
      return −ENOMEM; 
    } 

    Our_Proc_File−>owner = THIS_MODULE; 
    Our_Proc_File−>proc_iops = &Inode_Ops_4_Our_Proc_File; 
    Our_Proc_File−>proc_fops = &File_Ops_4_Our_Proc_File; 
} 

, 나는 proc_iops

그래서 어떻게이 proc_dir_entry

+0

'proc_iops' 필드는 여전히'struct proc_dir_entry'에 존재합니다. [fs/proc/internal.h] (http://lxr.free-electrons.com/source/fs/proc/internal.h?v)를보십시오. = 4.9). 다른 것은 struct가 외부 코드에 의해 액세스되어서는 안되기 때문에 "internal"헤더에 정의되어있는 이유입니다. '/ proc' 파일 시스템의 일반적인 개념은 커널과 커널 모듈에 ** content **와 ** group ** 디렉토리를 생성 할 수있는 ** 파일 **을 쉽게 생성 할 수있게하는 것입니다. inode와 dentries를 커널에 남겨두기. ** inode ** 연산을 원한다면, 자신 만의 파일 시스템을 구현하십시오. – Tsyvarev

+0

@Tsyvarev 정말 고마워요! 대답 부분에 넣을 수 있습니까? –

답변

1

에 대한 inode_operations 정의해야합니다 리눅스 4.x의에서 proc_dir_entry 구조에서 제거되는 것을 발견 /proc 파일 시스템의 일반 목적은 커널과 모듈의 능력을 의 파일과 "content"가 즉석에서 생성되도록하는 것입니다. 디렉토리 그룹 이러한 파일. 하나는 proc_create() 및 친구들을 사용하여이를 수행 할 수 있습니다.

inode와 dentry는 파일 시스템의 내부 부품 인의 일부이므로 수정할 수 없습니다.

사실, file_operations은 그 자체로 강력합니다. proc_create()의 매개 변수가 액세스 권한을 반영하는 데 충분하지 않은 것으로 확인되면 .open()파일 작업에서 액세스를 확인할 수 있습니다. 구조체 proc_dir_entry의 필드 proc_iops에 관해서는


, 그것은 여전히 ​​존재한다. 그러나 구조 자체는 내부 헤더 fs/proc/internal.h에 정의되어 있습니다. 외부로부터 필드에 액세스하는 것은 예상되지 않습니다.

관련 문제