Johannes 《Linux内核模块与设备驱动开发:编写Linux驱动程序》(2)better hello

学习linux 内核开发做学习笔记。

作者 :Johannes

开发平台:Raspberry Pi 3 数莓派3

视频资源:https://www.bilibili.com/video/BV18SE26cEjn/?spm_id_from=333.1387.search.video_card.click&vd_source=92b7efa4daa5bb4fdcdc9f2db97c307b

程序源码

GitHub - Johannes4Linux/Linux_Driver_Tutorial: My new Tutorial how to get started with Linux Kernel Modules and Linux Drivers. Started in 2024 · GitHub

不考虑交叉编译以及环境配置,只学习了解视频。需要了解下makefile 以及linux 常用命令

lessson2 better_hello

复制代码
#include <linux/module.h>
#include <linux/init.h>

static int __init my_init(void)
{
	printk("hello - Hello, Kernel!\n");
	return 0;
}

static void __exit my_exit(void)
{
	printk("hello - Goodbye, Kernel!\n");
}

module_init(my_init);
module_exit(my_exit);

MODULE_LICENSE("GPL");
MODULE_AUTHOR("Johannes 4Linux");
MODULE_DESCRIPTION("A simple Hello World Linux Kernel Module");

相对于第一课,这第二课的hello.c改动不多

将初始化和移除的函数添加了static 关键字,保证函数my_init() /my_exit()只能在这个hello.c文件中调用,显然安全程度高了很多。

添加 __init/__exit,添加的宏增加了函数可读性

添加MODULE_AUTHOR/MODULE_DESCRIPTION 添加了模块说明,以后可以用modinfo等命令查看模块信息。

makefile 一样。编译好之后insmod/rmmod。想查看信息的话有modinfo/dmesg/lsmod

这个hello.c就是最简单的linux 内核驱动模块程序了。解释了加载/移除 驱动模块 ,加载模块之后如何查看内核模块信息。

相关推荐
星恒随风7 小时前
MySQL 从零入门(五):MySQL 内置函数详解——日期、字符串、数学函数与实战案例
linux·数据库·笔记·sql·mysql
唐墨12312 小时前
linux kernel 比较数据大小的宏定义
linux·算法
程序开发阿元12 小时前
密码不进工具:一个独立开发者的服务器凭据管理办法
linux·ssh
分布式存储与RustFS14 小时前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天15 小时前
服务器和虚机配置IPV6
运维·服务器·github
zixu_star15 小时前
定时任务是什么?从日常自动化到 AI 应用,软件如何自动执行任务?
运维·人工智能·自动化
AR-26710-15 小时前
Linux Day33——定时任务+lvm
linux·运维
墨痕诉清风16 小时前
SSRF漏洞实战记录+OSS桶命令执行+MCP漏洞
linux·服务器·数据库
byte轻骑兵16 小时前
实战 4:BlueZ 源码中添加自定义设备过滤规则
linux·物联网·bluez·电脑蓝牙·嵌入式蓝牙
润滑卫士16 小时前
液压系统工作粘度窗口等级选型:泵允许粘度范围与油温-粘度匹配计算
运维