(二) Hello World模块

1.hello world驱动程序

  linux内核对驱动处理有两种方式,第一种方式:把所有需要的功能全部编译到内核中,这种方式导致重新添加或者删除都需要重新编译内核。第二种方式:动态添加模块,也就是以模块的方式添加驱动,也是常用的一中对于很多编程语言,一般都是采用Hello World作为简单说明,下面就驱动程序的简单示例以Hello World进行完整的入门介绍:


/*包含初始化宏定义的头文件,代码中的module_init和module_exit在此文件中*/
#include <linux/init.h> 

/*包含初始化加载模块的头文件,代码中的MODULE_LICENSE在此头文件中*/
#include <linux/module.h>
/*声明是开源的,没有内核版本限制*/
MODULE_LICENSE("Dual BSD/GPL");
/*声明作者*/
MODULE_AUTHOR("flywang606");

static int hello_init(void){
    printk(KERN_EMERG "HELLO WORLD !\n");
    return 0;
}
static void hello_exit(void){
    printk(KERN_EMERG "HELLO WORLD exit!\n");
}
module_init(hello_init);
module_exit(hello_exit);

  该模块定义了两个函数(hello_init和hello_exit),hello_init在模块装载到内核时执行,另一在模块移除内核时执行。moudule_initmodule_exit使用了内核特殊宏表示上述两个函数扮演的角色。另外对于MODULE_LICENSE是用来告诉内核,该模块四采用的自由许可证;如果没有这样的声明,内核在装载该模块时会产生问题。 
  函数printk和C语言中的printf,printk属于内核空间,而printf属于用户空间。代码中的KERN_EMERG定义了这条消息的优先级。printk分为八个级别:

#define KERN_EMERG 0
/*紧急事件消息,系统崩溃之前提示,表示系统不可用*/
#define KERN_ALERT 1
/*报告消息,表示必须立即采取措施*/
#define KERN_CRIT 2
/*临界条件,通常涉及严重的硬件或软件操作失败*/
#define KERN_ERR 3
/*错误条件,驱动程序常用KERN_ERR 来报告硬件的错误*/
#define KERN_WARNING 4
/*警告条件,对可能出现问题的情况进行警告*/
#define KERN_NOTICE 5
/*正常但又重要的条件,用于提醒*/
#define KERN_INFO 6
/*提示信息,如驱动程序启动时,打印硬件信息*/
#define KERN_DEBUG 7
/*调试级别的消息*/

2.hello world程序装载卸载

编写好的驱动程序首先通过make对驱动程序进行编译,Makefile文件如下:

#!/bin/bash
#通知编译器我们要编译模块的哪些源码
obj-m += hello_world.o 

#源码目录变量,这里用户需要根据实际情况选择路径
KDIR := /home/code_4412/arm_linux_Kernel_3.0

#当前目录变量
PWD ?= $(shell pwd)

#make命名默认寻找第一个目标
#make -C就是指调用执行的路径
#$(KDIR)Linux源码目录,作者这里指的是/home/code_4412/arm_linux_Kernel_3.0
#$(PWD)当前目录变量
#modules要执行的操作
all:
    make -C $(KDIR) M=$(PWD) modules  
#make clean执行的操作是删除后缀为o的文件
clean:
    rm -rf *.mod.c *.o *.order *.ko *.mod.o *.symvers

在root权限输入make命令进行编译,生成.o以及.ko文件,然后通过insmod和rmmod进行编译测试。

//装载
insmod ./hello_world.ko
//卸载
rmmod hello_world
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值