Linux驱动学习1.hello world;
程序员文章站
2023-02-21 12:07:17
最近项目需要使用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自行查看了
推荐阅读
-
Linux驱动学习1.hello world;
-
linux学习--字符设备驱动
-
11-S3C2440驱动学习(七)嵌入式linux-字符设备的另一种写法及RTC驱动程序分析和字符设备驱动框架总结
-
07-S3C2440驱动学习(一)嵌入式linux字符设备驱动-LED字符设备驱动
-
10-S3C2440驱动学习(四)嵌入式linux-LCD驱动程序
-
11-S3C2440驱动学习(五)嵌入式linux-网络设备驱动(二)移植DM9000C网卡驱动程序
-
Linux驱动学习(三)平台总线设备驱动模型
-
linux驱动学习笔记(二. 模块)
-
linux驱动学习笔记 中断方式的按键驱动
-
【13】Linux驱动开发第一阶段学习总结【20200608 ——202000719】