Linux内核模块-实例2(二)

时间:2021-06-06 22:23:51
2.2 Hello World (P2) :许可权限和模块的声明环境:Linux内核 2.6 
1. 内核模块实例(book.c)
/*
* book.c - Demonstrates module documentation.
*/

# include <linux/module.h> /* Need by all modules */
# include <linux/kernel.h> /* Need for HERN_INFO */
# include <linux/init.h> /* Need for the macros */

# define DRIVER_AUTHOR "Star <s@dirac.org>"
# define DRIVER_DESC "A sample driver"

static char* bookName = "Good Book.";
static int bookNumber = 100;

static int __init book_init(void)
{
printk(KERN_INFO "Book name is %s\n", bookName);
printk(KERN_INFO "Book number is %d\n", bookNumber);

return 0;
}

static void __exit book_exit(void)
{
printk(KERN_INFO "Book module exit.\n");
}

module_init(book_init);
module_exit(book_exit);

module_param(bookName, charp, S_IRUGO);
module_param(bookNumber, int, S_IRUGO);

/*
You can use strings, like this:
*/
/*
Get rid of taint message by declaring code as GPL.
*/

MODULE_LICENSE("GPL");

/*
Or with defines, like this:
*/
MODULE_AUTHOR(DRIVER_AUTHOR); /* Who wrote this module? */
MODULE_DESCRIPTION(DRIVER_DESC); /* What does this module do */

2.代码解析
  • MODULE_LICENSE("GPL"); 
此处可有可无,可以不加,系统默认(但会报警)。模块声明描述内核模块的许可权限,如果不声明LICENSE,模块被加载时,将收到内核的警告。在 Linux2.6 内核中,可接受的 LICENSE 包括" GPL","GPL v2","GPL and additional rights","Dual BSD/GPL","Dual MPL/GPL","Proprietary" 
  • MODULE_AUTHOR(DRIVER_AUTHOR);MODULE_DESCRIPTION(DRIVER_DESC);
模块的声明与描述可加可不加。

3.Makefile文件的写法

Makefile 文件由五部分组成:显示规则 含规则 变量定义 makefile 指示符和注释

一条 Make 的规则原型为:

目标 ... :依赖 ..

命令
代码:参照2.1
相关链接:内核模块编程入门:http://www.tldp.org/LDP/lkmpg/2.6/html/index.html

相关文章