我正在制作一个小内核模块,以提供用户空间访问ARMv7芯片的某些内核模式功能(特别是缓存控制).我正在阅读Corbet,Rubini和Hartman的Linux设备驱动程序.在其中,他们描述了如何制作完整的驱动程序+设备+总线.我根本不想创建一个总线驱动程序.事实上,我正在制作的"驱动程序"根本不需要与设备定义匹配 - 它与平台的CPU隐式匹配.任何人都可以向我解释:
/sysfs/modules/mymodule
吗?/sys/devices/platform
似乎也很有希望,也是如此/sys/devices/system/cpu
.kobject
/属性的现有位置,我该如何将其插入?我如何获得必要的kset
?我见过的所有例子都创建了一个kset
然后从它链接到kobject
- 我还没有看到用于请求现有命名的API kset
?很抱歉,如果这显然是不可能的,或者某些地方有一些非常直接且易于发现的例子,我还没有因某些原因而发现.任何人都可以对此有所了解吗?
我正在尝试为嵌入式系统创建设备树,并希望向用户空间公开一些GPIO。这些不是,也不应该由内核驱动程序使用。例如,有一个USB设备焊接到板上,由用户空间驱动器控制。它具有GPIO重置线,用户空间库需要访问该重置线。
我希望这些文件在sysfs中通过名称公开,以便用户空间可以访问/sys/class/gpio/usbreset
而不需要知道不可思议的gpio编号并需要专门“导出”它。我尝试将其设置为GPIO猪,该猪初始化GPIO,但其名称未出现在sysfs中,并且在将其拖入时无法导出gpio。我知道我可以选择其他内核驱动程序类型,例如LED,但它不是LED,对我来说,这似乎不是很干净。
在sysfs中导出命名的GPIO的正确方法是什么?
我为我们开发的外围设备编写了一个平台驱动程序,并希望向sysfs公开一些配置选项.我已设法使用属性结构(见下文)和sysfs_create_file
探测函数创建适当的文件,但我无法弄清楚如何将show/store函数附加到平台驱动程序中的结构.
我在网上找到的大多数资源使用了一个device_attribute
结构或类似的东西来创建他们的文件,这也适合吗?还有另一种方法可以为平台驱动程序执行此操作吗?
我的属性struct看起来像这样:
struct attribute subkey_attr = {
.name = "subkeys",
.mode = S_IWUGO | S_IRUGO,
};
Run Code Online (Sandbox Code Playgroud)
我使用此调用注册该文件:
riddler_kobject = &pdev->dev.kobj;
ret_val = sysfs_create_file(riddler_kobject, &subkey_attr);
Run Code Online (Sandbox Code Playgroud) 我正在开发一个创建sysfs属性文件的驱动程序.旨在通过使用该poll()
方法通知应用程序对此属性的更改.我打算使用这个sysfs_notify()
功能.只要您拥有kobject
属性(sysfs_notify()
要求作为第一个参数),这很容易做到.kobject
如果使用sysfs_create_file()
和相关功能,获得很容易.
我在正确创建一个sysfs文件时阅读了这篇文章,该文件解决了设备存在的用户空间通知和sysfs文件创建之间可能存在的竞争条件.这个解决方案也更清洁.
但是,我无法弄清楚如何获取kobject
我可以使用的每个属性(或父级)sysfs_notify()
.在一点结构,如有struct device_driver
一个成员struct kobject kobj;
.这已被取代(10年前)struct driver_private *p;
.此私有结构现在包含实际结构kobject
,无法使用.
有没有sysfs_notify()
我可以使用的新形式,还是有另一种方法来获得正确的kobject
?我可能不得不回到"手动"创建sysfs属性.
我正在尝试获取 Linux 内核模块中的当前屏幕亮度。但是,我不知道如何访问亮度变量,尽管可以使用 sysfs 接口在用户空间应用程序中轻松获取它。
请让我知道有关此问题的线索。
谢谢。
有什么方法可以计算用户空间中特定PID的抢占吗?我有兴趣测量一个进程被抢占的次数。
我的目标是控制Intel主板(带有C1037U处理器的NM70芯片组)上的Peppermint 4 Linux(内核版本3.8.0)中的GPIO引脚。
我正在调试使用sysfs接口的问题,并试图了解/ sys / kernel / debug / gpio为空的情况?
尝试通过以下方式导出针脚0到255时
echo XX > /sys/class/gpio/export
XX从0到255,我得到以下错误消息
echo: write error: No such device
在什么情况下/ sys / kernel / debug / gpio为空?
我正在尝试使用sysfs接口,该接口允许通过文件系统从用户空间访问GPIO引脚。
我已成功遵循https://help.ubuntu.com/community/Kernel/Compile的“替代构建方法:老式Debian方式”部分重新编译内核,以便在用户空间中公开GPIO访问,并打开GPIO的调试模式:
编译完新内核后,我可以首次在/ sys / class / gpio中看到GPIO文件夹。然后,从理论上讲,应该是能够通过写入文件系统来打开/关闭GPIO端口的情况。在http://falsinsoft.blogspot.co.uk/2012/11/access-gpio-from-linux-user-space.html中概述了这种方法。
尝试通过以下方式导出针脚0到255时
echo XX > /sys/class/gpio/export
XX从0到255,我得到以下错误消息
echo: write error: No such device
尝试通过以下方式导出0到255范围外的引脚时
echo XX > /sys/class/gpio/export
我收到以下错误消息
echo: write error: Invalid argument
本教程建议这可能是因为GPIO端口是为另一个程序保留的,并且如果是这样,调试文件(/ sys / kernel / …
我有一台运行 Node 的无头 Debian ARM 机器。该设备具有硬按钮,这些按钮使用 映射到普通键盘事件gpio-keys
。
我的目标是从硬按钮以及 Node.js 中的任何附加键盘捕获全局事件。我需要一个解决方案,它可以独立于运行它的终端捕获 keydown/keyup 事件(它将通过 SSH 会话运行)。它不必是跨平台的,只要它适用于 ARM Debian,我就会接受它。
我正在想象直接从任何sysfs
必要的属性中读取的东西,但这不是必需的。
谁可以帮我这个事?我被困了一段时间。
我有以下输出:
$ cat /sys/class/power_supply/BAT0/uevent
POWER_SUPPLY_NAME=BAT0
POWER_SUPPLY_TYPE=Battery
POWER_SUPPLY_STATUS=Charging
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=10800000
POWER_SUPPLY_VOLTAGE_NOW=12178000
POWER_SUPPLY_CURRENT_NOW=904000
POWER_SUPPLY_CHARGE_FULL_DESIGN=4042000
POWER_SUPPLY_CHARGE_FULL=4042000
POWER_SUPPLY_CHARGE_NOW=3916000
POWER_SUPPLY_MODEL_NAME=
POWER_SUPPLY_MANUFACTURER=HP
POWER_SUPPLY_SERIAL_NUMBER=
Run Code Online (Sandbox Code Playgroud)
我想计算直到电池充电结束为止的剩余时间。我可以这样做:(POWER_SUPPLY_CHARGE_FULL - POWER_SUPPLY_CHARGE_NOW)/ POWER_SUPPLY_CURRENT_NOW 吗?对于此输出,剩余时间将为: (4042000-3916000) / 904000 = .13938053097345132743 一小时或 8 分钟。这是计算充电结束剩余时间的正确公式吗?
我正在开发一个Linux设备驱动程序,我必须使用sysfs接口将一串字符传递给它.sysfs属性是否可以接受字符串形式的数据(类似echo "somedata" > sysfs_interface
)?
我已经实现了它,它似乎工作正常,但我想确定这是有效的(在内核社区可以接受).
sysfs ×10
linux-kernel ×5
linux ×4
embedded ×2
gpio ×2
kernel ×2
device-tree ×1
driver ×1
interrupt ×1
node.js ×1
preemption ×1