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

2024-06-15 22:20

本文主要是介绍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_DRIVERtristate "gz1853 key driver"default yhelpcompile 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

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

           

这篇关于linux驱动学习(八)之内核定制与裁剪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1064740

相关文章

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

在Linux终端中统计非二进制文件行数的实现方法

《在Linux终端中统计非二进制文件行数的实现方法》在Linux系统中,有时需要统计非二进制文件(如CSV、TXT文件)的行数,而不希望手动打开文件进行查看,例如,在处理大型日志文件、数据文件时,了解... 目录在linux终端中统计非二进制文件的行数技术背景实现步骤1. 使用wc命令2. 使用grep命令

Linux如何快速检查服务器的硬件配置和性能指标

《Linux如何快速检查服务器的硬件配置和性能指标》在运维和开发工作中,我们经常需要快速检查Linux服务器的硬件配置和性能指标,本文将以CentOS为例,介绍如何通过命令行快速获取这些关键信息,... 目录引言一、查询CPU核心数编程(几C?)1. 使用 nproc(最简单)2. 使用 lscpu(详细信

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

基于Linux的ffmpeg python的关键帧抽取

《基于Linux的ffmpegpython的关键帧抽取》本文主要介绍了基于Linux的ffmpegpython的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学... 目录1.FFmpeg的环境配置1) 创建一个虚拟环境envjavascript2) ffmpeg-py

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Linux脚本(shell)的使用方式

《Linux脚本(shell)的使用方式》:本文主要介绍Linux脚本(shell)的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录概述语法详解数学运算表达式Shell变量变量分类环境变量Shell内部变量自定义变量:定义、赋值自定义变量:引用、修改、删

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

详解Linux中常见环境变量的特点与设置

《详解Linux中常见环境变量的特点与设置》环境变量是操作系统和用户设置的一些动态键值对,为运行的程序提供配置信息,理解环境变量对于系统管理、软件开发都很重要,下面小编就为大家详细介绍一下吧... 目录前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变