


Pilote Linux | Créer une interface sysfs dans le pilote
Avant-propos
Dans certaines cartes de développement Linux, vous pouvez souvent voir la méthode echo pour contrôler directement le matériel ou modifier le pilote, par exemple :
//灯灭 echo 0 >/sys/class/leds/firefly:blue:power/brightness //灯亮 echo 1 >/sys/class/leds/firefly:blue:power/brightness
Comment faire cela ?
En fait, c'est parce que le pilote fournit interface sysfs
à l'usage des utilisateurs, permettant aux utilisateurs d'utiliser cat
ou echo
commande pour visualiser et modifier les valeurs de certaines variables dans le pilote. sysfs
接口给用户使用,使得用户可以通过cat
或者echo
命令来查看和修改驱动中某些变量的值。
下面介绍驱动中创建sysfs接口的方法。
sysfs接口创建
基本步骤:
1、使用DEVICE_ATTR
声明一个sys
节点
static DEVICE_ATTR(led_status, 0600, led_status_show, led_status_store);
led_status
DEVICE_ATTR
déclare un sys
node🎜static unsigned int led = 0; /* * sys节点的读函数 * 执行 cat /sys/devices/platform/leds/led_status时会调用 */ static ssize_t led_status_show(struct device *dev, struct device_attribute *attr, char *buf) { //buf是通过cat命令显示到终端的内容,这里显示led变量 return sprintf(buf, "%s:%d.\n", "led", led); } /** * sys节点的写函数 * 用echo命令往sys节点写入内容时,会调用该函数 */ static ssize_t led_status_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { //写入的内容会存放到buf中,这里将buf内容赋值给led变量 sscanf(buf, "%d", &led); return count; }
led_status
: Le nom du nœud affiché dans l'interface système🎜0600
:表示操作这个led_status节点的权限
led_status_show
:使用cat
命令查看sys接口时调用的函数
led_status_store
:使用echo
命令往sys接口写入内容时调用的函数
2、完成sys节点的读写函数
static unsigned int led = 0; /* * sys节点的读函数 * 执行 cat /sys/devices/platform/leds/led_status时会调用 */ static ssize_t led_status_show(struct device *dev, struct device_attribute *attr, char *buf) { //buf是通过cat命令显示到终端的内容,这里显示led变量 return sprintf(buf, "%s:%d.\n", "led", led); } /** * sys节点的写函数 * 用echo命令往sys节点写入内容时,会调用该函数 */ static ssize_t led_status_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { //写入的内容会存放到buf中,这里将buf内容赋值给led变量 sscanf(buf, "%d", &led); return count; }
示例中,led_status_show()
函数和led_status_store()
函数的作用分为打印led变量的值和修改led变量的值.
3、定义struct attribute
和struct attribute_group
数组
static struct attribute *led_attributes[]={ /*上述使用了DEVICE_ATTR声明节点名字为led_status, * 则struct attribute名字应为: * dev_attr_ + (节点名) + .attr * 所以名字为dev_attr_led_status.attr */ &dev_attr_led_status.attr, NULL, }; static const struct attribute_group led_attrs={ .attrs = led_attributes,//引用上述struct attribute数组 };
上述使用了DEVICE_ATTR
声明节点名字为led_status
,
则struct attribute
名字应为:dev_attr_ + (节点名) + .attr
。所以名字为dev_attr_led_status.attr
。
4、在probe函数中调用sysfs_create_group()
函数注册sysfs
接口
完整例子
设备树:
leds:leds{ compatible = "xx,xx-led"; };
驱动:
static unsigned int led = 0; static ssize_t led_status_show(struct device *dev, struct device_attribute *attr, char *buf) { return sprintf(buf, "%s:%d.\n", "led", led); } static ssize_t led_status_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { sscanf(buf, "%d", &led); return count; } static DEVICE_ATTR(led_status, 0600, led_status_show, led_status_store); static struct attribute *led_attributes[]={ &dev_attr_led_status.attr, NULL, }; static const struct attribute_group led_attrs={ .attrs = led_attributes, }; static int xx_led_probe(struct platform_device *pdev) { sysfs_create_group(&pdev->dev.kobj, &led_attrs); return 0; } static int xx_led_remove(struct platform_device *pdev) { sysfs_remove_group(&pdev->dev.kobj, &led_attrs); return 0; } static const struct of_device_id xx_led_of_match[] = { {.compatible = "xx,xx-led"}, }; static struct platform_driver xx_led_driver = { .probe = xx_led_probe, .remove = xx_led_remove, .driver = { .name = "xx-led", .owner = THIS_MODULE, .of_match_table = xx_led_of_match, }, }; static int __init xx_led_init(void) { return platform_driver_register(&xx_led_driver ); } static void __exit xx_led_exit(void) { platform_driver_unregister(&xx_led_driver); } module_init(xx_led_init); module_exit(xx_led_exit); MODULE_LICENSE("GPL"); MODULE_DESCRIPTION("xx led driver"); MODULE_AUTHOR("Vincent"); MODULE_VERSION("V1.0.00");
驱动加载后,就可以在linux终端中,使用cat
和echo
命令来查看和修改驱动中led
变量的值。例如:
//查看led变量的值 cat /sys/devices/platform/leds/led_status led:0. //修改led变量的值为9 echo 9 > /sys/devices/platform/leds/led_status //查看 cat /sys/devices/platform/leds/led_status led:9.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds



Deepseek est un puissant outil de recherche et d'analyse intelligent qui fournit deux méthodes d'accès: la version Web et le site officiel. La version Web est pratique et efficace et peut être utilisée sans installation; Que ce soit des individus ou des utilisateurs d'entreprise, ils peuvent facilement obtenir et analyser des données massives via Deepseek pour améliorer l'efficacité du travail, aider la prise de décision et promouvoir l'innovation.

Il existe de nombreuses façons d'installer Deepseek, notamment: Compiler à partir de Source (pour les développeurs expérimentés) en utilisant des packages précompilés (pour les utilisateurs de Windows) à l'aide de conteneurs Docker (pour le plus pratique, pas besoin de s'inquiéter de la compatibilité), quelle que soit la méthode que vous choisissez, veuillez lire Les documents officiels documentent soigneusement et les préparent pleinement à éviter des problèmes inutiles.

Solution aux problèmes d'autorisation Lors de la visualisation de la version Python dans Linux Terminal Lorsque vous essayez d'afficher la version Python dans Linux Terminal, entrez Python ...

Bitget est un échange de crypto-monnaie qui fournit une variété de services de trading, notamment le trading au comptant, le trading de contrats et les dérivés. Fondée en 2018, l'échange est basée à Singapour et s'engage à fournir aux utilisateurs une plate-forme de trading sûre et fiable. Bitget propose une variété de paires de trading, notamment BTC / USDT, ETH / USDT et XRP / USDT. De plus, l'échange a une réputation de sécurité et de liquidité et offre une variété de fonctionnalités telles que les types de commandes premium, le trading à effet de levier et le support client 24/7.

Gate.io est un échange de crypto-monnaie populaire que les utilisateurs peuvent utiliser en téléchargeant son package d'installation et en l'installant sur leurs appareils. Les étapes pour obtenir le package d'installation sont les suivantes: Visitez le site officiel de Gate.io, cliquez sur "Télécharger", sélectionnez le système d'exploitation correspondant (Windows, Mac ou Linux) et téléchargez le package d'installation sur votre ordinateur. Il est recommandé de désactiver temporairement les logiciels antivirus ou le pare-feu pendant l'installation pour assurer une installation fluide. Une fois terminé, l'utilisateur doit créer un compte Gate.io pour commencer à l'utiliser.

OUYI OKX, le premier échange mondial d'actifs numériques, a maintenant lancé un package d'installation officiel pour offrir une expérience de trading sûre et pratique. Le package d'installation OKX de OUYI n'a pas besoin d'être accessible via un navigateur. Le processus d'installation est simple et facile à comprendre.

Comment définir automatiquement les autorisations d'UnixSocket après le redémarrage du système. Chaque fois que le système redémarre, nous devons exécuter la commande suivante pour modifier les autorisations d'UnixSocket: sudo ...

Ouyi, également connu sous le nom d'OKX, est une plate-forme de trading de crypto-monnaie de pointe. L'article fournit un portail de téléchargement pour le package d'installation officiel d'Ouyi, qui facilite les utilisateurs pour installer le client Ouyi sur différents appareils. Ce package d'installation prend en charge les systèmes Windows, Mac, Android et iOS. Une fois l'installation terminée, les utilisateurs peuvent s'inscrire ou se connecter au compte OUYI, commencer à négocier des crypto-monnaies et profiter d'autres services fournis par la plate-forme.
