问题标签 [linux-device-driver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux-device-driver - 如何在 Linux Kernel 2.6.31.5 中执行“kill_proc()”
尝试这个免费的开发者论坛。我正在将串行驱动程序迁移到内核 2.6.31.5。我使用各种书籍和文章来解决从 2.4 开始的问题
现在我有几个在内核 2.6.31.5 中不再支持的 kill_proc
将其迁移到内核 2.6.31.5 杀死线程的最快方法是什么。在书中他们说使用 kill() 但在 2.6.31.5 中似乎并非如此。使用 send_signal 将是一个好方法,但我该怎么做呢?必须有一个 task_struct 什么的,我只能提供我的 PID 和 SIGTERM 并继续杀死我的线程,但它似乎更复杂,必须使用我不知道的参数设置一个结构。
如果有人有一个真实的例子,或者有一个关于内核 2.6.31 最新信息的地方的链接,我将非常感激。简单地说,我需要杀死我的线程,这并不难。;)
这是我现在的代码:
kill_proc(ex_pid, SIGTERM, 1);
/约尔根
linux - 如何保持 Linux 内核模块构建的 asm 输出
我正在为 2.6.x 内核开发一个 Linux 内核模块,我需要查看程序集输出,尽管它目前是作为临时文件完成的,并已删除后记。我希望将程序集输出与我的 C 源文件混合在一起,这样我就可以轻松地追踪我的问题所在。这是针对 ARMv6 内核的,显然 objdump 不支持这种架构。我在下面包含了我的makefile。
linux - 如何从用户空间与 Linux 内核模块进行通信,而不用新节点乱扔 /dev?
从用户空间与内核模块通信的方法是什么?通信是指在内核模块和用户空间进程之间发送信息和命令。
我目前知道两种方式:
- 在已发布的设备节点上打开/关闭/读取/写入/ioctl。
- 读取/写入导出和挂钩的 /proc 文件。
更具体地说,有人可以建议与实际上不驱动任何硬件的内核模块进行通信的最佳方式,因此不应该将 /dev 与仅存在于 ioctl 调用的存根节点一起乱扔垃圾?我主要需要检查它的各种状态变量,并向它发送一个带有请求类型标签的数据块,看看请求是否成功。
linux - Linux:我如何知道导出设备节点的模块?
如果有一个 /dev 设备节点及其主要/次要编号,我如何知道导出该节点的内核模块名称?
linux-device-driver - linux设备的类可以为NULL吗?
我可以将 NULL 指针传递给device_create函数的第一个参数吗?
我正在使用 device_create() 在 sysfs 中创建字符设备文件。该文件不代表任何物理设备(它用于提供对连接到各种总线的一组设备的访问)。我应该使用什么类与 device_create() 来创建这样的文件?
linux - Linux 内核配置设备的顺序是什么?
正如我在阅读 Linux Device Drivers 3rd Edition 中与 Linux 设备模型相关的章节后所了解的那样,当配置新设备时,内核(2.6)或多或少遵循以下顺序:
- 设备在驱动核心中注册(
device_register()
,其中包括设备初始化) - 在设备模型中注册了一个 kobject
- 它在 sysfs 中创建一个条目并引发热插拔事件
- 检查总线和驱动程序以查看哪一个与设备匹配
- 探测
- 设备绑定到驱动
我的主要疑问是,在第 1 步中,何时device_register()
调用以及应该在device
结构中设置哪些字段?
它是由设备所连接的总线调用的吗?代码中有任何示例吗?
我有什么误解吗?:)
linux-kernel - 从 FIQ 处理程序调用 linux C 代码的问题
我正在研究 armv6 内核,并且有一个 FIQ 处理程序,当我在其中完成所有工作时效果很好。但是,我需要分支到一些对于 FIQ 内存区域来说太大的附加代码。
FIQ 处理程序在注册时从 fiq_start 复制到 fiq_end 到 0xFFFF001C
fiq_hander 设置为以下函数:
我知道,由于 FIQ 处理程序在任何正常内核 API 之外运行,并且它是一个相当高优先级的中断,我必须确保我调用的任何内容都已交换到内存中。我通过在单片内核中定义 fiq_flip_pins 函数而不是作为获取 vmalloc 的模块来做到这一点。
如果我不分支到 fiq_flip_pins 函数,而是在 test_fiq_handler 函数中完成工作,那么一切都会按预期工作。这是目前给我带来问题的分支。在分支之后,我得到一个关于分页请求的内核恐慌。我不明白为什么我会收到寻呼请求。
fiq_flip_pins 位于内核中:c00307ec t fiq_flip_pins
由于我的代码中没有 API 调用,我必须假设 C 调用和返回时出现问题。任何解决此问题的帮助表示赞赏。
这是带有 fiq_flip_pins 注释的程序集:
linux-kernel - Hal需要看到什么linux设备?
我正在尝试了解 Linux Kernel 上的设备驱动程序,为此我创建了三个模块:
- 总线型
- 设备驱动程序
- 一个现在什么都不做的假设备,只是被注册了
一切正常,我可以加载总线、驱动程序和创建设备的模块。一切都出现在 sysfs 上,包括设备和设备驱动程序之间的链接,表明它们已绑定。
当驱动程序和设备被加载时,我可以看到使用udevadm monitor
它也会引发一些事件:
但毕竟,该设备没有出现在 hal 上。hal 还需要什么设备才能看到?
linux - 如何使现有套接字失败?
好的。因此,这与每个人在网络编程中所问的完全相反。通常,人们会问如何使损坏的插座工作。另一方面,我正在寻找相反的东西。
我目前的套接字工作正常,并希望它们中断以重新创建我们看到的这个问题。我不知道如何故意使套接字因读取错误而失败。诀窍是:套接字必须是一个有效的、已建立的连接,然后它必须因任何原因而失败。
我正在用 C 语言编写它,并且驱动程序在 Linux 系统上运行。套接字由 Linux 设备驱动程序由 Linux 中的非 IP 3 级协议处理。我可以完全访问所有代码库,我只需要找到一种方法来梳理它,这样它就不会失败。
有任何想法吗?
linux - Linux 的上下文切换中保存了哪些寄存器状态?
您会在 Linux 的哪个位置查找上下文切换中保存的寄存器?例如,我想知道在内核模式驱动程序代码中使用 FP 或向量寄存器是否安全(主要对 x86-64 和 ARM 感兴趣,但我希望得到一个独立于体系结构的答案)。