IMX6LL|打造自己的驱动总线

xbus:打造自属的驱动总线

![2023-10-09T13:53:51.png][1]

驱动总线

软件与硬件代码分离,提高程序的复用性

  • device–关联硬件代码
  • driver_devices–关联软件代码
  • bus_type–统一管理、设置match匹配规则

设备驱动模型体现分离思想

  • bus-xbus-devices-drivers
总线管理
buses_init()函数

内核启动执行

/sys/bus

int __init buses_init(void)
{
	bus_kset = kset_create_and_add("bus", &bus_uevent_ops, NULL);
	if (!bus_kset)
		return -ENOMEM;

	system_kset = kset_create_and_add("system", NULL, &devices_kset->kobj);
	if (!system_kset)
		return -ENOMEM;

	return 0;
}
总线注册
bus_register()函数

添加新的总线类型

int bus_register(struct bus_type *bus)
  • 在/sys/bus下建立xbus目录项,并创建属性文件
  • 在/sys/bus/xbus下建立devices目录项,并创建属性文件
  • 在/sys/bus/xbus下建立drivers目录项,并创建属性文件
  • 初始化 priv->klist_devices链表头
  • 初始化priv->klist_drivers链表头
设备注册
device_register()函数

添加设备,关联硬件相关代码

int device_register(struct device *dev)
  • 在/sys/bus/xbus/devices下建立yyy目录项
  • 加入bus-> priv->devices_kset链表
  • 加入bus-> priv->klist_devices链表
  • 遍历bus-> priv->klist_drivers,执行bus->match()寻找合适的drv
  • dev关联driv,执行drv->probe()
驱动注册
driver_register()函数

添加驱动,关联软件相关代码

int driver_register(struct device_driver *drv)
  • 在/sys/bus/xbus/drivers下建立zzz目录项
  • 加入bus-> priv->drivers_kset链表
  • 加入bus-> priv->klist_drivers链表
  • 遍历bus-> priv->klist_klist_devices链表,执行bus->match()寻找合适的dev
  • dev关联dev,执行drv->probe()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

左手的月光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值