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

03-Linux内核驱动模块加载

概述

本文主要讲解Linux系统中的内核驱动模块编写和加载。

模块功能

Linux模块功能是对Linux内核的一种功能扩展机制,在linux系统不重启的情况下,通过用户空间动态扩展linux内核功能,Linux内核如果要支持动态加载内核模块的功能,需要在内核编译的时候,再内核配置文件中打开如下的两个选项:

CONFIG_MODULES=y

CONFIG_MODULE_UNLOAD=y

内核模块编写

编写驱动程序helloworld.c文件如下:

#include <linux/init.h>
#include <linux/kernel.h>
#include <linux/module.h>static int __init helloworld_init(void)
{printk(KERN_INFO "Hello world!\n");return 0;
}static void __exit helloworld_exit(void)
{printk(KERN_INFO "GoodBye of the world\n");
}module_init(helloworld_init);
module_exit(helloworld_exit);
MODULE_AUTHOR("yanl1229 <yanl1229@163.com>");
MODULE_LICENSE("GPL");

编写Makefile文件

obj-m := helloworld.oKERNELDIR ?= $(shell pwd)/../../../kernelall default: modules
install: modules_installmodules modules_install help clean:$(MAKE) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -C $(KERNELDIR) M=$(shell pwd) $@

注: 网上很多编写Makefile文件中对于内核目录的指定,都是基于编译模块主机的内核模块路径,对于嵌入式开发,单独编译模块的时候,需要参考如上的Makefile写法.

模块的编译

1、模块源码目录下执行make进行编译。

2、将编译好的helloworld.ko文件拷贝到buildroot/output/target目录下。

3、执行./build.sh 将内核模块打包到文件系统中。

内核模块加载

1、在工程目录下执行./build.sh run 运行qemu 平台的arm linux系统, 并且切换到root目录

2、使用insmod加载内核模块如下所示:

总结

本文主要讲述了如何在嵌入式arm Linux系统中编写驱动模块和加载的步骤。

工程链接

https://gitee.com/yanl1229/EasyLinux.git

http://www.dtcms.com/a/264639.html

相关文章:

  • visual studio Code运行vue项目
  • 4K超高清无缝切换与画面分割矩阵
  • gin框架 中间件 是在判断路由存在前执行还是存在后执行的研究
  • 【AI智能体】基于Coze 制作高质量PPT实战操作详解
  • 打造Docker Swarm集群服务编排部署指南:从入门到精通
  • 降低网络安全中的人为风险:以人为本的路径
  • mr 任务运行及jar
  • FAISS 简介及其与 GPT 的对接(RAG)
  • 人机融合智能 | 人智交互中的人类状态识别
  • WSL2与Windows交换端口命令记录
  • Flink-1.19.0源码详解5-JobGraph生成-前篇
  • 渐变色的进度条控件
  • 探访国际数字影像产业园 短剧制作发行的全新平台
  • 基于FPGA的ds18b20温度采集
  • 123页满分PPT | 华为流程体系建设与运营华为数字化转型流程解决方案及建设案例
  • ECharts 安装使用教程
  • 分布式事务理论基础及常见解决方案
  • glTF /glb文件深度指南:揭示 3D 可视化的核心
  • ESP32-S3开发板LVGL图形界面开发实战教程
  • 【实战指南】Ubuntu源码部署LNMP生产环境|企业级性能调优方案
  • STEP-BACK PROMPTING:退一步:通过抽象在大型语言模型中唤起推理能力
  • Ubuntu-18.04-bionic 的apt的/etc/apt/sources.list 更换国内镜像软件源 笔记250702
  • 【Note】《深入理解Linux内核》 Chapter 5 :内存地址的表示——Linux虚拟内存体系结构详解
  • Minio安装配置,桶权限设置,nginx代理 https minio
  • (nice!!!) (LeetCode 每日一题) 3333. 找到初始输入字符串 II (贪心+动态规划dp+前缀和)
  • 如何解决wordpress批量删除媒体库中的图片很慢甚至卡死问题
  • 音视频会议服务搭建(设计方案-两种集成方案对比)-03
  • U+平台配置免密登录、安装Hadoop配置集群、Spark配置
  • OpenLayers 入门指南【一】:WebGIS基础与OpenLayers概述
  • Chart.js 安装使用教程