cascle 发表于 2013-08-11 19:03

本帖最后由 cascle 于 2013-08-11 19:06 编辑

用属性文件吧,缺点是不加自动搜索文件名代码的话,上层代码访问属性文件的路径要随着平台变化(因为不同平台的i2c设备目录名称是不一样的)

虫虫2003 发表于 2013-08-11 23:08

cascle 发表于 2013-08-11 19:03 static/image/common/back.gif
用属性文件吧,缺点是不加自动搜索文件名代码的话,上层代码访问属性文件的路径要随着平台变化(因为不同平 ...
能否给个示例代码?

cascle 发表于 2013-08-12 17:26

回复 12# 虫虫2003 static ssize_t xxx_store_caliberate(struct device *dev,
                                   struct device_attribute *attr,
                                   const char *buf, size_t count)
{
        const ptrdiff_t offset = attr - s_attr;
        int set_value = simple_strtoul(buf, NULL, 10);
        switch(offset)
        {
                case 0:
                case 1:
        }
}

static ssize_t xxx_show_caliberate(struct device *dev,
                                  struct device_attribute *attr, char *buf)
{
        const ptrdiff_t offset = attr - s_attr;
        switch(offset)
        {
                case 0:
                case 1:
        }
}


#define XXX_ATTR(_name)                         \
{                                       \
        .attr = { .name = #_name, .mode = S_IRUGO | S_IWUSR | S_IWGRP, },\
        .show = xxx_show_caliberate,                  \
        .store = xxx_store_caliberate,                              \
}


static struct device_attribute s_attr[] = {
        XXX_ATTR(a),
        XXX_ATTR(b),
        };

cascle 发表于 2013-08-12 17:28

大体的架子就是这样,至于具体的细节,自己google下属性文件怎么写吧,都很好找的

cascle 发表于 2013-08-12 17:30

create和remove我就不加了

jmyu2006 发表于 2013-09-26 13:23

本帖最后由 jmyu2006 于 2013-09-26 13:28 编辑

回复 7# 虫虫2003


   我也有此疑问。不过目前的理解就是:没有什么好的办法。要么适配Linux I2C子系统,要么自行另起炉灶。你举的海思的例子,说明它这个BSP包做的好,有层次,做到了OS无关。其实我个人觉得驱动就应该像海思平台那样写:Linux Kernel <-- Linux Driver subystem <-- Linux Driver Adapter <-- OS independent Driver。 这样,利用最低一层的OS independent Driver,各种驱动就可以方便地进行不同OS下的移植。试想一下,一颗芯片做出来,自然要写芯片驱动来进行测试,这个时候是没必要用到Linux这个庞然大物的,直接写些功能函数来驱动硬件就可以了,只要函数接口设计成低耦合性,那到时候做Linux驱动时,完全可以做到复用这个函数,只是要进一步包装一层,来适配Linux而已。如果直接就照Linux的结构来写,那就会出现楼主目前的疑问了。
页: 1 [2]
查看完整版本: 请问Linux下I2C设备驱动该如何写?