最简单的驱动程序

简介

在 Linux 内核中,Makefile 和 Kconfig 是两个重要的文件,它们分别承担着不同的作用。

Makefile

Makefile 是一个文本文件,用于定义编译和构建内核的规则。它使用 make 工具来管理和自动化构建过程。Makefile 定义了编译器、链接器、编译选项、目标文件、源文件等信息,以及构建不同配置的内核所需的规则。通过执行 make 命令,可以根据 Makefile 中的规则,自动执行编译、链接和安装等操作,生成可执行的内核映像文件。

Makefile 还允许用户自定义构建选项和调整内核配置。通过修改 Makefile,可以指定编译器选项、优化级别、链接选项等,以满足特定的需求。Makefile 还提供了一些常用的目标,如编译内核模块、安装内核等,简化了构建和安装的流程。

Kconfig

Kconfig 是内核源代码树中的一个配置系统,用于管理和配置内核的编译选项。它提供了一种交互式的配置界面,允许用户选择和配置内核选项,以定制构建出的内核映像。Kconfig 文件位于内核源代码树的顶层目录下,并通过菜单和菜单项的方式组织配置选项。

Kconfig 文件中的每个配置选项都有一个唯一的标识符和名称,并由其所对应的 C 语言宏定义来表示。通过使用配置界面工具,如 make menuconfigmake xconfig,用户可以浏览和修改 Kconfig 文件中的选项,并根据需求进行配置选择。

Kconfig 不仅用于配置编译选项,还用于启用或禁用不同的内核功能、设备驱动、文件系统等。它提供了一个灵活的配置系统,可以根据特定的硬件平台或用户需求进行定制化配置,从而生成适合特定环境的内核映像。

总结起来,Makefile 和 Kconfig 在 Linux 内核中分别负责构建规则和配置选项的管理。Makefile 管理编译和构建过程,而 Kconfig 管理内核的配置选项和功能。它们共同协作,使得 Linux 内核具有高度的可定制性和灵活性。

环境

操作环境: Ubuntu20.04

内核源码: linux-6.6版本,官网下载

下载之后,把linux-6.6.tar.xz解压到Ubuntu中任意目录即可,例如:解压到~/linux-test/目录下:

编译进内核

驱动程序目录

linux 中的驱动,一般都放在 linux-6.6/drivers/ 目录下,因此在这个目录中创建一个hello文件夹。

$ mkdir linux-6.6/drivers/hello

对于一个驱动来说,最重要的就是3个文件:

源代码

Kconfig

Makefile

只要按照固定的格式来编写这3个文件,linux内核的编译脚本就可以确保把我们的驱动程序编译进去。

源文件

首先是源码,在hello文件夹中创建源文件 hello.c:

$ cd linux-6.6/drivers/hello

$ touch hello.c

源文件hello.c的内容是:

#include <linux/module.h>
#include <linux/init.h>// 当驱动被加载的时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/125220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask后端开发(二) - 功能实现和项目总结

目录 1. 功能1:修改文件参数值1.1. 获取网页端传参1.2. 读取文件1.2.1. 一般文件读取方式1.2.2. 特殊文件 —— mlx文件1.2.3. 特殊文件 —— .xlx文件1.3. 查找数据修改位置,替换数据2. 功能2:读取结果数据2.1. 实时数据展示如何存储相关数据?2.2. 读取相关数据,整理、打…

[ubuntu系统下的文本编辑器nano,vim,gedit,文件使用,以及版本更新问题]

文本编辑器概要 在Ubuntu系统下&#xff0c;有许多文本编辑器可供选择&#xff0c;每个编辑器都有其独特的特性和用途。以下是一些常见的文本编辑器&#xff1a; Gedit&#xff1a; 这是Ubuntu默认的文本编辑器&#xff0c;它简单易用&#xff0c;适合基本的文本编辑任务。 安…

前端基础---跳转相关的功能

后端给链接地址并且给token进行跳转 如果点击有key4&#xff0c;说明要跳转到相应的页面 auth是通过后端获取的地址&#xff0c; jdk是后端获取的相应的token&#xff0c; 然后进行拼接&#xff0c;进行window.open&#xff08;&#xff09;进行跳转 if (key 4) {var testUrl …

基于RFID技术的优化医药供应链管理解决方案

一、社会背景和挑战 随着全球假药问题的严重性日益凸显&#xff0c;医疗产品的追溯和管理变得越来越重要。据世界卫生组织报告&#xff0c;全球假药比例已超过10%&#xff0c;而中国每年至少有20万人死于假药和不当用药。在国际上&#xff0c;医疗产品的追溯体系已成为监管机构…

如何解决ssh登录报错WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

原因&#xff1a; 当两个设备第一次进行链接时&#xff0c;会在~/.ssh/konwn_hosts 中将被连接设备的公钥信息进行保存&#xff0c;后续再次链接时OpenSSH会核对公钥来进行一个简单的验证 然而有时候被链接的那台设备系统被重装、IP 冲突等原因&#xff0c;会导致公钥信息没…

MLF - 麻辣粉

MLF全称中期借贷便利&#xff08;Medium-term lending Facility&#xff09;,理解为央行向商业银行、政策银行发放的贷款&#xff0c;但需要符合一定要求才可向央行申请。银行通过MLF向央行借款的时候&#xff0c;需要提供担保品。一般为国债、央行票据、政策性金融债、地方债、…

com.aspose.words for java添加页码

public void addHeaderFooter(Document doc){//创建页脚 页码HeaderFooter footer new HeaderFooter(doc, HeaderFooterType.FOOTER_PRIMARY);doc.getFirstSection().getHeadersFooters().add(footer);//页脚段落Paragraph footerpara new Paragraph(doc);footerpara.getPara…

数据库的用户管理

一、创建用户&#xff1a;create user 二、赋予用户权限&#xff1a;grant&#xff08;终端执行&#xff09; 三、删除用户权限&#xff1a;revoke&#xff08;在终端操作&#xff09; 四、用户的重命名&#xff1a;rename 五、删除用户&#xff1a;drop 六、修改用户密码 1、…

linux目录与文件管理

目录与路径 关于执行文件路径的变量&#xff1a;$PATH ls完整文件名为&#xff1a;/bin/ls 在任何文件夹下输入ls命令可以显示出一些信息而不是找不到命令&#xff0c;这就是因为环境变量PATH所致。在执行命令时&#xff0c;系统会依照PATH的设置去每个PATH定义的目录下查找文…

经典面试题:https为什么比http安全

HTTPS比HTTP安全的主要原因是它使用了加密技术来保护数据传输的安全性。下面是几个关键的安全特性&#xff1a; 数据加密&#xff1a;HTTPS使用SSL&#xff08;Secure Sockets Layer&#xff09;或TLS&#xff08;Transport Layer Security&#xff09;协议来对传输的数据进行加…

ORB-SLAM3算法2之EuRoc、TUM和KITTI开源数据集运行ORB-SLAM3生成轨迹并用evo工具评估轨迹

文章目录 0 引言1 数据和真值1.1 TUM1.2 EuRoc1.3 KITTI2 ORB-SLAM3的EuRoc示例2.1 纯单目的示例2.2 纯单目的轨迹评估2.3 纯双目的示例2.4 纯双目的轨迹评估2.5 单目和IMU的示例2.6 单目和IMU的轨迹评估2.7 双目和IMU的示例2.8 双目和IMU的轨迹评估2.9 前四种的评估结果对比3 …

PyTorch入门学习(九):神经网络-最大池化使用

目录 一、数据准备 二、创建神经网络模型 三、可视化最大池化效果 一、数据准备 首先&#xff0c;需要准备一个数据集来演示最大池化层的应用。在本例中&#xff0c;使用了CIFAR-10数据集&#xff0c;这是一个包含10个不同类别图像的数据集&#xff0c;用于分类任务。我们使…

前端环境的安装 Node npm yarn

一 node npm 1.下载NodeJS安装包 下载地址&#xff1a;Download | Node.js 2.开始安装 打开安装包后&#xff0c;一直Next即可。当然&#xff0c;建议还是修改一下安装位置&#xff0c;NodeJS默认安装位置为 C:\Program Files 3.验证是否安装成功 打开DOS命令界面&#…

MINIO 对象存储服务

MINIO 官网下载地址&#xff1a; 注&#xff1a;需要下载 MINIO SERVER&#xff08;服务端&#xff09; 和 MINIO CLIENT&#xff08;客户端&#xff09;两个文件 WINDOWS版本下载地址&#xff1a;https://min.io/download#/windows LINUX版本下载地址&#xff1a;https://mi…

已解决:conda找不到对应版本的cudnn如何解决?

1.解决方法 配置深度学习环境时&#xff0c;打算安装cudatoolkit11.2和cudnn8.1&#xff0c;当使用conda install cudnn8.0时&#xff0c;却搜索不到这个版本的包&#xff0c;解决方法如下&#xff1a; conda search cudnn -c conda-forge然后就可以使用如下命令进行安装对应…

Python web自动化测试 —— 文件上传

​文件上传三种方式&#xff1a; &#xff08;一&#xff09;查看元素标签&#xff0c;如果是input&#xff0c;则可以参照文本框输入的形式进行文件上传 方法&#xff1a;和用户输入是一样的&#xff0c;使用send_keys 步骤&#xff1a;1、找到定位元素&#xff0c;2&#…

如何解决缓存雪崩?

缓存雪崩是指在缓存中大量的数据同时失效&#xff0c;导致大量请求直接访问数据库&#xff0c;造成数据库负载急剧增加的情况。为了解决缓存雪崩问题&#xff0c;可以采取以下一些策略和方法&#xff1a; 合理设置缓存的过期时间 分散缓存的过期时间&#xff0c;避免在同一时间…

【大数据基础平台】星环TDH社区开发版单机部署

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#…

Vue之CSS基础

CSS&#xff1a;层叠样式表 1、选择器 从模板template中选择某元素进行样式设置 需要注意的是作用域到底是当前模板还是整个html文档 1.1 基础(单一)选择器 标签、类、 id、通配符 标签、直接使用标签名&#xff0c;比如div,span… 优点&#xff1a;全选 模板中的名{。。。}…

反射率检测仪如何检测后视镜

后视镜反射率检测是评估后视镜质量的重要步骤&#xff0c;可以反映后视镜的反射效果是否满足设计要求。一般来说&#xff0c;后视镜的反射率越高&#xff0c;驾驶员观察车后的道路状况就越清晰&#xff0c;从而能够更好地判断与后方车辆的距离和速度差。 后视镜反射率检测的原理…