我目前正在阅读一本名为"Linux device drivers" from O'Reilly的书。
事情是,本书imo并不是如何编写驱动程序的指南,而是解释了所有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
使用kobjects的代码: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还是其中之一?我正在阅读的书中没有提到其他2个代码所使用的函数。所以不确定我应该遵循哪种方式...
Thanks_xe
答案 0 :(得分:1)
回答你关于如何跟上最新api的问题 - 如果重命名或更新,大多数api会保留相似的名称,并且主要驻留在同一个头文件中,因此快速查看源代码或更简单的http://elixir.bootlin.com/并搜索您正在使用的Linux发行版中的特定函数的源文档。如果您无法在该版本中找到API,那么请通过标题查找新API,因为名称几乎相同,例如当您阅读Timer章节时,您会发现setup_timer()已更改为timer_setup( )。在这里和那里几乎没有其他变化。 如果您希望通过订阅内核maillist或阅读文档来跟上最新的讨论。
答案 1 :(得分:0)
device_create()
创建一个设备并将其注册到sysfs,并创建必要的kobjects。
要创建必要的kobjects,在kobject_init()
中调用与kobject相关的函数(kobject_add()
,device_create()
,...)。
如果您需要创建设备,则应调用其中一个设备创建功能,例如device_create()
。