问题标签 [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 - 返回模块中的 page_address 并将其复制到用户空间缓冲区。有没有办法
有没有办法复制/映射返回page_address
到用户空间缓冲区传递文件的read
函数
我读的是
返回页面的虚拟地址。并获取指向内核数据类型的页面的指针
例如我有一个包含这个的函数
我可以使用 memcpy 或 copy_to_user 吗
或者
我读copy_to_user
的内容不允许这样做,因为如果buf
是用户空间缓冲区块,那么它会检查缓冲区是否在内存的用户部分中。这也阻止了用户空间应用程序要求内核读/写内核地址;
所以我想知道有没有办法将返回复制 page_address
到用户空间缓冲区
c - 从用户空间复制到内核模块
我想将变量“register_val”(unsigned int)从内核模块的用户空间复制到地址“addr_user”(unsigned int *)。
为什么下面要复制的代码不起作用?
c - 如何在 C 程序中打印呼叫跟踪
现在我正在linux系统上编写一个C程序。我想在cpu上打印调用跟踪信息,就像dump_stack()
在内核空间或命令echo t > /proc/sysrq-trigger
显示的那样。
我找到了一些方法,但它们都需要在内核空间中使用。
我也尝试过
system("echo t > /proc/sysrq-trigger")
,它最终表明我不能简单地这样做。
sh: /sys/sysrq-trigger: Permission denied
那么有什么解决办法吗?
multidimensional-array - 如何通过用户空间中的 read() 函数从内核设备驱动程序获取二维数组
我正在编写一个 Linux 设备驱动程序,该驱动程序将准备数据,我应该使用系统 API read() 将数据读取到用户空间。当我在设备驱动中实现read()函数时,发现函数是
如果我有 1D 数组,使用 copy_to_user(user,kernel,len) 很容易。但我的数据是 2D 数组。我的方法是将我的 2D 数据更改为 1D,但我想知道有没有其他方法可以解决这个问题?谢谢。
c - 读取一个字(2 字节)而不提供来自用户空间的寄存器地址
我正在尝试从用户空间中的 C 读取 i2c 环境光传感器 BH1750。我在 Linux 上使用 BeagleBone 口袋。
数据表说,在测量操作之后,需要使用以下 i2c 序列读取结果:S Adr Rd (A) (Data) A (Data) NA P
.
我遇到的问题:我发现的所有示例/命令要么只读取 1 个字节,要么需要一个寄存器地址才能读取更多。
我找到的最接近的是以下命令:i2c_master_recv()
. 但是我对文档的解释是这个命令用于内核设备驱动程序。
如何从用户空间发出这样的 I2C 读取序列?
linux-kernel - 将闭源库转为内核HWMon驱动模块的正确做法
我正在使用运行专有固件但有一个封闭源代码库(.so 文件)的超级 I/O 芯片,其中包含可以调用以检索和设置该芯片上的某些信息的函数。目标是创建一个解决方案,该解决方案可以由“lm-sensors”中的“sensors”等程序读取,我认为这需要一个 hwmon 内核驱动程序模块。我看到的两种方法是:
- 创建一个基本的 hwmon 驱动程序和一个与该驱动程序通信并能够调用封闭源代码库中的各种函数的用户空间应用程序
- 对封闭源代码库进行逆向工程,并在 hwmon 驱动程序本身内完成所有操作
从与硬件本身交互的角度来看,第一个解决方案似乎是最可靠的,因为制造商的代码正在执行通信,但是,它具有三个单独的“移动”部分,这似乎是一个非常hacky的解决方案。但是,如果制造商更改芯片固件等,该解决方案还具有易于更新和维护的好处。
第二种解决方案需要大量的努力来实现,并且似乎是最不可靠和最容易出错的,因为逆向工程可能会错过可能在制造商代码中处理的边缘情况,但所有内容都包含在一个地方。
在这种情况下有正确的方法吗?
linux-kernel - 从内核模块中的设备读取
是否可以从内核模块中的设备读取?例如,如果我想从 /dev/sda 读取,我将如何去做(我选择 /dev/sda 作为示例,在我的确切场景中,我需要从字符设备读取)?我知道用户空间函数在内核模块中不可用,所以我假设用于打开设备文件的 open 函数不可用,另外我假设由于代码已经在内核空间中执行,因此可能有一种方法可以绕过 dev文件系统并直接访问设备。另外,如果无法从中读取,是否至少可以检查它是否存在?