首页
新闻
UniX技术
数据库
经验交流
PHP
Linux考试认证
首页
>
Linux考试认证
内核模块编程HelloKernel
时间:2009-07-13 14:42:56 作者:
我要投稿
Linux初探欢迎您的投稿,投放方法请点击
这里
查看,我们会定期赠送精美小礼品给优秀的投稿作者。海纳百川 取则行远!LinuxGoo欢迎您的到来。
在看“<
> 第18章 设备驱动程序”时,发现第621页的内核模块实验无法通过。 怎么回事? 后来才发现,这本Linux程序设计入门经典所用的内核是2.4......
在看“<<Linux程序设计 第3版>> 第18章 设备驱动程序”时,发现第621页的内核模块实验无法通过。
怎么回事?
后来才发现,这本Linux程序设计入门经典所用的内核是2.4版本。
而2.6版本内核模块编程部分发生了比较大的变化。
具体变化可以查看/usr/src/linux/Documentation/kbuild下的几篇文章。
里面详细说明了2.6内核kbuild和makefile的格式。
下面就介绍这个内核模块实验hello kernel如何正确运行,希望国内早点翻译<<Linux程序设计 第4版>>
我所使用的系统为Debian5,内核版本为2.6.26-2-686。
首先安装kernel headers,以提供相关文件编译内核模块
$ sudo apt-get install linux-headers-`uname -r`
hello.c内容如下
$ cat hello.c
#include <linux/init.h>
#include <linux/module.h>
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
1
/
2
1
2
下一页
尾页
如果您需转载 内核模块编程HelloKernel,请注明来自LinuxGoo.com,其版权归原作者所有。请广大网友留言时遵纪守法,使用文明用语。如果您在应用中有什么问题,请在下面留言,我们会尽快解答。
来顶一下
返回首页
发表评论
共有
条评论
用户名:
密码:
验证码:
匿名发表
相关文章
ACCESS的真假:一、DROP删除表再重建比Delete
有时候当我们需要把表中记录全部删除的时候,在很多数据库系统中我们会习惯
用PHP和ACCESS写聊天室(十)
func.php3
代码如下:
<?php
function suiji($max)
{
srand((double)m
解决在CentOS上不能启动MySQL的问题
1. /etc/my.cnf的默认配置配置文件的内容如下:[mysqld]datadir=/var/lib/m
ISNULL() VS COALESCE()
ISNULL() VS COALESCE() http://code.msdn.microsoft.com/SQLExamples/Wi
如何利用PHP和CSS改变网页文字大小
用PHP和CSS改变网页文字大小——在设计网站的时候,要牢记一点:并不是所
Capture all statements for a SQL Server
Capture all statements for a SQL Server sessionWritten By: Edgewood
PHP
Linux系统下ssh安全设置指南
如果您仍然使用 telnet, 而不是 ssh, 则需要改变对本手册的阅读方式. 应
Ubuntu下virtualbox的桥接网络配置
一般而言,安装完VirtualBox设定网路时选择默认的NAT模式,Guest就可顺利联网
捕获SocketConnection组件连接异常的几个好
1、多层分布式结构中怎样动态的判断客户端与服务器是否断开?2、请问能捕
解决Linuxiptables防火墙和vsftpd的问题
最近在研究Linux下Firewall的配置,发现配置好防火墙以后ftp就有问题了,一直
PHP窜红:革命尚未成功 Java仍需努力
相对于Java由简入繁的演变趋势,PHP忠于简单易学原味的坚持受到广大开
PHP缓存详谈
大家会问什么是缓存!能干什么!其实缓存相当于内存。保存一段时间!缓存就是我
带有自定义函数的sql优化
author:skatetime:2009/05/14 一. 第一个sqlBuffer GetsExecutionsGets per
PHP学习时间完整表
本文旨在讨论如成为一名真正的PHP开发者.本文不把三个月学会PHP的人纳入
编程语言PHP在Web开发领域的优势在哪?
在多数WEB开发者眼中,ASP和JSP都被认为是领跑者,而PHP却被认为是个弱小
栏目热门
ubuntu下wine迅雷5的安装比较完善的方法
Linux认证考试心得:一个新手RHCE的酸甜苦辣
Linux认证心得:一个初学者的RHCE之路
利用tr命令轻松实现大小写转换
菜鸟必读:RHCE课堂学习笔记(1)
站内搜索:
Linux
高级搜索
Powered by
Linux初探
© 1999-2009
RSS