linux bus_register代码流程
时间: 2024-02-22 16:55:45 浏览: 21
下面是 Linux 内核中 "bus_register" 函数的代码流程:
```c
int bus_register(struct bus_type *bus)
{
int ret;
if (!bus || !bus->name)
return -EINVAL;
/* Add the bus to the list */
ret = bus_add(bus);
if (ret)
return ret;
/* Register any drivers that have already been added */
driver_register(bus, bus->p);
return 0;
}
```
首先,函数会检查传入的参数是否有效,包括 "bus" 指针和 "bus->name" 字段是否为空。如果参数无效,则会返回 -EINVAL。
接着,函数会调用 "bus_add" 函数将设备总线添加到内核的设备总线列表中。该函数会检查是否有相同名称的总线已经存在于列表中,如果没有则会添加到列表中。
然后,函数会调用 "driver_register" 函数将设备驱动程序注册到总线上。该函数会将驱动程序添加到总线的驱动程序列表中,并在总线上查找与驱动程序名称匹配的设备。如果找到了匹配的设备,则会调用驱动程序的 "probe" 函数进行设备初始化,否则驱动程序将不会被加载。
最后,函数会返回 0 表示注册成功,或者返回其他错误代码表示注册失败。
总之,"bus_register" 函数是 Linux 内核中用于注册设备总线的重要函数,它通过调用 "bus_add" 和 "driver_register" 函数来实现设备总线和设备驱动程序的注册。