这是我的第一个内核,在下面的示例程序中,我创建了一个简单的proc/filesystem。我看到阅读时,每当我猫的内核猫都被称为3次。想知道为什么这样做。
out,代码在下面。
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) calledn", procFile_name);
ret = sprintf(buffer, "Hello Worldn");
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 filen");
else
{
entry->read_proc = myKernel_read;
}
return 0;
}
问题与RET值有关。我仍然不知道为什么这三次被称为三次,但是当偏移小于零时,我必须进行实际读数。
int myKernel_read( char *buffer, char **bufferLocation, off_t offset, int bufferLength, int *eof, void *data )
{
int ret;
u64 msrvalue;
if (offset > 0)
{
/* we have finished to read, return 0 */
ret = 0;
} else
{
/* fill the buffer, return the buffer size */
// DO THE READ HERE. NOT OUTSIDE
//
printk(KERN_INFO "myKernel: Read (/proc/%s) calledn", procFile_name);
ret = sprintf(buffer, "MyKernel = %xn", 0);
}
return ret;
}