【问题标题】:What is the difference between kobject, device_create and my code?kobject、device_create 和我的代码有什么区别?
【发布时间】:2018-05-28 21:47:24
【问题描述】:

我目前正在阅读一本名为"Linux device drivers" from O'Reilly的书。

事情是,这本书 imo 并不是真正的如何 编写驱动程序的指南,而是解释了所有的 API 及其原理。 所以我试着用我目前读到的东西写一个小驱动程序——它没有做任何有趣的事情。 事情是:

  • 我不知道我可以在哪个文件上执行 catecho 以调用我的回调函数

  • 它看起来和我在网上找到的所有其他代码 sn-ps 完全不同

不同的代码片段:

我可以看到我的代码在 /sys/kernel 下成功创建了一堆文件。现在我的代码和其他两个 sn-ps 之间的 endgoal 有什么区别?我应该使用 device_create/kobjects 还是不使用这些?我正在阅读的这本书没有提到其他两段代码使用的函数。所以不确定我应该遵循哪种方式......

谢谢_xe

【问题讨论】:

  • 是的,您应该为您的内核版本使用最新的可用 API。 LDDv3 对 udev 机制一无所知。
  • @0andriy 你怎么知道这不是最新的 API?您如何及时了解最新的 API?

标签: c linux linux-kernel linux-device-driver


【解决方案1】:

device_create() 创建一个设备并将其注册到 sysfs,并创建必要的 kobjects。

为了创建必要的 kobjects,在 device_create() 中调用 kobject 相关函数(kobject_init(), kobject_add(), ...)。

如果你需要创建一个设备,你应该调用一个设备创建函数,比如device_create()

【讨论】:

  • 您如何了解最新的 API?因为我正在阅读的这本书一次都没有提到 kobjects...
  • @traducerad 要查看最新的 API,请参考kernel.org/doc/html/latest。如果要查看特定版本内核的API,请参考kernel.org/doc/html
【解决方案2】:

回答您关于如何跟上最新 api 的问题 - 大多数 api 如果重命名或更新,则保留相似的名称并主要位于相同的头文件中,因此对源代码的快速 grep 或更简单的是 http://elixir.bootlin.com/ 并搜索源文档对于您正在处理的 Linux 版本中的特定功能。如果您在该版本中找不到 API,则通过标题查找新 API,因为名称几乎相同,例如,当您阅读 Timer 章节时,您会发现 setup_timer() 已更改为 timer_setup( )。以及其他一些变化。 如果您觉得可以通过订阅内核邮件列表或阅读文档来跟上最新的讨论。

【讨论】:

    猜你喜欢
    • 2015-05-30
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    相关资源
    最近更新 更多