首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uart_register_driver与platform_driver_register的差异?

uart_register_driver与platform_driver_register的差异?
EN

Stack Overflow用户
提问于 2016-02-05 09:49:43
回答 1查看 1.6K关注 0票数 4

我正在研究内核代码中的UART驱动程序,我想知道,谁首先进入图片,device_register()还是driver_register()调用?

对于它们之间的差异,请遵循

在UART探测中,我们调用

代码语言:javascript
复制
uart_register_driver(struct uart_driver *drv)

在成功注册后,

代码语言:javascript
复制
uart_add_one_port(struct uart_driver *drv, struct uart_port *uport)

请详细解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-05 14:08:41

这实际上是两个问题,但我会尽量解决这两个问题。

谁首先出现在图片中,device_register()还是driver_register()调用?

正如它在文档/驱动程序-模型/binding.txt中指出的那样,您调用device_register()driver_register()的特定顺序并不重要。

  • device_register()将设备添加到设备列表中,并在驱动程序列表上进行迭代以找到匹配项。
  • driver_register()将驱动程序添加到驱动程序列表中,并在设备列表上进行迭代以找到匹配项。

一旦找到匹配,就会绑定匹配的设备和驱动程序,并在驱动程序代码中调用相应的探测函数。

如果您仍然好奇哪一个是第一个(因为这并不重要) --通常是device_register(),因为设备通常是在从core_initcallarch_initcall的内部调用中注册的,而驱动程序通常是在device_initcall上注册的,后者随后执行。

另请参阅:

1

2

3.

uart_register_driverplatform_driver_register的差异?

正如您注意到的,一个设备有两个驱动程序(平台驱动程序和UART驱动程序)。但是,不要让这使您感到困惑:这只是在一个(实际上)驱动程序中使用的两个驱动程序API。解释很简单: UART驱动程序API只是缺少我们需要的一些功能,这个功能是在平台驱动程序API中实现的。以下是普通tty驱动程序中每个API的责任:

  • 平台驱动程序API用于三件事:
    1. 将设备(在设备树文件中描述)与驱动程序相匹配;这样,将通过平台驱动程序框架为我们执行探测功能。
    2. 获取设备信息(从设备树读取)
    3. 处理电源管理(PM)操作(暂停/恢复)

  • UART驱动程序API:处理实际UART功能:读、写等。

让我们使用drivers/tty/serial/omap-serial.c作为驱动程序引用,arch/arm/boot/dts/omap5.dtsi用于设备引用。例如,我们在设备树中描述了下一个设备:

代码语言:javascript
复制
uart1: serial@4806a000 {
    compatible = "ti,omap4-uart";
    reg = <0x4806a000 0x100>;
    interrupts = <GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH>;
    ti,hwmods = "uart1";
    clock-frequency = <48000000>;
};

它将通过omap-serial.c字符串与"ti,omap4-uart"中的平台驱动程序匹配(您可以在驱动程序代码中找到它)。然后,使用该平台驱动程序,我们可以从上面的设备树节点读取属性,并将它们用于一些平台内容(设置时钟、处理UART中断等)。

但是为了将我们的设备公开为标准的TTY设备,我们需要使用UART框架(所有这些uart_*函数)。因此,有两个不同的API:平台驱动程序和UART驱动程序。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35220964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档