在内核目录外对驱动程序进行编译
1.在内核目录中需要对相关信息进行配置以适应不同架构的开发板,需要设置以下相关环境变量:
1.1板子架构 ARCH
1.2交叉编译工具 CROSS_COMPILE
1.3工具链路径 PATH
2.当上述环境变量配置完成之后就可以在内核目录以外对驱动进行编译,需要对Makefile进行修改;
选用交叉编译工具链时需要注意工具链所使用的的ARM指令集是否与目标板指令集相同,否则会导致交叉编译出来的可执行文件无法运行,与目标板无法适配。

配置环境变量
或者使用export单独设置如:

修改makefile,设置编译规则

KVERSION = $(shell uname -r)            //内核版本
KERN_DIR =  /lib/modules/$(KVERSION)/build     //内核目录all:make -C $(KERN_DIR) M=`pwd` modules      //-C $(KERN_DIR)为内核目录    M=`pwd`编译当前目录模块     modules编译模块clean:make -C $(KERN_DIR) M=`pwd` modules cleanrm -rf modules.orderobj-m   += hello_drv.o             //描述编译哪个模块
~

在内核目录中对驱动程序进行编译
在内核目录中的Makefile中编译选项通常有以下三种形式
obj-m为将驱动程序编译成模块的形式
obj-y为将驱动程序编译进内核中
第三种形式可以通过使用make menuconfig指令对编译的形式进行设置

对于第三种形式,变量的设置使用的是当前目录下.config文件中的设置,而.config就是通过make xxx_defconfig编译将xxx_defconfig复制成的.config文件。修改.config的相关配置需要用到make menuconfig,使用该命令会出现Ncurses界面,这个界面又是由当前目录下Kconfig文件对其进行设定的。

利用第三种形式编译一个驱动文件过程:
编写之前的有关信息
添加新程序之前的menuconfig

界面中的选项来自于各个目录下的Kconfig

查看内核目录里/driver/char中的Kconfig

1.在内核目录下使用gedit文本编辑工具进入相应的目录下Kconfig,添加新配置选项,设置为bool变量,只能有两种取值方式一种是编译进内核一种是无。

2.内核目录下执行make menuconfig
通过搜索找到新添加的配置项CAOHAI_LED,以及其在界面中的位置

在对应的界面路径中找到对应的配置选项

3.内核目录中使用vi .config查看配置

找到对应的选项可以看到已经被按照默认选项编译进内核

其他注意事项:
如果编译时不包含该选项时:
在make menuconfig中设置该选项

此时可以看到该项被注释掉

如果想要将配置项设置为编译成模块就要重新设置Kconfig中的相关选项将bool换成tristate

在make menuconfig界面中设置为编译成模块的形式

再查看.config中的形式

将配置项与对应的驱动程序相关联
进入到对应的驱动目录下,此处为内核的/driver/char内,在Makefile中添加相应的配置项

之后就可以在内核目录下使用make进行编译

learned from:韦东山

Linux驱动——编译驱动的两种形式(内核目录外、内核目录中)相关推荐

  1. c语言中的普通字符包括什么,【判断题】C语言中的字符常量通常有两种形式:普通字符和转义字符。...

    [判断题]C语言中的字符常量通常有两种形式:普通字符和转义字符. 更多相关问题 ---Can you speak French?---Yes, but only____.A.a littleB.lit ...

  2. SQL 关于apply的两种形式cross apply 和 outer apply

    SQL 关于apply的两种形式cross apply 和 outer apply 阅读目录 SQL 关于apply的两种形式cross apply 和 outer apply Sql学习第四天--S ...

  3. 【算法笔记】莫比乌斯反演(包含定理,两种形式的证明及入门经典模板)

    整理的算法模板合集: ACM模板 目录 一.莫比乌斯反演 二.几个概念和定理 三.两种形式的莫比乌斯反演证明 四.POJ 3904 Sky Code(入门例题) 一.莫比乌斯反演 学习笔记,我是看这个 ...

  4. linux两种方式改变文件权限,Linux更改文件权限的两种方式

    今天小编要跟大家分享一篇关于Linux更改文件权限的方式,喜欢Linux的小伙伴来看一看吧. 我们知道·Linux系统最主要的特点之一就是--Linux系统是多用户.多任务的操作系统. 何为多用户?就 ...

  5. java语言的多态性及特点_Java中的方法的多态性有两种形式:( )和( )。_学小易找答案...

    [填空题]已知函数 ,则微分 . [填空题]. [单选题]71.用转动小滑板法车圆锥时产生( )误差的原因是小滑板转动角度计算错误. [单选题] [填空题]Java中的方法的多态性有两种形式:( )和 ...

  6. Linux修改主机名的两种方法

    Linux修改主机名的两种方法 文章目录 先展示一下效果 一.通过hostname命令直接更改主机名(不是永久) 1.显示当前的主机名 2.更改主机名 二.通过修改配置文件(永久改) 1.hostna ...

  7. Go 两种形式的“类型转换”

    Go 的类型转换常常让人有点迷,有两种形式的"类型转换": Type(obj) :这种形式的类型转换要求 obj 对象的类型和 Type 是等价类型,即实现了相同的方法 obj.( ...

  8. include的两种形式、CPP的搜索路径

    文章目录 1 include的两种形式.CPP的搜索路径 1 include的两种形式.CPP的搜索路径 #include "stdio.h" //1.源文件所在路径//2.-I选 ...

  9. 注意力机制的两种形式

    注意力机制的两种形式: 一.additive attention(tensorflow里面称为Bahdanau attention)        这种机制的定义引用了论文https://arxiv. ...

  10. Python基础day05【函数(函数传参的两种形式、函数形参)、拆包、引用、可变与不可变类型、引用做函数参数注意点】

    视频.源码.课件.软件.笔记:超全面Python基础入门教程[十天课程]博客笔记汇总表[黑马程序员]    目录 0.复习 1.函数传参的两种形式[掌握] 2.函数形参 2.1.缺省参数(默认参数) ...

最新文章

  1. 2-flutter 之HelloWorld
  2. linux 重新加载驱动程序,在linux中模拟设备驱动程序崩溃。让python重新加载i
  3. 汇编语言之寄存器使用(bx,si,di,bp)
  4. 自旋锁spinlock解析
  5. 基于mcp940反编译Minecraft源代码
  6. IIS上部署Net.Core
  7. 【Qt】Qt之进程间通信(共享内存)【转】
  8. Python——模拟轮盘抽奖游戏
  9. JavaScript:日期选择器组件的使用
  10. Map ,Reduce
  11. Dede系统oday漏洞临时修补方法
  12. 简单实用的web打印方案-网页精准打印
  13. 关于社会工程学的利用
  14. 线性代数(4):伴随矩阵、逆矩阵和矩阵的秩
  15. 交互器、linux下的常用命令
  16. 微信小程序实训day03
  17. 微信小程序 - BILIBILI-demo
  18. 烟雾检测电路c语言程序,基于51单片机火灾报警器系统烟雾检测温度检测设计(原理图+程序仿真+论文)...
  19. 关于使用Navicat,Mysql Workbench,PowerDesigner根据mysql数据库生成ER(实体联系图)的解决方案的总结
  20. latex 数学符号-- 希腊字母、上下标、分数、运算符、箭头、标注、分隔符、省略号、空白间距

热门文章

  1. fx991计算器矩阵计算机,如何用卡西欧fx991计算器算矩阵
  2. 程序员工具箱--我常用的工具
  3. 安装Oracle中文乱码
  4. AHCI和IDE的区别,如何在AHCI模式下安装系统
  5. 公司企业邮箱IP被列入国际黑名单组织怎么解决
  6. 计算机维修管理平台软件,美萍电脑行业管理软件(电脑业务管理系统、电脑维修管理系统、组装业务、电脑装机管理软件)--管理软件,美萍是专家!...
  7. 【金融计量学】面板数据(自用笔记,第一次写)
  8. ERP管理软件哪一家好?比较好的ERP管理系统软件推荐
  9. 计算机网络中的所谓资源是指硬件软件资源,计算机网络试题..doc
  10. C语言课程设计报告-菜单设计