kobject, device_create 和我的代码有什么区别?
What is the difference between kobject, device_create and my code?
我正在阅读一本名为 "Linux device drivers" from O'Reilly 的书。
事实上,这本书并不是真正的 如何 编写驱动程序的指南,而是解释了所有 api 及其原理。
所以我试着用我目前读到的内容编写一个小驱动程序——它没有做任何有趣的事情。
事情是:
我不知道我可以在哪个文件上执行 cat
或 echo
以调用我的回调函数
它看起来与我在网上找到的所有其他代码片段完全不同
不同的代码片段:
我的代码 (https://paste.ubuntu.com/p/8tVyTJTPBQ/)
创建:
$ls /sys/module/main/
oresize holders initsize initstate notes refcnt sections srcversion taint uevent
no new entry in /dev
使用 device_create 的代码片段:https://paste.ubuntu.com/p/cJxjdyXjhX/ source
创建:
$ ls /sys/module/main/
coresize holders initsize initstate notes refcnt sections srcversion taint uevent
$ ls -l /dev/ebbchar
crw------- 1 root root 238, 0 Mai 28 07:52 /dev/ebbchar
使用 kobject 的代码:https://paste.ubuntu.com/p/nt3XvZs7vF/ source
创建:
$ls -l /sys/kernel/
drwxr-xr-x 2 root root 0 Dec 17 16:29 etx_sysfs
我可以看到我的代码成功地在 /sys/kernel 下创建了一堆文件。现在我的代码和其他两个代码片段之间的最终目标有什么区别?我应该使用 device_create/kobjects 还是其中的 none?我正在阅读的书在任何地方都没有提到其他 2 段代码使用的函数。所以不确定我应该遵循哪种方式...
Thanks_xe
device_create()
创建设备并将其注册到 sysfs,并创建必要的 kobjects。
为了创建必要的 kobject,在 device_create()
.
中调用了与 kobject 相关的函数(kobject_init()
、kobject_add()
、...)
如果您需要创建一个设备,您应该调用一个设备创建函数,如device_create()
。
回答您关于如何跟上最新 api 的问题- 大多数 api 如果重命名或更新保留相似的名称并且大部分驻留在同一个 header 文件中所以快速 grep在源代码上或更简单的是 http://elixir.bootlin.com/ 并在源文档中搜索您正在使用的 Linux 版本中的特定功能。如果您在该版本中找不到 API,则通过 header 找到新的 API,因为名称几乎相同,例如当您阅读定时器章节时,您会发现setup_timer()已经变成了timer_setup()。以及其他一些变化。
如果您觉得可以通过订阅内核邮件列表或阅读文档来跟上最新的讨论。
我正在阅读一本名为 "Linux device drivers" from O'Reilly 的书。
事实上,这本书并不是真正的 如何 编写驱动程序的指南,而是解释了所有 api 及其原理。 所以我试着用我目前读到的内容编写一个小驱动程序——它没有做任何有趣的事情。 事情是:
我不知道我可以在哪个文件上执行
cat
或echo
以调用我的回调函数它看起来与我在网上找到的所有其他代码片段完全不同
不同的代码片段:
我的代码 (https://paste.ubuntu.com/p/8tVyTJTPBQ/) 创建:
$ls /sys/module/main/
oresize holders initsize initstate notes refcnt sections srcversion taint uevent
no new entry in /dev
使用 device_create 的代码片段:https://paste.ubuntu.com/p/cJxjdyXjhX/ source 创建:
$ ls /sys/module/main/
coresize holders initsize initstate notes refcnt sections srcversion taint uevent
$ ls -l /dev/ebbchar
crw------- 1 root root 238, 0 Mai 28 07:52 /dev/ebbchar
使用 kobject 的代码:https://paste.ubuntu.com/p/nt3XvZs7vF/ source 创建:
$ls -l /sys/kernel/
drwxr-xr-x 2 root root 0 Dec 17 16:29 etx_sysfs
我可以看到我的代码成功地在 /sys/kernel 下创建了一堆文件。现在我的代码和其他两个代码片段之间的最终目标有什么区别?我应该使用 device_create/kobjects 还是其中的 none?我正在阅读的书在任何地方都没有提到其他 2 段代码使用的函数。所以不确定我应该遵循哪种方式...
Thanks_xe
device_create()
创建设备并将其注册到 sysfs,并创建必要的 kobjects。
为了创建必要的 kobject,在 device_create()
.
kobject_init()
、kobject_add()
、...)
如果您需要创建一个设备,您应该调用一个设备创建函数,如device_create()
。
回答您关于如何跟上最新 api 的问题- 大多数 api 如果重命名或更新保留相似的名称并且大部分驻留在同一个 header 文件中所以快速 grep在源代码上或更简单的是 http://elixir.bootlin.com/ 并在源文档中搜索您正在使用的 Linux 版本中的特定功能。如果您在该版本中找不到 API,则通过 header 找到新的 API,因为名称几乎相同,例如当您阅读定时器章节时,您会发现setup_timer()已经变成了timer_setup()。以及其他一些变化。 如果您觉得可以通过订阅内核邮件列表或阅读文档来跟上最新的讨论。