3.2 实验3-1:“helloworld”模块
在你的第一个内核模块中,每次加载或者卸载模块时你将向控制台简单地发送一些信息。hello_init()
和hello_exit()
函数包含了一个pr_info()
函数。pr_info()
函数的语法很像你在用户态应用程序中使用的printf,唯一的区别就在于:pr_info()
是用来在内核态打印日志消息。如果查看实际的内核代码,你经常会看到这样的代码:
KERN_ERR是定义在include/linux/kern_levels.h
文件中的八个不同日志级别之一,用于指定错误消息的严重性。位于include/linux/printk.h
中的以pr_开头的宏是相应的printk调用的快捷定义。在新开发的驱动中,应该使用这些宏。
在1.12.2节中,你使用Eclipse集成开发环境创建了my_modules
工程。这个工程将被用于开发本书中的所有驱动。如果你不想使用Eclipse,也可以使用你喜欢的文本编辑器来编写驱动。创建并保存在模块实验目录下的helloworld.c
和Makefile
文件还没有任何代码。是时候往里面写入代码了。
在后续的实验中,你会重复同样的步骤来创建驱动对应的源代码文件<module name>.c
。通过简单地把<module name>.o
加到Makefile
变量obj-m
中,所有的实验将复用同一个Makefile
。
在Build Targets
标签中,增加了all
、deploy
、clean
三个按钮来编译、清理和部署所有实验开发的模块。
在接下来的代码清单3-1中查看针对i.MX7D处理器的“helloworld”驱动程序源代码(helloworld_imx.c
)。
注意:针对SAMA5D2(helloworld_sam.c
)和BCM2837(helloworld_rpi.c
)的驱动程序源代码可以从本书的GitHub仓库下载。