?? makefile
字號:
### can4linux -- LINUX device driver Makefile## Copyright (c) 2004-2008 port GmbH Halle/Saale## Used release tag for this software versionVERSION=3REL=5.3RELEASE=CAN4LINUX-$(VERSION)_$(REL)DVERSION=$(VERSION).$(REL)#include $(PWD)/version.inc#include version.incKVERSION= $(shell uname -r)CONFIG := $(shell uname -n)# be prepared for RTLinuxLINUXTARGET=LINUXOS#LINUXTARGET=RTLinuxCTAGS = ctags --c-types=dtvfCTAGS = elvtags -tsevlECHO = /bin/echoDATE =$(shell date)TITLE = LINUX driver module example ## The driver major device number# development starts with major=63# (LOCAL/EXPERIMENTAL USE)# The new linux/Documentation/devices.txt defines major=91CAN_MAJOR= 91CAN_MODULE = can.ko# definitions for the hardware target########################################################################## Only AT-CAN-MINI can be compiled for 82c200 or PeliCAN mode.# All other Targets are assuming to have an SJA1000# CPC_PCI implies PeliCAN#### Supported TARGET= IME_SLIMLINE | ATCANMINI_PELICAN | CPC_PCI | CPC_CARD ## | IXXAT_PCI03 | PCM3680 | PC104_200 | SBS_PC7 | TRM816 | GENERIC_I82527## | CC_CANPCI | AD_BLACKFIN | KVASER_PCICAN | VCMA9 | CPC104 | CPC_PCM_104## | ATMEL_SAM9 | SSV_MCP2515 | MMC_SJA1000#### compile DigiTec FC-CAN as ATCANMINI_PELICAN## compile ARCOM(Eurotech) AIM104-CAN as ATCANMINI_PELICAN#### When crosscompiling, ensure that CC is set properly#### Compiling options:## V=1 - set verbose output of Linux kernel makefiles### up to now look for the CONFIG Settings and convert to TARGET= ----# later we can improve it by checking directly## ifeq ($(CONFIG_CAN_MCF5282),m)# can_objs += mcf5282funcs.o# EXTRA_CFLAGS += -DMCF5282 -DMAX_CHANNELS=1 -DUSE_FASYNC# TARGET=ColdFire_FlexCAN# endif############################################################################ifdef CONFIG_CAN_ATCANMINITARGET = ATCANMINI_PELICANendififdef CONFIG_CAN_CPC_PCITARGET = CPC_PCIendififdef CONFIG_CAN_KVASER_PCITARGET = KVASER_PCICANendififdef CONFIG_CAN_MCF5282TARGET = ColdFire_FlexCANendififdef CONFIG_CAN_CANPCITARGET = CC_CANPCIendififdef CONFIG_CAN_BLACKFINTARGET = AD_BLACKFINendififdef CONFIG_CAN_AT91SAM9263TARGET = ATMEL_SAM9endififdef CONFIG_CAN_MCP2515TARGET = SSV_MCP2515endififdef CONFIG_CAN_VCMA9TARGET = VCMA9endififdef THIS_IS_HERE_FOR_REFERENCE#TARGET=IXXAT_PCI03#TARGET=IME_SLIMLINE#TARGET=PCM3680#TARGET=PC104_200#TARGET=CPC_CARD#TARGET=ATCANMINI_PELICAN#TARGET=CPC_PCI#TARGET=TRM816#TARGET=GENERIC_I82527#TARGET=SBS_PC7#TARGET=CC_CANPCI#TARGET=AD_BLACKFIN#TARGET=KVASER_PCICAN#TARGET=VCMA9#TARGET=CPC104#TARGET=CPC_PCM_104#TARGET= CPC_PCIendifTARGET = CPC_PCI##########################################################################TARGET_MATCHED = false# location of the compiled objects and the final driver moduleOBJDIR = obj# Debugging Code within the driver# to use the Debugging option# and the Debugging control via /proc/sys/Can/DbgMask# the Makefile in subdir Can must called with the DEBUG set to# DEBUG=1# else# NODEBUG# doesn't compile any debug code into the driverDEBUG=NODEBUGDEBUG=DEBUG=1# all definitions for compiling the sources# CAN_PORT_IO - use port I/O instead of memory I/O# CAN_INDEXED_PORT_IO - CAN registers adressed by a pair of registers# one is selcting the register the other one does i/O# used eg. on Elan CPUs# CAN4LINUX_PCI# IODEBUG - all register write accesses are logged# CONFIG_TIME_MEASURE=1 - enable Time measurement at parallel port## MAX_CHANNELS - max number of minor inodes supported## CAN_MAX_OPEN - the driver can be opened more than once# the number specifies the number of possible# different process, the number of RX queues# the driver has to handle#ifeq "$(TARGET)" "CPC_PCI"# EMS W黱sche CPC-PCI PeliCAN PCI (only with SJA1000) ------------------------# http://www.ems-wuensche.comDEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR)\ -DCAN4LINUX_PCI \ -DCAN_MAX_CHANNELS=4 -DCAN_MAX_OPEN=4 -DCAN_SYSCLK=8 #-DIODEBUGTARGET_MATCHED = trueendififeq "$(TARGET)" "KVASER_PCICAN"# PCIcan PeliCAN PCI (up to four SJA1000) -----------------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR)\ -DCAN4LINUX_PCI \ -DCAN_PORT_IO \ -DCAN_MAX_OPEN=4 \ -DCAN_SYSCLK=8 #-DIODEBUGTARGET_MATCHED = trueendififeq "$(TARGET)" "MMC_SJA1000"# Weidm黮ler MMC # using adress/data multiplexed SJA1000 PeliCAN ISADEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_INDEXED_MEM_IO \ -DCAN_SYSCLK=5 \ -DMAX_CHANNELS=3 -DCAN_MAX_OPEN=2\ -Wno-undef #-DCONFIG_TIME_MEASURE=1TARGET_MATCHED = trueendififeq "$(TARGET)" "CC_CANPCI"# Contemporary Controls# CC PCI PeliCAN PCI (only with SJA1000) ------------------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR)\ -DCAN4LINUX_PCI \ -DCAN_PORT_IO \ -DCAN_SYSCLK=8 #-DIODEBUGTARGET_MATCHED = trueendif# port GmbH AT-CAN-MINI# Arcom AIM104-CANifeq "$(TARGET)" "ATCANMINI_PELICAN"# AT-CAN-MINI PeliCAN ISA (only with SJA1000) --------------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_PORT_IO \ -DCAN_SYSCLK=8 #-DCONFIG_M586 #-DCONFIG_TIME_MEASURE=1TARGET_MATCHED = trueendififeq "$(TARGET)" "CPC_CARD"# CPC-Card PeliCAN PC-Card (only with SJA1000) -----------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR)\ -DCAN4LINUX_PCCARD \ -DCAN_SYSCLK=8 #-DIODEBUGTARGET_MATCHED = trueendififeq "$(TARGET)" "IXXAT_PCI03"# IXXAT PC-I 03 board ISA (only with SJA1000) ---------------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8TARGET_MATCHED = trueendififeq "$(TARGET)" "PCM3680"# Advantech PCM3680 PC104 board 2xCAN (only with SJA1000) --------------------# http://www.advantech.gr/epc/products/pcm3680.htmDEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8TARGET_MATCHED = trueendififeq "$(TARGET)" "CPC104"# EMS W黱sche CPC-104 PC104 board 1xCAN (only with SJA1000) -------------------# should work for the ISA series CPC-XT as well (not tested yet)# http://www.ems-wuensche.comDEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8 \ -DPC104_OPTION_ROMTARGET_MATCHED = trueendififeq "$(TARGET)" "TRM816"# TRM816 Onboard CAN-Controller (only with SJA1000) --------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_INDEXED_PORT_IO \ -DCAN_SYSCLK=10 -DMAX_CHANNELS=2TARGET_MATCHED = trueendififeq "$(TARGET)" "PC104_200"# ESD PC104-200 PC104 board (with SJA1000) ----------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_PORT_IO -DPC104 \ -DCAN_SYSCLK=8TARGET_MATCHED = trueendififeq "$(TARGET)" "IME_SLIMLINE"# I+ME PcSlimline ISA (only with SJA1000) -----------------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8TARGET_MATCHED = trueendififeq "$(TARGET)" "GENERIC_I82527"# Generic i82527 cardDEFS = -D$(TARGET) -D$(DEBUG) -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8 -DCAN_PORT_IOTARGET_MATCHED = trueendififeq "$(TARGET)" "SBS_PC7"# SBS PC7compact DINrail mounted Industry PC (with i82527)DEFS = -D$(TARGET) -D$(DEBUG) -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8 -DCAN_PORT_IOTARGET_MATCHED = trueendif# Analog Devices BF537 STAMP boardifeq "$(TARGET)" "AD_BLACKFIN"# integrated CAN of the Analog Devices BlackFin DSPDEFS = -D$(TARGET) -D$(DEBUG) -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=125 \ -DMAX_CHANNELS=1 \ #-DCONFIG_TIME_MEASURE=1TARGET_MATCHED = trueendif# ATMEL AT91SAM9263-EX Board (Y4 50 Mhz)# ifeq "$(TARGET)" "ATMEL_SAM9"# integrated CAN of the ATMEL AT91SAM9263DEFS = -D$(TARGET) -D$(DEBUG) -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=100 \ -DMAX_CHANNELS=1 \ -DCAN_MAX_OPEN=2 \ #-DCONFIG_TIME_MEASURE=1TARGET_MATCHED = trueendif# SSV ATMEL AT91SAM9263 Board using MCP2515 via SPI# ifeq "$(TARGET)" "SSV_MCP2515"DEFS = -D$(TARGET) -D$(DEBUG) -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=16 \ -DMAX_CHANNELS=1 \ #-DCONFIG_TIME_MEASURE=1#KDIR=/home/oertel/pakete/linux-2.6.24.7#CC=/usr/local/angstrom/arm/bin/arm-angstrom-linux-gnueabi-gcc -v#CFLAGS=#DEFS=TARGET_MATCHED = trueendififeq "$(TARGET)" "VCMA9"# external SJA1000DEFS = -D$(TARGET) -D$(DEBUG) -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=12 \ -DMAX_CHANNELS=1 \ -DMAX_BUFSIZE=512TARGET_MATCHED = trueendififeq "$(TARGET)" "CPC_PCM_104"# This is a special Target Supporting two different PC104 boards# CPC-104 by EMS W黱sche at addresses in the range 0xD0000 to 0xD7FFF# PCM3680 by Advantech in the range from 0yd8000 to 0xDFFFF# -----------------------------------------------------------------------------DEFS = -D$(TARGET) -D$(DEBUG) -DDEFAULT_DEBUG -DCAN_MAJOR=$(CAN_MAJOR) \ -DCAN_SYSCLK=8 \ -DPC104_OPTION_ROMTARGET_MATCHED = trueendif# general compiler switchesDEFS += -Wno-undefifneq ($(KERNELRELEASE),)EXTRA_CFLAGS = $(DEFS) -DVERSION=\"$(DVERSION)_$(TARGET)\"obj-m := can.o# add other object modules herecan-objs := core.o \ open.o \ read.o \ write.o \ ioctl.o \ select.o \ debug.o \ error.o \ util.o \ sysctl.o \ async.o \ close.o \ # include Chip/board specific object files and definitions ########################################################## ifeq "$(TARGET)" "CPC_PCI" can-objs += sja1000funcs.o can-objs += ems_pci.o endif ifeq "$(TARGET)" "CPC_CARD" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "CC_CANPCI" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "ATCANMINI_PELICAN" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "IXXAT_PCI03" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "PCM3680" can-objs += sja1000funcs.o can-objs += pcm3680.o endif ifeq "$(TARGET)" "TRM816" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "PC104_200" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "IME_SLIMLINE" can-objs += sja1000funcs.o endif ifeq "$(TARGET)" "SBS_PC7" can-objs += i82527funcs.o endif ifeq "$(TARGET)" "ColdFire_FlexCAN" can-objs += mcf5282funcs.o endif ifeq "$(TARGET)" "AD_BLACKFIN" can-objs += bf537funcs.o endif ifeq "$(TARGET)" "ATMEL_SAM9" can-objs += at9263funcs.o endif ifeq "$(TARGET)" "KVASER_PCICAN" can-objs += sja1000funcs.o can-objs += kvaser_pci.o endif ifeq "$(TARGET)" "VCMA9" can-objs += sja1000funcs.o can-objs += mpl_vcma9.o endif ifeq "$(TARGET)" "CPC104" can-objs += sja1000funcs.o can-objs += cpc_104.o endif ifeq "$(TARGET)" "CPC_PCM_104" can-objs += sja1000funcs.o can-objs += cpc_pcm_104.o endif ifeq "$(TARGET)" "SSV_MCP2515" can-objs += mcp2515funcs.o endif ifeq "$(TARGET)" "MMC_SJA1000" can-objs += sja1000funcs.o can-objs += mmc.o endifelseKDIR := /lib/modules/$(shell uname -r)/build/PWD := $(shell pwd).PHONY: allifndef TARGETall: @echo "Please specify TARGET= at command line" @echo " \"make help\" will help" elseall: @echo "compile with KDIR=$(KDIR)" @echo "CC = $(CC)" $(MAKE) -C $(KDIR) M=$(PWD) TARGET=$(TARGET) modulesendifendif# load host specific driverload: $(ECHO) ">>> " Loading Driver Module to Kernel /sbin/insmod $(CAN_MODULE) @echo "Loading etc/$(CONFIG).conf CAN configuration" ./utils/cansetup ./etc/$(CONFIG).conf #echo 7 >/proc/sys/Can/dbgMask# unload the driver moduleunload: $(ECHO) ">>> " Removing Driver Module from Kernel -/sbin/rmmod $(CAN_MODULE:.o=)clean: -rm -f tags -rm -f *.o *.ko -rm -f .*.cmd *.mod.c -rm -rf .tmp_versionsinodes: -mknod /dev/can0 c $(CAN_MAJOR) 0 -mknod /dev/can1 c $(CAN_MAJOR) 1 -mknod /dev/can2 c $(CAN_MAJOR) 2 -mknod /dev/can3 c $(CAN_MAJOR) 3 -mknod /dev/can4 c $(CAN_MAJOR) 4 -mknod /dev/can5 c $(CAN_MAJOR) 5 -mknod /dev/can6 c $(CAN_MAJOR) 6 -mknod /dev/can7 c $(CAN_MAJOR) 7 chmod 666 /dev/can[0-7]ctags: $(CTAGS) *.[ch] #### HTML Manual section. #################################man: port_footer.html doxygen.PHONY:port_footer.htmlport_footer.html: sed 's/DATE/$(DATE)/; s/TITLE/CAN driver can4linux/' < ft.html > port_footer.htmlhelp: @grep "^## " Makefile# Henrik Maier's special load targethm: make TARGET=SBS_PC7 -/sbin/rmmod $(CAN_MODULE:.o=) /sbin/insmod $(CAN_MODULE) ./utils/cansetup ./etc/pc7.conf echo 7 >/proc/sys/Can/dbgMask
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -