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

相关推荐
云泽8084 小时前
Linux基础开发工具(三):Vim高级配置、Swap恢复机制与Sudo权限白名单详解
linux·运维·vim
Urbano4 小时前
服装厂入局自动化开袋设备:市场前景、机型选型与落地实效科普
运维·自动化
tju23334 小时前
Gitee Test是什么:从测试资产管理到自动化执行的工程化实践
运维·gitee·自动化
名字还没想好☜4 小时前
Kubernetes Pod 调度实战:nodeSelector、亲和性与 taint/toleration 把 Pod 放到指定节点
运维·云原生·容器·kubernetes·调度
qetfw4 小时前
CentOS 7 vsftpd.conf 配置文件详解:监听、用户、权限、被动模式与 TLS
linux·运维·centos·ftp·vsftpd
风曦Kisaki4 小时前
Kubernetes(K8s)笔记Day04:控制器(ReplicaSet 与Deployment),滚动更新及回滚,滚动更新策略,Pod 的 DNS 策略
linux·运维·笔记·docker·容器·kubernetes
code_whiter4 小时前
初阶linux2环境基础开发工具完整教程
linux
薛定e的猫咪4 小时前
零基础选型指南:Make / 扣子 Coze/n8n/Dify 四大自动化平台完整对比
运维·自动化
AmazingEgg4 小时前
RHCSA 第三天学习笔记
linux
数聚天成DeepSData4 小时前
外贸海关进出口数据去哪免费下载?从统计到明细的查找指南
linux·服务器·开发语言·前端·网络·人工智能·自然语言处理