gpt4 book ai didi

c - 键盘中断处理程序给出空值

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:57 26 4
gpt4 key购买 nike

我正在学习 Linux 内核模块编程(中断处理程序)并使用教程(http://tldp.org/LDP/lkmpg/2.6/html/)确切的模块链接(http://tldp.org/LDP/lkmpg/2.6/html/x1256.html)。

在教程中,我在使用时遇到错误

INIT_WORK(&task, got_char, &scancode);

错误是“错误:宏“INIT_WORK”传递了 3 个参数,但只需要 2 个”

所以我找到了一个解决方案并使用下面的行

INIT_WORK(&task, got_char);

它工作正常,但我得到的输出为空。我期待键盘上的键号。

有人知道吗?

如果不清楚,请告诉我,我会尝试解释更多。

谢谢

最佳答案

添加如下结构,

struct getchar_info {
/* Other info ... */
struct work_struct work;
unsigned int scancode;
/* Other info ... */
};
static struct getchar_info gci; /* Statically declare or use kmalloc() */

更改 got_char()到,

static void got_char(struct work_struct *work)
{
struct getchar_info *info = container_of(work, struct getchar_info, work);
info->scancode = my_val;
/* ... */

INIT_WORK(&gci.work, got_char);一样初始化它

这是一个常见的Linux 内核 范例或design pattern . 工作队列 代码需要管理此结构指针,因此很容易提供给您的 got_char常规。您的驱动程序必须将其分配为更大 结构的一部分(在 OO 术语中它是继承;它看起来像 composition,因为“C”只支持它)。 container_of就像 C++ dynamic_cast<> (如果任何 C++ gurus 正在寻找,则使用单一继承)。它可以让您从子结构中获取组合结构。

关于c - 键盘中断处理程序给出空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19147569/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com