Linux kernel voor ARMv5TEJL compileren

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • Tommasso
  • Registratie: Oktober 2007
  • Laatst online: 05-07 23:15
Hoi,

Ik probeer de TUN kernel module op een embedded device te installeren. Deze module is niet aanwezig op het embedded device en moest dus gecompileerd te worden. Ik heb hiervoor de specifieke versie gedownload en deze gecrosscompiled met ARCH=arm en CROSS_COMPILER=arm-linux-gnueabi-.

Het lukt mij niet om deze module te installeren omdat: tun: disagrees about version of symbol module_layout. Dit houdt volgens mij in dat ik niet de goede configuratie gebruik voor het cross compilen (omdat kernel van het embedded device kennelijk anders is ingesteld).

Als ik kijk naar de uname -a van het embedded device dan zie ik:
code:
1
Linux Wirgrid_080601c9 3.10.37-klk-4281f2b #1 PREEMPT Fri Apr 17 17:57:10 CEST 2015 armv5tejl GNU/Linux

Als ik kijk naar modinfo dan zie ik:
code:
1
2
3
4
5
filename:       tun.ko
description:    Universal TUN/TAP device driver
author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
license:        GPL
vermagic:       3.10.37-klk-4281f2b preempt mod_unload modversions ARMv7 p2v8


Hieruit concludeer ik dat ik niet de goede versie van ARM specificeer: Ik compileer voor ARMv7 terwijl ik voor ARMv5TEJL moet compileren. Ik zie geen optie in de menuconfig om specifiek voor dit platform te compileren. Het enige dat ik zie is dat ik voor specifieke hardware kan compilerne (zoals de Marvell Orion etc). Dat lijkt mij niet de goede weg. Hebben jullie enig idee hoe ik een specifieke ARM versie instel?

De CPU van het embedded device is:
code:
1
2
3
4
5
6
7
8
9
10
11
processor       : 0
model name      : ARM926EJ-S rev 4 (v5l)
BogoMIPS        : 133.01
Features        : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant     : 0x0
CPU part        : 0x926
CPU revision    : 4

Hardware        : LPC32XX SoC (Flattened Device Tree)

Alle reacties


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 30-09 08:10
Tommasso schreef op woensdag 23 maart 2016 @ 13:37:
Dit houdt volgens mij in dat ik niet de goede configuratie gebruik voor het cross compilen (omdat kernel van het embedded device kennelijk anders is ingesteld).
Waarom gebruik je de vendor config niet dan? Zo te zien heb je wel exact de juiste source tree te pakken, lijkt me sterk dat daar geen geschikte defconfig bijgeleverd is.

De Makefile voor arm zet vanzelf de juiste -march flags op basis van de CPU. Juiste config gebruiken, dan gaat alles goed.

Acties:
  • 0 Henk 'm!

  • Tommasso
  • Registratie: Oktober 2007
  • Laatst online: 05-07 23:15
De vendor gebruikt buidlroot voor het compileren van de kernel. Deze gebruikt vervolgens de source van de kernel die ik heb gedownload (deze moet ik op een specifieke plek uitpakken). In de menuconfig van buildroot kan ik specificeren welke target CPU ik wil hebben. Het probleem is dat deze menuconfig geen optie biedt om de TUN module mee te nemen. Deze komt simpelweg niet voor. Dit geldt ook voor erg veel andere driver modules.

Ik heb ook geprobeerd om de menuconfig van de kernel die buildroot gebruikt aan te passen en daarna met buildroot te compileren. Dit werkt helaas ook niet: De instellingen worden genegeerd en ik krijg geen TUN module.

Ik heb bij de menuconfig van de kernel (dus niet van de buildroot) de optie voor de specifieke hardware op NXP LC32XX gezet. Nu hebben de modules de volgende info:
code:
1
2
3
4
5
filename:       tun.ko
description:    Universal TUN/TAP device driver
author:         (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
license:        GPL
vermagic:       3.10.37-klk-4281f2b preempt mod_unload modversions ARMv5 p2v8


Ik compileer nu dus voor ARMv5 en niet meer voor ARMv7. Er is dus wel verbetering. Het gekke vind ik dat als ik naar al geïnstalleerde modules kijk ik het volgende zie

code:
1
2
3
4
5
filename:       asix.ko
description:    ASIX AX8817X based USB 2.0 Ethernet Devices
author:         David Hollis
license:        GPL
vermagic:       3.10.37-klk-4281f2b preempt mod_unload modversions ARMv5 p2v8


Je zou denken dat het zou moeten werken, toch blijft insmod de foutmelding geven.

Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Laatst online: 30-09 08:10
Tommasso schreef op woensdag 23 maart 2016 @ 20:04:
Het probleem is dat deze menuconfig geen optie biedt om de TUN module mee te nemen. Deze komt simpelweg niet voor. Dit geldt ook voor erg veel andere driver modules.
Buildroot is dan ook primair bedoeld om een compacte userspace image te bouwen, niet om je kernel te finetunen. Het feit dat 't je kernel voor je kan bouwen is een stukje service ;)

Ik zou buildroot ook zoveel mogelijk links laten liggen als het echt enkel om de module gaat.
Ik heb ook geprobeerd om de menuconfig van de kernel die buildroot gebruikt aan te passen en daarna met buildroot te compileren. Dit werkt helaas ook niet: De instellingen worden genegeerd en ik krijg geen TUN module.
Buildroot heeft een kernel tree en een config nodig. Of een losse config file, of een defconfig.

code:
1
2
3
config BR2_LINUX_KERNEL_USE_DEFCONFIG
config BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG
config BR2_LINUX_KERNEL_DEFCONFIG


Zoek eens uit welke van de twee hij gebruikt, dan weet je zeker dat je goed zit.
Je zou denken dat het zou moeten werken, toch blijft insmod de foutmelding geven.
Als het goed is kun je in de kernel log terugvinden waarom hij hem alsnog weigert te laden. Vermagic is een zijde van het verhaal, je hebt natuurlijk ook nog de modversion info.. daar zou het wel eens de soep in kunnen lopen

Acties:
  • 0 Henk 'm!

  • Tommasso
  • Registratie: Oktober 2007
  • Laatst online: 05-07 23:15
Ik heb het werkend :). Ik heb het via buildroot moeten doen. Ik moest eerst de board selecteren door make wirgrid te doen. Daarna kon ik via make linux-menuconfig de module vinden en selecteren (als ik het andersom doe werkt het niet). Daarna als ik daarna de kernel met buildroot compilede kreeg ik gewoon mijn tun.ko file. Deze wordt door insmod geaccepteerd.

Insmod zeurde in de syslog over: Mar 23 20:06:11 (none) user.warn kernel: [ 2441.230000] tun: disagrees about version of symbol module_layout
Ik denk dat buildroot op een af andere manier toch de -march of een andere instelling tweaked zodat deze werkt.

IIg bedankt voor het meedenken!