标签: sysfs

我的属性过于活泼,我该怎么办?

在Linux设备驱动程序中,创建sysfs属性probe过于活泼 - 特别是,它遇到了与用户空间的竞争条件.建议的解决方法是将属性添加到各种默认属性组,以便在探测之前自动创建它们.对于设备驱动程序,struct device_driver包含const struct attribute_group **groups此目的.

但是,在Linux 3.11中struct attribute_group只有二​​进制属性的字段.对于较旧的内核(特别是3.4),设备驱动程序如何在探测之前创建sysfs二进制属性?

race-condition linux-device-driver linux-kernel sysfs

25
推荐指数
1
解决办法
633
查看次数

如何在Linux内核v3.2中创建一个简单的sysfs类属性

我正在学习如何在我的Linux模块中使用sysfs,但我最难找到有关这些主题的当前文档.我一直在使用的Linux设备驱动程序第3版书似乎在这个领域相当过时(例如,class_device在当前的Linux版本中,结构似乎完全消失了).

我只是试图在我的模块的相应sysfs类下获得一个属性,这将允许我从内核空间读取模块变量的值.

在我的代码中,我创建了一个类,允许udev在/ dev/foo为我的模块创建一个设备节点:

dev_t foo_dev;
alloc_chrdev_region(&foo_dev, 0, 1, "bar");

struct class *bar = class_create(THIS_MODULE, "bar");

device_create(bar, NULL, foo_dev, NULL, "foo");

struct cdev foo_dev_file;
cdev_init(&foo_dev_file, &fops); /* fops defined earlier */
cdev_add(&foo_dev_file, foo_dev, 1);
Run Code Online (Sandbox Code Playgroud)

当我插入模块时,我得到了一个sysfs类目录,并在/ sys/class/bar/foo /中填充了一些默认属性.如何创建显示在此新目录下的属性?

我相信我的概念非常好 - 创建属性结构,定义sysfs_ops函数等 - 我的问题是我不知道使用哪个特定的内核结构(class_attribute?),也不知道如何使这些属性出现在右边sysfs目录.

有人会指点我的教程或文章详细介绍当前Linux内核的过程吗?

c linux linux-device-driver linux-kernel sysfs

18
推荐指数
2
解决办法
3万
查看次数

Linux驱动程序:ioctl还是sysfs?

我正在编写一个驱动程序来控制一些自定义硬件.

在过去(即15年前),我正在这样做ioctls,但现在正在挖掘sysfs作为一种可能的选择.

  • 据我了解,ioctls并没有完全弃用,但sysfs是首选(?)
  • 我需要同时读取/写入值集,即通过一个sysfs条目.我读过这不理想,但必要时可以接受(?)
  • 需要对mutex驱动程序进行" 保护",以便一次只能有一个应用程序写入.(我确实有一些只读'信息'条目,我希望所有人都可以随时访问这些条目).

鉴于上述情况,最好的方法是什么 - ioctl或sysfs?

如果是sysfs,那我该如何实现独占访问?

如果sysfs,那么如果驱动程序没有读/写/ ioctl fops,它是否需要打开/释放?!

(这是一个'私人'司机,所以我不在乎大规模;)但是如果新的方式更适用,那么我可能会抓住它们!)

谢谢.

ioctl linux-device-driver sysfs

13
推荐指数
1
解决办法
4382
查看次数

在Linux中,有没有办法找出插入哪个PCI插槽的PCI卡?

在Linux中,有没有办法找出插入哪个PCI插槽的PCI卡?

/ sys/bus/pci/devices /包含许多非卡的设备(网桥,CPU通道等),我无法在设备目录中找到有关插槽卡映射的任何信息.

linux pci sysfs

12
推荐指数
2
解决办法
4万
查看次数

Android通过sysfs获得以毫安为单位的费率

我正在开发一个信息Android应用程序,我想在设备充电时读取以毫安为单位的充电速率.我见过其他可以做到这一点的应用,比如Ampere.

我相信信息应该在目录/sys/class/power_supply/battery中,这些文件中的哪一个与实现这一点有关,我怎样才能从中计算出mA的充电率?

android sysfs

10
推荐指数
2
解决办法
670
查看次数

如何测试电池充电速度?

如何在Android设备中检测电池充电速度?我可以使用以下代码检测电池状态.但不是充电速度.

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
BatteryChangeReceiver receiver = new BatteryChangeReceiver(subscriber);
registerReceiver(receiver, filter);


public class BatteryChangeReceiver extends BroadcastReceiver {

    @Override public void onReceive(Context context, Intent intent) {
              // here I get all battery status.
    }
  }
Run Code Online (Sandbox Code Playgroud)

我也提到这个,这个这个但是找不到检查充电速度的方法.

有一个应用程序(安培)显示充电速度. 在此输入图像描述 在此输入图像描述 我怎样才能做到这一点?

提前致谢.

usb android battery sysfs batterymanager

10
推荐指数
1
解决办法
6857
查看次数

一般来说,在ucLinux上,ioctl比写入/ sys文件系统更快吗?

我有一个我正在使用的嵌入式系统,它目前使用sysfs来控制某些功能.

但是,如果可能的话,我们希望加快功能.

我发现这个子系统也支持和ioctl接口,但在重写代码之前,我决定通过搜索来查看哪个是更快的接口(在ucLinux上):sysfs或ioctl.

有没有人能够很好地理解这两种实现方式,让我粗略地了解每种实现的开销差异?我正在寻找通用信息,例如"ioctl更快,因为你已经从函数调用中删除了文件层".或者"它们大致相同,因为sysfs具有非常简单的界面".

2013年10月24日更新:

我目前正在做的具体情况如下:

int fd = open("/sys/power/state",O_WRONLY);
write( fd, "standby", 7 );
close( fd );
Run Code Online (Sandbox Code Playgroud)

在kernel/power/main.c中,处理此写操作的代码如下所示:

static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
               const char *buf, size_t n)
{
#ifdef CONFIG_SUSPEND
    suspend_state_t state = PM_SUSPEND_STANDBY;
    const char * const *s;
#endif
    char *p;
    int len;
    int error = -EINVAL;

    p = memchr(buf, '\n', n);
    len = p ? p - buf : n;

    /* First, check if we are requested to hibernate */
    if (len == …
Run Code Online (Sandbox Code Playgroud)

linux sysfs

8
推荐指数
1
解决办法
3292
查看次数

Linux驱动程序通过sysfs访问

我正在制作一个小内核模块,以提供用户空间访问ARMv7芯片的某些内核模式功能(特别是缓存控制).我正在阅读Corbet,Rubini和Hartman的Linux设备驱动程序.在其中,他们描述了如何制作完整的驱动程序+设备+总线.我根本不想创建一个总线驱动程序.事实上,我正在制作的"驱动程序"根本不需要与设备定义匹配 - 它与平台的CPU隐式匹配.任何人都可以向我解释:

  1. 在sysfs中我的属性应该去哪里?它应该在我的模块条目下/sysfs/modules/mymodule吗?/sys/devices/platform似乎也很有希望,也是如此/sys/devices/system/cpu.
  2. 如果存在我应该放置kobject/属性的现有位置,我该如何将其插入?我如何获得必要的kset?我见过的所有例子都创建了一个kset然后从它链接到kobject- 我还没有看到用于请求现有命名的API kset

很抱歉,如果这显然是不可能的,或者某些地方有一些非常直接且易于发现的例子,我还没有因某些原因而发现.任何人都可以对此有所了解吗?

linux kernel driver linux-device-driver sysfs

7
推荐指数
1
解决办法
8645
查看次数

Raspberry PI,GPIO使用SYSFS上拉/下拉电阻

刚刚开始,我想说明我已经了解Python和其他用于在Raspberry PI上操作GPIO的高级实现.我也一直在使用WiringPI C API并且在Raspbian Jessie上遇到问题,即使我没有更改过一行代码,我还没有使用Raspbian Wheezy.此外,WiringPI C API开发人员表示,他没有立即支持Raspbian Jessie的计划,所以我没有划桨就行了.

出于这个原因,我一直在阅读以下关于使用sysfs访问Raspberry PI GPIO的教程(其中包括),因为这似乎是在不使用WiringPI而不编写我自己的GPIO库的情况下解决GPIO的一种方法:

http://www.hertaville.com/introduction-to-accessing-the-raspberry-pis-gpio-in-c.html

根据本教程,要将GPIO17设置为输入,请将字符串'in'写入文件句柄:

/ SYS /类/ GPIO/GPIO/17 /方向

...然后我可以从以下位置读取GPIO输入值:

/ SYS /类/ GPIO/gpio17 /值

这一切都很好,但我没有选择在我的生产板上装配上拉电阻.是否可以使用sysfs设置Raspberry PI的内置上拉和下拉电阻?

此外,如果通过sysfs设置上拉和下拉电阻是不可能的,我是否正确假设即使在最新的Raspbian Jessie中,唯一的另一种方法是直接写入GPIO寄存器?即使在Raspbian Jessie中也没有用于GPIO编程的官方C API?

c linux sysfs gpio raspberry-pi

7
推荐指数
1
解决办法
3673
查看次数

如何将文件操作附加到平台驱动程序中的sysfs属性?

我为我们开发的外围设备编写了一个平台驱动程序,并希望向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)

linux-device-driver linux-kernel embedded-linux sysfs

7
推荐指数
2
解决办法
5806
查看次数