一个简单的Linux内核模块实现

    参考了《Linux 设备驱动开发详解》 和 《Linux 驱动程序(第三版)》及网上资料。虽说简单,但对第一次操作整个过程却也出了不少的麻烦。下面按照我的思路来重现整个过程:

1.一个简单的Linux 内核模块 原始代码:hello.c

#include <linux/init.h>                                      //include head files

#include <linux/module.h>

MODULE_LICENSE("DUAL BSD/GPL");  //告诉内核模块的版权信息/许可权限

static int hello_init(void)                               //模块加载时执行

{

      printk(KERN_ALERT "Hello World enter the hello module/n");

      return 0;

}

static void hello_exit(void)                         //模块卸载时执行

{

     printk(KERN_ALERT "Hello World exit the hello module /n");

}

module_init(hello_init);           //模块注册

module_exit(hello_exit);

MODULE_AUTHOR("Yanhao"); //作者

MODULE_DESCRIPTION("A Simple Hello Module");    //模块描述

MODULE_ALIAS("simplest module");  //别名

Makefile:

obj-m:=hello.o

2.用准备好的交叉编译工具链来编译 生成.ko文件,然后用加载到开发板,执行。

   编译结果是有许多的符号找不到,如:KERN_ALERT.我加上了头文件也行不通。驱动三版上面说要构建相应的内核树,

才能找到相应的符号。于是第三步就有了:

3.构建内核树

何谓内核树?内核源码的一种逻辑形式。目前来看包含相应内核的头文件、宏、数据结构等等

找到相应版本的内核源码,我的为2.6.24

第一步配置:make menuconfig

第二步编译内核:make bzImage

第三步编译并安装模块:make modules /*编译模块*/ make modules_install  /*安装模块*/

如果没问题的话,在/lib/modules/ 下可以看到一个新的目录为 你的内核版本号为名字的目录 ,我的为2.6.24.

在编译时我们会用到这个目录下的 build 目录,至此,内核编译完成,内核树构建完成。

4.再次编译模块

在我们的模块源码目录下 :输入make -C /lib/modules/2.6.24(新增目录)/build M=`pwd`

如果没问题的话,会生成hello.ko。

5.实验

把hello.ko文件用tftp 传送到开发板上,执行insmod hello.ko 安装模块  终端会打印出"Hello World enter the hello module"

执行rmmod hello 卸载模块 终端打印"Hello World exit the hello module"

OK,小功告成。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值