在Linux DeviceTree增添dtsi文件并在驱动中读取节点信息写入sys文件系统
2016-11-14 09:07
573 查看
http://www.myexception.cn/linux-unix/1995748.html
在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统
这里只是举例在arch/arm/boot/dts中添加dtsi文件并在驱动中读取dtsi中节点信息,并将节点信息写入sys文件系统,至于怎么创建、读写sys文件可以参考: linux sysfs下创建文件
例中dtsi所放位置位于:
xm-test.dtsi:
其中xm_test、”xiaomi,xm_test”必须具有唯一性。
注:需要在audio.dtsi文件中添加#include “xm-test.dtsi”具体在哪个文件下添加include根据实际情况而定。
注:Makefile别忘了修改
在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统
一、前提
新版基于ARM的Linux都会基于Device Tree去代替之前的device驱动。更加多的了解Device Tree可以访问宝哥的Bolg:ARM Linux 3.x的设备树(Device Tree)这里只是举例在arch/arm/boot/dts中添加dtsi文件并在驱动中读取dtsi中节点信息,并将节点信息写入sys文件系统,至于怎么创建、读写sys文件可以参考: linux sysfs下创建文件
二、举例
1、添加dtsi文件
添加的dtsi文件可以基于你所用的手机或者开发板确定放入什么位置。dts总目录:arch/arm/boot/dts例中dtsi所放位置位于:
xm-test.dtsi:
/ { xm_test { compatible = "xiaomi,xm_test"; xm_test_tip; }; };
其中xm_test、”xiaomi,xm_test”必须具有唯一性。
注:需要在audio.dtsi文件中添加#include “xm-test.dtsi”具体在哪个文件下添加include根据实际情况而定。
2、驱动
#include <linux/init.h> #include <linux/module.h> #include <linux/device.h> #include <linux/platform_device.h> #include <linux/sysfs.h> #include <linux/slab.h> #include <linux/kernel.h> #include <linux/kobject.h> #include <linux/string.h> #include <linux/of.h> #define HW_TEST "xm_test_tip" #define i2c_info "xm_test, i2c_show" static ssize_t show(struct device_driver *driver, char *buf) { if(NULL != buf) { /* Newline is not appended on purpose, for convenience of reader programs */ snprintf(buf, PAGE_SIZE, "%s\n", i2c_info); return strlen(buf); } return 0; } DRIVER_ATTR(i2c_test, 0444, show, NULL); static struct attribute *audio_attrs[] = { &driver_attr_i2c_test.attr, NULL, }; static struct attribute_group audio_group = { .name ="xm_test", .attrs = audio_attrs, }; static const struct attribute_group *groups[] = { &audio_group, NULL, }; static int xm_test_probe(struct platform_device *pdev) { if(NULL == pdev) { ad_loge( "xiaomi_test: xm_test_probe failed, pdev is NULL\n"); return 0; } if(NULL == pdev->dev.of_node) { ad_loge( "xiaomi_test: xm_test_probe failed, of_node is NULL\n"); return 0; } /* 存在 xm_test_tip 就会在手机/开发板启动的时候打印出来 */ if(of_property_read_bool(pdev->dev.of_node, XM_TEST)) { ad_loge( "xm_test: %s is existing\n", XM_TEST); } return 0; } /* .compatible的信息要与dtsi中的compatible一致 */ static struct of_device_id audio_info_match_table[] = { { .compatible = "xiaomi,xm_test",}, { }, }; static struct platform_driver xm_test = { .driver = { /* 当然这里的name也要跟dtsi的节点xm_test一致 */ .name = "xm_test", .owner = THIS_MODULE, .groups = groups, .of_match_table = audio_info_match_table, }, .probe = xm_test_probe, .remove = NULL, }; static int __init audio_info_init(void) { return platform_driver_register(&xm_test); } static void __exit audio_info_exit(void) { platform_driver_unregister(&xm_test); } module_init(audio_info_init); module_exit(audio_info_exit); MODULE_LICENSE("GPL");
注:Makefile别忘了修改
3、检验sys文件系统中的是否写入成功
在sys/bus/platform/drivers/xm_test中会找到文件i2c_test文件:# cat i2c_test # xm_test, i2c_show
相关文章推荐
- 在Linux DeviceTree增添dtsi文件并在驱动中读取节点信息写入sys文件系统
- 在Linux DeviceTree添加dtsi文件并在驱动中读取节点信息写入sys文件系统
- [ZedBoard移植嵌入式Linux教程(4)]创建设备树(Device-Tree)文件dts
- Linux操作系统中读取目录文件信息的过程分析
- 【年少的风】文件信息的读取与写入
- linux 读取文件信息并且输出
- Linux创建crontab,定时将信息记录写入文件
- Linux 使用statvfs读取文件系统信息
- Device Tree Usage(理解DTS文件语法)
- 读取xml文件里switch节点的IP和设备信息,ping设备,异常显示在列表里
- Linux 打开文件并写入一段字符串,同时读出对应文件的信息--fopen()/fwrite()/fread()
- Device Tree Usage(理解DTS文件语法)
- linux sudo 重定向,实现只有系统管理员才有权限操作的文件中写入信息
- 文件部分-----(6 )二进制文件读写操作----将学生信息写入到文件中,再从文件中读取信息
- 在linux下,如何将shell里输出的信息写入到文件里呢?
- 使用Python读取和写入mp3文件的id3v1信息
- 向文件中写入和读取属性(Property)信息
- 文件部分-----(3)ASCII码文件读写操作----将学生信息写入到文件中,再从文件中读取信息
- 写入文件和读取文件信息—Java Card开发第三篇
- vc2008: 控制台程序将数据写入MySql(数据库信息从配置文件读取)