The kernel.h should be discouraged for use.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
#include <linux/delay.h>
#include <linux/gpio.h>
#include <linux/interrupt.h>
-#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/printk.h>
/* Macro DECLARE_TASKLET_OLD exists for compatibiity.
* See https://lwn.net/Articles/830964/
#include <linux/completion.h>
#include <linux/err.h> /* for IS_ERR() */
#include <linux/init.h>
-#include <linux/kernel.h>
#include <linux/kthread.h>
#include <linux/module.h>
+#include <linux/printk.h>
static struct {
struct completion crank_comp;
*/
#include <linux/atomic.h>
#include <linux/bitops.h>
-#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/printk.h>
#define BYTE_TO_BINARY_PATTERN "%c%c%c%c%c%c%c%c"
#define BYTE_TO_BINARY(byte) \
/*
* example_mutex.c
*/
-#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/mutex.h>
+#include <linux/printk.h>
static DEFINE_MUTEX(mymutex);
/*
* example_rwlock.c
*/
-#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/printk.h>
#include <linux/rwlock.h>
static DEFINE_RWLOCK(myrwlock);
* example_spinlock.c
*/
#include <linux/init.h>
-#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/printk.h>
#include <linux/spinlock.h>
static DEFINE_SPINLOCK(sl_static);
*/
#include <linux/delay.h>
#include <linux/interrupt.h>
-#include <linux/kernel.h>
#include <linux/module.h>
+#include <linux/printk.h>
/* Macro DECLARE_TASKLET_OLD exists for compatibility.
* See https://lwn.net/Articles/830964/
/*
* hello-1.c - The simplest kernel module.
*/
-#include <linux/kernel.h> /* Needed for pr_info() */
#include <linux/module.h> /* Needed by all modules */
+#include <linux/printk.h> /* Needed for pr_info() */
int init_module(void)
{
* This is preferred over using init_module() and cleanup_module().
*/
#include <linux/init.h> /* Needed for the macros */
-#include <linux/kernel.h> /* Needed for pr_info() */
#include <linux/module.h> /* Needed by all modules */
+#include <linux/printk.h> /* Needed for pr_info() */
static int __init hello_2_init(void)
{
* hello-3.c - Illustrating the __init, __initdata and __exit macros.
*/
#include <linux/init.h> /* Needed for the macros */
-#include <linux/kernel.h> /* Needed for pr_info() */
#include <linux/module.h> /* Needed by all modules */
+#include <linux/printk.h> /* Needed for pr_info() */
static int hello3_data __initdata = 3;
* hello-4.c - Demonstrates module documentation.
*/
#include <linux/init.h> /* Needed for the macros */
-#include <linux/kernel.h> /* Needed for pr_info() */
#include <linux/module.h> /* Needed by all modules */
+#include <linux/printk.h> /* Needed for pr_info() */
MODULE_LICENSE("GPL");
MODULE_AUTHOR("LKMPG");
* hello-5.c - Demonstrates command line argument passing to a module.
*/
#include <linux/init.h>
-#include <linux/kernel.h>
+#include <linux/kernel.h> /* for ARRAY_SIZE() */
#include <linux/module.h>
#include <linux/moduleparam.h>
+#include <linux/printk.h>
#include <linux/stat.h>
MODULE_LICENSE("GPL");
#include <linux/gpio.h>
#include <linux/interrupt.h>
-#include <linux/kernel.h>
+#include <linux/kernel.h> /* for ARRAY_SIZE() */
#include <linux/module.h>
+#include <linux/printk.h>
static int button_irqs[] = { -1, -1 };
#include <linux/atomic.h>
#include <linux/fs.h>
-#include <linux/kernel.h> /* We're doing kernel work */
+#include <linux/kernel.h> /* for sprintf() */
#include <linux/module.h> /* Specifically, a module */
+#include <linux/printk.h>
#include <linux/proc_fs.h> /* Necessary because we use proc fs */
#include <linux/types.h>
#include <linux/uaccess.h> /* for get_user and put_user */
Lastly, every kernel module needs to include \verb|<linux/module.h>|.
% TODO: adjust the section anchor
-We needed to include \verb|<linux/kernel.h>| only for the macro expansion for the \cpp|pr_alert()| log level, which you'll learn about in Section \ref{sec:printk}.
+We needed to include \verb|<linux/printk.h>| only for the macro expansion for the \cpp|pr_alert()| log level, which you'll learn about in Section \ref{sec:printk}.
\begin{enumerate}
\item A point about coding style.