一般我们在写Makefile的时候为了获取到当前Makefile所在的文件夹路径,会使用TopDIR ?= $(shell pwd)来定义,后续的文件路径都是基于此TopDIR基础上使用。

今天在移植一个rtl8822bu的wifi驱动到平台上编译的时候出现错误,

drivers/net/wireless/rtl8822bu/Makefile:809: /home/liuxueneng/workCode/allwinner_h2_2018-0907/lichee/linux-4.4/rtl8822b.mk: No such file or directory

找不到lichee/linux-4.4/rtl8822b.mk这个文件

打开Makefile看一下,


806 ########### HAL_RTL8822B
807 #################################
808 ifeq ($(CONFIG_RTL8822B), y)
809 include $(TopDIR)/rtl8822b.mk
810 endif

出错的地方正式使用了TopDIR的路径,Makefile的本意是包含当前驱动文件夹下(rtl8822bu)的rtl8822b.mk文件,现在编译的时候却找到了linux-4.4的目录下,说明使用pwd获取到的就是linux-4.4的目录,换句话说这个Makefile在linux-4.4目录下面被调用执行。

现在要修正这个路径获取问题,

仔细看了下这个Makefile,后面还涉及到文件路径指定使用的参考路径 src变量,但是这个变量不是自己定义的,说明是环境别人传递进来的

 242
243 EXTRA_CFLAGS += -I$(src)/platform
244 _PLATFORM_FILES := platform/platform_ops.o
245
246 EXTRA_CFLAGS += -I$(src)/hal/btc

于是把TopDIR也换成这个src,验证了一下编译通过。

TopDIR ?= $(src)

这个src是从linux-4.4/scripts/Makefile.modsign 传进来的。

   1 # ==========================================================================
2 # Signing modules
3 # ==========================================================================
4
5 PHONY := __modsign
6 __modsign:
7
8 include scripts/Kbuild.include
9
10 __modules := $(sort $(shell grep -h '\.ko$$' /dev/null $(wildcard $(MODVERDIR)/*.mod)))
11 modules := $(patsubst %.o,%.ko,$(wildcard $(__modules:.ko=.o)))
12
13 PHONY += $(modules)
14 __modsign: $(modules)
15 @:
16
17 quiet_cmd_sign_ko = SIGN [M] $(2)/$(notdir $@)
18 cmd_sign_ko = $(mod_sign_cmd) $(2)/$(notdir $@)
19
20 # Modules built outside the kernel source tree go into extra by default
21 INSTALL_MOD_DIR ?= extra
22 ext-mod-dir = $(INSTALL_MOD_DIR)$(subst $(patsubst %/,%,$(KBUILD_EXTMOD)),,$(@D))
23
24 modinst_dir = $(if $(KBUILD_EXTMOD),$(ext-mod-dir),kernel/$(@D))
25
26 $(modules):
27 $(call cmd,sign_ko,$(MODLIB)/$(modinst_dir))
28
29 # Declare the contents of the .PHONY variable as phony. We keep that
30 # information in a variable se we can use it in if_changed and friends.
31
32 .PHONY: $(PHONY)

内核驱动编译之Makefile shell pwd路径问题的更多相关文章

  1. 关于linux内核驱动开发中Makefile编译的问题

    obj-y:打个比方,我要编译的是hello.c这个文件,obj-y就会把hello.c或者hello.c编译生成的hello.s文件链接到内核中去. obj-m:打个比方,我要编译的是hello.c ...

  2. ubuntu下编译内核驱动。

    目的: 1. 驱动热身.网上有很多类似的文章可供参考. 2. 在操作系统中, 编写这个设备的驱动. 3. 为写qemu的watchdog驱动练手. 有朋友问make的 watchdog驱动 需要什么准 ...

  3. RedHat5.8 编译内核驱动 合成initrd.img

    /******************************************************************* * RedHat5.8 编译内核驱动 合成initrd.img ...

  4. 【转】6.4.6 将驱动编译进Linux内核进行测试

    原文网址:http://www.apkbus.com/android-98520-1-1.html 前面几节都是将Linux驱动编译成模块,然后动态装载进行测试.动态装载驱动模块不会随着Android ...

  5. hisi3559的usb无线网卡驱动(rtl8192cu)(一条龙服务:内核编译、驱动编译、iw等工具编译)

    usb无线网卡驱动(rtl8192cu) 内核编译.驱动编译.iw等工具编译  (哈哈,如果有其他问题,麻烦留言:) 环境 板卡:hi3559av100(arm64) 交叉编译链:aarch64-hi ...

  6. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  7. linux 驱动学习笔记01--Linux 内核的编译

    由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...

  8. ubuntu下简单的驱动编译

    转自:http://www.eefocus.com/jefby1990/blog/13-02/291628_c39b8.html 本文是参考了网上多篇帖子而写的算不上什么原创.唯一值得欣慰的只不过在本 ...

  9. linux驱动系列之makefile

    在linux环境下做嵌入式无论是编写应用程序还是驱动程序等等,都需要用make来进行程序的编译,就需要学会自己编写Makefile.Makefile主要的作用有3点:1.决定编译哪些文件 2.怎样编译 ...

随机推荐

  1. 集合Collection ----Set集合

    set系列集合:添加的元素是 无序,不重复,无索引的 ----HashSet: 无序,不重复,无索引 ------LinkHashSet<>:有序不重复无索引(添加顺序) ----Tree ...

  2. POJ题目 1003Hangover(叠放纸牌)

    POJ 1003 叠放纸牌 描述 您可以将多张纸牌悬在桌子上多远?如果您有一张卡,则可以创建一个最大长度为卡长的一半.(我们假设这些卡片必须垂直于桌子.)使用两张卡片,您可以使最上面的卡片悬垂在底部的 ...

  3. 解决使用tomcat服务器发布web项目时出现URL中文乱码的问题

    打开Tomcat的安装路径 打开server.xml文件 在修改端口号的一行既是下图中位置添加 URIEncoding="UTF-8" 就能替换在用eclipse或者myeclip ...

  4. SonarQube汉化

    SonarQube安装后默认是英文,如果不习惯看英文,可以进行汉化,官方提供了汉化插件. 登录后,汉化步骤如下: 需要点击了解风险,不然查询到插件后没有install按钮 搜索Chinese,找到插件 ...

  5. jmeter跑脚本的注意事项

    指标主要看以下几点: 1.jmeter性能测试的报告,不要看平均响应时间,而是看90%响应时间,一般不能超过3s,超过3s则不符合标准2.响应时间超过3s就要优化,但不是平均响应时间,因为最小响应时间 ...

  6. 《使用Jmeter进行批量发送http请求》

    本文主要针对批量接口发送数据 一:接口测试的环境准备 1:JDK的安装:网上下载即可>1.6.0版本以上 2:jemeter工具的下载 (免安装):网上下载即可 3:插件的下载安装地址:http ...

  7. css3中的陌生词汇

    Transform transform属性是静态属性,一旦写到style里面,将会直接显示作用,无任何变化过程.transform的主要用途是用来做元素的特殊变形. 关于图形变形的基础条件当中的原点设 ...

  8. P3288-[SCOI2014]方伯伯运椰子【0/1分数规划,负环】

    正题 题目链接:https://www.luogu.com.cn/problem/P3288 题目大意 给出\(n\)个点\(m\)条边的一张图,没条边\(i\)流量为\(c_i\),费用是\(d_i ...

  9. NVIDIA驱动安装

    在一次重启之后,NVIDIA显卡突然驱动坏了.实验室同学推测可能是有人安装了caffe,导致驱动被升级了.不论如何,需要重装驱动. 我的开发环境:Ubuntu 16.04 + GeForce GTX ...

  10. 数据库MySQL主从-GTID

    1.第一步在主服务器上/etc/my.cnf/下添加 log-bin=log-bin server-id=1 gtid_mode=ON enforce_gtid_consistency 2.第二步:重 ...