linux内核模块的编译

来源:互联网 发布:淘宝什么时候延长收货 编辑:程序博客网 时间:2024/05/22 00:24

Makefile:

ifneq ($(KERNELRELEASE),)obj-m := alloc_mem.oelseKDIR := ../2-3-1/GQ2440/linux-2.6.32.2all: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 会首先找到这些模块, 把它们先加
载到内核。


0 0
原创粉丝点击