华工学生邮箱:内核模块HelloKernel编程实例详解
来源:百度文库 编辑:中财网 时间:2024/05/09 11:49:20
在看“<> 第18章 设备驱动轨范”时,发现第621页的内核模块尝试无法经由过程。
怎么回事?
后来才发现,这本Linux轨范设计入门经典所用的内核是2.4版本。
而2.6版本内核模块编程部门发生了斗劲年夜的转变。
具体转变可以查看/usr/src/linux/Documentation/kbuild下的几篇文章。
琅缦沔具体说了然2.6内核kbuild和makefile的名目。
下面就介绍这个内核模块尝试hello kernel若何正确运行,但愿国内早点翻译<>
我所使用的系统为Debian5,内核版本为2.6.26-2-686。
首先安装kernel headers,以供给相关文件编译内核模块
$ sudo apt-get install linux-headers-`uname -r`
hello.c内容如下
$ cat hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("Hello, kernel!n");
return 0;
}
static void hello_exit(void)
{
printk("Good-bye, kernel!n");
}
module_init(hello_init);
module_exit(hello_exit);
$
2.6内核核核採用module_init()和module_exit()庖代static __init int init_module(void)和static __exit void cleanup_module(void)函数。
Makefile内容如下
$ cat Makefile
obj-m += hello.o
KDIR:=/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules > make.log 2>&1
clean:
make -C $(KDIR) M=$(PWD) clean
$
其中obj-m为内核模块,obj-k则为编译到内核。
写好hello.c和Makefile,接着运行make呼吁,编译自己写的内核模块
$ ls
hello.c Makefile
$ make
make -C /lib/modules/2.6.26-2-686/build M=/home/c-aries/下载/module modules > make.log 2>&1
$ ls
hello.c hello.mod.c hello.o make.log Module.symvers
hello.ko hello.mod.o Makefile modules.order
插入hello模块
$ sudo insmod hello.ko
用dmesg呼吁查看内核缓冲区,并用tail查看最后一条信息
$ dmesg | tail -1
[24477.822683] Hello, kernel!
列出模块清单,查找hello模块
$ lsmod | grep hello
hello 1216 0
移除hello模块
$ sudo rmmod hello
用dmesg呼吁查看内核缓冲区,并用tail查看最后一条信息
$ dmesg | tail -1
[24530.986833] Good-bye, kernel!
$
成功了!
怎么回事?
后来才发现,这本Linux轨范设计入门经典所用的内核是2.4版本。
而2.6版本内核模块编程部门发生了斗劲年夜的转变。
具体转变可以查看/usr/src/linux/Documentation/kbuild下的几篇文章。
琅缦沔具体说了然2.6内核kbuild和makefile的名目。
下面就介绍这个内核模块尝试hello kernel若何正确运行,但愿国内早点翻译<
我所使用的系统为Debian5,内核版本为2.6.26-2-686。
首先安装kernel headers,以供给相关文件编译内核模块
$ sudo apt-get install linux-headers-`uname -r`
hello.c内容如下
$ cat hello.c
#include
#include
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk("Hello, kernel!n");
return 0;
}
static void hello_exit(void)
{
printk("Good-bye, kernel!n");
}
module_init(hello_init);
module_exit(hello_exit);
$
2.6内核核核採用module_init()和module_exit()庖代static __init int init_module(void)和static __exit void cleanup_module(void)函数。
Makefile内容如下
$ cat Makefile
obj-m += hello.o
KDIR:=/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
all:
make -C $(KDIR) M=$(PWD) modules > make.log 2>&1
clean:
make -C $(KDIR) M=$(PWD) clean
$
其中obj-m为内核模块,obj-k则为编译到内核。
写好hello.c和Makefile,接着运行make呼吁,编译自己写的内核模块
$ ls
hello.c Makefile
$ make
make -C /lib/modules/2.6.26-2-686/build M=/home/c-aries/下载/module modules > make.log 2>&1
$ ls
hello.c hello.mod.c hello.o make.log Module.symvers
hello.ko hello.mod.o Makefile modules.order
插入hello模块
$ sudo insmod hello.ko
用dmesg呼吁查看内核缓冲区,并用tail查看最后一条信息
$ dmesg | tail -1
[24477.822683] Hello, kernel!
列出模块清单,查找hello模块
$ lsmod | grep hello
hello 1216 0
移除hello模块
$ sudo rmmod hello
用dmesg呼吁查看内核缓冲区,并用tail查看最后一条信息
$ dmesg | tail -1
[24530.986833] Good-bye, kernel!
$
成功了!
Hello Kernel |o|
vb数据库编程实例
C++ Builder6编程实例
求 plc编程实例
c语言编程实例
FAGOR系统编程实例
数据库实例编程
VFP 编程实例!
求高人指点,我的内核模块
求高人指点,我的内核模块
fedora5下如何编写内核模块?
fedora5下如何编写内核模块?
翻译数控编程与实例
哪里有java编程实例?
asp编程,查找模块
为什么我的内核模块里有个没名字的东西呀?
有关access类模块编程
哪里可以找到VFP编程的实例?
哪里可以下载松下plc编程实例
Visual Basic 6.0编程实例大制作
数控编程实例2008奥运图标
那里有java编程实例下载?
VB与串行通信编程实例
CONFIG_MODVERSIONS在linux内核编程里应怎样理解
求有关W indows内核编程的相关资料