【发布时间】:2012-10-26 20:05:49
【问题描述】:
这是我的第一个内核,在下面的示例程序中,我创建了一个简单的 proc/文件系统。每当我对内核进行分类时,我都会看到 READ 被调用 3 次。想知道为什么会这样。
出来,代码如下。
cat /proc/myKernel
dmesg | grep -i myKernel
myKernel: Read (/proc/myKernel) called
myKernel: Read (/proc/myKernel) called
myKernel: Read (/proc/myKernel) called
int myKernel_read( char *buffer, char **bufferLocation, off_t offset, int bufferLength, int *eof, void *data )
{
int ret = 0;
u64 msrvalue;
printk(KERN_INFO "myKernel: Read (/proc/%s) called\n", procFile_name);
ret = sprintf(buffer, "Hello World\n");
return ret;
}
static int __init myKernel_init(void)
{
entry = create_proc_entry(procFile_name, 0644, NULL);
if(!entry)
printk(KERN_INFO "myKernel: error registering proc control file\n");
else
{
entry->read_proc = myKernel_read;
}
return 0;
}
【问题讨论】:
-
你试过阅读
cat源代码吗? -
嗯,你正在从你的
myKernel_read函数返回垃圾(未初始化的ret变量),这意味着你不知道它返回了什么。我怀疑你也没有填写一些你应该填写的输出参数(比如*eof)。尝试修复它,看看会发生什么。如果仍然发生,请尝试将重要参数记录到myKernel_read,例如offset,以便更好地了解发生了什么。最后,“这是我的第一个内核”是什么意思? -
我的错。在处理选定文本时,我没有包含缓冲区填充代码行。我仍然看到三个调试消息 (dnesg | grep myKernel)
标签: linux filesystems linux-kernel proc