日期:2014-05-16 浏览次数:20730 次
#include <linux/device.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/string.h> MODULE_AUTHOR("Ying"); MODULE_LICENSE("Dual BSD/GPL"); static char *Version = "$Vying__1.0$" ; static int ying_match(struct device * dev , struct device_driver * drv){ return !strncmp(dev->init_name, drv->name, strlen(drv->name)); } static void my_bus_release(struct device *dev) { printk(KERN_DEBUG "my bus release\n"); } struct device ying_bus = { .init_name = "ying_bus0", .release = my_bus_release, }; struct bus_type my_bus_type = { .name = "ying_bus" , .match = ying_match , }; EXPORT_SYMBOL(ying_bus); EXPORT_SYMBOL(my_bus_type); 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; printk("%d---",ret); /*注册属性文件*/ if(bus_create_file(&my_bus_type , &bus_attr_version)) printk("fail to attribute\n"); /*注册总线设备*/ ret = device_register(&ying_bus); if (ret) printk(KERN_NOTICE "Fail to register device:my_bus!\n"); return ret; } static void my_bus_exit(void){ device_unregister(&ying_bus); bus_unregister(&my_bus_type); } module_init(my_bus_init); module_exit(my_bus_exit);
#include <linux/device.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/string.h> MODULE_AUTHOR("ying"); MODULE_LICENSE("Dual BSD/GPL"); extern struct device ying_bus; extern struct bus_type my_bus_type; static void my_dev_release (struct device *dev){ printk("ying_dev release!!~\n"); } struct device ying_dev = { .init_name = "ying_dev", .bus = &my_bus_type, .parent = &ying_bus, .release = my_dev_release, }; static ssize_t mydev_show(struct device *dev,struct device_attribute *attr, char *buf) { return sprintf(buf, "%s\n", "This is ying device!"); } static DEVICE_ATTR(dev, S_IRUGO, mydev_show, NULL); static int __init my_device_init(void){ int ret = 0; ret = device_register(&ying_dev); if(ret){ printk("fail to ying_dev\n"); return ret; } device_create_file(&ying_dev,&dev_attr_dev); return ret ; } static void my_device_exit(void){ void device_unregister(struct device* dev); } module_init(my_device_init); module_exit(my_device_exit);
#include <linux/device.h> #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/string.h> MODULE_AUTHOR("David Xie"); MODULE_LICENSE("Dual BSD/GPL"); extern struct bus_type my_bus_type; static int my_probe(struct device *dev) { printk("Driver found device which ying driver can handle!\n"); return 0; } static int my_remove(struct device *dev) { printk("Driver found device unpluged!\n"); return