当前位置: 移动技术网 > 科技>操作系统>Linux > Linux驱动学习1.hello world;

Linux驱动学习1.hello world;

2019年03月05日  | 移动技术网科技  | 我要评论
最近项目需要使用Linux系统开发,借此机会学习一下Linux驱动开发 hello word代码hello.c mekefile文件 在hello.c目录下,shell终端中执行make命令,生成hello.ko文件; 使用以下命令插入 问题:插入模块后本应打印出字符,后发现是printk打印级别问 ...

最近项目需要使用linux系统开发,借此机会学习一下linux驱动开发

hello word代码hello.c

#include <linux/module.h>
#include <linux/init.h>
static int hello_init(void)//模块入口
{
    printk("hello, i'm ready!\n");
    return 0;
}
static void hello_exit(void)//模块出口
{
    printk("i'll be leaving, bye!\n");
}
module_init(hello_init);
module_exit(hello_exit);

module_license("gpl");

mekefile文件

# if kernelrelease is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(kernelrelease),)
obj-m := hello.o
# otherwise we were called directly from the command
# line; invoke the kernel build system.
else
    kerneldir ?= /lib/modules/$(shell uname -r)/build
    pwd := $(shell pwd)
default:
    $(make) -c $(kerneldir) m=$(pwd) modules
endif

在hello.c目录下,shell终端中执行make命令,生成hello.ko文件;

使用以下命令插入

sudo insmod hello.ko
lsmode//查看模块 sudo rmmod hello.ko

 

问题:插入模块后本应打印出字符,后发现是printk打印级别问题,查看/var/log/syslog下发现有打印出字符

使用一下代码;

 printk(kern_emerg "emerg\n");
 printk(kern_alert "alert\n");
 printk(kern_crit " crit\n");
 printk(kern_err " err\n");
 printk(kern_warning ""warning\n");
 printk(kern_notice "notice\n");
 printk(kern_info "info\n");
 printk(kern_debug "debug\n");

发现终端还是没有输出,后查到https://blog.csdn.net/xj626852095/article/details/9746547下说是ubuntu的问题,

只用使用#dmesg自行查看了

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网