问题标签 [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.

0 投票
1 回答
978 浏览

c++ - 使用 libsocketcan 从用户空间启动/停止 CAN 板

我正在尝试使用来自用户空间的 SocketCAN 启动/停止 CAN 板或更新其波特率。我的测试是在 PeakSystem 和 IXXAT USB-to-CAN V1/V2 板上进行的。

我的第一次尝试是使用 visudo 并启用 NOPASSWD 以“ip link set ...”,然后在我的 C++ 代码中调用“sudo ip link set ...”。完整的 visudo 行是:

然后,我通过向 /bin/ip 添加功能来尝试使用 Linux 功能。这让我可以从我的 C++ 代码中调用“ip link set ...”,这样更好。添加功能命令:

但后来我发现libsocketcan比从 C++ 调用命令行要好得多。但是,当调用“can_set_bitrate”或“can_do_start”时,出现错误“RTNETLINK:不允许操作”。但是当我的程序以 root 身份启动时,一切正常。can_get_state 等其他函数在用户空间中运行良好(实际上,它们正在返回:4 -> CAN_STATE_STOPPED)。我试图向我的程序添加功能但没有成功“sudo setcap cap_net_raw,cap_net_admin+ep ./myprogram”。

如何允许我的程序在用户空间中使用 libsocketcan?

谢谢你的帮助!

0 投票
1 回答
1120 浏览

linux - 用户空间中的 ALSA PCM 播放设备

我很难弄清楚如何制作一个完全在用户空间中工作的 Linux PCM 播放设备。当应用程序调用 snd_pcm_open/snd_pcm_readi/writei 时,我希望调用最终在用户空间驱动程序中结束,并且 pcm 数据要在用户空间驱动程序初始化时创建的线程中处理。然后音频处理线程将调用一个实际的 ALSA 内核驱动程序,该驱动程序将 pcm 输出到 HW。这基本上是我想要实现的目标:

应用程序 -> ALSA (pcmC1D0p) -> 音频处理线程(用户空间) -> ALSA (pcmC0D0p) -> 硬件

我看过一些插件,但不确定这是正确的方法吗?也不知道如何实际启动我的插件?我已经编译了一个 .so 文件,不确定将其放置在哪里或如何/如何调用它?

任何指针将不胜感激。

0 投票
1 回答
2428 浏览

linux - 用户空间和内核空间中的空指针取消引用

如果我们取消引用用户空间和内核空间中的空指针会发生什么?

据我了解,行为基于编译器、架构等。

但通常对于分配有虚拟内存的每个用户空间程序,分页用于使用页表将虚拟地址转换为物理地址。

因此,如果我们在用户空间中取消引用空指针,则该地址无效,因此将发生上下文切换,并且在内核中基于此空指针取消引用的中断“将出现分段错误或将出现页面错误错误”。

在内核空间中:

如果我们取消引用 NULL 指针,则可能会导致系统崩溃或内核可能无法从该调用返回。

我的理解是否正确?或任何其他信息缺失意味着请解释。

参考:我从这个“当我们在 C 中取消引用 NULL 指针时,OS 会发生什么?

0 投票
2 回答
3928 浏览

linux - PCIe 驱动程序 - 用户空间如何访问它?

我正在为 Linux 编写一个 PCIe 驱动程序,目前没有 DMA,并且需要知道一旦从用户空间启用它后如何读取和写入 PCIe 设备。

在驱动程序中,我在 probe() 中进行了基础操作:

但是那我如何从用户空间访问这个内存来读写呢?我是否将文件操作添加到我的 PCIe 驱动程序?pci_iomap 中的内存是否显示了用户空间代码可以调用的某个地方:

如果是这样,那么位置是什么?

注意: PCIe 设备不会插入任何 Linux 子系统,例如音频、以太网等。

0 投票
0 回答
497 浏览

sockets - Net-link Socket 挂起问题

我想创建一个 Net-link 套接字,通过它不断地从用户空间发送数据并将消息从内核空间不断重定向到用户空间。但它挂起。请帮助或提出解决方案。如果有人知道为什么会发生这种情况,请提供解决方案。

我在内核空间中使用的代码是

用户空间的代码是

0 投票
1 回答
32 浏览

javascript - Javascript Promises:它们可以在用户空间代码中完全实现吗?

JavascriptPromise类是否可以在用户空间代码中完全实现,而不需要只有实现 Javascript 引擎的人(例如 V8 团队)才能访问的本地代码(即 Javascript 内部)的任何支持?

请注意,我不是在谈论围绕现有 JavascriptPromise类实现更高级别的抽象库或模块(例如,使其对用户更友好);相反,我说的是一个全新的替代承诺实现,例如MyPromise,具有与Promise.

我尝试阅读PromiseES6 规范中的相关部分以获得答案,但发现规范很难阅读。

0 投票
2 回答
1416 浏览

linux - Linux 暂停/恢复操作的用户空间通知

我正在开发一个嵌入式 linux 平台。

当我执行 "echo "mem" > /sys/power/state" 时,系统将挂起。

我知道内核和驱动程序可以知道挂起操作即将到来。但是用户空间进程或应用程序是否有可能收到系统将暂停的通知?如何?

例如,我有一个应用程序将“A”连续写入缓冲区,缓冲区的起始地址由设备驱动程序给出。是否有可能通知该应用程序系统将暂停,以便它可以用“B”替换所有这些缓冲区,以便当驱动程序恢复时,驱动程序看到的所有内容都是“B”?

非常感谢。

0 投票
1 回答
128 浏览

c - Linux 内核中真正的 Grand GRAND Ancestor 进程是什么?

在尝试查找用 C 制作的某些流程应用程序的所有根,并调用我所做的自定义系统调用,该调用使用 task_struct* 的信息返回所有进程的数组时,我发现任务 swapper/0 是通过父指针指向自身(即 swapper/0->parent == swaper/0)。我的问题是:哪一个是在用户空间中运行的任何进程的真正的祖父?它是 swapper/0 还是它之前的任务(或 swapper/0 的孩子)?即 swapper/0 是一个真正的任务,还是只是一个用于遍历父链表的结束标志?

顺便说一句,这个问题扩展了我在这篇文章中发布的问题:The ending flag to traversing parents in kernel space in C

0 投票
1 回答
59 浏览

shared-memory - 使用 sys v 在内核和用户空间之间共享内存

我看到使用 sys v api ( ) 在用户空间进程之间共享内存段非常容易shmget(), shmat(), shmdt(),是否有任何解决方案可以使用相同的 api 从内核到用户空间共享内存。

0 投票
1 回答
617 浏览

c - 在用户空间中模拟 C 中的内存映射设备

我希望在 C 中模拟内存映射设备,以便对设备包装库(在 Linux 中)进行有效的单元测试。

现在,我知道我可以mmap将文件描述符放入用户空间,它原则上可以代表所述设备的模拟。

所以,AFAICT,我的问题归结为:是否有可能在用户空间中创建一个mmap可以操作的文件描述符,并由合适的回调处理读取和写入?

或者,也许这是一个已解决的问题,并且有一个已知的内核驱动程序可以连接?