“How to access information in sysfs”的版本间的差异
Zhouyuebiao(讨论 | 贡献) |
|||
第1行: | 第1行: | ||
{{DISPLAYTITLE:如何在sysfs中访问信息}} | {{DISPLAYTITLE:如何在sysfs中访问信息}} | ||
+ | == Article purpose == | ||
+ | This article provides some information about the sysfs pseudo filesystem usage from the user space. | ||
+ | |||
+ | == Sysfs (/sys) pseudo filesystem == | ||
+ | Sysfs provides a mean to export kernel data structures, their attributes, and the linkages between them to the user space. | ||
+ | |||
+ | Please refer to [[Pseudo filesystem#sysfs (/sys) - System filesystem|sysfs part]] of [[Pseudo filesystem|pseudo filesystem]] page. | ||
+ | |||
+ | == Sysfs usage == | ||
+ | Linux kernel provides a documentation<ref>{{CodeSource | Linux kernel | Documentation/admin-guide/sysfs-rules.rst}}</ref> about the rules for sysfs usage. | ||
+ | |||
+ | Some examples are also described below with two different approaches for using sysfs entries from the user space: | ||
+ | * Linux application in C language | ||
+ | * bash script. | ||
+ | |||
+ | === Example from Linux application === | ||
+ | The below example is a typical sequence for using sysfs entry (here a PWM component): | ||
+ | |||
+ | * open a file descriptor of the sysfs entry file | ||
+ | <syntaxhighlight lang="c" line start="10"> | ||
+ | len=snprintf(buf, sizeof(buf), "/sys/class/pwm/pwmchip0/pwm%d/duty_cycle", pwm_channel); | ||
+ | fd = open(buf, O_RDWR); | ||
+ | </syntaxhighlight> | ||
+ | *if fd is correctly opened, write/read value in the file: pay attention to the "text" format | ||
+ | <syntaxhighlight lang="c" line start="12"> | ||
+ | if (fd < 0) | ||
+ | { | ||
+ | perror("pwm/duty_cycle"); | ||
+ | return fd; | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | :*read: store data to buffer | ||
+ | <syntaxhighlight lang="c" line start="18"> | ||
+ | read(fd, buf, sizeof(buf)); | ||
+ | </syntaxhighlight> | ||
+ | :*write: write data from buffer | ||
+ | <syntaxhighlight lang="c" line start="20"> | ||
+ | len = snprintf(buf, sizeof(buf), "%d", 900000); | ||
+ | write(fd, buf, len); | ||
+ | </syntaxhighlight> | ||
+ | * close file descriptor | ||
+ | <syntaxhighlight lang="c" line start="30"> | ||
+ | close(fd); | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === Example for shell command / bash script === | ||
+ | Operations on sysfs entries can be done by using command lines (i.e. ''echo'' for writing, ''cat'' for reading). | ||
+ | |||
+ | In this way, it is possible to use a bash script to execute a configuration sequence, similarly to what a user would do by typing multiple shell commands. | ||
+ | |||
+ | An example is provided in [[PWM_overview#How_to_use_PWM_with_sysfs_interface|How_to_use_PWM_with_sysfs_interface]]. | ||
+ | |||
+ | == References == | ||
+ | <references /> | ||
+ | |||
+ | <noinclude> | ||
+ | [[Category:How to trace and debug]] | ||
+ | [[Category:OpenSTLinux filesystem]] | ||
+ | {{PublicationRequestId | 10265 | 2019-01-16 |BrunoB}} | ||
+ | </noinclude> | ||
[[Category:How_to ]][[Category:How_to_trace_and_debug ]] | [[Category:How_to ]][[Category:How_to_trace_and_debug ]] | ||
[[Category:sysfs]] | [[Category:sysfs]] |
2020年5月6日 (三) 10:06的最新版本
目录
Article purpose
This article provides some information about the sysfs pseudo filesystem usage from the user space.
Sysfs (/sys) pseudo filesystem
Sysfs provides a mean to export kernel data structures, their attributes, and the linkages between them to the user space.
Please refer to sysfs part of 伪文件系统 page.
Sysfs usage
Linux kernel provides a documentation[1] about the rules for sysfs usage.
Some examples are also described below with two different approaches for using sysfs entries from the user space:
- Linux application in C language
- bash script.
Example from Linux application
The below example is a typical sequence for using sysfs entry (here a PWM component):
- open a file descriptor of the sysfs entry file
10 len=snprintf(buf, sizeof(buf), "/sys/class/pwm/pwmchip0/pwm%d/duty_cycle", pwm_channel);
11 fd = open(buf, O_RDWR);
- if fd is correctly opened, write/read value in the file: pay attention to the "text" format
12 if (fd < 0)
13 {
14 perror("pwm/duty_cycle");
15 return fd;
16 }
- read: store data to buffer
18 read(fd, buf, sizeof(buf));
- write: write data from buffer
20 len = snprintf(buf, sizeof(buf), "%d", 900000);
21 write(fd, buf, len);
- close file descriptor
30 close(fd);
Example for shell command / bash script
Operations on sysfs entries can be done by using command lines (i.e. echo for writing, cat for reading).
In this way, it is possible to use a bash script to execute a configuration sequence, similarly to what a user would do by typing multiple shell commands.
An example is provided in How_to_use_PWM_with_sysfs_interface.
References
<securetransclude src="ProtectedTemplate:PublicationRequestId" params="10265 | 2019-01-16 | BrunoB"></securetransclude>