6.2.2 Test dieser CodeänderungAnalog zur cgi_demo sollte jetzt auch cgi_qadc compiliert werden und zusätzlich neben cgi_demo als Programm auf dem COBRA-Board plaziert werden. (08.06.2006) In die index.html-Datei wurde zusätzlich die Zeile auf mein eigenes cgi-Programm eingefügt. Alledings dies nur zu Testzwecken! Im Make des Gesamtkernel muß der zusätzliche Build meines neuen cgi_qadc aktiviert werden. Während des Makelaufs bei der Kernel-Compilierung im Arbeitsverzeichnis schreibe ich den Output gerne in eine out.txt-Datei. Mittels dieser Umlenkung des Make-Output erhalte ich folgende Zeilen, welche zeigen, wie das cgi_generic erzeugt wird: make[1]: Entering directory `/home/andreas/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/user' for i in boa busybox cgi_generic flashw games gdbserver inetd init netflash portmap ramimage sash \ telnet telnetd tip /home/andreas/Development/COBRA_rot/uClinux \ /uClinux-dist-20040218-cobra-20040324/vendors/senTec/COBRA5282/. /home/andreas/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/prop; do \ [ ! -d $i ] || make -C $i || exit $? ; \ done make[2]: Entering directory `/home/andreas/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/user/boa' ... ... make[2]: Entering directory `/home/andreas/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/user/cgi_generic' make[2]: Für das Ziel »all« ist nichts zu tun. make[2]: Leaving directory `/home/andreas/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/user/cgi_generic' ... Ich muß also in die Liste der Verzeichnisse innerhalb dieses Makefiles nach dem Beispiel /home/andreas/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/prop auch meinen eigenen Pfad /home/andreas/Development/driver/cgi_qadc einbauen. Dort finde ich im Makefile folgende Zeilen: dir_v = $(VEND)/$(CONFIG_VENDOR)/$(CONFIG_PRODUCT)/. dir_p = $(ROOTDIR)/prop ... ... dir_$(CONFIG_USER_CAN_HORCH) += horch dir_$(CONFIG_USER_CGI_GENERIC) += cgi_generic dir_$(CONFIG_USER_CGIHTML) += cgihtml/examples ... ... dir_y += games all: config for i in $(sort $(dir_y)) $(dir_v) $(dir_p); do \ [ ! -d $$i ] || make -C $$i || exit $$? ; \ done Oder ich erweitere die Liste eben in diesem Makefile nach dem Muster: dir_$(CONFIG_USER_CGI_GENERIC) += cgi_generic um den Eintrag: dir_$(CONFIG_USER_CGI_QADC) += cgi_qadc Dann ist sogar meine Erweiterung konfigurierbar und verstehe, wie die Sache mit dem Konfigurieren eigentlich funktioniert. Wie insgesamt es mit den Konfigurationsvariablen funktioniert, kann man gut an dieser Übersicht erkennen: andreas@gericom:~/Development/COBRA_rot/uClinux /uClinux-dist-20040218-cobra-20040324> find . -type f | xargs -n3 grep CONFIG_LINUXDIR ./user/kendin-config/Makefile:# LINUXDIR = $(CONFIG_LINUXDIR) ./.config.old:CONFIG_LINUXDIR=linux-2.4.x ./Makefile:LINUXDIR = $(CONFIG_LINUXDIR) ./.config:CONFIG_LINUXDIR=linux-2.4.x ./config/setconfig: replace_line CONFIG_LINUXDIR= "CONFIG_LINUXDIR=$LINUXDIR" .config ./config/setconfig: replace_line CONFIG_LINUXDIR "#define CONFIG_LINUXDIR \"$LINUXDIR\"" \ ./config/autoconf.h:#define CONFIG_LINUXDIR "linux-2.4.x" andreas@gericom:~/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324> Der GREP über die gesamte uClinux-Distribution zeigt, daß eine Konfigurationsvariable in der Datei .config abgelegt wird. Diese Datei wird auch gleich zu Beginn des Root-Makefile eingebunden: ############################################################################ # # Lets work out what the user wants, and if they have configured us yet # ifeq (.config,$(wildcard .config)) include .config Hier der GREP über die Konfigurationsvariable, welche als Muster dient: andreas@gericom:~/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324> find \ . -type f | xargs -n3 grep CONFIG_USER_CGI_GENERIC ./user/Makefile:dir_$(CONFIG_USER_CGI_GENERIC) += cgi_generic ./config/.config.old:CONFIG_USER_CGI_GENERIC=y ./config/.config:CONFIG_USER_CGI_GENERIC=y ./config/config.in:bool 'generic cgi' CONFIG_USER_CGI_GENERIC ./config/config.tk: bool $w.config.f 11 1 "generic cgi" CONFIG_USER_CGI_GENERIC ./config/config.tk:set CONFIG_USER_CGI_GENERIC 0 ./config/config.tk: global CONFIG_USER_CGI_GENERIC ./config/config.tk: write_tristate $cfg $autocfg CONFIG_USER_CGI_GENERIC $CONFIG_USER_CGI_GENERIC [list $notmod] 2 ./config/autoconf.h:#define CONFIG_USER_CGI_GENERIC 1 ./config/Configure.help:CONFIG_USER_CGI_GENERIC ./vendors/ADI/Coyote/config.vendor-2.4.x:# CONFIG_USER_CGI_GENERIC is not set ./vendors/ADI/Coyote/config.vendor-2.6.x:# CONFIG_USER_CGI_GENERIC is not set ./vendors/GDB/ARMulator-EB/config.vendor:# CONFIG_USER_CGI_GENERIC is not set ... ... ./vendors/senTec/COBRA5272/config.vendor:CONFIG_USER_CGI_GENERIC=y ./vendors/senTec/COBRA5272/config.vendor-2.4.x:CONFIG_USER_CGI_GENERIC=y ./vendors/senTec/COBRA5272/config.vendor-2.6.x:CONFIG_USER_CGI_GENERIC=y ./vendors/senTec/COBRA5282/config.vendor-2.4.x:CONFIG_USER_CGI_GENERIC=y ./vendors/senTec/COBRA5282/config.vendor-2.6.x:CONFIG_USER_CGI_GENERIC=y ./vendors/KendinMicrel/KS8695/config.vendor-2.4.x:# CONFIG_USER_CGI_GENERIC is not set ./vendors/Soekris/net4801/config.vendor-2.4.x:CONFIG_USER_CGI_GENERIC=y . Man erkennt darin, daß vermutlich folgende Funde verdoppelt werden müssen: ./user/Makefile:dir_$(CONFIG_USER_CGI_GENERIC) += cgi_generic ... ./config/config.in:bool 'generic cgi' CONFIG_USER_CGI_GENERIC ./config/config.tk: bool $w.config.f 11 1 "generic cgi" CONFIG_USER_CGI_GENERIC ./config/config.tk:set CONFIG_USER_CGI_GENERIC 0 ./config/config.tk: global CONFIG_USER_CGI_GENERIC ./config/config.tk: write_tristate $cfg $autocfg CONFIG_USER_CGI_GENERIC $CONFIG_USER_CGI_GENERIC [list $notmod] 2 ... Der Blick in die TK-Datei zeigt, daß diese wohl doch von einem Tool generiert worden ist. Und tatsächlich! In diesem Makefile findet sich folgender Eintrag: ... config.tk: Makefile config.in $(SCRIPTSDIR)/header.tk $(SCRIPTSDIR)/tail.tk \ $(wildcard $(ROOTDIR)/prop/config.in) $(MAKE) -C $(SCRIPTSDIR) tkparse ARCH=m68knommu $(SCRIPTSDIR)/tkparse < config.in > config.tmp @if [ -f /usr/local/bin/wish ]; then \ echo '#!'"/usr/local/bin/wish -f" > config.tk; \ else \ echo '#!'"/usr/bin/wish -f" > config.tk; \ fi cat $(SCRIPTSDIR)/header.tk >> ./config.tk cat config.tmp >> config.tk rm -f config.tmp echo "set defaults \"defconfig\"" >> config.tk echo "set autoconf_file \"autoconf.h\"" >> config.tk echo "set help_file \"Configure.help\"" >> config.tk cat $(SCRIPTSDIR)/tail.tk >> config.tk chmod 755 config.tk ... Als Input dient hier die Datei config.in. In dieser steht gleich zu Beginn, daß hier nur Einträge addiert werden sollen. Also addiere ich: Alt: bool 'generic cgi' CONFIG_USER_CGI_GENERIC bool 'cgihtml' CONFIG_USER_CGIHTML Neu: bool 'generic cgi' CONFIG_USER_CGI_GENERIC bool 'qadc cgi' CONFIG_USER_CGI_QADC bool 'cgihtml' CONFIG_USER_CGIHTML In diesem Makefile addiere ich: Alt: dir_$(CONFIG_USER_CAN_HORCH) += horch dir_$(CONFIG_USER_CGI_GENERIC) += cgi_generic dir_$(CONFIG_USER_CGIHTML) += cgihtml/examples Neu: dir_$(CONFIG_USER_CAN_HORCH) += horch dir_$(CONFIG_USER_CGI_GENERIC) += cgi_generic dir_$(CONFIG_USER_CGI_QADC) += cgi_qadc dir_$(CONFIG_USER_CGIHTML) += cgihtml/examples Das neue Verzeichnis cgi_qadc addiere ich als Hardlink zu dem Inhalt, welchen ich eigentlich hier pflege. Da aber es sich um einen Hardlink handelt, kann nicht unterschieden werden, womit alles begann. Es liegt auch völlige Gleichberechtigung vor. Beide Ablage-Orte sind gleich sinnvoll. Hier der entsprechende Befehl: andreas@gericom:~/Development/COBRA_rot/uClinux /uClinux-dist-20040218-cobra-20040324/user> ln ~/Development/driver/cgi_qadc ln: "/home/andreas/Development/driver/cgi_qadc": harte Verknüpfung für Verzeichnisse nicht erlaubt andreas@gericom:~/Development/COBRA_rot/uClinux /uClinux-dist-20040218-cobra-20040324/user> ln -s ~/Development/driver/cgi_qadc andreas@gericom:~/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324/user> Wie man sieht, stellte sich heraus, daß nur der Symbolic-link bei Verzeichnissen möglich ist. Weiter muß die Datei Configure.help einen neuen Hilfe-Eintrag erhalten. Beim Blick auf dieses File fällt mir allerdings auf, daß nicht wirklich alle Config-Variablen wirklich konfigurierbar sind. Hier der GREP: andreas@gericom:~/Development/COBRA_rot/uClinux /uClinux-dist-20040218-cobra-20040324> find . -type f | xargs -n3 grep CONFIG_USER_CGI_NO ./config/Configure.help:CONFIG_USER_CGI_NO_SERIAL ./config/Configure.help:CONFIG_USER_CGI_NO_COM2 ./config/Configure.help:CONFIG_USER_CGI_NO_DIALIN ./vendors/Via/EPIA/config.vendor:# CONFIG_USER_CGI_NO_SERIAL is not set ./vendors/Via/EPIA/config.vendor:# CONFIG_USER_CGI_NO_COM2 is not set ./vendors/Via/EPIA/config.vendor:# CONFIG_USER_CGI_NO_DIALIN is not set ./vendors/SecureEdge/SecureEdge1100/config.vendor:# CONFIG_USER_CGI_NO_SERIAL is not set ./vendors/SecureEdge/SecureEdge1100/config.vendor:# CONFIG_USER_CGI_NO_COM2 is not set ./vendors/SecureEdge/SecureEdge1100/config.vendor:# CONFIG_USER_CGI_NO_DIALIN is not set ./vendors/SecureEdge/SecureEdgeVPN/config.vendor-2.6.x:# CONFIG_USER_CGI_NO_SERIAL is not set ./vendors/SecureEdge/SecureEdgeVPN/config.vendor-2.6.x:# CONFIG_USER_CGI_NO_COM2 is not set ./vendors/SecureEdge/SecureEdgeVPN/config.vendor-2.6.x:# CONFIG_USER_CGI_NO_DIALIN is not set ./vendors/SnapGear/SE3400/config.vendor-2.4.x:# CONFIG_USER_CGI_NO_SERIAL is not set ./vendors/SnapGear/SE3400/config.vendor-2.4.x:# CONFIG_USER_CGI_NO_COM2 is not set ./vendors/SnapGear/SE3400/config.vendor-2.4.x:# CONFIG_USER_CGI_NO_DIALIN is not set ./vendors/SnapGear/SE4000/config.vendor-2.4.x:CONFIG_USER_CGI_NO_SERIAL=y andreas@gericom:~/Development/COBRA_rot/uClinux/uClinux-dist-20040218-cobra-20040324> Nach all diesen Änderungen stand unter make xconfig tatsächlich der neue Konfigurationsschalter zur Verfügung. Auch der make selbst scheint erstmal ordentlich zu arbeiten. Der Output siehe out_cgi_qadc_01.txt sowie die Ausgaben auf stderr in out_cgi_qadc_01.txt.stderr Bei diesem Stand ist aber nur die GUI geschaffen ohne wirkliche Kopplung zur QADC-Auslese-Routine In der Datei template.c muß die Variable qadc_value = 46; später noch mit dem richtigen QADC-Wert beschrieben werden. Copyright © Andreas Birkert Letzte Aktualisierung am 20. Dezember 2013 |