当前位置: 首页 > news >正文

Linux驱动开发:从一个最简单的模块开始

万事总有第一步,对于程序世界,第一步多数都是从Hello World开始,这里也就随大流了:
代码 hello.c

#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");static int hello_init(void)
{printk(KERN_ALERT "Hello, world\n");return 0;
}
static void hello_exit(void)
{printk(KERN_ALERT "Goodbye, cruel world\n");
}module_init(hello_init);
module_exit(hello_exit);

Makefile

obj-m += hello.oKERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)all:$(MAKE) -C $(KERNELDIR) M=$(PWD) modulesclean:$(MAKE) -C $(KERNELDIR) M=$(PWD) clean

编译:

make# 大致的输出如下,实际输出和当前使用的环境有关
make -C /lib/modules/6.8.0-100-generic/build M=/home/ps/code/test modules
make[1]: Entering directory '/usr/src/linux-headers-6.8.0-100-generic'
warning: the compiler differs from the one used to build the kernelThe kernel was built by: x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04.2) 12.3.0You are using:           gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04.2) 12.3.0CC [M]  /home/ps/code/test/hello.oMODPOST /home/ps/code/test/Module.symversCC [M]  /home/ps/code/test/hello.mod.oLD [M]  /home/ps/code/test/hello.koBTF [M] /home/ps/code/test/hello.ko
Skipping BTF generation for /home/ps/code/test/hello.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-6.8.0-100-generic'

编译成功后当前文件夹下有hello.ko存在

加载到内核

sudo insmode hello.ko

从内核卸载

sudo rmmod hello

查看系统日志

sudo dmesg |tail# 大致如下
...
[90123.933097] hello: loading out-of-tree module taints kernel.
[90123.933103] hello: module verification failed: signature and/or required key missing - tainting kernel
[90123.933658] Hello, world
[90178.872518] Goodbye, cruel world

对于日志中上方的两条的警告信息可以不用理会或者自行AI,下方两条就是我们加载和卸载模块时的log,与程序代码预期一致

http://www.jsqmd.com/news/337596/

相关文章:

  • 聊聊北大青鸟岳麓校区,长沙株洲湘潭地区性价比如何 - 工业推荐榜
  • 【Linux命令大全】009.备份压缩之cpio命令(实操篇)
  • 【行业盘点】凯氏定氮仪十大品牌厂家排行榜,实力与口碑兼具 - 品牌推荐大师1
  • 2026年聊聊山西仓储货架,正规厂家怎么选择? - 工业品网
  • 大叔学springboot ,且学且记
  • 盘点河北螺母供应商直销公司Top10,企业实力大揭秘 - 工业推荐榜
  • 2026年讲讲木制包装箱定制厂哪个值得选,哈尔滨靠谱厂家推荐 - 工业品牌热点
  • 优秀的项目经理需要具备哪些品质?
  • leetcode 893. Groups of Special-Equivalent Strings 特殊等价字符串组-耗时100
  • 说说2026年靠谱的割圈绒工厂,南京地区如何选择 - 工业推荐榜
  • 接口自动化测试之接口数据依赖
  • 长沙北大青鸟岳麓校区教学质量如何探讨,哪家性价比高 - 工业品牌热点
  • 接口自动化测试实战:测试用例也能自动生成
  • 2026年哈尔滨木制包装箱厂家排名公布,金源木业位居前列! - mypinpai
  • 2026年植物基饮料口碑排名,国礼级家庭装正品保障哪家靠前 - 工业设备
  • 递归函数 - 练习1
  • Pytest自动化测试框架之Allure报告
  • 数字化套期保值解决方案报表自动生成实践
  • 2026年陕西货架子推荐 讲讲值得选的货架子厂商哪家好 - 工业品网
  • 美国咨询求职网站哪家强:官方网站TOP10精选攻略 - 技研备忘录
  • C++ 数组引用
  • 卡西欧代理哪家性价比高,为你提供选购参考 - 工业品牌热点
  • 套期保值管理系统历史重算优势与应用价值
  • 解读哈尔滨木制包装箱选购要点,金源木业有啥优势? - myqiye
  • 义乌雷硕包装制品有限公司 联系方式: 2026年一站式包装方案评测与推荐 - 品牌推荐
  • 期货与期权一体化平台结构设计最佳实践
  • 矢量网络分析仪测量相位差的原理与方法
  • 企业套保策略平台历史数据重算机制详解
  • 全平台实力王者!三十六行盐城分公司团购代运营榜首 - 野榜数据排行
  • 2026年盘点天津靠谱的玻璃加工中心供应商排名 - mypinpai