textbox

IT博客 联系 聚合 管理
  103 Posts :: 7 Stories :: 22 Comments :: 0 Trackbacks
1.在编译安装内核模块(驱动)之前先确认时候有安装kernel-devel

输入: ls -d lib/modules/$(uname -r)/build

如果有目录存在说明有安装,否则没安装

下载相应内核的kernel-devel ,版本可是使用命令 uname -r 查看

安装kernel-devel执行命令:

rpm -ivh kernel-devel-$(uname -r).rpm

安装完成 
以下是一个hello内核模块简单例子

hello.c
#include <linux/module.h>
#include 
<linux/kernel.h>
#include 
<linux/init.h>

static int hello_init(void)
{
    printk(
"hello world");
    
return 0;
}
static void hello_exit(void)
{
    printk(
"good byte");
}
module_init(hello_init);
module_exit(hello_exit);

Makefile 内容如下

obj-m:=hello.o

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

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

执行make编译命令
# 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 //安装


加入到slickedit ide 中
首先建立一个新GNU C/C++工程 取名 hello

在Source file 内加入 hello.c

在Other files 内加入 MakeFile

右键点工程选择 project Properties...

选择 Tools 那页
点 Build
在Command Line: 输入 :make -C /lib/modules/$(uname -r)/build M=$(pwd) modules

设置tag文件 tools -> Tag Files

点Add Tree 把 /usr/src/kernels/2.6.25.-14.fc9/include 加入 tag
这样在写驱动模块的时候就就会有丰富的提示信息了。可以加快输入速度和减少错误发生




然后点工程build 就可以完成编译了。

# insmod hello.ko 加载模块
# lsmod 显示已经加载的模块
# rmmod hello 卸载模块

由于优先级别的问题。在图形shell中是看不到模块的printk输出的,在text模式下是可以看到。
可以使用命令 dmesg 来查看输出信息 或者修改shell的优先级别
当日志级别小于console_loglevel时,消息才能显示出来。
可以通过以下命令查看和修改优先级别
cat /proc/sys/kernel/printk
6 4 1 7

第一个是控制台日志级别;第二个是默认的消息日志级别;第三个是最低的控制台日志级别;第四个是默认的控制台日志级别

修改级别。
# echo 8 > /proc/sys/kernel/printk
不知为什么我改完以后还是输出不了信息 ???(谁能告诉我这个是什么问题?)

goole 对于fedora 9 还有一种方法让printk输出console



执行
#gedit /etc/rsyslog.conf
// 不同的Linux发行版使用不同syslog程序来记录系统日志。
// 的Debain 4.0/Ubuntu8.04(桌面版)默认使用的是sysklogd,配置文件为/etc/syslog.conf
// Fedora9默认使用rsyslogd,配置文件为/etc/rsyslog.conf
// opensuse11使用syslog-ng,配置文件为/etc/syslog

#kern.*                                                 /dev/console
//把kern.*前的注视去掉。这样printk的信息就可以直接显示到终端了!
保存就好了






posted on 2009-10-13 09:52 零度 阅读(1416) 评论(0)  编辑 收藏 引用 所属分类: Linux
只有注册用户登录后才能发表评论。