Linux 内核模块hello world

本文介绍了一个简单的C语言模块化程序,包括模块初始化、函数导出和卸载过程,详细展示了如何使用模块参数、模块信息注释及内核模块安装与卸载流程。
hello.c:

#include <linux/module.h>
#include <linux/init.h>
#include <linux/moduleparam.h>


#define DRIVER_AUTHOR "LeslieChu"
#define DRIVER_DESC "test hello module"
#define VERSION "1.0.0"
#define ALIAS "HeiMod"
#define LICENSE "GPL"

/*导出模块变量*/
int abc = 3;
int i = 0;
module_param(abc,int,S_IRUGO);

/*定义模块信息,通过modinfo查看*/
MODULE_LICENSE(LICENSE);
MODULE_AUTHOR(DRIVER_AUTHOR );
MODULE_DESCRIPTION(DRIVER_DESC );
MODULE_VERSION(VERSION);
MODULE_ALIAS(ALIAS);

/*加载模块*/
static int __init first_init (void)
{
printk("the first mode insmod\n");
for(i=0;i<abc;i++)
printk("the i is : %d\n",i);
return 0;
}

/*导出模块函数符号*/
static void haha(void)
{
for(i=0;i<abc;i++)
printk("+++++i=%d\n",i);
}

/*卸载模块*/
static void __exit first_exit (void)
{
printk("the first mode rmmod\n");
}

/*注册模块*/
module_init(first_init);
module_exit(first_exit);
EXPORT_SYMBOL(haha);



Makefile:


KERNELDIR=/usr/src/linux-headers-3.2.0-30-generic
#/usr/src/linux-headers-$(uname -r)
PWD:=$(shell pwd)
obj-m:=hello.o
default:
make -C $(KERNELDIR) M=$(PWD) modules
clean:
rm -rf *.o .cmd *.ko *.mod.c .tmp_versions *.order *.sym*

安装 模块:insmod hello.ko
卸载模块: rmmod hello
查看模块安装卸载的log:tail /var/log/kernel.log -n 10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值