Makefile:
ifneq ($(KERNELRELEASE),)
obj-m := alloc_mem.o
else
KDIR := ../2-3-1/GQ2440/linux-2.6.32.2
all:
make -C $(KDIR) M=$(PWD) modules ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers modul*
endif
注意内核要先编译了才行要不会出现错误!!
hello.c:
#include <linux/module.h>
#include <linux/init.h>
MODULE_LICENSE("GPL");
MODULE_AUTHOR("www.enjoylinux.cn");
MODULE_DESCRIPTION("Hello world module");
static int __init hello_init(void)
{
printk(KERN_ERR "hello world!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_EMERG "hello exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);
编译之后会生成
lxiang@lxiang-Aspire-5750G:~/workplace/arm_device_driver/nfs_root/rootfs/code_enjoy/2-1-2$ ls
hello.c hello.mod.c hello.o Makefile~ Module.symvers
hello.ko hello.mod.o Makefile modules.order
这些东西
以超级管理员加载内核模块
[root@FriendlyARM 2-1-2]# insmod hello.ko
hello world!
[root@FriendlyARM 2-1-2]# rmmod hello
hello exit!
rmmod: module 'hello' not found
注意模块的版本信息和所运行的系统是否匹配如果不匹配会出现"Invalid module format"错误
使用modinfo来查看是否和当前匹配
lxiang@lxiang-Aspire-5750G:~/workplace/arm_device_driver/nfs_root/rootfs/code_enjoy/2-1-2$ sudo modinfo hello.ko
filename: /home/lxiang/workplace/arm_device_driver/nfs_root/rootfs/code_enjoy/2-1-2/hello.ko
description: Hello world module
author: www.enjoylinux.cn
license: GPL
depends:
vermagic: 2.6.32.2-FriendlyARM mod_unload ARMv4
加载 modprobe (modprobe hello)
modprobe 如同 insmod, 也是加载一个模块到内
核。它的不同之处在于它会根据文件
/lib/modules/<$version>/modules.dep
来查看要加载的模块, 看它是否还依赖于其他模块,如
果是,modprobe 会首先找到这些模块, 把它们先加
载到内核。