| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> Linux驱动实践:带你一步一步编译内核驱动程序 -> 正文阅读 |
|
[系统运维]Linux驱动实践:带你一步一步编译内核驱动程序 |
文章目录别人的经验,我们的阶梯! 大家好,我是道哥。今天给大家分享一些笔记本里的一些存货: Linux 系统中的驱动和中断相关。 大概会用 6~7 篇的文章,由浅入深的为大家介绍 文章的顺序,也是我之前自己学习时的顺序。 以前的学习记录比较零散,现在只是把它们按照一定的顺序重新梳理一下。 这几篇文章,理论知识会少一些,更注重实际的操作。 我会把操作用引导的代码,全部上传到网盘上,在文末有下载说明。 只要根据文中介绍的步骤进行操作,就一定可以操作成功。 学习的困惑记得以前我在开始学习驱动开发的时候,找来很多文章、资料来学习,但是总是觉得缺少了点全局视角。 就好像:我想看清一座山的全貌,但总是被困在一个、又一个山谷中一样。 主要的困惑有 3 点:
因此,这几篇文章我们就从最简单的驱动模块编译开始,然后介绍字符设备驱动程序。 在这部分,会以 GPIO 为例子,重点描述其中的关键节点。 最后再介绍在中断处理程序中,如何利用信号量、小任务、工作队列,把内核事件传递到应用层来处理。 作为第一个开篇文章,从最简单的内核编译开始。 实际操作一下:如何把一个最简单的驱动程序(
实践环境
编译
下载之后,把
编译进内核创建驱动程序目录
对于一个驱动来说,最重要的就是
只要按照固定的格式来编写这 创建源文件首先是源码,在
源文件
有两个小地方注意一下:
创建 Kconfig 文件这个文件是用来对内核进行配置的,当执行 make menuconfig 指令的时候,这个文件就被解析。 先创建文件:
添加如下内容:
第一行内容 config HELLO ,在执行配置的时候,将会生成一个变量 CONFIG_HELLO ,而这个变量,将会在编译的时候,被 Makefile 引用。 最后一行的 default y ,就表示把 CONFIG_HELLO 的值设置成 y,从而让这个驱动被编译到内核中。 现在, 也就是把它登记在 linux-4.15/drivers/Kconfig 文件的末尾:
现在,可以来执行下面指令,看一下具体的配置界面:
第 以后再修改配置参数时,修改的内容就会存储在 .config 文件中, 第 按向下方向键,把高亮定位到 Device Drivers —> ,然后敲回车键,进入到 Device Drivers 的配置界面。 按向下方向键,一直到最后一个条目,就可以看到我们的 hello 驱动了,如下: 可以看到 hello driver 前面显示的是型号 *,这表示:该驱动将会编译进内核。 我们可以按下空格键试一下,会在三种标记中切换:型号,M,空值。M 标记意思是编译成驱动模块。 我们这里选择星号(编译进内核),然后按下右方向键,最下方的几个按键的焦点移动到 按钮上: 按下回车键,就会弹出保存对话框,选择默认保存文件 .config 即可,然后在 按钮高亮的时候,按下回车键即可保存。 此时,在弹出的确认窗口中,选择 此时,返回到 Device Drivers 的配置界面,在最下面的按钮中,选择让 创建 Makefile 文件
其中的内容只有一行:
现在, 在文件 linux-4.15/drivers/Makefile 中的末尾,添加如下内容:
编译万事俱备,只欠编译!依次执行如下指令:
编译为驱动模块编译为驱动模块,也有两种 操作方式: 编译所有的驱动模块
编译成功之后,就可以得到文件: linux-4.15/drivers/hello/hello.ko。 这样的编译指令,是把所有的模块都编译了一次(在输出信息中,可以看到编译了很多模块)。 只编译 hello 这一个驱动模块另外一种编译驱动模块的方式是:进入 这种编译方法,就需要修改
然后,在 验证一下加载驱动:
此时终端窗口是没有任何输出的,需要输入指令 dmesg | tail ,可以看到 hello_init 函数的输出内容: 卸载驱动:
再次输入 dmesg | tail ,可以看到 hello_exit 函数的输出内容: 资料下载在公众号【IOT物联网小镇】的后台回复关键字:1112,获取下列文件的网盘地址:
推荐阅读 【2】C语言指针-从底层原理到花式技巧,用图文和代码帮你讲解透彻 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年2日历 | -2025/2/28 20:56:29- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |