添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

每次编译完驱动后,总是要将一些.ko文件及其测试的app复制到我们的跟文件系统中去,一直调试,一直cp,cp,烦的一批,下面提供一个Makefile

  • make //编译项目
  • make file //在存放.ko文件目录中创建对应项目的目录
  • make install //将*.ko及其应用测试文件移动到根文件中
  • make clean //删除make出来的文件

Makefile

# 1. 使用不同的开发板内核时, 一定要修改KERN_DIR
# 2. KERN_DIR中的内核要事先配置、编译, 为了能编译内核, 要先设置下列环境变量:
# 2.1 ARCH,          比如: export ARCH=arm64
# 2.2 CROSS_COMPILE, 比如: export CROSS_COMPILE=aarch64-linux-gnu-
# 2.3 PATH,          比如: export PATH=$PATH:/home/book/100ask_roc-rk3399-pc/ToolChain-6.3.1/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin 
# 注意: 不同的开发板不同的编译器上述3个环境变量不一定相同,
#       请参考各开发板的高级用户使用手册
# ROOTFS_DIR 根文件系统中存放 *.ko文件所在目录
# PROJECT_NAME 在存放.ko文件目录中创建对应项目的目录
# DRIVER_NAME 项目中需要编译出.ko来的驱动
# APP_NAME 项目中的应用测试文件
#make 编译项目
#make file 在存放.ko文件目录中创建对应项目的目录
#make install 将*.ko及其应用测试文件移动到根文件中
KERN_DIR = /home/alientek/linux/IMX6ULL/linux/temp/linux-imx-rel_imx_4.1.15_2.1.0_ga_alientek
ROOTFS_DIR = /home/alientek/linux/nfs/rootfs/experiment
#项目名字
PROJECT_NAME = chr_dev
#各驱动名字,ko
DRIVER_NAME1 = chr_dev
DRIVER_NAME2 = 
#app名字
APP_NAME = chr_test
	make -C $(KERN_DIR) M=`pwd` modules 
	$(CROSS_COMPILE)arm-linux-gnueabihf-gcc -o $(APP_NAME) $(APP_NAME).c 
clean:
	make -C $(KERN_DIR) M=`pwd` modules clean
	rm -rf modules.order
	rm -f $(APP_NAME)
file:
	mkdir $(ROOTFS_DIR)/$(PROJECT_NAME)
install:
	cp *.ko $(ROOTFS_DIR)/$(PROJECT_NAME)
	cp $(APP_NAME) $(ROOTFS_DIR)/$(PROJECT_NAME)
# 参考内核源码drivers/char/ipmi/Makefile
# 要想把a.c, b.c编译成ab.ko, 可以这样指定:
# ab-y := a.o b.o
# obj-m += ab.o
obj-m += $(DRIVER_NAME1).o

应用(亲测可用)

在这里插入图片描述
如果已经创建了对应项目的目录就不需要·make file了

文件或者目录操作命令一、mkdir 创建目录二、touch 创建文件三、cp 复制文件或目录四、mv 移动或更改文件名五、rm 删除命令六、pwd 显示当前路径 相关文章: ls 命令详解:超级详细,包含文件权限内容 博客使用的linux版本:CentOS Linux release 7.7.1908 (Core) 介绍命令时先介绍最常见的,同功能的命令也会涉及 一、mkdir 创建目录 简介:mkdir命令是“make directories”的缩写,用来创建目录 语法格式: mkdir [参数] [目录] 常用参数:
Makefile自动搜所目录及子目录下的的所有文件、自动生成编译目录,主要实现的功能入校描述: 1. myMath、myRecord、myString要分别能够单独生成各自对应的 .a 静态库文件 2. 将生成的 .a 文件统一放在根目录下 lib 专用文件中 3. myString 下要将以来的.a文件包含到生成的 .a 文件中 4. 文件的目录具有可扩展性,后续可随时添加文件或者文件 5. 在根目录下进行 make 同样生成上述三个 .a 文件到固定文件中 6. 在根目录下进行 make 需要将生成的这些 .a 文件和外部提供的其他的 .a 最终编译成一个可执行文件 7. 将最终生成的可执行文件放置在 bin 文件专用的文件中 原文链接:https://blog.csdn.net/songshuai0223/article/details/124676839
编译.ko文件需要编写相应的MakefileMakefile是一种用于自动化构建或编译程序的文件。在写Makefile时,需要指定编译器和编译选项,同时定义目标文件和依赖关系。 首先,需要定义目标文件以及依赖关系。目标文件是要生成的.ko文件,依赖关系指定了生成目标文件所需要的相关源文件。 其次,需要指定编译器和编译选项。编译器是用于编译源文件的工具,一般使用gcc。编译选项是一些选项参数,如-I指定头文件路径,-c表示只编译源文件而不进行链接操作。 最后,使用make命令执行makefile文件,自动进行编译。 以下是一个示例的Makefile文件,用于编译.ko文件: obj-m := your_module_name.o your_module_name-objs := your_source_file_1.o your_source_file_2.o KERNELDIR := /lib/modules/$(shell uname -r)/build PWD := $(shell pwd) default: $(MAKE) -C $(KERNELDIR) M=$(PWD) modules clean: $(MAKE) -C $(KERNELDIR) M=$(PWD) clean 在Makefile中,obj-m定义了要生成的目标文件,your_module_name-objs定义了生成目标文件所需要的依赖文件。KERNELDIR定义了内核源代码路径,PWD定义了当前的工作目录。 在default规则中,使用$(MAKE)命令调用make命令编译.ko文件。-C指定了内核源代码路径,M指定了工作目录。 在clean规则中,同样使用$(MAKE)命令调用make命令进行清理操作。 通过执行make命令,即可自动编译生成.ko文件