2017-01-20 1 views
1

sysfs 모듈 작성 방법을 배우려고하는데 기본 초기화시 혼란 스럽습니다. kobject.h 파일을보고있는 this 문서에는 sysfs 항목을 만드는 것과 관련된 여러 가지 기능이 있습니다. 그것의 모습에서 Sysfs 모듈 작성

는, 함수는 "kobject_init_and_add"다음 소요 사용할 수있는 권리 것처럼 보인다

90 int kobject_init_and_add(struct kobject *kobj, 
91       struct kobj_type *ktype, struct kobject *parent, 
92       const char *fmt, ...); 

구조체 kobject 및 구조체 kobj_type 충분히 간단하지만 이해가 안 돼요 * 부모 kobject와 * fmt cstring이 될 것으로 예상되는 것.

또한 이러한 객체를 초기화 한 후 exit_module 함수에서 제거해야하지만 두 가지 옵션, kobject_del 및 kobject_puts가 있습니다. 이들의 차이점은 무엇입니까?

혼란 스러울 부분은 대답을 검색하는 동안 kobject_register와 같은 기능을 사용하는 지침서가 있지만 기능이 실제로 존재하지 않는다는 사실에서 비롯된 것입니다.

답변

2

예 당신의 implementatin에 대한 의미 당신이 할 수있는 주류 커널에 예 많이 있습니다. 당신의 의심을 위해 나는 몇 가지 예제 코드 "

모듈 프로브/init 함수를 추가하고

static struct kobject *module_kobject; 
module_kobject=kobject_create_and_add("module_status",NULL); 
sysfs_create_group(module_kobject,&module_attr); 

모듈 제거/종료 기능이보다 더 노출 할 경우

sysfs_remove_group(module_kobject,&module_attr); 
kobject_put(module_kobject); 

그룹을 정의해야하는 것보다 사용자 공간에 하나의 속성이 있습니다.

,210

이 좀 더 구현과 같은 당신이 필요로 할 수있다 기능 : 나는 당신이 위의 코드를 기반으로 sysfs를 모듈 구현을 시작하고 어떤 도움을 자유롭게 할 수 있다고 생각

static ssize_t module_show_status(struct kobject *kobj,struct kobj_attribute *attr,char *buf); 
static ssize_t module_store__status(struct kobject *kobj,struct kobj_attribute *attr,const char *buf,size_t len); 

.

+0

sysfs_create_group 예제의 & module_attr과 같은 속성의 경우 & module_attr은 어디에 정의되어 있습니까? 그게 내가 문제가있는 곳인 것 같아. 나는 당신이 __ATTR 매크로를 사용할 수 있다고 읽었지만 그것은 나를 위해 오류를 일으키는 것입니다. – Zephyr

+0

아래와 같이 정의 할 수 있습니다. static struct attribute_group module_attr = { .attrs = module_attribute, }; –

+0

제 질문은, 당신이 사용하는 'module_attribute'가 미리 정의 될 필요가 있을까, 아니면 그냥 선언 할 것인가하는 것입니다. 정적 ssize_t의 module_show_minimum_value (구조체 kobject * kobj, 구조체 kobj_attribute * ATTR, 숯불 * 버피) { // 추가 – Zephyr

0

sysfs 항목을 만드는 많은 커널 모듈이 있습니다. 예 : http://lxr.free-electrons.com/source/net/bridge/br_sysfs_br.c 이 모듈은 sysfs_create_group()에 의해 생성 된 kobject 인스턴스를 매개 변수로 사용하는 kobject_create_and_add()를 사용합니다. 그런 모듈을 살펴보고, 그 모듈의 패턴을 따라 한 단계 씩 코드를 작성하는 것이 도움이 될 수 있다고 생각합니다. 또한 http://lxr.free-electrons.com/source/Documentation/kobject.txt

라미 로젠 보면

+0

고맙습니다. 속성을 인스턴스화 할 때 볼 수있는 예를 알고 있습니까? 위에서 링크 한 sysfs에는 여러 속성이 속성 그룹에 함께 묶여서 할당되는 인스턴스가 있습니다. 그러나이 속성을 만드는 방법을 처음에는 이해하지 못합니다. – Zephyr