打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
hello内核模块编译的全过程

内核版本:2.6.10

在/home/tmp/下建立两个文件hello.c,Makefile

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

MODULE_LICENSE("GPL");

static int hello_init(void)
{
printk(KERN_ALERT "hello module init\n");
return 0;
}

static void hello_exit(void)
{
printk(KERN_ALERT "hello module exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

--------------

Makefile
----------
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
else
KERNELDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)

default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
endif

clean:
rm -f *.ko *.mod.c *.mod.o *.o

-----------
编译模块

#make

清除

#make clean

-----------

为了能够在终端显示信息,要修改
/lib/modules/2.6.10/build/include/linux/kernel.h
文件的KERN_ALERT宏。
#define KERN_ALERT "<1>"
修改为
#define KERN_ALERT "<0>"

------------
安装模块

#insmod hello.ko

终端显示
hello module init

查看已安装的模块
#lsmod

卸载模块

#rmmod hello

终端显示
hello module exit

-----------
有以下几点要注意:
1,hello.c文件中调用的头文件
init.h中的module_init(),module_exit()
kernel.h中的printk(),KERN_ALERT
module.h中的MODULE_LICENSE()

2,Makefile文件中的核心是
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
1),-C $(KERNELDIR)
表示在$(KERNELDIR)目录下执行make命令。
2),M=$(PWD)
表示包含$(PWD)下的Makefile文件。
3),modules
表示模块编译。

 
......
 
点击查看原文:http://www.hzlitai.com.cn/article/ARM9-article/system/1773.html
 
 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Linux驱动编程 step-by-step (一)
linux设备驱动开发环境搭建 (amoBBS 阿莫电子论坛)
hello world 驱动程序
2.6内核模块的编写框架和编译方法
小白学Linux之内核模块编程-tiger
linux 内核模块开发相关的文章搜集和模块开发过程中的小技巧
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服