问题标签 [userspace]
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 - 向连接到 USB 总线的设备发送 SET_CONFIGURATION 消息的 Linux 工具
我为 USB 设备开发了一个内核驱动程序。这种设备有一些引脚可以提供 CDC ACM 串行端口或输入按钮的功能。因此,要实现这一点,我必须使用两个不同的 USB 配置描述符。
驱动程序按预期工作,但我必须在编译并将固件加载到微控制器之前对所选设置进行硬编码。我正在寻找一种从用户空间更改该设备配置的机制。
我在 USB 文档上阅读了 SET_CONFIGURATION 消息,但找不到任何 Linux 工具可以将此类标准 USB 消息从用户空间发送到 USB 总线。
你们中的一些人(在这个主题上有更多经验)知道一些用户空间 Linux 工具来向连接到 USB 总线的设备发送 SET_CONFIGURATION 消息吗?
提前致谢!:)
c - 直接从新的调用默认信号处理程序
我有一个定时器信号的信号处理程序。这是一个库的一部分,我不想对调用程序已经启用的任何其他计时器处理程序做任何假设,所以我希望我的处理程序只在我的事件上触发,并调用所有的默认处理程序其他事件。
我看过几篇关于这个主题的帖子,大多数建议将信号处理程序覆盖回原始处理程序,然后重新发出信号。我的问题是,如果其他人的信号抢占了我的信号,我将不再在信号的下一个实例上被调用。为此,我找到了一个解决方案,您可以直接调用旧的信号处理程序。我所拥有的如下:
但这也是有缺陷的——根据 sigaction 的手册页:
在某些体系结构中涉及联合:不要同时分配给 sa_handler 和 sa_sigaction。
这意味着我可能调用了不正确的函数。那么,有没有一种标准的方法来调用正确的信号处理程序?
c - vfs_write 内核到用户空间文件
我正在尝试从键盘中断模块在用户空间中写入文件,我正在使用 vfs_write 写入文件。
但我无法读取此 vfs_write 函数输出的文件。文件输出给了我垃圾值。另外,你能告诉我如何将给定数组中的字符串写入 vfs_write 写入的文件中吗
我需要能够将<DELETE>
9
字符写入文件。
linux - 从用户空间读取非阻塞 i2c
我正在尝试在从模式下从 i2c 读取和写入数据,并在用户空间中找到了几个执行此操作的示例,包括来自 NXP 的最相关示例(我正在使用 iMX8MQ): https ://source.codeaurora.org/外部/imx/imx-test/tree/test/mxc_i2c_slave_test/mxc_i2c_slave_test.c?h=imx_4.14.78_1.0.0_ga
但是,如果我想读取数据,这将是一个基于轮询的实现,因为当 i2c 数据可用时,i2c-dev 似乎没有提供注册用户空间回调的方法。甚至不确定是否有任何 Linux 设备驱动程序允许这样做。我是否正确假设在从模式下没有非阻塞和异步方式从用户空间读取 i2c ?
我对编写设备驱动程序不是很熟悉,所以即使我想实现自己的,类似于这个: https ://github.com/torvalds/linux/blob/master/drivers/i2c/i2c-slave-eeprom .c 在数据可用时(例如,当驱动程序收到 I2C_SLAVE_STOP 时)调用用户空间函数是个好主意吗?
c - 在 C 中测量没有 pthread 的开销
我想分享一个我最近遇到的测试问题并讨论它:
编写一个 C 程序,粗略测量 UNIX/Linux 系统上内核和用户空间之间的上下文切换开销(不使用 >pthread API)。请指出您的粗略估计所基于的假设。
我想与更高级的 C 程序员讨论这个问题的不同选项。
我在 C 编程方面的知识有限,我记录了自己以提供可接受的答案:
https://www.researchgate.net/post/How_can_I_measure_thread_creation_and_destruction
https://github.com/eliben/code-for-blog/blob/master/2018/threadoverhead/thread-pipe-msgpersec.c
尽管我的知识有限,但我很快意识到这个问题的模棱两可。事实上,这个问题并没有规定是否应该以时间或记忆为单位给出答案。
我个人选择使用库 time.h 和一个非常简单的片段来开发我的推理测量时间。结果应除以 1 000 000。
我的回答有道理还是我完全没有抓住重点?
c - copy_to_user 未返回预期数据
我的内核驱动程序中有一个 ioctl,需要在读取时返回一些数据。当我在用户空间中读回它时,它没有显示预期的结果。
用户空间片段:
核心:
我已经在其中打印了结果(即数据数组),read_func
并且可以看到读取的是预期值,但是在 copy_to_user 之后,当我data
在用户空间中打印时,我看到全为零。这个片段有什么问题吗?
c - BUG:无法在 ffffffffffffffff 处理内核分页请求
我的内核驱动程序中有一个 ioctl 处理程序,它可以读写 ioctl。我还有一个用户空间应用程序,它使用这个 IOCTL 来写入/读取数据。
当我在我的用户空间应用程序中使用这个 ioctl 时,它会导致内核 OOPS"BUG: unable to handle kernel paging request at ffffffffffffffff"
用户空间片段:
核心:
不知道这有什么问题。有人可以帮忙吗?
更新:abc_T 中的数组大小为 32,我没有看到问题。但是当我将数组大小更改为 64 时,我看到了问题。任何帮助,将不胜感激。
更新 2:abc_T 中数组大小为 64,如果 read/write size
<= 32,则没有问题,只有当size
要 read/write 大于 32 时,才会看到 crash。
c - 致命错误:net/sock.h:没有这样的文件或目录(内核 - 用户空间应用程序通信)[C]
我正在尝试开发一个模块来在内核和用户空间应用程序之间进行通信。我尝试了https://stackoverflow.com/a/25071310/4190159中提供的答案
问题是我有以下代码:
当我尝试使用以下方法编译上述代码时:
我收到以下错误:
netlink_module.c:2:10:致命错误:net/sock.h:没有这样的文件或目录#include < net/sock.h > 编译终止。
我试图搜索错误,但大部分搜索结果都返回 sys/socket.h 文件,而不是 net/sock.h
有人可以指出出了什么问题吗?
c++ - 如何刷新 CPU 缓存中的地址范围?
我想测试在 x86 上运行的 linux 中用户空间程序的性能。为了计算性能,我有必要将特定的缓存行刷新到内存(确保这些行无效,并且在下一次请求时会出现缓存未命中)。
我已经看到使用 cacheflush(2) 的建议,它应该是一个系统调用,但 g++ 抱怨它没有被声明。此外,我不能使用显然只能在内核程序中调用的 clflush_cache_range。现在我试图做的是使用以下代码:
但这在编译时会出现以下错误:
错误:“volatile”之前的预期主表达式</p>
然后我将其更改如下:
它编译成功,但计时结果没有改变。我怀疑编译器是否出于优化目的将其删除。任何人都知道我该如何解决这个问题?
linux - 如何为特定的 Linux 内核编译用户空间应用程序?
我有一个 Linux 内核源代码。我正在从该源构建 Linux 内核映像。现在,我有一个用户空间应用程序。如何为特定的 Linux 内核源编译用户空间应用程序?