函数proc_create_data具有原型
struct proc_dir_entry *proc_create_data(const char *, umode_t,
struct proc_dir_entry *,
const struct file_operations *,
void *);
第四个参数是文件操作的结构。
为了指定如何从文件中读取数据,您需要设置该结构的.read字段:这是在proc_dir_entry对象中分配(旧)分配read_proc字段的替代方法 。
虽然.read函数(回调)的签名非常通用:
ssize_t (*read) (struct file * file, char __user * buf, size_t size, loff_t * ppos);
Linux内核有几个用于在简单情况下实现此功能的助手。
例如,如果您要“映射”某些缓冲区作为文件的内容,则可以使用simple_read_from_buffer助手:
ssize_t my_read (struct file * file, char __user * buf, size_t size, loff_t * ppos)
{
return simple_read_from_buffer(
buf, size, ppos, // first 3 arguments are just ones for .read function
NSPIRE_BOOT1_VIRT_BASE, // address of the buffer's start
NSPIRE_BOOT1_SIZE // size of the buffer
)
}
其余代码:
// Define file operations for given file.
static const struct file_operations my_fops = {
.owner = THIS_MODULE, // This is useful almost in any case
.read = my_read, // Setup .read function
};
// And create the file itself
entry = proc_create_data(BOOT1_PROCFS_NAME, 0644, NULL, &my_fops, NULL);