博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 内核模块的helloWorld
阅读量:5101 次
发布时间:2019-06-13

本文共 2881 字,大约阅读时间需要 9 分钟。

我的linux版本是Fedora14。

要进行下面步骤之前请保证你的系统安装了内核的devel包和header包,

命令是:

yum install kernel-headers-$(uname -r)

yum install kernel-devel-$(uname -r)

 

helloWorldLKM.c代码:

#include <linux/init.h>

#include <linux/module.h>

MODULE_LICENSE("GPL");

static int hello_init(void)

{
    printk(KERN_ALERT "Hello, world\n");
    return 0;
}

static void hello_exit(void)

{
    printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);

module_exit(hello_exit);

 

完了之后在此目录下建立Makefile文件,内容如下:

obj-m := helloWorldLKM.o

KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:

    $(MAKE) -C $(KDIR) M=$(PWD) modules

 

如果你不写Makefile的话,以下命令有参考价值:

#make –C /lib/modules/’uname –r’/build M=’pwd’ modules

#make –C /lib/modules/’uname –r’/build M=’pwd’ clean

#make –C /lib/modules/’uname –r’/build M=’pwd’ modules_install

分别是编译,清除一些中间生成文件,加载模块。

执行make,输出如下:

make -C /lib/modules/2.6.35.13-91.fc14.i686/build M=/home/xiemingming modules

make[1]: Entering directory `/usr/src/kernels/2.6.35.13-91.fc14.i686'
  CC [M]  /home/xiemingming/helloWorldLKM.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /home/xiemingming/helloWorldLKM.mod.o
  LD [M]  /home/xiemingming/helloWorldLKM.ko
make[1]: Leaving directory `/usr/src/kernels/2.6.35.13-91.fc14.i686'

生成了下列文件:

[root@MyFedora excalibur]# ls hello*

helloWorldLKM.c  helloWorldLKM.ko  helloWorldLKM.mod.c  helloWorldLKM.mod.o  helloWorldLKM.o

 

查看可加载模块信息

[root@MyFedora excalibur]# modinfo helloWorldLKM.ko

filename:       helloWorldLKM.ko
license:        GPL
srcversion:     471D708B0804FE26B554DB1
depends:       
vermagic:       2.6.35.13-91.fc14.i686 SMP mod_unload 686

 

加载内核模块

[root@MyFedora excalibur]# sudo insmod helloWorldLKM.ko

 

查看当前内核加载模块

[root@MyFedora excalibur]# lsmod|grep hello

helloWorldLKM            664  0

 

移除加载的内核模块

[root@MyFedora excalibur]# rmmod helloWorldLKM

查看日志信息

[root@MyFedora excalibur]# tail -f /var/log/messages
May 12 22:39:20 MyFedora abrtd: Directory 'ccpp-1305211160-2402' creation detected
May 12 22:39:20 MyFedora abrtd: Crash is in database already (dup of /var/spool/abrt/ccpp-1304198487-2047)
May 12 22:39:20 MyFedora abrtd: Deleting crash ccpp-1305211160-2402 (dup of ccpp-1304198487-2047), sending dbus signal
May 12 22:40:11 MyFedora pulseaudio[1724]: ratelimit.c: 197 events suppressed
May 12 22:42:13 MyFedora pulseaudio[1724]: ratelimit.c: 196 events suppressed
May 12 22:45:41 MyFedora pulseaudio[1724]: ratelimit.c: 196 events suppressed
May 12 22:45:47 MyFedora kernel: [  942.291550] Hello, world
May 12 22:46:12 MyFedora pulseaudio[1724]: ratelimit.c: 172 events suppressed
May 12 22:46:17 MyFedora pulseaudio[1724]: ratelimit.c: 196 events suppressed
May 12 22:46:18 MyFedora kernel: [  973.214438] Goodbye, cruel world
May 12 22:46:43 MyFedora pulseaudio[1724]: ratelimit.c: 196 events suppressed
^Z
[3]+  Stopped                 tail -f /var/log/messages

参考:

以及最重要的linux源码目录下的linux/Documentation/kbuild/modules.txt

转载于:https://www.cnblogs.com/sola/archive/2011/05/12/2044991.html

你可能感兴趣的文章
python之路_kindEditor编辑器及beautifulsoup模块
查看>>
(zz)最大子序列和问题
查看>>
C# Windows Api的一些方法 封装 以及 常用参数
查看>>
Spark RDD概念学习系列之Pair RDD的分区控制
查看>>
Hadoop工作流--JobControl(五)
查看>>
golang range循环内部
查看>>
JavaScript Array对象
查看>>
CocoaPods升级安装三方库报错
查看>>
idea server
查看>>
Linux系统日志及screen工具
查看>>
2014-12-02-2107-Java-UML
查看>>
20130909
查看>>
SQL语言:DQL,DML,DDL,DCL
查看>>
PB与各种数据库连接
查看>>
1003 阶乘后面0的数量
查看>>
HashMap,LinkedHashMap和Hashtable类的深入剖析与理解
查看>>
智能家居中的物联网网关的可信计算平台模块(TPM)设计
查看>>
CUDA Fortran for Scientists and Engineers第二版翻译
查看>>
[转]多列索引
查看>>
mbstring未安装
查看>>