0
코드 audit.c에 대한 커널 모듈에 새 sysctl 매개 변수를 추가하고이 매개 변수 값을 런타임 중에 변경해야합니다. 정확히 새 sysctl 코드를 추가해야하고 어떻게 구현합니까?새로운/proc/sys/kernel 항목을 추가하는 방법?
코드 audit.c에 대한 커널 모듈에 새 sysctl 매개 변수를 추가하고이 매개 변수 값을 런타임 중에 변경해야합니다. 정확히 새 sysctl 코드를 추가해야하고 어떻게 구현합니까?새로운/proc/sys/kernel 항목을 추가하는 방법?
트리 계층 구조에서 ctl_table을 사용하여 모듈에서 처리해야합니다.
static struct ctl_table sample_child_table1[] = {
{
.ctl_name = CTL_UNNUMBERED1,
.procname = "sample",
.maxlen = sizeof(int),
.mode = 0444,
.data = &global_var,
.proc_handler = &proc_dointvec_minmax,
.extra1 = &min_val,
.extra2 = &max_val,
},
{}
};
static struct ctl_table sample_parent_table[] = {
{
.ctl_name = CTL_KERN,
.procname = "kernel",
.mode = 0777,
.child = sample_child_table,
{}
},
register_sysctl_table(sample_parent_table)
Vitalik Nikolyenko의 sysctl pdf에서이 예제를 얻은 것처럼 보입니다. 여러분은 .mode 할당과 일부 이름을 변경하여 수정했습니다. 이 대답은 두 테이블의 각 과제 (예 :'.extra1'과'.extra2 '의 의미는 무엇입니까?)는 무엇입니까? min_val과 max_val은 무엇입니까? 또한, 커널에'CTL_UNNUMBERED1'이 없기 때문에'.ctl_name = CTL_UNNUMBERED1'은 유효하지 않습니다. 그 할당은'.ctl_name = CTL_UNNUMBERED'이되어야합니다. – buratino
@buratino : 어디에서 가져 가든지 상관 없습니다 예를 들어 모든 사람들이 예제를 정확하게 이해할 수 있는지 여부가 중요합니다. "대답하면 진행하고 앞으로 나아갈 수있는 포인터를 제공합니까?" 내가이 위치를 복사 한 것을 기억하지 못한다.하지만 개인적인 재미있는 부분을 수정하고 개선했다. – Pramod
어딘가에서 코드를 가져왔다면 괜찮습니다. 원래 소스를 링크하면 도움이 될 것입니다. 원래 소스는 더 자세하게 설명되어 있습니다. 그러나 CTL_UNNUMBERED1이 바닐라 커널에 없기 때문에 Sowndarya에 대한 예제는 컴파일되지 않아야합니다. 그것은 당신의 대답에서 언급 할만한 가치가 있습니다. – buratino