Kernel modifizieren /Module einbauen /USB

K

Kaschina

Neues Mitglied
0
Hallo,

ich hoffe, mir kann jemand weiterhelfen (Überraschung..):
Ich habe versucht, einen Flyer-Kernel (Honeycomb) so umzubauen, dass er einen angehängte FTDI-Chip erkennt.
Benutzt habe ich dafür die Anleitung von ftdi (ganz unten...).
Soweit so gut, nachdem ich im Makefile die Version korrigiert habe, kam nicht mehr die Exec-format-error Fehlermeldung, sondern mittlerweile nur noch "no such file or directory"
dmesg liefert dann, dass ftdi_sio.ko und usbserial.ko unbekannt wären.
für ftdi_sio.ko:
insmod ftdi_sio.ko
=>
<4>[15020.884185] ftdi_sio: Unknown symbol usb_serial_handle_sysrq_char (err 0)
<4>[15020.887756] ftdi_sio: Unknown symbol usb_serial_disconnect (err 0)
<4>[15020.891906] ftdi_sio: Unknown symbol usb_serial_generic_open (err 0)
<4>[15020.894104] ftdi_sio: Unknown symbol usb_serial_generic_close (err 0)
<4>[15020.901580] ftdi_sio: Unknown symbol usb_serial_generic_unthrottle (err 0)
<4>[15020.901916] ftdi_sio: Unknown symbol usb_serial_handle_break (err 0)
<4>[15020.902496] ftdi_sio: Unknown symbol usb_serial_generic_throttle (err 0)
<4>[15020.903106] ftdi_sio: Unknown symbol usb_serial_probe (err 0)
<4>[15020.903381] ftdi_sio: Unknown symbol usb_serial_register (err 0)
<4>[15020.903747] ftdi_sio: Unknown symbol usb_serial_deregister (err 0)


Beim Googlen habe ich bisher nichts brauchbares gefunden - bzw bis hierher habe ich mich durchgehangelt, aber momentan bin ich mit meinem Latein und Suchkünsten am Ende.

Müssen noch zusätzliche "Sachen" eingebunden werden?
Prinzipiell scheint es mit dem Gerät ja möglich zu sein...

Es wäre sehr sehr lieb, wenn mir jemand weiterhelfen könnte! Mittlerweile bin ich auch nur gelinde genervt :)

Kaschina.
 
Die sind nicht unbekannt, sondern beim Versuch die Module zu laden kommt ein Unknown symbol. Die Module passen nicht zum Kernel (falsche Version oder falscher Compiler). Gruß wembley
 
Hmm,
ich habe den Kernel von der Htcpage benutzt, Honeycomb für das Flyer.
Hast du konkrete Vorschläge oder eine Hilfestellung für mich um das endlich hinzubekommen?

Und natürlich: vielen vielen vielen dank für deine Antwort!!

Kaschina
 
Hi, mir ist nicht ganz klar, wie Du vorgegangen bist. Der Kernel ist ja sicherlich der im ROM enthaltene (nach HC update , uname -a , bei mir 2.6.35.10-g6ea054a vom 3.2'er prerelease)? Die Module erstellst Du wo und mit welchen Quellen? Gruß wembley
 
wembley schrieb:
Hi, mir ist nicht ganz klar, wie Du vorgegangen bist. Der Kernel ist ja sicherlich der im ROM enthaltene (nach HC update , uname -a , bei mir 2.6.35.10-g6ea054a vom 3.2'er prerelease)?

Genau.
wembley schrieb:
Die Module erstellst Du wo und mit welchen Quellen? Gruß wembley

Von hier hab ich den Flyer Kernel geholt und nach Anleitung der FTDI-Homepage mit menuconfig modifiziert; in der Makefile habe ich die Extraversion Nummer abgeändert - vorher kam der "Exec format error" Fehler, wenn ich die Module in den Kernel einbinden wollte. (mit insmod und modprobe)
Verwendet habe ich dafür Ubuntu 10.4
 
ok,

hast Du eine neue config Datei erstellt (lag früher mal in der Wurzel der kernelquellen als .config scheint HTC nicht zu liefern!) oder hasst Du die vom Device gezogen und da als .config abgelegt? Auf meinem Flyer liegt die Datei unter /proc/config.gz. Mit adb pull /proc/config.gz ziel holen. Unter linux mit gzip -d config.gz auspacken. Sollte dann in etwa so aus sehen:
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.35.10
# Thu Oct 27 23:31:20 2011
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
CONFIG_GENERIC_TIME=y
# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
CONFIG_ARCH_HAS_CPUFREQ=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_CONSTRUCTORS=y

#
# General setup
.
.
.
Die würde ich als Grundlage nehmen, bevor ich ein menuconfig mache!

Wenn Du mal in der Datei suchst z.B.
~$ cat config | grep USB_SUPPORT
CONFIG_USB_SUPPORT=y
~$
also USB ist ein.
~$ cat config | grep FTDI
# CONFIG_USB_FTDI_ELAN is not set
~$
FTDI ist aus wird über menuconfig aktiviert.

Dann noch prüfen ob der gcc die richtige Version hat:
adb shell
# cat /proc/version
Linux version 2.6.35.10-g6ea054a (htc-kernel@and18-2) (gcc version 4.4.0 (GCC) ) #1 PREEMPT Thu Oct 27 23:34:44 CST 2011
#
Mit der Version in deiner Entwicklungsumgebung vergleichen. Hab leider keine hier
Sonst bin ich auch erst mal ratlos.

Gruß

wembley
 
Nochmals danke fürs Zeit nehmen!

Ja, die config.gz habe ich aus dem Flyer genommen.

Der Rest (also die cat grep Befehle) sehen bei mir genauso aus.
Und dann "zum Glück" doch noch der Stolperstein:
Ich versteh es ehrlichgesagt überhaupt nicht:
wenn ich in die Makefile geh, sieht der Kopf so aus:
HTML:
VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 35
EXTRAVERSION = .10-g6ea054a
NAME = Yokohama
Extraversion habe ich von .10 abgeändert.

Aber wenn ich in meinem "neuen Kernel" die Version überprüfe (also cat /proc/version)
kommt:
HTML:
root@SirRodriguez:~/flyer-2.6.35-hc-mr-6ea054a# cat /proc/version
Linux version 2.6.35-31-generic (buildd@crested) (gcc version 4.4.5 (Ubuntu/Linaro 4.4.4-14ubuntu5) ) #63-Ubuntu SMP Mon Nov 28 19:29:10 UTC 2011
root@SirRodriguez:~/flyer-2.6.35-hc-mr-6ea054a#
Zur Kontrolle, mein momentaner Kernel:
HTML:
Linux version 2.6.35.10-g6ea054a (htc-kernel@and18-2) (gcc version 4.4.0 (GCC) ) #1 PREEMPT Wed Nov 16 07:23:05 CST 2011

Damit habe ich dann zu früh gebrüllt, dass die Version stimmt.
Verringert aber nicht die Fragezeichen:
Ich habe doch die offizielle Kernel-Source verwendet, warum stimmt die dann denn nicht?
 
wo ist das:

root@SirRodriguez:~/flyer-2.6.35-hc-mr-6ea054a# cat /proc/version



in deinem linux oder auf dem Flyer? Das ist doch der Kernel, mit dem das Linux läuft! der hat ja nix mit dem Compilierten Modulen zu tun! oder?
 
Dann einmal ein großes Autsch. Ich hab gedacht, ich könnte das so auch sehen.
(ja, war auf dem Linuxrechner)

Ok, aber dann wieder einen Schritt zurück:
Was in der Makefile steht, ist doch richtig?
?
 
denke ja!

welchen gcc hast du in der Entwicklungsumgebung? Der ubuntu-kernel ist ja mit gcc version 4.4.5 kompiliert, also sollt unter ubuntu auch 4.4.5 installiert sein!

In der Entwicklungsumgebung brauchst aber 4.4.0, da der HTC-kernel ja damit compiliert wurde!
 
Ich versteh nichts mehr---

Ich habe den heruntergeladenen Kernel entpackt, hab meine config.gz reingepackt, habe mit menuconfig die Treiber für FTDI-Geräte "enabled" und abschließend "make modules" ausgeführt.
Selbergeschrieben habe ich gar nichts und somit doch auch keine Entwicklungsumgebung gebraucht?
 
dann hast du den Compiler der mit dem Linux geliefert wird benutzt.

Bei mir z. B.:
jm@olymp:~$ gcc -v
Es werden eingebaute Spezifikationen verwendet.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.6.1/lto-wrapper
Ziel: x86_64-linux-gnu
Konfiguriert mit: ../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.6.1-9ubuntu3' --with-bugurl=file:///usr/share/doc/gcc-4.6/README.Bugs --enable-languages=c,c++,fortran,objc,obj-c++,go --prefix=/usr --program-suffix=-4.6 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.6 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-plugin --enable-objc-gc --disable-werror --with-arch-32=i686 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread-Modell: posix
gcc-Version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

also 4.6.1. unter 10.4 ist das dann wahrscheinlich der 4.4.5.

Also 4.4.0 installieren (source ziehen compilieren, installieren und in Pfad ein binden) wenn Du dir den 4.4.5 erhalten willst, kannste beim ./configure --prefix=/opt/gcc4.4.0 angeben. so kommt der dann nach /opt/4.4.0. Dann müssen noch vor dem compilieren die Pfade gesetzt (ergänzt) werden.
 
Auf die Gefahr hin, mich komplett zum Idioten zu machen...
Ich habe es nicht geschafft, gcc auf 4.4.0 runterzubekommen (auch wenns leicht klang bei dir).
Dafür ist mir aufgefallen - bisher dachte ich, es wäre halt so unter Linux - dass ich unter toolchains bei Android NDK nur arm-linux-androideabi- habe, nicht arm-androideabi...

Ich hatte es dann eben entsprechend in den Pfad eingebunden, aber kanns auch daran liegen? (Und warum fehlt das bei mir?)
 
Sorry,

Urlaub ist vorbei, deshalb die Späte Antwort.
Mit dem NDK kenne ich mich nicht so aus. Eventuell einer der Mitlesenden.

Dachte eigentlich Du arbeitest ohne Entwicklungsumgebung. Das NDK gehört ja nicht zum Linux. Sondern stellt meiner Meinung nach mit dem Android-SDk die Entwicklungsumgebung für Android dar? Kann mir da einer auf die Sprünge helfen? Ist da dann auch ein passender gcc drin für den Androidkernel?

Habe leider im Moment keine Zeit das hier mal nachzustellen.

Bisher galt für mich immer beim zu kompilieren:
- passende Kernelquellen (gleiche Version wie Kernel) und
- der gleiche Compiler (mit dem der original Kernel erstellt wurde).

Da man mit dem gcc auch Cross-Compilen kann, sollte das doch reichen?

Gruß

wembley
 
Zuletzt bearbeitet:
Das Gleiche mit der Uni, deswegen wieder nur bedingt Zeit...

Die Sache mit der Entwicklungsumgebung - ich dachte auch, ich wäre "ohne".
Wie man schon seit ungefähr 20 Posts merkt, ich kenn mich mit Android einfach absolut nicht aus. "Normal" programmieren ist ok, aber ich habe noch nie an Kerneln herumgespielt.
Eigentlich sollte ich "einfach nur" ein Java-Programm schreiben, dass Funkprotokolle aus einem FTDI-Chip weiterverarbeitet. Davon, dass das Gerät das noch gar nicht kann, war vorher nicht die Rede. Und nu sitz ich da. :)

Das SDK gehört zur Entwicklungsumgebung, das NDK wäre meiner Meinung nach - zum Programmieren hatte ich das noch nicht installiert - erst für die Kernel-Kompiliererei.

Daher jetzt der Schwenk: Ich werde mich mal tiefer einarbeiten in das, was ich da eigentlich anstellen soll, so macht das gerade keinen Sinn, egal woran es genau liegt.

Wenn du - oder gern auch jemand anders ;) - Lesetipps hat, immer her damit.
Bisher hab ich mich von Forum zu Forum gehangelt und überall irgendwas für mich zusammengewuselt.

Ich werde also fleißig weiterfragen, aber vielleicht mit ein wenig mehr Hintergrundwissen in Zukunft (hoffe ich).


Vielen vielen vielen Dank nochmal für deine Zeit!!
 

Ähnliche Themen

D
Antworten
2
Aufrufe
3.249
dwb123
D
C
  • CookieSoft
Antworten
1
Aufrufe
1.558
neandertaler19
neandertaler19
mcfire
Antworten
0
Aufrufe
7.730
mcfire
mcfire
Zurück
Oben Unten