Linux: 使用模块函数
Linux: Using module functions
假设我有一个具有此功能的模块 my_open:
int my_open( struct inode *inode, struct file *filp ) {
filp->private_data = //allocate private data
if( filp->f_mode & FMODE_READ )
//handle read opening
if( filp->f_mode & FMODE_WRITE )
//handle write opening
if (MINOR( inode->i_rdev )==2){
filp->f_op = &my_fops2;
}
return 0;
}
如何使用 shell/terminal 中的这个功能?
这是设备驱动程序的 open
函数,
或者它是披着狼皮的羊 [原文如此]。
万一这是普通的普通用户级代码,
将其编译成可执行文件并使用它。但是如果是设备驱动的open
函数,
- 首先,
判断是否compiled/linked进入当前运行内核。
如果不是,请将其设置为(compile/link 将其放入内核,然后重新启动)。
- 或者,
您可能有能力将它动态加载到内核中。
具体如何操作取决于您的特定操作系统
并且超出了这个问题的范围。
- 判断是b锁设备还是c字符设备,
以及它的 major 设备号是多少。
我也不能具体告诉你该怎么做;
咨询您当地的资源。
OK,假设它是一个主设备号为42的字符设备。
浏览 /dev
‖(使用 ls -l
)以查找以 c
开头的条目
(对于“字符”)并包含 42,<i>something</i>
大小应该在哪里,像这样:
drwxr-xr-x 1 root root 512 Feb 10 2015 .
drwxr-xr-x 1 root root 1024 Feb 10 2015 ..
crw-rw-rw- 1 root root 42, 0 Aug 15 18:31 foo
crw-rw-rw- 1 root root 42, 2 Aug 15 18:31 fu
crw-rw-rw- 1 root root 42, 17 Aug 15 18:31 fubar
如果找不到,请创建一些。有关详细信息,请参阅 man mknod
。
您可能应该创建一个次设备号为 2 的设备
至少一个号码不同
(因为代码将 2 视为特例)。
对/dev/<i>随便</i>
文件做任何你想做的,
基于驱动程序的预期功能。
(确定驱动程序的预期功能超出了范围。)
例如,您可以尝试
od -cb /dev/foo
echo "Hello, world." > /dev/fu
当然如果是块设备的话,
将上述说明中的 c
替换为 b
.
假设我有一个具有此功能的模块 my_open:
int my_open( struct inode *inode, struct file *filp ) {
filp->private_data = //allocate private data
if( filp->f_mode & FMODE_READ )
//handle read opening
if( filp->f_mode & FMODE_WRITE )
//handle write opening
if (MINOR( inode->i_rdev )==2){
filp->f_op = &my_fops2;
}
return 0;
}
如何使用 shell/terminal 中的这个功能?
这是设备驱动程序的 open
函数,
或者它是披着狼皮的羊 [原文如此]。
万一这是普通的普通用户级代码,
将其编译成可执行文件并使用它。但是如果是设备驱动的open
函数,
- 首先,
判断是否compiled/linked进入当前运行内核。
如果不是,请将其设置为(compile/link 将其放入内核,然后重新启动)。
- 或者, 您可能有能力将它动态加载到内核中。 具体如何操作取决于您的特定操作系统 并且超出了这个问题的范围。
- 判断是b锁设备还是c字符设备, 以及它的 major 设备号是多少。 我也不能具体告诉你该怎么做; 咨询您当地的资源。
OK,假设它是一个主设备号为42的字符设备。 浏览
/dev
‖(使用ls -l
)以查找以c
开头的条目 (对于“字符”)并包含42,<i>something</i>
大小应该在哪里,像这样:drwxr-xr-x 1 root root 512 Feb 10 2015 . drwxr-xr-x 1 root root 1024 Feb 10 2015 .. crw-rw-rw- 1 root root 42, 0 Aug 15 18:31 foo crw-rw-rw- 1 root root 42, 2 Aug 15 18:31 fu crw-rw-rw- 1 root root 42, 17 Aug 15 18:31 fubar
如果找不到,请创建一些。有关详细信息,请参阅
man mknod
。 您可能应该创建一个次设备号为 2 的设备 至少一个号码不同 (因为代码将 2 视为特例)。对
/dev/<i>随便</i>
文件做任何你想做的, 基于驱动程序的预期功能。 (确定驱动程序的预期功能超出了范围。) 例如,您可以尝试od -cb /dev/foo echo "Hello, world." > /dev/fu
当然如果是块设备的话, 将上述说明中的
c
替换为b
.