chrdevbase驱动之Makefile优化(指定路径复制、删除文件)

        对于学习嵌入式linux驱动篇的chrdevbase虚拟设备驱动时,需要将chrdevbase.c编译成.ko文件,应用层程序里需要把chrdevbaseAPP编译成chrdevbaseAPP可执行文件,此外还需要将生成的*.ko *APP文件拷贝至指定目录下,每次修改或者编译代码时,都需要输入一定量的命令行代码,对于时间有一定的浪费,于是想着使用Makefile或者shell脚本节约一点时间。以下两种方式都可以实现指定文件夹的文件删除操作;

1.Makefile文件

KERNELDIR := /home/mask/linux/imx6ull/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga
CURRENT_PATH := $(shell pwd)
   
SRC_FILES := chrdevbaseAPP chrdevbase.ko
TARGET_FOLDER := /home/mask/linux/nfs/rootfs/lib/modules/4.1.15
DELETE_FILE1  := /home/mask/linux/nfs/rootfs/lib/modules/4.1.15/*APP
DELETE_FILE2  := /home/mask/linux/nfs/rootfs/lib/modules/4.1.15/*.ko

obj-m := chrdevbase.o

build: kernel_modules kernel_APP

kernel_APP:
   arm-linux-gnueabihf-gcc -o chrdevbaseAPP chrdevbaseAPP.c

kernel_modules:
   $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules

clean:
   $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
   rm -f *.ko *APP
   sudo rm -f $(DELETE_FILE1) $(DELETE_FILE2)

copy:
   sudo cp $(SRC_FILES) $(TARGET_FOLDER) -f
KERNELDIR := /home/mask/linux/imx6ull/linux/linux-imx-rel_imx_4.1.15_2.1.0_ga

linux内核的代码路径

CURRENT_PATH := $(shell pwd)

通过shell命令获取当前路径

SRC_FILES := chrdevbaseAPP chrdevbase.ko

目标文件,需要复制的目标文件

TARGET_FOLDER := /home/mask/linux/nfs/rootfs/lib/modules/4.1.15
DELETE_FILE1  := /home/mask/linux/nfs/rootfs/lib/modules/4.1.15/*APP
DELETE_FILE2  := /home/mask/linux/nfs/rootfs/lib/modules/4.1.15/*.ko

分别是

TARGET_FOLDER :目标路径

DELETE_FILE1:需要删除的文件1

DELETE_FILE2:需要删除的文件2

obj-m := chrdevbase.o

obj-m 表示将 chrdevbase.c 这个文件编译为 chrdevbase.ko 模块。

build: kernel_modules kernel_APP

编译 kernel_modules kernel_APP

kernel_APP:
   arm-linux-gnueabihf-gcc -o chrdevbaseAPP chrdevbaseAPP.c

使用交叉编译器将chrdevbaseAPP.c编译成chrdevbaseAPP

kernel_modules:
   $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) modules

module表示编译模块,-C表示将当前路径切换到指定路径。也就是 KERNERLDIR 目录。 M 表示模块源码目录,“make modules”命令中加入 M=dir 以后程序会自动到指定的 dir 目录中读取模块的源码并将其编译为.ko 文件。

clean:
   $(MAKE) -C $(KERNELDIR) M=$(CURRENT_PATH) clean
   rm -f *.ko *APP
   sudo rm -f $(DELETE_FILE1) $(DELETE_FILE2)

清除编译的模块,并把当前路径下生成的*.ko文件 *APP文件删除,使用超级管理员权限吧 需要删除的文件删除

copy:
   sudo cp $(SRC_FILES) $(TARGET_FOLDER) -f

将生成的目标文件拷贝至指定路径里去。-f替换

二实验现象

进入文件夹中,使用make指令

使用make指令可以看到,chrdevbase.ko跟chrdevbaseAPP文件都生成出来了

使用make copy指令,将chrdevbase.ko跟chrdevbaseAPP复制到/home/mask/linux/nfs/lib/modules/4.1.15中

打开Mobaxterm 可以看到这两个文件出现在了目标路劲中

接着使用make clean指令

通过ls指令可以看到,通过makefile生成的文件都成功清理了

通过MobaXterm可以看到,文件已经删除了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值