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

相关推荐
可涵不会debug20 小时前
C++ std::bind 实战教程:线程池、回调场景全覆盖
linux·开发语言·c++
实点科技20 小时前
远程IO模块的柜外安装:装在什么位置、防尘罩怎么选配
运维·服务器·网络
云计算-Security20 小时前
AI 赋能运维:UniRack 主机纳管平台的架构与实践
运维·人工智能·架构
青梅味猪大肠21 小时前
【操作系统-26】进程互斥软件实现-Peterson算法
linux·运维·服务器
分布式存储与RustFS21 小时前
在 Kubernetes 里跑对象存储的三个方案:Helm、Operator、以及什么时候别用 K8s
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
怪力左手21 小时前
docker+qemu创建镜像
运维·docker·容器
wdfk_prog21 小时前
Wi-Fi Direct教程 01:在 Ubuntu 搭建双 mac80211_hwsim + wpa_supplicant 2.12
linux·运维·服务器·ubuntu·ros·wifi-direct
2401_8628808221 小时前
LCD 显示与触控屏驱动开发
驱动开发·嵌入式硬件
fengkai45451 天前
十一、MySQL 第 1‑3 章
运维·数据库·mysql
Vcaker1 天前
Linux学习36-k8s集群升级及kube-vip高可用
linux·运维·学习