2019独角兽企业重金招聘Python工程师标准>>>

一般在编译linux驱动时,我们需要在交叉编译环境中进行编译,所以要在编译环境中搭建交叉编译环境。编写驱动的makefile使需要制定驱动依赖的内核的路径,makefile写法如下:
  KERN_DIR = /xxx/xxx/linux-2.6.22.6
  
  all:
      make -C $(KERN_DIR) M=`pwd` modules 
  
  clean:
      make -C $(KERN_DIR) M=`pwd` modules clean
      rm -rf modules.order
  
 obj-m    += buttons.o

KERN_DIR=/XXX/XXX/linux-2.6.22.6,这句是对KERN_DIR进行赋值,确定后面使用内核源码时的内核源码路径。

  make -C $(KERN_DIR) M='pwd' modules,这句是makefile的规则:-C选项的作用是指将当前工作目录转移到你所指定的位置,当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile。

M=$(PWD) 表明然后从内核makefile中返回到当前目录继续读入、执行当前的Makefile。M是内核根目录下的Makefile中使用的变量,"M="选项的作用是,当用户需要以某个内核为基础编译一个外部模块的话,需要在make modules命令中加入"m=dir",程序会自动到你所指定的dir目录中查找模块源码,将其编译,生成ko文件。M=‘pwd’这句话是用来制定我们编译的驱动的路径。这句可以这样来写PWD:=$(shell pwd)  M='PWD'。

================================================================================

当make的目标为all时,-C $(KDIR) 指明跳转到内核源码目录下读取那里的Makefile;M=$(PWD) 表明然后返回到当前目录继续读入、执行当前的Makefile。
当从内核源码目录返回时,KERNELRELEASE已被被定义,kbuild也被启动去解析kbuild语法的语句,make将继续读取else之前的内容,其为kbuild语法的语句, 指明模块源码中各文件的依赖关系,以及要生成的目标模块名。

转载于:https://my.oschina.net/u/920274/blog/2986594

编写驱动的makefile使要相关推荐

  1. NanoPi NEO Air使用十:自己编写驱动来控制LED

    NanoPi NEO Air使用一:介绍 NanoPi NEO Air使用二:固件烧录 NanoPi NEO Air使用三:OverlayFS.CPU温度和频率.wifi.蓝牙.npi-config ...

  2. 基于驱动框架编写驱动代码

    前言:基于上一个博文对 linux驱动的认知的了解,那么现在开始我们正式来进入学习基于驱动框架来编写驱动代码,那么接下来我们先来看看一个最简单的驱动框架代码 一.字符设备驱动框架代码与应用层代码 驱动 ...

  3. i.MX 6ULL 驱动开发 二十九:向 Linux 内核中添加自己编写驱动

    一.概述 Linux 内核编译流程如下: 1.配置 Linux 内核. 2.编译 Linux 内核. 说明:进入 Linux 内核源码,使用 make help 参看相关配置. 二.make menu ...

  4. 【详解一】Nand Flash 编写驱动之前要了解的知识

    1.1. 一些相关的名词的解释 1.1.1. Non-Volatile Memory非易失性存储器 NVM,即NV (RAM)Memory,断电数据也不会丢失的存储器,比如Nand Flash,Nor ...

  5. 基于框架编写驱动代码

    操作驱动的上层代码(pin4test) #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> ...

  6. 微软通信winusb —— 不再为你的usb设备编写驱动

    最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--微软通信 [blog.csdn.net/lanmanck] 曾几何时我们找工作还发现有个驱动工程师职位,薪月也不低,没触接过的人代码压根 ...

  7. linux内核源码只有makefile文件没有c文件,linux内核代码的编写初步以及makefile的配置...

    在linux内核代码开发中,头文件不能包含标准C头文件,只能采用GNC标准 而且内核开发中没有main函数,只有init 和 exit ,这是每个内核模块中必须要包含的函数模块. 在GNU C标准中, ...

  8. visual studio 2019 + WinDDK 7600.16385.0编写驱动

    驱动版本WinDDK 7600.16385.0 IDE:visual studio 2019 新建空白项目 配置类型从exe改为生成文件 配置完后,配置属性中就只剩基础配置了,没有C/C++.链接器等 ...

  9. winusb —— 不再为你的usb设备编写驱动

    [blog.csdn.net/lanmanck] 曾几何时我们找工作还发现有个驱动工程师职位,月薪也不低,没接触过的人代码压根看不懂. 今天可好了,如果不太追求差异化,不用驱动也能让系统与USB设备通 ...

最新文章

  1. 美媒:谷歌巨型数据中心和美国小镇“抢水”
  2. 基于Vue+ElementUI的后台管理系统开发的总结
  3. hdu - 2667 Proving Equivalences(强连通)
  4. Qt:Windows编程—Qt实现进程管理
  5. sklearn 特征选择与特征抽取 —— feature_selection、feature_extraction
  6. ubuntu,win10 释放IP,重新获取IP
  7. 3dsmax给物体贴图之后,物体不显示贴图的解决办法
  8. Java onvif协议,Java onvif协议通用协议获取rtsp地址
  9. 【golang】kafka
  10. Ubuntu16.04安装网易云音乐后打不开
  11. 运行linux浏览器,开源也疯狂:5款Linux浏览器推荐
  12. System.DateUtils Simple trimming functions部分
  13. OpenCV教程(5)函数整理
  14. RFID建筑工地人员考勤管理解决方案——铨顺宏FUWIT
  15. Java开发必备:java帮助文档网址下载或在线帮助
  16. 一、Groovy语法(一):基础语法
  17. Eric靶机渗透测试
  18. Quectel EC600N-CN 中尺寸物联网首选LTE Cat 1模块[移远通信]
  19. C++开发者的机会在哪里?盘点C/C++就业方向
  20. 记一次成功把Vue2后台项目改造成Vite2的踩坑经历

热门文章

  1. python csv库,Python 中导入csv数据的三种方法
  2. debian android环境搭建,Debian类系统环境变量的配置
  3. Java的scjp_java scjp
  4. swiper 定义放多少张图片_swiper轮播问题之二:默认显示3张图片,中间显示全部两边显示部分...
  5. delphi listview动态添加图片_网站图片如何优化适合收录
  6. 时间立即同步命令_Redis复制:主从同步
  7. 利用startup.m文件设置matlab的Current Folder的默认文件夹
  8. 使用PlanAhead查看Virtex-7系列FPGA的底层架构
  9. Scala函数的调用
  10. LVS集群---做前端调度器搭建使用