1 Introduction
Cette section décrit les Makefiles utilisés pour compiler :
- le module CVS SBig
- les contrôleurs CORBA
2 Contrôleurs CORBA
Makefile utilisé pour compiler les contrôleurs CORBA.
3 Module CVS SBig
Makefile utilisé pour compiler le module CVS SBig.
- Comme le montre la variable
CROSS_COMPILE , on utilise le même compilateur que celui que l'on a utilisé pour compiler le noyau de la cible.
$ grep ^CC /opt/sugarhat/devkit/eldk/ppc_74xx/usr/src/linux/Makefile
CC = $(CROSS_COMPILE)gcc
$ find ~/SBig/ -name 'Make.*' -exec grep CROSS_COMPILE {} /dev/null \;
./Make.rules: CROSS_COMPILE := $(shell cat $(HH_HOME)/SBig/.shl_cross_compile)
./Make.rules: CROSS_COMPILE := $(shell cat $(HH_HOME)/SBig/.hhl_cross_compile)
./Make.rules:CC = $(CROSS_COMPILE)gcc
./Make.rules:STRIP = $(CROSS_COMPILE)strip
$ cat ~/SBig/.shl_cross_compile
/opt/sugarhat/devkit/eldk-4.0/usr/bin/ppc_74xx-
$ ls -di /opt/sugarhat/devkit/eldk-4.0/usr/bin
53412066 /opt/sugarhat/devkit/eldk-4.0/usr/bin
$ grep CROSS_COMPILE /opt/sugarhat/devkit/sugarhat-env-current.sh
export CROSS_COMPILE="/opt/CES/devkit/eldk/usr/bin/powerpc-linux-"
$ ls -di /opt/CES/devkit/eldk/usr/bin/
53412066 /opt/CES/devkit/eldk/usr/bin/
- A priori le Makefile est chargé de reliquats du passé.
Par exemple : la variable
MYHAT ne semble plus être utilisée qu'avec la valeur sugarhat
$ find . -name 'Make.*' -exec grep MYHAT -A4 {} /dev/null \;
./Make.rules:MYHAT = sugarhat
...
--
./Make.rules:ifeq ($(MYHAT),sugarhat)
./Make.rules-INCLUDES += -I/opt/sugarhat/linux-kernel/include
./Make.rules-else
./Make.rules-INCLUDES += -I/opt/sugarhat/devkit/lsp/ces-rio/linux-2.2.12-2-rio/include
./Make.rules-endif
--
./Make.rules:ifeq ($(MYHAT),sugarhat)
./Make.rules- CROSS_COMPILE := $(shell cat $(HH_HOME)/SBig/.shl_cross_compile)
./Make.rules-else
./Make.rules- CROSS_COMPILE := $(shell cat $(HH_HOME)/SBig/.hhl_cross_compile)
./Make.rules-endif
$ ls /opt/sugarhat/linux-kernel/include | wc -l
45
$ ls /opt/sugarhat/devkit/eldk-4.0/usr/bin/ppc_74xx-* | wc -l
21
$ ls /opt/sugarhat/devkit/lsp/ces-rio/linux-2.2.12-2-rio/include
Aucun fichier ou dossier de ce type
$ ls /opt/hardhat/devkit/ppc/7xx/bin/ppc_7xx-*
Aucun fichier ou dossier de ce type
- Mode non-verbeux sur les sous-répetrtoires
$ $ find . -name "Make*" -exec grep -n '$(MAKE) -s' {} /dev/null \;
./Makefile:34: $(MAKE) -s -C $$dir && res=1; \
./Server/Bigd/Makefile:60: $(MAKE) -s -C $$dir && res=1; \
./Server/Makefile:21: $(MAKE) -s -C $$dir && res=1; \
./Server/Emilie/Makefile:32: $(MAKE) -s -C $$dir && res=1; \
$ man make
...
-s Opération silencieuse ; ne pas afficher les commandes quand elles
sont exécutées.
3.1 Compilation des drivers
On compile directement sur la cible.
# Take care, this make file will be re-call by kernel's Makefile with M defined
ifndef M
# only first call of this Makefile enter here
.PHONY: all clean
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
else
# only kernel call of this Makefile enter here.
# warning, $(PWD) env variable is usabble but not $(shell env) which value
# is the directory where make -C was launch
include $(PWD)/../../ppc.rules
EXTRA_CFLAGS += $(CFLAGS) -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
-fno-strict-aliasing -fno-common \
-ffreestanding \
-I. \
-I$(PWD)/../include \
-I/usr/src/linux/include \
-I/usr/include/ces
KBUILD_NOPEDANTIC := 1
DRIVER := papat26_slc papat26_dat
obj-m += papat26_slc.o papat26_dat.o
endif
3.2 Cross-compilation des démons
- L'astuce est là :
CROSS_COMPILE := $(shell cat $(HH_HOME)/SBig/.shl_cross_compile)
- MAKEDEPEND complète le make file
# apt-get install xutils-dev
$ makedepend toto.c
$ cat Makefile
toto: toto.c tata.h
gcc toto.c -o toto
# DO NOT DELETE
toto.o: tata.h titi.h
3.3 Cross-compilation des démons avec bibliothèque
Ajout de la bibliothèque libnetsnmp.so.
- Ajout des fichiers include :
$ ssh roche@192.168.1.9
$ cd ~/SBig/Server/Bigd/Util
$ make Wiener.o
/home/roche/SBig/Server/include/Wiener.h:16:38: error: net-snmp/net-snmp-config.h:
No such file or directory
$ cp -fr /opt/sugarhat/devkit/target12/usr/local/include/net-snmp ~/SBig/Server/include/
$ make Wiener.o
- Modification du Makefile ( /SBig/Server/Bigd/Makefile):
LIBS += -L../lib -lm -lpthread -lnetsnmp
- Ajout du fichiers LIBNETSNMP.SO :
$ cd ~/SBig/Server/Bigd
$ make big
cannot find -lnetsnmp
$ cp /opt/sugarhat/devkit/target12/usr/local/lib/libnetsnmp.so ~/SBig/Server/lib/
$ make big
4 Compilation des librairies embarquées
Les librairies embarquées sont compilées sur cible en utilisant les scripts mis à disposition dans le code sources.
Cf cette page.
|