对于学习嵌入式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可以看到,文件已经删除了。