【sysfs_create_link】创建内核连接

转自:https://www.cnblogs.com/metootxy/archive/2013/06/03/3116027.html

之前做传感器之类,因为注册的是input设备,所以其文件接口都是以/sys/class/input/input1(2...n);

这样就有一个问题,因为input生成的序列式随机的,所以如果一个设备注册不成功,那么input的序列号将会被打乱,如果上层读的input接口,这样子整个上下层就会出现问题。

后来就想了一个解决办法,提供给上层的接口使用注册的i2c接口,这样对同一平台的是固定,但是当换了一个平台其注册的i2c线可能也不一样。

所以很苦逼的,这两种方法都不是很好使,怎么办呢?

通过链接的方法,把该设备路径链接到一个固定的路径,就OK了。

这个实现的方法,强大的linux内核已经帮我们解决了。具体代码如下:

在fs/sysfs/symlink.c文件中:

复制代码
 98 /**
 99  *      sysfs_create_link - create symlink between two objects.
100  *      @kobj:  object whose directory we're creating the link in.
101  *      @target:        object we're pointing to.
102  *      @name:          name of the symlink.
103  */
104 int sysfs_create_link(struct kobject *kobj, struct kobject *target,
105                       const char *name)
106 {
107         return sysfs_do_create_link(kobj, target, name, 1);
108 }
复制代码

具体实现的实例如下:

复制代码
1343         my_class = class_create(THIS_MODULE, "test_class");//创建一个class
1344         if (IS_ERR(my_class)) {
1345                 pr_err("failed to create my class\n");1347         }
1348         my_dev = device_create(my_class, NULL, 0, drvdata, "test_class");
1350         if (IS_ERR(my_dev)) {
1351                 pr_err("failed to create my dev\n");1353         }
1354         ret = sysfs_create_link(&my_dev->kobj, &client->dev.kobj, "i2c");//创建client->dev.kobj的链接文件,
1355 
1356         /* create sysfs attributes */
1357         ret = sysfs_create_group(&client->dev.kobj, &attribute_group);

复制代码

查看设备文件接口时:

/sys/class/my_class/my_dev/下面就有一个i2c链接文件,这样子就不用担心一直平台的时候,还需要再次更改文件接口的问题了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值