![嵌入式Linux设备驱动程序开发指南(原书第2版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/453/40381453/b_40381453.jpg)
上QQ阅读APP看书,第一时间看更新
3.9 实验3-3:“helloworld计时”模块
这个新的内核模块会在卸载时显示从驱动被加载以来经过的时间(以秒为单位)。
你将使用位于kernel/time/keeping.c
文件中的do_gettimeofday()
函数来实现该任务。该函数在被调用时会在timeval
数据结构中填充秒和微秒信息。timeval
数据结构定义如下:
![073-01](https://epubservercos.yuewen.com/D1DB85/20966230701867406/epubprivate/OEBPS/Images/073-01.jpg?sign=1738860248-e7HFLtLTMAHj3049yQRq6CSOhvKJFFUz-0-7ace26bb703df9092931e4da915c4c2a)
该驱动的主要代码段描述如下:
1. 包含定义了do_gettimeofday()
函数原型的头文件:
![073-02](https://epubservercos.yuewen.com/D1DB85/20966230701867406/epubprivate/OEBPS/Images/073-02.jpg?sign=1738860248-8q9dySwwih3QHeKo6EUgGFOhI7rbXNXM-0-1a5e8006aaf0098a985544c62caa8b13)
2. 在#include
语句之后,声明一个timeval
数据结构用于保存模块加载和卸载的时间。
![073-03](https://epubservercos.yuewen.com/D1DB85/20966230701867406/epubprivate/OEBPS/Images/073-03.jpg?sign=1738860248-iYuD6cZfNAlKqD8SqnnmYs28XY2skO0s-0-d75c947c4ac2bce00e8004aa675390a0)
3. 当模块被卸载时,计算时间差。
![073-04](https://epubservercos.yuewen.com/D1DB85/20966230701867406/epubprivate/OEBPS/Images/073-04.jpg?sign=1738860248-XqL2rlNcUneULl8TwUsRyBKjsNI2NmNn-0-e0ee032c5d9153b4a736b7cb9839d2f7)
在接下来的代码清单3-4中查看针对i.MX7D处理器的“helloworld计时”驱动源代码(helloworld_imx_with_timing.c
)。
注意:针对SAMA5D2(helloworld_sam_with_timing.c
)和BCM2837(helloworld_rpi_with_timing.c
)的驱动源代码可以从本书的GitHub仓库下载。