可能遇到的坑
\qquad
关于struct proc_ops
与struct file_operations
的报错.
\qquad
如下,将陈旧写法进行更新即可.
static const struct file_operations srm_env_proc_fops = {
.owner = THIS_MODULE,
.open = srm_env_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
.write = srm_env_proc_write,
...
static const struct proc_ops srm_env_proc_ops = {
.proc_open = srm_env_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
.proc_write = srm_env_proc_write,
...
如果对详细信息感兴趣,请转到proc: convert everything to “struct proc_ops”
编写test.c
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
static int hello_proc_show(struct seq_file *m, void *v)
{
seq_printf(m, "hello proc!\n");
return 0;
}
static int hello_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, hello_proc_show, NULL);
}
static const struct proc_ops hello_proc_fops =
{
.proc_open=hello_proc_open,
.proc_read=seq_read,
.proc_lseek=seq_lseek,
.proc_release=single_release,
};
static int __init hello_proc_init(void)
{
proc_create("hello_proc", 0, NULL, &hello_proc_fops);
return 0;
}
static void __exit hello_proc_exit(void)
{
remove_proc_entry("hello_proc", NULL);
}
MODULE_LICENSE("GPL");
module_init(hello_proc_init);
module_exit(hello_proc_exit);
编写Makefile
obj-m += test.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
运行
make
sudo insmod test.ko
cd //proc
ls *proc