Kernel-Module kompilieren - erster Versuch

  • 62 Antworten
  • Letztes Antwortdatum
sven-ola schrieb:
Ich nehm' an, dass das arm9boot bzw. das arm11boot da nicht dran herumfummelt.

Ich fürchte schon:
Code:
# cat /proc/cmdline
cat /proc/cmdline
mem=109M console=ttyMSM2 diag=arm9
 
Man kann natürlich gemein sein und die command line aus den ATAGS (oder wie auch immer die übergeben wird) ignorieren...
 
  • Danke
Reaktionen: sonic
ATAGS? Was'n bzw. wo das? Egal. In der default-cmdline steht jedenfalls console=ttyDCC0. DCC heisst offenbar "Debug Communications Channel" Darum guck' ich mir gerade das hier an.

http://www.ashling.com/technicalarticles/ARMDebugv10.pdf

Ein JTAG bzw. ein serial-over-jtag wäre natürlich saupraktisch beim Kernel-(ver)Fummeln.

@leromarinvit: IBSS (adhoc) interessiert mich auch brennend. Hätte gerne einen olsrd lauffähig. Den OLSR-Routing-Daemon aus'm Mercurial herausholen (von olsr.org) und kompilieren auf dem Telefon läuft bereits. IBSS fehlt mir noch...
 
sven-ola schrieb:
ATAGS? Was'n bzw. wo das? Egal.

Nee, würd' mich schon interessieren :) ich versuche, die guten alten boot messages sichtbar zu kriegen. Eines der Samsung-Logos hab' ich schon wegbekommen...

sven-ola schrieb:
In der default-cmdline steht jedenfalls console=ttyDCC0. DCC heisst offenbar "Debug Communications Channel"

Ob das mit dem "SAMSUNG Mobile Modem Diagnostic Serial Port (WDM)" zu tun hat, daß hier unter Vista installiert ist?
So viele Wege: USB, WLAN, Bluetooth... Da muß doch was geh'n!
 
ATAGS ist irgendsoein ARM-spezifisches Zeug mit dem der Bootloader dem Kernel Parameter übergeben kann. Muss aber nicht sein, dass das hier verwendet wird, könnte auch dieses shared ram sein (mit was ist das eigentlich shared? mit dem arm9?), siehe nand-partitions.c.

Serielle Konsole wäre natürlich praktisch, hab anfangs gehofft dass bei der Klinkenbuchse eine dabie ist; siehe den Kommentar in board-headset.c. Hab aber alle 4 zugänglichen Kontakte angeschaut, ist leider nirgends was rausgekommen. :( So wie der Kommentar klingt, wäre TX genau auf dem Pin, über den das Headset erkannt wird... die Erkennung muss übrigens rein mechanisch sein, funktioniert auch mit einem Stück Holz. :D

Edit: "Mobile Modem Diagnostic Serial Port" klingkt eher danach, als ob man da Zugriff aufs Baseband hätte. Kann natürlich auch nützlich sein, aber nicht als Konsole.
 
  • Danke
Reaktionen: sven-ola
schade,
Code:
fastboot -c "mem=109M diag=arm9" flash:raw boot Z:\linux-2.6.27\arch\arm\boot\zImage
fastboot -c "mem=109M diag=arm9" reboot
funktioniert nicht...
 
leromarinvit schrieb:
Man kann natürlich gemein sein und die command line aus den ATAGS (oder wie auch immer die übergeben wird) ignorieren...

Stimmt, arch/arm/kernel/setup.c:736 auskommentieren. Funktioniert, Konsolenausgaben sichtbar :) Leider gleich ein ooops :rolleyes:
Sollte aber langsam mal anfangen, für die Prüfung in theoretischer Informatik morgen zu lernen. Danach weiter untersuchen...

EDIT: und zwar passiert der oops
Code:
BUG: scheduling while atomic: swapper/0x...
genau nach der ausgabe (drivers/char/vt.c:3075)
Code:
Console: switching to colour frame buffer device 40x30
nach der normalerweise (drivers/video/msm/msm_fb.c:907)
Code:
FrameBuffer[0] 320x480 size=614400 bytes is registered successfully!
kommt.
 
Zuletzt bearbeitet:
Ich hab's mal zu YouTube hochgeladen. Falls jemand eine Idee hat, an was der reboot liegen könnte (ist scheduling while atomic überhaupt fatal oder könnte es auch nur ein watchdog sein?), wäre ich dankbar.
 
Entschuldigt, wenn ich hier so reinplatze, aber
FrameBuffer[0] 320x480 size=614400 bytes is registered successfully!
Heißt das, dass die Ausgabe auf dem Schirm doch mit 4 Byte (also 32 Bit) pro Pixel erfolgt? (614400 / 320x480 Pixel = 4)... Wo kommt diese Angabe her?
 
Thyrion schrieb:
Heißt das, dass die Ausgabe auf dem Schirm doch mit 4 Byte (also 32 Bit) pro Pixel erfolgt? (614400 / 320x480 Pixel = 4)...

Nein, double buffering: 614400 / 320x960 Pixel = 2

Thyrion schrieb:
Wo kommt diese Angabe her?

Code:
dmesg
 
Zuletzt bearbeitet:
Ist die initrd nun direkt im kernel beim Samsung? Ein extract des original boot.img scheint das nicht anzudeuten. Ich habe beim Kernel kompilieren den extrahierten initrd Pfad angegeben. Ich wurde aber nicht nach user gefragt beim kompilieren wie hier im thread gesagt. Der Kernel bootet aber trotzdem OK. Hmmmm, kann das mir jemand mal erklaeren? :)

Chris
 
chrmhoffmann schrieb:
Ist die initrd nun direkt im kernel beim Samsung?

Ich glaub' schon, Änderungen an init.rc wirken sich bei mir aus.

chrmhoffmann schrieb:
Ich wurde aber nicht nach user gefragt beim kompilieren wie hier im thread gesagt.

Ich auch nicht. Vielleicht, weil ich als root eingeloggt war? :o
 
sven-ola schrieb:
So - jetzt hab' ich es auch hin. Mit swap und iptables. Hier meine Notizen, falls jemand selbst kompilieren will kann's ja hilfreich sein. Dateien sind hier:
Code:
http://81.89.105.192/linux-2.6.27-galaxy.patch.lzma
http://81.89.105.192/initrd-galaxy-2.6.27-GT-i7500I7500VIAIG6I7500XXIG8I7500XXIG8_500.tgz
Dieser Text bezieht sich auf http://img.kr.samsungmobile.com/images/opensource/download/OpenSource/GT-I7500_OpenSource.zip. Hinweis: alle ASCII-Dateien in diesem ZIP haben CRLF als Zeilenende. Konvertierung mit "find -type f | xargs sed -i -e '/\r//g'" (das erwischt auch ein paar Binärdateien, diese sollten für das Kompilieren aber nicht wichtig sein).

70e0eb7961110ff6a01eff8781333c8d GT-I7500_OpenSource.zip

Hinweise: der Samsung-Kernel ist ein Stock-2.6.27, allerdings wurde ein "Infinite Retry Loop in IP-Config" mit einer Änderung behoben (aus 2.6.27.14, siehe LKML 9d8dba6c979fa99c96938c869611b9a23b73efa9). Außerdem sind die Kernel-Sourcen wohl über einen Windows-Rechner gegangen, es fehlen großgeschriebene Dateien z.B. net/netfilter/xt_TCPMSS.c (das gibts auch als kleingeschriebene Datei net/netfilter/xt_tcpmss.c im Kernel-Tree und ein typisches Windows überschreibt dann).

* Den Kernel linux-2.6.27.tar.bz2 von kernel.org herunterladen. Auspacken und den Patch anwenden (der Patch enthält nur die Unterschiede vom Stock-2.6.27er Kernel auf das oben angeführte ZIP-Archiv):
tar xvjf linux-2.6.27.tar.bz2
lzcat linux-2.6.27-galaxy.patch.lzma | patch -p1 -d linux-2.6.27

* Vom Telefon die Konfiguration ziehen (bin faul und mache als "root" weiter):
sudo bash
cd linux-2.6.27
adb pull /proc/config.gz .
gunzip config.gz
mv config .config

* Die Initrd holen, auspacken und den Pfad in der .config eintragen, z.B. CONFIG_INITRAMFS_SOURCE="initrd/". Meine Initrd habe ich aus GT-i7500I7500VIAIG6I7500XXIG8I7500XXIG8_500.zip (später zurückgezogenes Update aus Aug 2009). In der Datei "/default.prop" sind außerdem die Einstellungen auf "ro.secure=0" und "ro.debuggable=1" geändert, damit der "root"-Zugriff funktioniert.

* Kompilieren, dabei 2 * mit [Return] den Benutzer "root" fuer die Initrd bestätigen:
make CROSS_COMPILE=/usr/src/android/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-

* Aufspielen mit "fastboot":
(Galaxy an USB stoepseln)
fastboot flash:raw boot arch/arm/boot/zImage
(Fastboot wartet, Galaxy ausschalten)
(Warten bis die Ladeanzeige die volle Batterie zeigt)
(Mit der Tastenkombination Annehmen + Powertaste halten und damit einschalten)
(Schwarzer Bildschirm, das Fastboot beginnt mit dem Flashen, 5 Sekunden)
(Mein Galaxy startet und läuft ganz normal [freu])

* Jetzt kommt die Kür: "make menuconfig", einschalten was man haben will. Wirklich wichtig: General/SWAP
[*], Net/Opt/Netfilter
[*], Net/Opt/Netfilter/Adv[ ] ("Advanced" ausschalten schaltet die einfachen Sachen automatisch als Modules ein). Konfiguration speichern und aufräumen mit "make CROSS_COMPILE=[siehe oben] clean". Dann noch einmal Kompileren/Aufspielen.

* Nun noch ein Swapfile. SSH in das Galaxy und dann:
dd if=/dev/zero of=/sdcard/swap.img bs=1048576 count=96
mkswap /sdcard/swap.img
swapon /sdcard/swap.img

Das wars, meine Kiste läuft... :)

Hi sven-ola, ich versuche gerade nach deiner Anleitung den Kernel zu erstellen. Eine Sache verstehe ich nicht dabei. Wo wird denn bei dir der Source-Code -->> GT-I7500_OpenSource.zip angewendet??
 
Hallo allerseits,

funktioniert soweit. Habe die aktuellsten Sourcen vom Samsung zu nem Kernel übersetzt, der auch sauber gebootet wird. Wegen WLAN-Tethering habe ich netfilter aktiviert.

Allerdings passiert jetzt folgendes, wenn ich das Tethering starten will (und funktioniert dann natürlich auch nicht...):

Code:
<3>[  229.686470] RTNL: assertion failed at net/core/dev.c (1029)
<4>[  229.686506] [<c00569a0>] (dump_stack+0x0/0x14) from [<c028719c>] (dev_open+0x30/0xfc)
<4>[  229.686593] [<c028716c>] (dev_open+0x0/0xfc) from [<bf021728>] (dev_wlc_ioctl+0x54/0xd8 [bcm4325])
<4>[  229.686925]  r5:00000004 r4:c6c25e24
<4>[  229.686946] [<bf0216d4>] (dev_wlc_ioctl+0x0/0xd8 [bcm4325]) from [<bf022638>] (wl_iw_get_wireless_stats+0x30/0x13c [bcm4325])
<4>[  229.687265]  r8:c5cd6520 r7:c1dc4400 r6:c1dc4400 r5:c20d4820 r4:c20d4820
<4>[  229.687306] [<bf022608>] (wl_iw_get_wireless_stats+0x0/0x13c [bcm4325]) from [<bf018e9c>] (dhd_get_wireless_stats+0x20/0x30 [bcm4325])
<4>[  229.687588]  r6:c5cd6520 r5:c1dc4400 r4:c20d4820
<4>[  229.687616] [<bf018e7c>] (dhd_get_wireless_stats+0x0/0x30 [bcm4325]) from [<c0315f3c>] (get_wireless_stats+0x28/0x34)
<4>[  229.687775]  r4:00000002
<4>[  229.687788] [<c0315f14>] (get_wireless_stats+0x0/0x34) from [<c0316dcc>] (wireless_seq_show+0x38/0x110)
<4>[  229.687840] [<c0316d94>] (wireless_seq_show+0x0/0x110) from [<c0102fec>] (seq_read+0x294/0x3d8)
<4>[  229.687900]  r8:00000400 r7:40000000 r6:c5cd6520 r5:c1dc4400 r4:00000002
<4>[  229.687938] [<c0102d58>] (seq_read+0x0/0x3d8) from [<c011d258>] (proc_reg_read+0xb0/0xc4)
<4>[  229.687991] [<c011d1a8>] (proc_reg_read+0x0/0xc4) from [<c00e590c>] (vfs_read+0xb4/0x144)
<4>[  229.688040] [<c00e5858>] (vfs_read+0x0/0x144) from [<c00e5cd4>] (sys_read+0x44/0x70)
<4>[  229.688081]  r7:00000400 r6:c262c640 r5:00000000 r4:00000000
<4>[  229.688113] [<c00e5c90>] (sys_read+0x0/0x70) from [<c0051c20>] (ret_fast_syscall+0x0/0x2c)
<4>[  229.688178]  r8:c0051dc8 r7:00000003 r6:000003ff r5:00094fc8 r4:00094fc8
<3>[  229.688403] BUG: scheduling while atomic: iwconfig/1702/0x00000002
<4>[  229.688451] Modules linked in: bcm4325 multipdp dpram [last unloaded: bcm4325]
WLAN an sich funktioniert. Ideen?

Danke und Gruß
Sven
 
Zuletzt bearbeitet:
sven-ola schrieb:
* Die Initrd holen, auspacken und den Pfad in der .config eintragen, z.B. CONFIG_INITRAMFS_SOURCE="initrd/". Meine Initrd habe ich aus GT-i7500I7500VIAIG6I7500XXIG8I7500XXIG8_500.zip (später zurückgezogenes Update aus Aug 2009).

Öhm... Lag die darin 'rum oder hast du die speziell extrahiert?
 
Die initrd kannst du aus dem boot.img (Samsung nennt das Image nur kernel?) extrahieren. Siehe hier.
 
gong schrieb:
Code:
<3>[  229.688403] BUG: scheduling while atomic: iwconfig/1702/0x00000002
<4>[  229.688451] Modules linked in: bcm4325 multipdp dpram [last unloaded: bcm4325]
WLAN an sich funktioniert. Ideen?

ist der bcm4325 ein cs blob?
 
Ich bekomme tether hin (soweit ich sehen kann, windows als client, dass ja keine Details geben darf, weil das macht ja den User kaputt).

Problem ist gerade noch, dass mein client der Wahl keine IP bekommt.
 

Ähnliche Themen

DerOhneNick
Antworten
3
Aufrufe
1.479
DerOhneNick
DerOhneNick
M
  • mikesch dauerhaft
Antworten
12
Aufrufe
2.586
BOotnoOB
BOotnoOB
M
  • Moonblast
Antworten
1
Aufrufe
1.232
swa00
swa00
Zurück
Oben Unten