问题标签 [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.
c - 在一定时间内运行循环的最佳方法
我必须在一定时间内运行一个循环。我知道以下方法可以做到这一点。
可以吗?或任何其他更好的方法来做到这一点?
linux-kernel - 如何使用 SYSFS 从内核向用户空间应用程序发送通知
我正在使用 USB ACM 驱动程序,“我需要将通知从内核空间发送到用户空间应用程序以调用回调函数”。我不太了解在代码中使用内核到用户界面。sysfs 对这种情况的帮助有多大。请发送一些示例代码以使用 sysfs,以便我了解在我的代码中实现的想法。我在任何地方都找不到它。另外请告诉任何其他简单的方法来实现内核到用户空间的通知。提前致谢。
android - 如何从用户空间程序访问 SurfaceFlinger?
我想编写一个用户空间程序来与 SurfaceFlinger 对话并调用它的dump
函数。如何访问 SurfaceFlinger 并从我的 C++ 程序中进行这样的调用?
我知道 SurfaceFlinger 在 main_surfaceflinger.cpp 中实例化并发布。我不知道如何在我的 C++ 程序中使用它。
linux - 如何使用 get_user() 将数据从用户空间发送到内核空间?
我已经计算了用户空间中一个参数的值,并且想将整数值传递给内核空间。我知道我必须使用get_user(x, ptr)
,但我不确定如何提供指向内核模块的指针。
我的用户空间代码中有一个整数变量,我可以找到指向它的指针。但是,我应该事先知道指针,以便可以在内核代码中使用它。我是否需要为整数变量分配一个特定的内存位置(即 0x...),以便我可以在两个代码中使用它,还是有另一种解决方法?
我希望这种数据传输具有最小的开销。
c - Linux 用户空间 DMA 访问(用于内存-内存复制)
我的嵌入式 ARM 设备有一个 800x480 16 位 Linux 帧缓冲 LCD,需要手动进行双缓冲。目前我只是memcpy()
用来将双缓冲区写入帧缓冲区,这非常慢。循环以 100%的while(1){memcpy(lfb,dbuf)}
速度最大化 CPU 并以大约 40 FPS 的速度更新。
我正在使用的 ARM 设备和 Linux 内核确实支持 DMA 内存-内存复制,但我无法弄清楚如何在用户空间程序中访问它。
似乎linux/dmaengine.h
并且dma_async_memcpy_buf_to_buf()
是我需要使用的,但似乎这些只能从内核中获得?
c - 从用户空间访问 sk_buff
我正在使用开关。数据包通过一个特殊的千兆端口进入内核,其中每个数据包前面都有一个标头,该标头告诉您数据包最初进入的交换机端口。
我正在研究一种协议,该协议需要我知道端口才能响应数据包——你可以想象功率分配、OAM、802.1X 等都有这个问题。
我将交换机端口号存储在 sk_buff 中的一个新字段中。没问题。
但是在用户空间中,我正在使用 recvfrom 接收数据包,并且无法访问 sk_buff。我可以访问 sll_ifindex,所以我可以知道数据包进入的接口,甚至是 VLAN(比如 eth0.2),但由于所有数据包都进入特殊的千兆端口,这不是我需要的。我需要原始端口。
有没有办法从 sockaddr 追溯到 sk_buff?由于数据包一直在被复制,我无法访问它前面的字节。至少现在我也无法访问 skbuff。我可以想出一些不稳定的东西,比如维护一个单独的信息队列,并通过一个单独的渠道或其他东西进行交流,但这似乎有问题。
想法?
linux-kernel - Linux内核模式下,如何执行用户空间命令
我在内核模式下挂钩 execve(将 system_call_table 条目 __NR_execve 更改为我的函数)。我想检查 ELF 的汇编代码。如果它有害,我将直接返回而不执行它。
我正在编写一个 linux 模块。在Linux内核模式下,我想使用objdump来反汇编ELF文件。我想去用户模式执行objdump,然后回到内核模式。这可能吗?谢谢你。
windows - 如何在用户空间和内核空间之间共享内存
我需要在用户空间和内核空间之间共享内存。内存是在用户空间和内核中分配的,我想用物理地址构建一个内存描述符列表来初始化一个 DMA 控制器(驻留在 FPGA 中)。
我正在使用带有 WEC2013 的 Zynq (ARM+FPGA)。
Microsoft 提供了2 种方法,“IOCTL 方法”和“共享内存对象”方法,但我不能使用其中任何一种:
- IOCTL:因为 Windows Embedded Compact 忽略了方法参数,所以我不能使用 METHOD_xxx_DIRECT。IOCTL 上的 MSDN
- 共享内存对象:内存已由用户分配,因此我无法创建命名内存对象(使用 CreateFileMapping)。复制数据会花费太多时间。
还有另一种方法可以做到这一点吗?或者我可以在用户空间中获得 MDL 吗?
char - 数据无法从用户空间程序写入设备文件
我正在为自定义设备开发一个内核模块,实际上,它是一个连接到 ISA 总线的 4*8 位 io 端口,地址为 0x0120 - 0x0123。该驱动程序基于 Alessandro Rubini 和 Jonathan Corbet 的“scull”。我的操作系统是 Ubuntu 10.04,内核是 2.6.32-74 通用的,我使用内置的面向控制台的编译器 gcc。现在模块正在加载和卸载成功,读取和写入功能已实现。从设备文件中读取我是这样实现的:
}
一切正常,状态栏显示从设备读取的字符串。但是当我尝试写入设备文件时 - 问题出现了。我写设备文件的函数总是报错。
/li>
- 就像 ET3201 == NULL 一样。此时内核模块已加载并从中读取就可以了。调试后我发现内核模块中的“Write”函数永远不会被调用,因为它不会在内核日志中打印相应的“printk”消息。无奈之下,我试图这样做:
我在状态栏中收到一条错误消息:错误:g-file-error-quark:2,无法创建文件'/dev/ET32010.****8X':权限被拒绝我认为这是因为 g_file_set_contents 写入临时文件然后尝试将其重命名为“权限被拒绝”的设备文件。这可能是编写设备文件的错误方法,请帮助我找到正确的方法...
我的问题:为什么我的函数 on_BnStop_clicked 不能正常工作?如何从用户空间程序正确写入 char 设备文件?
我已经检查了设备访问权限...
然后将内核模块初始化脚本中的模式更改为 666
并且on_BnStart_clicked 函数返回“Permission denied”,但on_BnStop_clicked 调用了内核模块的“Write”方法,然后以ERR == NULL 成功完成。毕竟,错误报告功能因“分段错误”而崩溃(报告 ERR == NULL),但我已经修复了这个错误。
memory-management - 关于进程内存管理的问题
我几乎没有操作系统的问题。我谷歌了很多,但无法找到任何答案。谁能帮帮我吗。
Q1。内核为用户程序提供了多少内存,有什么限制吗?
Q2。用户程序最多可以拥有的地址范围是多少,是什么决定的?
Q3。如果将多余的内存分配给用户程序会发生什么,比如说 malloc 在无限循环中?