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 内核驱动模块程序了。解释了加载/移除 驱动模块 ,加载模块之后如何查看内核模块信息。

相关推荐
三言老师6 小时前
K8s集群运行时自动化运维全覆盖落地实操(下)
linux·运维·服务器·网络
ltl7 小时前
HAProxy HTX 与 HTTP 路径:内部表示、改写落点与协议分叉
linux
ltl7 小时前
可拆分 OS:CXL 内存池化如何动摇本地 DRAM 假设
linux
ltl7 小时前
Tetragon 强制执行:Override 与 SIGKILL 各自保证什么
linux
lengjingzju7 小时前
编译与调试完全指南—第6章 性能分析工具
linux
躺不平的理查德8 小时前
嵌入式 Linux 系统移植与 SD 卡量产镜像制作
linux·运维·服务器
恒锐丰-罗生8 小时前
国产 H 桥驱动 SS6289|18V/4A 有刷电机驱动芯片性与应用分析 内置采样 + 多保护,门锁 / 机器人优选器件
驱动开发·嵌入式硬件·硬件工程
一直走下去-明9 小时前
centos7无法安装tcpreplay
linux·运维
吹什么轩9 小时前
linux网络:TCP套接字基础
linux·网络·tcp/ip
IT大白鼠9 小时前
n8n工作流自动化平台技术架构与应用价值评估
运维·架构·自动化·n8n