Ik wil een WiFi dongle driver compilen voor mijn Asus router waarop Merlin draait. Aangezien de 2.6.36 kernel niet de juiste driver heeft voor de RT5370 dongle, ben ik op zoek gegaan naar een driver. Uiteindelijk heb ik deze driver gevonden die compatible is met de 2.4.x en 2.6.x kernels en dus in theorie zou moeten werken als ik de kernel module gecompileerd krijg (link naar pagina met uitleg over builden van driver in x86 linux, link naar package).
Ik heb de Asuswrt-Merlin git source en de build tools in Ubuntu 18.04 gedownload en de toolchain variabelen gezet zoals in de volgende twee pagina's wordt uitgelegd: 1 en 2:
Dit werkt en ik kan de RT-AC68u firmware builden op deze manier, tot zo ver het makkelijkere gedeelte.
Ik zag in de Makefile van de drivers dat er platform specifieke opties waren en heb mijn eigen platform toegevoegd in een poging het cross-compilen werkend te krijgen (inspiratie via)
en in de os/linux/config.mk:
Als ik make uitvoer in de driver folder dan lijkt hij de cross-compiler te vinden, maar gaat het mis bij de libraries (die in /opt/brcm-arm/lib/ te vinden zijn):
Hier loop ik vast met mijn beperkte kennis van compileren onder Linux... iemand een idee waarom de compiler de libraries niet kan vinden? Staat er nog ergens een path verkeerd die ik over het hoofd zie?
Ik heb de Asuswrt-Merlin git source en de build tools in Ubuntu 18.04 gedownload en de toolchain variabelen gezet zoals in de volgende twee pagina's wordt uitgelegd: 1 en 2:
code:
1
2
3
| sudo ln -s ~/am-toolchains/brcm-arm-sdk/hndtools-arm-linux-2.6.36-uclibc-4.5.3 /opt/brcm-arm ln -s ~/am-toolchains/brcm-arm-sdk ~/asuswrt-merlin.ng/release/src-rt-6.x.4708/toolchains echo "PATH=$PATH:/opt/brcm-arm/bin" >> ~/.profile |
Dit werkt en ik kan de RT-AC68u firmware builden op deze manier, tot zo ver het makkelijkere gedeelte.
Ik zag in de Makefile van de drivers dat er platform specifieke opties waren en heb mijn eigen platform toegevoegd in een poging het cross-compilen werkend te krijgen (inspiratie via)
code:
1
2
3
4
5
6
7
8
| PLATFORM = MERLIN ifeq ($(PLATFORM),MERLIN) LINUX_SRC = /home/router/asuswrt-merlin.ng/release/src-rt-6.x.4708/linux/linux-2.6.36/ LINUX_SRC_MODULE = /home/router/asuswrt-merlin.ng/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/net/wireless/ CROSS_COMPILE = /opt/brcm-arm/bin/arm-linux- CROSS_COMPILE_INCLUDE = /opt/brcm-arm/lib/ endif |
en in de os/linux/config.mk:
code:
1
2
3
| ifeq ($(PLATFORM),MERLIN) EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include -I$(CROSS_COMPILE_INCLUDE) endif |
Als ik make uitvoer in de driver folder dan lijkt hij de cross-compiler te vinden, maar gaat het mis bij de libraries (die in /opt/brcm-arm/lib/ te vinden zijn):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| make -C tools make[1]: Entering directory '/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/tools' gcc -g bin2h.c -o bin2h make[1]: Leaving directory '/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/tools' /home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/tools/bin2h cp -f os/linux/Makefile.6 /home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux/Makefile make -C /home/router/asuswrt-merlin.ng/release/src-rt-6.x.4708/linux/linux-2.6.36/ SUBDIRS=/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux modules make[1]: Entering directory '/home/router/asuswrt-merlin.ng/release/src-rt-6.x.4708/linux/linux-2.6.36' CC [M] /home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux/../../common/crypt_md5.o /home/router/am-toolchains/brcm-arm-sdk/hndtools-arm-linux-2.6.36-uclibc-4.5.3/bin/../libexec/gcc/arm-brcm-linux-uclibcgnueabi/4.5.3/cc1: error while loading shared libraries: libmpc.so.2: cannot open shared object file: No such file or directory scripts/Makefile.build:233: recipe for target '/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux/../../common/crypt_md5.o' failed make[2]: *** [/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux/../../common/crypt_md5.o] Error 1 Makefile:1387: recipe for target '_module_/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux' failed make[1]: *** [_module_/home/router/2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux] Error 2 make[1]: Leaving directory '/home/router/asuswrt-merlin.ng/release/src-rt-6.x.4708/linux/linux-2.6.36' Makefile:363: recipe for target 'LINUX' failed make: *** [LINUX] Error 2 |
Hier loop ik vast met mijn beperkte kennis van compileren onder Linux... iemand een idee waarom de compiler de libraries niet kan vinden? Staat er nog ergens een path verkeerd die ik over het hoofd zie?
My case has so many fans that it hovers above the ground