linux驱动模块makefile,linux驱动makefile求解

下面是一个网卡驱动的makefile,有很多地方不懂,拿出来和大家一起分析一下:

CURRENT= $(shell uname -r)

TARGET= asix

OBJS= asix.o

MDIR= drivers/net/usb

KDIR= /lib/modules/$(CURRENT)/build

SUBLEVEL= $(shell uname -r | cut -d '.' -f 3 | cut -d '.' -f 1 | cut -d '-' -f 1 | cut -d '_' -f 1)

ifneq (,$(filter $(SUBLEVEL),14 15 16 17 18 19 20 21))

MDIR = drivers/usb/net

endif

EXTRA_CFLAGS = -DEXPORT_SYMTAB #export-objs

PWD = $(shell pwd)

DEST = /lib/modules/$(CURRENT)/kernel/$(MDIR)

obj-m      := $(TARGET).o

default:

make -C $(KDIR) SUBDIRS=$(PWD) modules

$(TARGET).o: $(OBJS)

$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

install:

su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

clean:

$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

.PHONY: modules clean

-include $(KDIR)/Rules.make

第一个问题就是default下面到那句话,—C应该是改变它的目录到KDIR下面,然后在建立模块目标前回到模块源码目录,不知到这样理解对不对?

第二个问题:

$(TARGET).o: $(OBJS)

$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

这句话应该怎么理解?asix.o依赖于asix.o?

第三个:

install:

su -c "cp -v $(TARGET).ko $(DEST) && /sbin/depmod -a"

这个su -c是什么意思?

|

第一个问题,—C是改变它的目录到KDIR下面,执行完该目录下的modules目标后返回当前目录

第二个问题等楼下大虾。。。。

第三个问题,su -c是切换到root用户,并执行引号内的命令

|

$(TARGET).o: $(OBJS)

$(LD) $(LD_RFLAG) -r -o $@ $(OBJS)

第一行意思是, $(OBJS) 执行gcc编译, 目标符号是$(TARGET)

第二行:  ld 是link命令, ld_rflag la的flag

$@ 代表是当前的符号. 也就是这里的 $(TARGET)

最后成型的命令是   ld ld_flag -r -o asix.o asix.o

一般使用情况是:  OBJS 多个.o文件ld成一个 TARGET ..为了方便使用.

跟静态库ar 有点类似

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值