Linux驱动程序Hello World

程序源码

hello.c

#include "linux/init.h"
#include "linux/module.h"
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void){
	printk(KERN_INFO "Hello World Start !\n");
	return 0;
}
static void hello_exit(void){
	printk(KERN_INFO "Hello World Exit ! \n");
}
module_init(hello_init);
module_exit(hello_exit);

Makefile

KERNELDIR ?=/usr/src/kernels/linux-2.6.38
PWD:=$(shell pwd)
obj-m:= hello.o
modules:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
modules_install:
	$(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
clean:
	rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions
.PHONY: modules modules_install clean

编译命令

hello_world文件夹如下图
在这里插入图片描述
首先在hello_world文件夹进入终端输入make命令并执行,执行ls命令查看文件目录
在这里插入图片描述
执行命令 insmod hello.ko 进行驱动程序加载
在这里插入图片描述
执行lsmod命令也可以查看hello模块是否存在
在这里插入图片描述
执行rmmod hello.ko,卸载hello模块;
执行lsmod再次查看hello模块已经被卸载
在这里插入图片描述

运行效果截图

所有的命令已经执行结束,也没有报错,但是在终端并没有看到Hello World输出?

解决方案一:

由于Linux内核的级别控制,导致printk打印的内容不一定都能从控制台正常输出,可以使用dmesg命令来输出所有级别的信息。
在这里插入图片描述

解决方案二:

既然printk打印级别不够,那么将printk级别设为最高权限即可(日志级别为0-8,0为最高权限);
日志级别一共有8个级别,printk的日志级别定义如下(在include/linux/kernel.h中):
  #define KERN_EMERG 0
  #define KERN_ALERT 1
  #define KERN_CRIT 2
  #define KERN_ERR 3
  #define KERN_WARNING 4
  #define KERN_NOTICE 5
  #define KERN_INFO 6
  #define KERN_DEBUG 7
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值