1. hello module Makefile的编写
# Makefile2.6
obj-m += hellomod.o # 产生hellomod 模块的目标文件
hellomod-objs := add.o xxx.o #依赖的文件
CURRENT_PATH := $(shell pwd) #模块所在的当前路径
LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL) #Linux内核源代码的绝对路径
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules #编译模块了
#make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules #也是可以通过的
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean #清理
# tab before make 在每个命令前(例如make命令前)要键入一个制表符(按TAB键产生)
2. 安装与卸载
加载insmod(insmod hello.ko)
卸载rmmod(rmmod hello)
查看lsmod
自动加载依赖模块modprobe(modprobe hello)
3. 模块参数
module_param(name, type, perm)
type
bool
int
charp
perm
S_IRUGO :任何用户都对/sys/module中出现的该参数具有读权限
S_IWUSR :允许root用户修改/sys/module中出现的参数
例子:
int age = 3;
char *name;
module_param(age, int, S_IRUGO);
module_param(name, charp, S_IRUGO);
使用:
insmod hello.ko age=3
4. 内核模块的相互调用
模块1
...
int add_intergar(int a, int b)
{
return a + b;
}
EXPORT_SYMBOL(add_intergar);
...
模块2
...
extern int add_intergar(int a, int b);
static int __init hello_init()
{
int value = add_intergar(1, 2);
}
5. 所有kernel信息打印
/var/log/messages
6. 控制台优先级配置
6 4 1 7
分别对应
Console_loglevel
Default_message_loglevel
Minimum_console_level
Default_console_loglevel
# Makefile2.6
obj-m += hellomod.o # 产生hellomod 模块的目标文件
hellomod-objs := add.o xxx.o #依赖的文件
CURRENT_PATH := $(shell pwd) #模块所在的当前路径
LINUX_KERNEL := $(shell uname -r) #Linux内核源代码的当前版本
LINUX_KERNEL_PATH := /usr/src/linux-headers-$(LINUX_KERNEL) #Linux内核源代码的绝对路径
all:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) modules #编译模块了
#make -C $(LINUX_KERNEL_PATH) M=$(PWD) modules #也是可以通过的
clean:
make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean #清理
# tab before make 在每个命令前(例如make命令前)要键入一个制表符(按TAB键产生)
2. 安装与卸载
加载insmod(insmod hello.ko)
卸载rmmod(rmmod hello)
查看lsmod
自动加载依赖模块modprobe(modprobe hello)
3. 模块参数
module_param(name, type, perm)
type
bool
int
charp
perm
S_IRUGO :任何用户都对/sys/module中出现的该参数具有读权限
S_IWUSR :允许root用户修改/sys/module中出现的参数
例子:
int age = 3;
char *name;
module_param(age, int, S_IRUGO);
module_param(name, charp, S_IRUGO);
使用:
insmod hello.ko age=3
4. 内核模块的相互调用
模块1
...
int add_intergar(int a, int b)
{
return a + b;
}
EXPORT_SYMBOL(add_intergar);
...
模块2
...
extern int add_intergar(int a, int b);
static int __init hello_init()
{
int value = add_intergar(1, 2);
}
5. 所有kernel信息打印
/var/log/messages
6. 控制台优先级配置
6 4 1 7
分别对应
Console_loglevel
Default_message_loglevel
Minimum_console_level
Default_console_loglevel