Linux驱动实践:带你一步一步编译内核驱动程序

这篇具有很好参考价值的文章主要介绍了Linux驱动实践:带你一步一步编译内核驱动程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

学习的困惑

记得以前我在开始学习驱动开发的时候,找来很多文章、资料来学习,但是总是觉得缺少了点全局视角。

就好像:我想看清一座山的全貌,但总是被困在一个、又一个山谷中一样。

主要的困惑有 3 点:

  1. 每一篇文章的介绍都是正确的,但是如果把很多文章放在一起看,就会发现怎么说的都不一样啊?

  2. 有些文章注重函数的介绍,但是缺乏一个全局的视角,从整体上来观察驱动程序的结构;

  3. 对于一个新手来说,能够边学习、边实践,这是最好的学习方式,但是很多文章不会注意这方面。虽然文章内容很漂亮,但是不知道怎么去实践、验证。

因此,这几篇文章我们就从最简单的驱动模块编译开始,然后介绍字符设备驱动程序。

在这部分,会以 GPIO 为例子,重点描述其中的关键节点。

最后再介绍在中断处理程序中,如何利用信号量、小任务、工作队列,把内核事件传递到应用层来处理。

作为第一个开篇文章,从最简单的内核编译开始。

实际操作一下:如何把一个最简单的驱动程序(hello),按照 2 种方式进行编译:

  1. 编译进内核;

  2. 编译为一个独立的驱动模块;

实践环境

为了便于测试,以下操作都是在 Ubuntu16.04 操作系统里完成的。

编译Linux驱动程序,肯定需要内核源码,这里选择的是 linux-4.15 版本,可以在官网下载。

文末有下载方式。

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

$ tar -zxvf linux-4.15.tar.gz -C ~/tmp/

编译进内核

创建驱动程序目录

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

$ mkdir linux-4.15/drivers/hello

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

  1. 源代码

  2. Kconfig

  3. Makefile

只要按照固定的格式来编写这文章来源地址https://www.toymoban.com/news/detail-423658.html

到了这里,关于Linux驱动实践:带你一步一步编译内核驱动程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)

    编译驱动一般采用的是将驱动编译成模块(.ko 文件),然后加载到内核,这其中就用到了 make modules 命令。 目录 一、单模块编译 1、一个 c 文件编译成一个 ko 文件 2、多个文件编译成一个 ko 文件 二、多模块编译(多文件多模块) 下面是最简易的单文件单模块编译,假设我们

    2024年02月10日
    浏览(65)
  • Linux搭建Kafka详细一步一步指南(linux启动kafka脚本)

    一、下载  到kafka的官网,去下载想用的kafka包:http://kafka.apache.org/downloads 我这里下载的是:kafka_2.12-3.4.1.tgz 再将安装包传送到服务器并解压 二、配置kafka 1.在kafka解压目录同一路径下:创建一个kafka_data,用于装kafka和zookeeper的log和数据啥的 2.配置kafka服务  3.配置zookeeper服务

    2024年02月02日
    浏览(40)
  • ⌈Linux_感受系统美学⌋ 一步一步迈向系统底层 - 寻觅Linux奥秘,探寻Linux下权限管理&周边属性

    💛 前情提要💛 本章节是 Linux 操作系统的 解压缩操作shell外壳程序权限相关概念及其操作 的相关知识~ 接下来我们即将进入一个全新的空间,对操作系统(系统层面)等相关知识有一个全新的视角~ 以下的内容一定会让你对 Linux 有一个颠覆性的认识哦!!! 以下内容干货满

    2024年02月01日
    浏览(43)
  • Linux驱动开发一、RK3568把hello编译到Linux内核中运行。‘rk_vendor_read’未定义的引用

    1、在字符设备目录下建立hello目录 ~/Linux/rk356x_linux/kernel/drivers/char/hello 2、进入hello目录,新建hello.c、Makefile、Kconfig三个文件 3、Kconfig是打开make menuconfig配置界面是后的选项,这Kconfig是在字符设备下的。 config后面的HELLO就是对应配置后在kernel目录下的**.config中的CONFIG_HELLO配置

    2024年02月11日
    浏览(71)
  • 编译OpenWrt内核驱动

      编译OpenWrt内核驱动可以参考OpenWrt内部其它驱动的编写例程,来修改成自己需要的驱动 1.1、搭建环境   下载OpenWrt的官方源码: 1.2、安装编译依赖项 1.3、更新 feeds   进入openwrt目录后执行以下指令 1.4、配置编译选项   根据自己的平台来选择编译选项 1.5、下载 dl

    2024年02月09日
    浏览(51)
  • 香橙派(orangePiZero2):交叉编译、内核编译及驱动开发

    1、安装好相关环境(Ubuntu 18.04) 开发板:orangepi-zero2 交叉编译器:aarch64-none-linux-gnu- 2、安装交叉编译工具: (1)下载并安装交叉编译工具,下载地址如下:Index of /armbian-releases/_toolchain/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 下载好压缩包,将压缩包放到Ubuntu里

    2024年02月03日
    浏览(41)
  • 一步一步学习 Stable Diffusion

    网上看了很多 Stable Diffusion 的视频,还有一些网站的资料之后,决定自己整理一份一步一步学习 Stable Diffusion 的学习资料。 请参照 Windows 11 本地部署 Stable Diffusion web UI 或者 Windows 11 上从零开始基于 wsl-ubuntu 搭建 AI 学习环境及部署多种私有 ChatGPT 进行部署。 访问 Extensions =

    2024年02月09日
    浏览(70)
  • Android驱动开发之如何编译和更换内核

    编译内核可以使用图形化的界面配置,也可以直接使用脚本。在X86_64模拟器环境下,不用交叉编译,而交叉编译工具很容易出现兼容问题,一般也只能使用芯片厂商提供的工具,而不是GNU提供的工具。 android内核开发流程以及架构变化了很多,详情请看 内核官网 内核版本选择

    2024年04月26日
    浏览(30)
  • 算法是如何一步一步优化的?

    英雄算法联盟 - 七月集训 已经开始 6 天,八月算法集训 将于 08月01日 正式开始,目前已经提前开始报名,报名方式参见(八月算法集训报名),想要参加的同学,建议提早报名,因为对于算法零基础的同学,会有一些提前的准备工作,比如需要 1 - 5 天的时间完成预训练 和

    2024年02月12日
    浏览(43)
  • 怎么手机录屏?一步一步教会你操作

    在日常的生活中,我们在看电影或者电视剧的时候,发现其中有一段十分的精彩,想要将其录下来并分享给自己的好友观看,却不知该如何做?其实并不难操作,下面的这篇文章就让我们一起了解一下吧!让你不再为不知道手机怎么录屏而感到苦恼了。 方法一:借助“提词全

    2024年02月11日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包