Linux Device Driver Development Cookbook
上QQ阅读APP看书,第一时间看更新

How it works...

If we look carefully at the preceding printing functions (pr_info() and similar functions), we notice that they also depend on the pr_fmt(fmt) parameter, which can be used to add other useful information into our message. For instance, the following definition alters all messages generated by pr_info() by adding the current module and calling function names:

#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__
Note that the pr_fmt() macro definition must appear at the start of the file, even before the includes, to have any effect.

If we add this line to our dummy-code.c, as shown in the following code block, the kernel messages will change as described:

/*
* Dummy code
*/

#define pr_fmt(fmt) "%s:%s: " fmt, KBUILD_MODNAME, __func__
#include <linux/module.h>

In fact, when the pr_info() function is executed the output message, telling us that the module has been inserted turns in the following form, where we can see the module name and the calling function name followed by the loading message:

dummy_code:dummy_code_init: dummy-code loaded

There is another set of printing functions but, before starting to talk about them, we need some information that is located in Chapter 3, Using the Device Tree, so, for the moment, we'll continue using these functions only.