博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux设备驱动模型代码分析
阅读量:4070 次
发布时间:2019-05-25

本文共 3301 字,大约阅读时间需要 11 分钟。

struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)	struct i2c_client	*client;	client->adapter = adap;	client->dev.platform_data = info->platform_data;		client->dev.parent = &client->adapter->dev;	client->dev.bus = &i2c_bus_type;	client->dev.type = &i2c_client_type;		dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap), client->addr);	status = device_register(&client->dev);	=>int device_register(struct device *dev)		device_initialize(dev);		=>void device_initialize(struct device *dev)			dev->kobj.kset = devices_kset;			kobject_init(&dev->kobj, &device_ktype);				return device_add(dev);		=>int device_add(struct device *dev)			parent = get_device(dev->parent);			setup_parent(dev, parent);						error = kobject_add(&dev->kobj, dev->kobj.parent, NULL);						error = device_create_file(dev, &uevent_attr);						if (MAJOR(dev->devt))				error = device_create_file(dev, &devt_attr);								error = device_create_sys_dev_entry(dev);				=>int device_create_sys_dev_entry(struct device *dev)					struct kobject *kobj = device_to_dev_kobj(dev);					if (kobj) 						format_dev_t(devt_str, dev->devt);						error = sysfs_create_link(kobj, &dev->kobj, devt_str);									error = device_add_class_symlinks(dev);			=>int device_add_class_symlinks(struct device *dev)				error = sysfs_create_link(&dev->kobj, &dev->class->p->class_subsys.kobj, "subsystem");				//举例,实设备下定义subsystem反指虚设备					/sys/devices/e f000 0000.soc/f f011 9100.i2c/i2c-3/3-0055/rtc/rtc0 ]# ls -l					subsystem->../../../../../../../class/rtc									error = sysfs_create_link(&dev->class->p->class_subsys.kobj, &dev->kobj, dev_name(dev));							error = sysfs_create_link(&dev->kobj, &dev->parent->kobj, "device");				//举例,					/sys/class/rtc ]# ls -l					rtc0->../../devices/e f000 0000.soc/f f011 9100.i2c/i2c-3/3-0055/rtc/rtc0					device->../../../3-0055							error = device_add_attrs(dev);						error = bus_add_device(dev);			=>int bus_add_device(struct device *dev)				struct bus_type *bus = bus_get(dev->bus);				if (bus)					error = device_add_attrs(bus, dev);										error = sysfs_create_link(&bus->p->devices_kset->kobj, &dev->kobj, dev_name(dev));					//举例,bus是虚设备,所以链接指向实际设备						/sys/bus/i2c/devices ]# ls -l						3-0055->../../../devices/e f000 0000.soc/f f011 9100.i2c/i2c-3/3-0055															error = sysfs_create_link(&dev->kobj, &dev->bus->p->subsys.kobj, "subsystem");					//举例,实设备下定义subsystem反指虚设备						/sys/devices/e f000 0000.soc/f f011 9100.i2c/i2c-3/3-0055 ]# ls -l						subsystem->../../../../../bus/i2c										klist_add_tail(&dev->p->knode_bus, &bus->p->klist_devices);									if (dev->bus)					blocking_notifier_call_chain(&dev->bus->p->bus_notifier, BUS_NOTIFY_ADD_DEVICE, dev);									kobject_uevent(&dev->kobj, KOBJ_ADD);								bus_probe_device(dev);								if (parent)					klist_add_tail(&dev->p->knode_parent, &parent->p->klist_children);									if (dev->class)					klist_add_tail(&dev->knode_class, &dev->class->p->class_devices);										list_for_each_entry(class_intf, &dev->class->p->class_interfaces, node)										if (class_intf->add_dev)						class_intf->add_dev(dev, class_intf);

参考文章

五、2sysfs API总结   博客好好学习一下
https://blog.csdn.net/qq_20678703/article/details/52670871

六 设备驱动模型-总线

https://blog.csdn.net/qq_20678703/article/details/52688958

你可能感兴趣的文章
Java8 HashMap集合解析
查看>>
自定义 select 下拉框 多选插件
查看>>
gdb 调试core dump
查看>>
gdb debug tips
查看>>
linux和windows内存布局验证
查看>>
本地服务方式搭建etcd集群
查看>>
安装k8s Master高可用集群
查看>>
忽略图片透明区域的事件(Flex)
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
Java.nio
查看>>
PHP那点小事--三元运算符
查看>>
fastcgi_param 详解
查看>>
Linux中的进程
查看>>