Linux设备模型分析之bus(基于3.10.1内核)
作者:刘昊昱
博客:http://blog.csdn.net/liuhaoyutz
内核版本:3.10.1
一、bus定义
Linux设备驱动模型中的bus,即可以是物理总线(如PCI、I2C总线)的抽象,也可以是出于设备驱动模型架构需要而定义的虚拟的“platform”总线。一个符合Linux设备驱动模型的device或device_driver必须挂靠在一个bus上,无论这个bus是物理的还是虚拟的。
Linux内核使用bus_type结构体来描述bus,该结构体定义在include/linux/device.h文件中,其内容如下:
838/** 839 * bus_add_attrs - Add default attributes for this bus. 840 * @bus: Bus that has just been registered. 841 */ 842 843static int bus_add_attrs(struct bus_type *bus) 844{ 845 int error = 0; 846 int i; 847 848 if (bus->bus_attrs) { 849 for (i = 0; attr_name(bus->bus_attrs[i]); i++) { 850 error = bus_create_file(bus, &bus->bus_attrs[i]); 851 if (error) 852 goto err; 853 } 854 } 855done: 856 return error; 857err: 858 while (--i >= 0) 859 bus_remove_file(bus, &bus->bus_attrs[i]); 860 goto done; 861}
如果指定了bus的默认属性,即bus->bus_attrs不为NULL,则创建对应的属性文件。
至此,bus_register函数我们就分析完了。