linux驱动学习(八)之内核定制与裁剪

一、内核的配置

1) 把相关硬件平台的配置文件拷贝给.config

2) 执行make menuconfig命令

关于内核配置说明:
    Arrow keys navigate the menu. 方向键对菜单有效
    <Enter> selects submenus --->. 如果有该符号"--->",则按Enter表示进入子菜单
    Highlighted letters are hotkeys. 
    Pressing <Y> includes, <N> 或者 空格 excludes, <M> modularizes features.  Press <Esc> to exit, <?> for Help, </> for Search.
    Legend: [*] built-in  [ ] excluded  <M> module  < > module capable 

    1) Y ---->输入Y时,则表示包含到内核中,符号显示[*]	 
	2)<N> 或者 空格 ---->输入N或者空格,则表示不包含到内核,符号显示 [ ]	
	3)<M> ---->输入M,则表示驱动以module形式存在,符号显示	<M>	
	4)CONFIG_ 前缀是由系统自动增加,所以要查找时,可以手动加前缀或者不加

二、将驱动程序包含到内核配置

像内核的源码一样:

        kernel ----> drivers ----->每一个独立的驱动程序都通过一个目录来进行管理,并且每一个驱动程序包含一个Kconfig和Makefile
      Kconfig---->饭店提供的菜单列表
      Makefile--->饭店里面的厨师

第一步:创建自己的驱动程序目录:如key1853 ----> kernel/drivers/char/key1853;包含驱动源文件KconfigMakefile

第二步:根据需要来修改Kconfig文件和Makefile文件

Kconfig文件:

#
# Key Driver 1853 configuration
#

config GZ1850_KEY_DRIVER
	tristate "gz1853 key driver"
	default y
	help
	compile for key2-gpioa28 driver,y for kernel,m for module.

Makefile文件:

obj-$(CONFIG_GZ1850_KEY_DRIVER) += key_drv.o

注意:模块已加入到内核源码中,但是,新的独立的模块并没有跟内核源码进行关联,所以在执行make menuconfig命令时,并看不到新独立模块的菜单配置

第三步:为了独立的模块能够关联到内核源码,配置修改该模块的上一级的Kconfig和Makefile文件。

在Kconfig文件中,增加一行代码:

source "drivers/char/key1853/Kconfig"

在Makefile文件中,增加一行代码:

obj-$(CONFIG_GZ1850_KEY_DRIVER)        += key1853/

重新执行make menuconfig命令时,则可以看到驱动的菜单:

[ ] X6818 humity driver                           
[ ] X6818 led driver                              	
<M> gz1853 key driver                             
[*] Memory device driver                          
[*] /dev/kmem virtual device support              
    Serial drivers  --->                          
[*] TTY driver to output user messages via printk 
[ ] ARM JTAG DCC console                          
< > IPMI top-level message handler  --->          
<*> Hardware Random Number Generator Core support 

第四步:重新拷贝.config到相关的硬件平台(arch/arm/configs/硬件平台的配置文件)

cp .config arch/arm/configs/GEC6818_defconfig

第五步:重新编译内核

CC      kernel/configs.o
LD      drivers/char/key1853/built-in.o
CC [M]  drivers/char/key1853/key_drv.o ---->编译驱动程序
CC      drivers/char/key1853/key_drv.mod.o
Kernel: arch/arm/boot/Image is ready
GZIP    arch/arm/boot/compressed/piggy.gzip
LD [M]  drivers/char/key1853/key_drv.ko ---->如果该模块配置为M,则该目录下会生成一个.ko文件

CC      drivers/char/key1853/key_drv.o  ---->如果设置模块为Y,则编译直接到内核中
LD      kernel/built-in.o
LD      drivers/char/key1853/built-in.o
LD      drivers/char/built-in.o
LD      drivers/built-in.o

第六步:烧写内核

第七步:查看/dev目录下,是否有该驱动程序对应的设备文件

crw-rw----    1 root     root       10,  62 Jan  1  1970 key_drv

第八步:可以执行驱动程序对应的应用测试程序

 [root@GEC6818 /6818_driver]#./test ------>ok

觉得有帮助的话,打赏一下呗。。

           

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Ambari】Python调用Rest API 获取集群状态信息并发送钉钉告警

&#x1f341; 博主 "开着拖拉机回家"带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——&#x1f390;开着拖拉机回家_大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341; 希望本文能够给您带来一定的帮助&#x1f338;文…

路由控制和策略路由

文章目录 一、路由控制&#xff08;1&#xff09;、前言1.1.1-路由策略 &#xff08;2&#xff09;、正反掩码和通配符1.2.1-通配符 &#xff08;3&#xff09;、ACL1.3.1-ACL步长1.3.2-步长的作用1.3.3-TCP/UDP端口号 实验1:实验2: 二、前缀列表实验1:2.1.1-前缀列表的表达式2…

全功能知识付费小程序源码系统 界面支持万能DIY装修 带完整的安装代码包以及搭建部署教程

系统概述 在当今数字化时代&#xff0c;知识付费已经成为一种重要的商业模式。为了满足市场对于便捷、高效、个性化的知识付费解决方案的需求&#xff0c;小编给大家分享一款全功能知识付费小程序源码系统。这一系统不仅具备界面支持万能 DIY 装修的独特优势&#xff0c;还配备…

NetSarang Xshell Xftp v7 解锁版 (SSH远程终端工具)

前言 Xshell 7是一款SSH远程终端工具&#xff0c;轻松管理远程服务器&#xff0c;会话管理器&#xff0c;支持多选项卡管理主机&#xff0c;支持远程协议Telnet、Rlogin、SSH/SSH PKCS&#xff03;11、SFTP、Serial&#xff0c;具有Unicode编码支持、动态端口转发、自定义键盘…

【机器学习】——【线性回归模型】——详细【学习路线】

目录 1. 引言 2. 线性回归理论基础 2.1 线性模型概述 2.2 最小二乘法 3. 数学基础 3.1 矩阵运算 3.2 微积分 3.3 统计学 4. 实现与应用 4.1 使用Scikit-learn实现线性回归 4.2 模型评估 5. 深入理解 5.1 多元线性回归 5.2 特征选择 5.3 理解模型内部 6. 实战与项…

MacOS - 3 招快速去除桌面上的图标文件

在平时用 Mac 电脑的时候&#xff0c;会产生许多我们不用的或废弃的图标、文件&#xff0c;在 Mac 桌面上显得很乱&#xff0c;不仅影响美观也直接影响了我们工作的心情。下面我们分享 3 招快速去除桌面上的图标或文件的方法&#xff0c;有需要的朋友可以试一试。 1. 右键删除&…

Linux常用操作大全(上)

Linux常用操作 文章目录 Linux常用操作一、各类小技巧**1.ctrl c 强制停止****2.ctrl d 退出或登出**3.历史命令搜索4.光标移动快捷键5.清屏6.复制Ctrlshiftc7.粘贴Ctrlshiftv 二、软件安装1.概念2.yum与apt 三、systemctl控制服务四、软链接ln五、日期时区1.date查看日期2.修…

LN6291 2.5A 高效率升压 DC/DC 电压调整器芯片IC

产品概述 LN6291H是一款微小型、高效率、升压型DC/DC调整器。电路由电流模COT控制环路&#xff0c;误差放大器&#xff0c;斜坡补偿电路&#xff0c;比较器和功率开关等模块组成。该芯片可在较宽负载范围内高效稳定的工作&#xff0c;内置一个2.5A的功率开关和软启动保…

如何利用Python处理站点数据、格点观测数据、再分析ERA5;GLDAS、遥感数据、水文数据、气象数据、陆面模式数据、气候变化数据等

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;Python能够运行在Linux、Windows、Macintosh、AIX操作系统上及不同平台&#xff08;x86和arm&#xff09;&#xff0c;Python简洁的语法和对动态输入的支持&#xff0c;再加上解释性语言的本质&…

关于IOMMU问题的扩展

关联CSDN&#xff1a; Steam Deck OLED WLAN下载速率过低问题的排查和解决-CSDN博客 前言 如前所述&#xff0c;Steam Deck OLED WLAN速率低问题和IOMMU有一定的关系&#xff0c;这里我们对IOMMU为什么会对速率有影响进行一个较深入的理解。 对于IOMMU我相信大家通过网上的…

游戏开发丨基于PyGame的消消乐小游戏

文章目录 写在前面PyGame消消乐注意事项系列文章写在后面 写在前面 本期内容&#xff1a;基于pygame实现喜羊羊与灰太狼版消消乐小游戏 下载地址&#xff1a;https://download.csdn.net/download/m0_68111267/88700193 实验环境 python3.11及以上pycharmpygame 安装pygame…

linux下编译安装和使用cURL库(含有openssl)

cURL是一个利用URL语法指定各种协议(如HTTP、HTTPS、FTP等)进行数据传输的工具,它以客户端的身份,允许用户通过命令行与服务器交互。cURL库(libcurl)是cURL的编程接口(API),提供了一套丰富的函数,供开发者在自己的应用程序中实现网络传输功能 cURL库是网络编程中不可…

群辉USB Copy套件的使用

目录 一、套件安装 二、插入USB设备 三、使用 四、故障排除 有了群辉NAS后,很多U盘、移动硬盘的数据需要备份到NAS中,这时就可以考虑使用USB Copy这个套件了。 USB Copy 乃是群晖上可用于和外接存储设备进行文件复制的一个工具,我常常借助它把外置存储设备的文件拷贝至…

react+ts实现 父子组件通信

创建tsreact的命令 npx create-react-app react-ts --template typescript 使用React和TypeScript进行开发与使用JavaScript进行开发在逻辑上是相同的&#xff0c;但TypeScript增加了类型安全性&#xff0c;这在大型应用中可以减少错误&#xff0c;提高代码的可维护性。下面我…

云计算 |(五)云基础设施机制

文章目录 📚云基础设施机制🐇逻辑网络边界🐇虚拟防火墙🐇虚拟专用网络VPN🐇虚拟服务器🐇云存储设备⭐️云存储等级⭐️网络存储接口⭐️对象存储接口⭐️数据库存储接口🐇云使用监控⭐️监控代理⭐️资源代理⭐️轮询代理📚云基础设施机制 🐇逻辑网络边界 将…

“Docker之道:优雅管理容器数据的艺术“

目录 1. 容器数据卷 1.1 容器卷的概念 1.2 容器卷的使用 1.3 个人案例实现容器卷挂载 1.4 MySQL同步数据案例&#xff08;容器数据卷操作&#xff09; 1.4.1 获取 MySQL 镜像 1.4.2 运行 MySQL 容器并配置数据持久化 参数说明&#xff1a; 1.4.3 测试 MySQL 连接 1.4…

表面声波滤波器——叉指换能器(3)

叉指换能器(interdigital transducers&#xff0c;IDT) 是在压电基片表面激励和检测声表面波&#xff0c;从而实现电信号和声信号间的相互转换。 叉指换能器由在压电基片表面上沉积两组互相交错&#xff0c;周期分布的状金属条带(叉指电极)组成&#xff0c;每组电极和一个汇流…

Python Pyperclip:获取剪贴板中的值

哈喽&#xff0c;大家好&#xff0c;我是木头左&#xff01; 在日常生活和工作中&#xff0c;经常需要将一些信息从一个地方复制到另一个地方。这时&#xff0c;剪贴板就显得尤为重要了。Python作为一门强大的编程语言&#xff0c;也提供了许多方便的工具来帮助处理剪贴板中的数…

【数据结构与算法(C语言)】离散事件模拟- 单链表和队列的混合实际应用

目录 1. 前言2. 流程图3. 数据结构3.1 单链表3.2 链式队列 4. 核心函数4.1 银行业务模拟 void BankSimulation()4.2 初始化 void OpenForDay()4.3 客户到达 void CustomerArrived(Event en)4.4 客户离开 void CustomerArrived(Event en) 5. 非核心函数5.1 新建客户 NewCustomer…

eNSP学习——配置基于全局地址池的DHCP

目录 主要命令 原理概述 实验目的 实验场景 实验拓扑 实验编址 实验步骤 1、基本配置 2、配置基于全局地址池的 DHCP Server 3、配置DHCP Client 主要命令 [R1]dhcp enable //开启 DHCP功能//创建一个全局地址池&#xff0c;地址池名称为huawei1 [R1]ip pool h…