方式1常用于编写,调试阶段。驱动源码的文件夹位置独立自由,只要在Makefile中指定好Linux内核源码的路径。
方式2常用于最后集成阶段,在调试基本完成后,可以将驱动源代码文件(夹)放置在 Linux内核源码的driver/xxx/的相应路径中,修改本层和上层的Makefile和KConfig文件,并重新make menuconfig内核,可以在Menu中选中新加入的驱动模块,然后make module,就可以在驱动源码文件夹生成.ko文件。
方式1:
本地Makefile文件内容如下:
- ifeq ($(KERNELRELEASE),)
- KERNELDIR ?= /opt/xxxxxx/linux-2.6.32.2
- PWD := $(shell pwd)
- modules:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
-
-
- modules_install:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
- clean:
- rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions modules.order Module.symvers
-
- .PHONY: modules modules_install clean
-
- else
- MODULE_NAME := ecat
-
- RESMAIN_CORE_OBJS := ecat2440.o
- RESMAIN_GLUE_OBJS := ecateoe.o eoeappl.o mcihw.o ecatslv.o mailbox.o ecatappl.o
- $(MODULE_NAME)-objs := $(RESMAIN_GLUE_OBJS) $(RESMAIN_CORE_OBJS)
-
- obj-m := ecat.o
- endif
-
方式2:
1. 本地Makefile
- ecat.o为最终链接的目标文件
- obj-$(CONFIG_ECAT_DRV) += ecat.o
- 这些文件都对应相应的.c文件
- ecat-objs := ecateoe.o eoeappl.o mcihw.o ecatslv.o mailbox.o ecatappl.o ecat2440.o
2. 本地Kconfig
-
- menu "ecat driver here"
- depends on NET
- config ECAT_DRV
- bool "ecat driver"
- ---help---
- This is test for ecat.
- endmenu
3. 上层Makefile
- *
- *
- obj-$(CONFIG_ECAT_DRV) += ecat/
- *
- *
4. 上层Kconfig
- *
- *
- source "driver/xxx/ecat/Kconfig"
-
- *
- *