我发现了类似的帖子,但找不到解决方案,所以以为会发布我的问题。我正在使用设备驱动程序。我知道,下面的函数使用2.6内核头文件成功编译,现在尝试使用" 3.2.0-4-686-pae"编译它。 (Debian的)。我收到以下错误消息,
error: ‘struct tty_driver’ has no member named ‘ioctl’
error: ‘struct vc_data’ has no member named ‘vc_tty'
我检查了" tty_driver"在tty_driver.h(包含在tty.h中)中找到了
int (*ioctl)(struct tty_struct *tty, struct file * file,
unsigned int cmd, unsigned long arg);
已定义,但不确定为什么我收到此错误。
另外,我找不到' vc_tty'包含在' vc_data'在" console_struct.h"任何人都可以让我知道需要做什么更新才能使它与#34; 3.2.0-4-686-pae"?
一起使用#include <linux/tty.h>
#include <linux/console_struct.h>
struct tty_driver *my_driver;
static void my_func(unsigned long ptr)
{
/* Some code */
(my_driver->ioctl) (vc_cons[fg_console].d->vc_tty, NULL, KDSETLED,
*pstatus);
/* Some more code */
}
我还没有在这里发布完整的代码,但如果需要,我会发布。如果您需要更多信息,请与我们联系。
答案 0 :(得分:0)
&#34;操作&#34; tty_driver
的{{1}}会在某个时间点移至单独的struct tty_operations *ops
成员,您现在可以找到ioctl
。
((my_driver->ops)->ioctl)(...);
struct vc_data
中的端口数据相同,已移至struct tty_port port
成员。所以请改用它:
vc_cons[fg_console].d->port.tty
通过搜索您正在获取的确切错误消息(逐个),并查看您通常会发现的补丁和错误报告,您可以非常轻松地找到这些类型的更改。对于像这样的简单事情,它会在99%的时间内工作。
然后,您可以使用Free Electrons上的Linux Cross Reference等网站在不同版本的标题之间导航并查找详细信息。 (例如,include/linux/console_struct.h
。)