01: 一个简单的示例(2)

$ tree /sys/bus/ycbus/    /sys/bus/ycbus/    ├── devices    ├── drivers    ├── drivers_autoprobe    ├── drivers_probe    └── uevent    2 directories, 3 files  

如果tree命令不存在,安装tree即可:

$ sudo apt-get install tree  

在/proc/kallsyms下也可看到ycbus驱动的符号:

$ cat /proc/kallsyms | grep ycbus    ffffffffa0b82000 t ycbus_driver_exit    [ycbus]    ffffffffa0b82100 d __this_module        [ycbus]    ffffffffa0b82000 t cleanup_module       [ycbus]    ffffffffa0b82080 d ycbus_type   [ycbus]  

没有看到ycbus_driver_init,是因为在这个函数前加了__init,在驱动加载完毕后,内核会扔掉这部分代码以节省空间。尝试去掉ycbus_driver_init前面的__init,再次查看,会发现这个函数也在符号表中出现了:

$ cat /proc/kallsyms | grep ycbus    ffffffffa0057028 t ycbus_driver_exit    [ycbus]    ffffffffa0057000 t ycbus_driver_init    [ycbus]    ffffffffa0057140 d __this_module        [ycbus]    ffffffffa0057028 t cleanup_module       [ycbus]    ffffffffa0057000 t init_module  [ycbus]    ffffffffa00570c0 d ycbus_type   [ycbus]  

符号表的第一列是符号所在内存地址,我使用的是64位机,如果在32位机上测试,则这些地址是32位的。第二列是符号属性,其中d表示符号数据段,t表示符号在文本段(text,又称代码段),想要知道符号属性等的详细信息,执行命令 man nm。第三列是符号名称。第四列是符号所在模块。

在目录/sys/module/ycbus下,以及文件 /proc/modules内部,都可以查找到ycbus的相关信息。执行lsmod | grep ycbus也可以得到一些信息:

$ lsmod | grep ycbus    ycbus                   1193  0  

其中第一列是模块名称,第二列是模块占用内存大小,第三列是引用计数。针对ycbus,其名称是ycbus,占用内存为1193字节,引用计数为0(没有人用它)。

事实上,对于上述的ycbus总线驱动,除了在上述文件/文件夹,或者命令可以看到部分相关信息以外,这个驱动什么都做不了。事实上,除了通过驱动核心注册代码,我们没有编写任何其他代码。

理解本节所描述的内容,对于实现一个实用的总线驱动是有帮助的。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwxdjz.html