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

最简单的驱动程序

简介

在 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.lryc.cn/news/216709.html

相关文章:

  • MFC String类的初始化学习
  • vue项目使用vite设置proxy代理,vite.config.js配置,解决本地跨域问题
  • 实用-----七牛云绑定自定义域名 配置 HTTPS
  • 【TS篇三】类、函数、for-of循环、类型推断
  • Chatgpt批量改写文章网页版可多开软件-自动登录换号生成word或者TXT
  • Modelsim 使用教程(4)—— Working With Multiple Libraries
  • 【重要】浏览器输入地址提示【您的连接不是私密连接】解决方法
  • ESP-07S烧写固件记录
  • 网络编程中关于UDP套接字的一些知识点
  • 淘宝商品评论API接口(评论内容|日期|买家昵称|追评内容|评论图片|评论视频..)
  • 计算机网络 第五章传输层
  • cartographer,ros,路径规划近两年的工作笔记
  • react 生命周期讲解
  • 什么是TCY油封?
  • 【Vue.js】使用Element入门搭建登入注册界面axios中GET请求与POST请求跨域问题
  • Apache Hive
  • [idea]关于idea开发乱码的配置
  • 比较一个结构分割平面的两种方式
  • 学习笔记二十九:K8S配置管理中心Configmap实现微服务配置管理
  • AITO问界崛起的“临门一脚”,落在了赛力斯汽车的智慧工厂里
  • 影视企业有哪些方式将视频文件快速海外跨国传输国内?
  • Android原生分享与指定app分享
  • ActiveMQ是什么?-九五小庞
  • <蓝桥杯软件赛>零基础备赛20周--第4周--杂题-1
  • Telnet/ssh/Serial远程工具WindTerm
  • 电脑技巧:台式机噪音非常大的几个原因以及解决办法
  • C++名称空间
  • Centos7扩容
  • react中ref的使用(useRef,forwardRef,useImperativeHandle,createRef)
  • 正点原子嵌入式linux驱动开发——Linux USB驱动