character-device

我可以在已有的设备节点上加载字符驱动程序吗?
character-device

我可以在已有的设备节点上加载字符驱动程序吗?

我正在探索Linux内核驱动程序编程。并偶然想到以下想法, 我可以在现有设备节点上加载字符驱动程序(设备节点可能已使用 mknod 创建)吗? 为了进一步扩展#1,一个字符驱动程序是否可以创建一个设备节点,然后由另一个字符驱动程序使用该设备节点,以使用节点的主/次编号注册并加载自己到创建的设备节点上? 我们有任何已经使用它的例子吗? ...

Admin

写入字符设备文件导致 list_del 或 list_add 损坏。我如何解决它?
character-device

写入字符设备文件导致 list_del 或 list_add 损坏。我如何解决它?

我正在关注LDD3。我已经实现了 scull 模块的读写功能。每当我运行echo hello > /dev/scull0测试写入函数时,我都会收到 list_add / list_del 损坏和堆栈跟踪。 这是我的代码: #include <linux/module.h> #include <linux/init.h> #include <linux/moduleparam.h> #include <linux/stat.h> #include <linux/types.h> #include...

Admin

字符设备文件里面有什么?
character-device

字符设备文件里面有什么?

字符设备文件是一种特殊的 Linux 文件,您可以在其中读取和写入无限数量的字符以及可以在内核设备驱动程序中定义的其他文件操作。 但这个文件真的存在吗?如果我们将其视为普通文本文件,是否可以读取其中的内容?比如大数、小数? 我们在软链接上也有类似的东西。在 Linux 机器上,链接实际上是系统中的一条路径,但是在将其提交到 git 后,我​​们只能看到带有一个字符串的“正常”文本文件,即源目录的路径。 ...

Admin

在 /dev/ 中创建设备文件的现代方法是什么?
character-device

在 /dev/ 中创建设备文件的现代方法是什么?

太长了;博士 如果我希望我的模块遵循现代实践,我应该在 shell 脚本中/dev/通过 via创建设备,还是直接在模块源代码中通过 via和C 函数创建设备?一种方法相对于另一种方法有哪些优点?mknodclass_createdevice_create 详细 在第3章的Linux 设备驱动程序,第三版,第 45 页,如果设备编号已知,该函数register_chrdev_region将作为用于注册字符设备的函数。 然而,由于今天未使用的设备号明天可能会被内核使用,因此几乎立即不鼓励使用此函数,第 46 页,支持alloc_chrdev_region,它允...

Admin

为什么将 cat 通过管道传输到 chardev 的 head -c 5 会导致对驱动程序读取的调用比仅在 chardev 上调用 head -c 5 多得多?
character-device

为什么将 cat 通过管道传输到 chardev 的 head -c 5 会导致对驱动程序读取的调用比仅在 chardev 上调用 head -c 5 多得多?

从中汲取灵感这篇博文,我正在研究Linux设备驱动程序(我正在从中学习)。 read与驱动程序相关的字段被file_operations初始化为以下函数: static ssize_t mychardev_read(struct file *file, char __user *buf, size_t count, loff_t *offset) { uint8_t *data = "Hello from the kernel world!\n"; size_t datalen = strlen(data); printk("MYC...

Admin

#include 和 #include 有什么区别吗和#include?
character-device

#include 和 #include 有什么区别吗和#include?

我必须使用IOCTL为温度传感器编写一个设备驱动程序代码,当我浏览大量示例代码时,我在网上冲浪时发现,我在头文件中遇到了这个差异,我无法得到准确的答案它,因此我将其发布在这里,希望我可以得到使用我的代码的线索。 ...

Admin

在 Linux 内核中打印等待队列的内容时出现问题
character-device

在 Linux 内核中打印等待队列的内容时出现问题

语境:考虑以下一组操作 {A, B, C, D, E}: (A):在我的设备驱动程序的功能上,如果驱动程序的缓冲区为空,read()我会将调用线程添加到等待队列中。wqbuf 更具体地说,调用线程通过以下方式添加到队列中: wait_event_interruptible(wq, strlen(buf) > 0) (B):类似地,在驱动程序的功能上,如果传递的命令是并且驱动程序的标志是,ioctl()我将调用线程添加到同一队列中。wqioctlMY_IOCTL_Xis_free == 0 同样,调用线程通过以下方式添加到等待队列: wait_...

Admin

Linux内核register_chdev返回值
character-device

Linux内核register_chdev返回值

这个视频显示了创建新字符设备的 Raspberry Pi Linux 内核模块示例。它使用内核 API register_chdev。在视频的评论中(我无法生成指向它的直接链接),关于 的返回值register_chdev,作者指出: 如果返回值不等于0,则设备号已被使用。返回值的高12位是主设备号,低20位是次设备号。 我猜想“设备号已在使用中”他的意思是“在内核模块中任意选择的非零主设备号已在使用中”。 尽管有几个网页处理这个问题(官方的, 然后这个和这个),我没有找到任何有关返回值内部细分的信息。 如果我选择(使用我的内核模块)创建一个主设备号已在...

Admin

在 UNIX 操作系统上,以下哪些 I/O 设备的访问不是通过“字符 I/O”类型的特殊文件进行的?
character-device

在 UNIX 操作系统上,以下哪些 I/O 设备的访问不是通过“字符 I/O”类型的特殊文件进行的?

在 UNIX 操作系统上,以下哪些 I/O 设备的访问不是通过“字符 I/O”类型的特殊文件进行的? 老鼠 屏幕 钥匙盘 (USB) 打印机 以上都不是 本题来自操作系统课程的测试。 我选择了答案5,但我的老师说唯一正确的答案是答案3。是否有特殊情况,答案3落在USB上?我很高兴有一个边缘案例,这样他们就可以接受我的上诉,我不会失败。 提前致谢。 ...

Admin

如何以二进制文件形式打开和读取字符设备?
character-device

如何以二进制文件形式打开和读取字符设备?

我正在使用 USB,我想读取 /dev/bus/usb/00x/00y 中 USB 设备描述符的内容 - 它是一个字符设备。 我使用 fopen 将其作为带有“rb”参数的二进制文件打开。但是当我执行“查找”和“告诉”以获取文件大小时,它返回 0 字节大小。有没有办法将其作为二进制文件读取? void ReadUsbDeviceDescriptor( const char* path ) { FILE* usb_fd = NULL; size_t lSize = 0; if ( path != NULL ) { ...

Admin

字符设备的 MITM / 代理
character-device

字符设备的 MITM / 代理

我有一个字符设备文件,比如说 /dev/X,我想捕获进出 /dev/X 的每个交互。 我正在寻找一种方法来为该文件创建某种 MITM/代理。 编辑: 关于X是什么,它是android上的FM接口。所以/dev/fm是字符设备文件。 最终目标是拦截发送到该文件的任何命令。 ...

Admin

字符设备只能处理阻塞 I/O 吗?
character-device

字符设备只能处理阻塞 I/O 吗?

让我们考虑以下(假想的)设备:一个时钟,需要 1 秒来查询,然后返回当前时间。我们要为其编写一个字符设备驱动程序,该驱动程序仅支持读操作。 我相信非阻塞读取对于这样的设备没有意义,因为我们无法缓存读取的结果。你同意吗? 是否只允许处理阻塞读?如果是这样,非阻塞读取应该返回什么错误代码?或者我们必须通过什么其他方式来指定我们不支持非阻塞操作? 在为真实设备实现字符设备驱动程序之前,我想更好地理解这一点。我对 Linux 很感兴趣,但我相信答案不太可能是特定于 Linux 的。 ...

Admin

TTY 和serial_core 有什么关系?
character-device

TTY 和serial_core 有什么关系?

我需要为 UART 编写一个新的字符设备文件,它允许比通常允许的更多的文件操作(不仅仅是打开、写入等......) 我使用的是嵌入式主线 Linux 内核(v 5.4)。 我开始查看 UART 驱动程序,发现有很多东西: 首先,有很多tty文件。我知道 tty 代表电传打字机。我不认为这是一个硬件。 然后,有针对我的处理器的特定驱动程序,用于处理 UART 上的中断。 然后,有(我认为是)uart 的字符设备驱动程序,写在serial_core.c 中 我注意到serial_core.c没有文件操作结构,但使用了tty_operations。 这里发生了...

Admin

/dev/i2c-1 和 /dev/mem 是否冲突?
character-device

/dev/i2c-1 和 /dev/mem 是否冲突?

我编写了一个程序,应该同时处理运动传感器和超声波传感器。我使用的是带有 40 个 GPIO 引脚的 Jetson Nano。第一个使用 I2C 接口,因此使用 linux-intern libi2c-library 访问 /dev/i2c-1,而另一个使用 /dev/mem 将十六进制值直接写入引脚。 现在,当我单独运行它们时,它们工作得很好,但是当尝试将它们组合到一个代码文件中时,它们会崩溃。 I2C 传感器仅给出未知错误并冻结。我想问一下它们同时使用时是否有可能发生碰撞,您有什么建议如何避免这种情况吗?有没有办法并行运行 I2C 传感器和超声波传感器? ...

Admin