Linux驱动初体验—Module(hello.c)内核模块

hello.c


 

#include <linux/init.h>                                

#include <linux/module.h>     

                           

MODULE_LICENSE("Dual BSD/GPL");                                            

 

static int hello_init(void)                                

{                                

       printk("hello world/n”);                                                

       return 0;                                

}

                                

static void hello_exit(void)                                

{                                

       printk("<1>"  "hello module exit/n ");                            

}                                

module_init(hello_init);                                

module_exit(hello_exit);                                

                                                                

MODULE_AUTHOR("qianggoo");

MODULE_DESCRIPTION("A simple  hello Module ");

MODULE_VERSION("V1.0");


    这个最简单的内核模块只包含内核加载函数、卸载函数和对Dual BSD/GPL许可权限的声明以及一些描述信息。编译会产生hello.ko目标文件,通过insmod ./hello.ko命令可以加载它,通过rmmod hello命令可以卸载它,加载时输出hello world, 卸载时输出hello module exit,查看输出信息可通过dmesg命令。

内核模块中用于输出的函数式内核空间的printk()而非用户空间的printf(),printk()的用法和printf()相似,但前者可定义输出级别。Printk()可作为一种最基本的内核调试手段。

 

 

Makefile


 ifeq ($(KERNELRELEASE), )
KERNELDIR :=/usr/src/kernels/2.6.9-5.EL-i686
PWD   := $(shell pwd)
modules:
 $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
 rm -rf *.0 *~core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY:modules clean
else
 obj-m :=hello.o
endif


# make                          ;1————编译

# insmod  hello.ko         ;2———加载模块

# lsmod                         ;3———查看所加模块(hello) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值