免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3023 | 回复: 5
打印 上一主题 下一主题

处女贴,求助,各位请乱入,关于驱动设备模型—编译出错!标题常常,必须的! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-07 11:20 |只看该作者 |倒序浏览
刚开始接触设备模型,下面是源码和出错信息:
源码:
#include <linux/device.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/string.h>

MODULE_AUTHOR("David ");
MODULE_LICENSE("Dual BSD/GPL");

static char *Version = "$Revision: 1.9 $";

static int my_match(struct device *dev, struct device_driver *driver)
{
        return !strncmp(dev->bus_id, driver->name, strlen(driver->name));
}

static void my_bus_release(struct device *dev)
{
        printk(KERN_DEBUG "my bus release\n");
}
        
struct device my_bus = {
        .bus_id   = "my_bus0",
        .release  = my_bus_release
};


struct bus_type my_bus_type = {
        .name = "my_bus",
        .match = my_match,
};

EXPORT_SYMBOL(my_bus);
EXPORT_SYMBOL(my_bus_type);


/*
* Export a simple attribute.
*/
static ssize_t show_bus_version(struct bus_type *bus, char *buf)
{
        return snprintf(buf, PAGE_SIZE, "%s\n", Version);
}

static BUS_ATTR(version, S_IRUGO, show_bus_version, NULL);


static int __init my_bus_init(void)
{
        int ret;
        
        /*注册总线*/
        ret = bus_register(&my_bus_type);
        if (ret)
                return ret;
               
        /*创建属性文件*/        
        if (bus_create_file(&my_bus_type, &bus_attr_version))
                printk(KERN_NOTICE "Fail to create version attribute!\n");
        
        /*注册总线设备*/
        ret = device_register(&my_bus);
        if (ret)
                printk(KERN_NOTICE "Fail to register device:my_bus!\n");
               
        return ret;
}

static void my_bus_exit(void)
{
        device_unregister(&my_bus);
        bus_unregister(&my_bus_type);
}

module_init(my_bus_init);
module_exit(my_bus_exit);


make后出错:

[root@localhost bus]# make
make -C /home/test2/linux-2.6.30.4 M=/home/test/bus modules ARCH=arm CROSS_COMPILE=arm-linux-
make[1]: Entering directory `/home/test2/linux-2.6.30.4'
  CC [M]  /home/test/bus/bus.o
/home/test/bus/bus.c: In function 'my_match':
/home/test/bus/bus.c:14: error: 'struct device' has no member named 'bus_id'
/home/test/bus/bus.c: At top level:
/home/test/bus/bus.c:23: error: unknown field 'bus_id' specified in initializer
/home/test/bus/bus.c:23: warning: initialization from incompatible pointer type
make[2]: *** [/home/test/bus/bus.o] 错误 1
make[1]: *** [_module_/home/test/bus] 错误 2
make[1]: Leaving directory `/home/test2/linux-2.6.30.4'
make: *** [all] 错误 2


个人困惑:
struct device my_bus 里面明明定义了bus_id,为什么在编译的时候还会出现没有这个成员的信息,导致不能编译成功?

论坛徽章:
0
2 [报告]
发表于 2011-10-07 12:26 |只看该作者
struce device {} 定义在include/linux/device.h里。

bus_id是以前的老的接口了,在你的30内核里已经没有了。

用.init_name代替吧

论坛徽章:
0
3 [报告]
发表于 2011-10-07 15:46 |只看该作者
回复 2# lengyuex


    多谢了,刚开始接触这块,一开始是有想到可能是内核版本过新了,用insight没找到struct deivce这个符号,不太会用,呵呵,谢了!

论坛徽章:
0
4 [报告]
发表于 2011-10-07 16:52 |只看该作者
回复  lengyuex


    多谢了,刚开始接触这块,一开始是有想到可能是内核版本过新了,用insight没找到 ...
vioder_wzb 发表于 2011-10-07 15:46



    刚开始玩别用太新的,看哪个书就用哪个书上讲的内核版本就行了。把自己实验module的机器内核也换成跟你实验一样的。

另外找这样的东西用insight不太好,你可以用vim 或emacs加cscope.
在内核source里make cscope,这样用内核自己的脚本生成tag文件。

论坛徽章:
0
5 [报告]
发表于 2011-10-08 01:15 |只看该作者
回复 4# lengyuex


    多谢指教!一直都是闭门造车,有问题难得能得到直接快速的指点,我还不知道用vim加那个什么工具(刚看的就忘了,呵呵)来查看呢,insight也是无意看见的,有人说好就下了一个下来捣鼓,还没搞清楚是怎么用法,内核难懂,这个东东也比较难搞啊,

论坛徽章:
0
6 [报告]
发表于 2011-10-08 16:37 |只看该作者
回复  lengyuex


    多谢指教!一直都是闭门造车,有问题难得能得到直接快速的指点,我还不知道用vim ...
vioder_wzb 发表于 2011-10-08 01:15



    ctags
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP