litudong6167
litudong6167
采纳率0%
2017-08-24 09:16

新手的 Linux Makefile 疑问

10

从网上下载了一个GPIO的驱动程序(含.c和Makefile ), 我要编译成.ko,直接make编译不过,查阅了相关资料,但还是有很多地方不明白,麻烦大神们指点下。疑问点

1,Makefile中必须要添加环境变量吗?
2,KERNEL_DIR ?= /home/imx6/my-imx6/02_source/imx_3.0.35_4.1.0/linux-2.6-imx-imx_3.0.35_4.1.0/ 没看懂这句是什么意思,我要怎么匹配我自己的环境,求指点,

我知道KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build 是指定内核库文件的路径

下载的Makefile源码如下:
export ARCH=arm
export CROSS_COMPILE=arm-none-linux-gnueabi-
obj-m:=gpios_rev1.o
KERNEL_DIR ?= /home/imx6/my-imx6/02_source/imx_3.0.35_4.1.0/linux-2.6-imx-imx_3.0.35_4.1.0/
KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build
PWD:=$(shell pwd)
default:
$(MAKE) -C $(KERNEL_DIR) M=$(PWD) modules

clean:
rm -rf .o *.ko *.mod *.order *.symvers


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

5条回答

  • qq_40062917 _小白鱼儿_ 4年前

    1,Makefile中必须要添加环境变量吗?
    Makefile和环境变量没关系,但是如果需要的话必须添加上

    2.这句话就是搞死你path为 /home/imx6/my-imx6/02_source/imx_3.0.35_4.1.0/linux-2.6-imx-imx_3.0.35_4.1.0/

    点赞 评论 复制链接分享
  • GreatProgramer PrettyBoy.ou 4年前

    具体你的问题其实4L已经讲了。给点小小的建议:
    1.Makeifile在Unix下必不可少的项目管理方式,初次接触需要学习的东西很多,你可以根据你遇到的问题在下面链接的文章里搜索:
    比如你不明白makefile环境变量,那你就在文章中搜索,专门查看环境变量那一章节,其中遇到不懂的多问身边的人或上网查找;
    2.在时间充裕的时候阅读全文,一定要边看边练,这样效果才好;
    (文章链接:http://blog.csdn.net/wody87/article/details/4557835?locationNum=3&fps=1)

    点赞 评论 复制链接分享
  • ChaoY1116 猿氏悟语 4年前

    1,Makefile中必须要添加环境变量吗?
    2,KERNEL_DIR ?= /home/imx6/my-imx6/02_source/imx_3.0.35_4.1.0/linux-2.6-imx-imx_3.0.35_4.1.0/ 没看懂这句是什么意思,我要怎么匹配我自己的环境,求指点,
    我知道KERNEL_DIR ?= /lib/modules/$(shell uname -r)/build 是指定内核库文件的路径

    回答如下:
    1. makefile不一定要必须添加环境变量,如果系统中所配置的环境变量已经满足了要求,就不需要配置。
    2. ?= 是如果没有被赋值过就赋予等号后面的值
    所以只是指定了这个变量所对应的值。

    点赞 评论 复制链接分享
  • a617996505 世黎 4年前

    编ko文件一般只要两个条件
    1.你的交叉编译器
    2.要运行在什么内核里面的内涵路径, 至于你问的KERNEL_DIR 就是内核路径了(注意:要填绝对路径)

    点赞 评论 复制链接分享
  • morgerton 白萝卜blb 4年前

    makeFile不指定环境变量 怎么找到变量的值? 不管啥都需要环境变量的,只不过配置的方式不一样。
    你试试改变一下这几个变量的值试一下:
    KERNEL_DIR ?; 还有 PWD: 的值改成你的变量路径试一下,找不到类库的话就直接搜看看你的对应的变量的位置。

    点赞 评论 复制链接分享