2

为了在内核模式和用户空间进行通信,我正在使用这个 C 程序。我正在使用以下 Makefile 创建.ko要加载的文件。

bj-m   := sysctl_test.o

KDIR    := /lib/modules/$(shell uname -r)/build
PWD    := $(shell pwd)

default:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
        $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

成功执行并加载.ko文件后,它应该具有创建/proc/sys/net/test目录和value1value2目录中的文件。

当我加载这个模块时,它不会创建任何文件或目录。我在这里做错了什么还是代码需要一些更改?

我尝试通过将结构中的值修改为:

static ctl_table test_net_table[] = {
        {
                ... 
                .procname       = "/proc/sys/net/test",
                ...
        },
        { .ctl_name = 0 }
};

static ctl_table test_root_table[] = {
        {
                ...
                .procname       = "/proc/sys/net/",
                ...
        },
        { .ctl_name = 0 }
};

原始值分别是testnet

谢谢你的时间!

4

1 回答 1

0

尝试改变

bj-m   := sysctl_test.o

obj-m   := sysctl_test.o

它对我有用。

PS:这是一个老问题,但我会为那些遇到同样错误并阻止她的人更新答案。

于 2018-07-31T09:12:52.970 回答