日期:2014-05-16 浏览次数:20930 次
#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