SD Karte oder MMC Card über Slot 2 machbar?

Boxenweitwurf
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Fällt mir gerade ein ich habe "make config" und nicht "make oldconfig" ausgeführt.
Habs mal oben geändert.
Hast du den Kernel vor deinen Änderungen bereits gebaut?
Dann sollte es so gehen:
make config ARCH=ppc << hier alles mit <return> bestätigen bis auf Misc-Devices s.o.
make dep ARCH=ppc
make clean ARCH=ppc
etc. ..
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

Gibts eigentlich jetzt schon ein "fertiges" 2xImage mit den passenden Treibern für die MMC Karte.

Wollte meine Karte mal ausprobieren bevor ich mich an die "Fräsarbeiten" mache.

Gruß Gorcon
just_me
Einsteiger
Einsteiger
Beiträge: 123
Registriert: Montag 28. November 2005, 11:31

Beitrag von just_me »

Geschwindigkeitsmäßig ist dies noch nicht ganz das Ende der Fahnenstange
Es wäre Klasse, wenn jemand die Zeit dazu fände, die Low-Level SPI-IO-Routinen, die bislang jeweils nur auf Character Variablen arbeiten, auf Integer Variablen umzusetzen.

Für die Inputroutine füge ich jetzt 3 (Edit: 4) konkurrierende Vorschläge an, idealerweise würde ein PowerPC_Assembler_Guru sich den am besten auf den PPC passenden Algorithmus rauspicken und ihn in eine inline Assembler Routine eindampfen!!!

Code: Alles auswählen

/* "loop control is shift mask" version */
static unsigned int mmc_spi_i32(void)
{
  volatile cpm8xx_t *cp  = (cpm8xx_t *) &immap->im_cpm;
  volatile iop8xx_t *cpi = (iop8xx_t *) &immap->im_ioport;
  unsigned int i;
  unsigned int result = 0;

  cp->cp_pbdat |= SD_DI;
  for(i=0x80000000; i; i>>=1) {
    cp->cp_pbdat |= SD_CLK;
    if (cpi->iop_padat & SD_DO)
      result |= i;
    cp->cp_pbdat &= ~SD_CLK;
  }

  return result;
}

Code: Alles auswählen

/* "while loop and shifting value" version */
static unsigned int mmc_spi_i32(void)
{
  volatile cpm8xx_t *cp  = (cpm8xx_t *) &immap->im_cpm;
  volatile iop8xx_t *cpi = (iop8xx_t *) &immap->im_ioport;
  unsigned int i = 32;
  unsigned int result;    /* no need to init */

  cp->cp_pbdat |= SD_DI;
  do{
    result <<= 1;
    cp->cp_pbdat |= SD_CLK;
    if (cpi->iop_padat & SD_DO)
      result++;                 /* better than "result |= 1;" ? */
    cp->cp_pbdat &= ~SD_CLK;
  } while(--i);

  return result;
}

Code: Alles auswählen

/* "bit moving" version.
   Note, this one should avoid a branch instruction and give a stable 
   timing regardless whether ones or zeroes are transmitted 
*/
static unsigned int mmc_spi_i32(void)
{
  volatile cpm8xx_t *cp  = (cpm8xx_t *) &immap->im_cpm;
  volatile iop8xx_t *cpi = (iop8xx_t *) &immap->im_ioport;
  unsigned int i = 32;
  union {
        unsigned int r;
        unsigned int lsb:1;
  } result;    /* no need to init */

  cp->cp_pbdat |= SD_DI;
  do{
    result.r <<= 1;
    cp->cp_pbdat |= SD_CLK;
    result.lsb = (cpi->iop_padat & SD_DO); /* bitfield move instruction generated? */
    cp->cp_pbdat &= ~SD_CLK;
  } while (--i);

  return result.r;
}

Code: Alles auswählen

/* "bit moving, loop invariants (?!) outside loop version",
   Note, this one should avoid a branch instruction and give a stable 
   timing regardless whether ones or zeroes are transmitted 
*/
static unsigned int mmc_spi_i32(void)
{
  volatile cpm8xx_t *cp  = (cpm8xx_t *) &immap->im_cpm;
  volatile iop8xx_t *cpi = (iop8xx_t *) &immap->im_ioport;
  unsigned int i = 32;
  union {
        unsigned int r;
        unsigned int lsb:1;
  } result;

  unsigned int pbdat_clk_hi = cp->cp_pbdat | SD_CLK | SD_DI;
  unsigned int pbdat_clk_lo = pbdat_clk_hi & ~SD_CLK;

  cp->cp_pbdat = pbdat_clk_lo;          /* needed? */
  do{
    result.r <<= 1;                     /* kept in register? */
    cp->cp_pbdat = pbdat_clk_hi;
    result.lsb = (cpi->iop_padat & SD_DO); /* bitfield move instruction generated? */
    cp->cp_pbdat = pbdat_clk_lo;        /* address reused from register? */
  } while (--i);                        /* bdnz instruction generated? */

  return result.r;
}
Ich befürchte die Zeit wird knapp, bevor die Nutzergemeinde in eine SD-Card und eine IDE2 Fraktion zerfällt 8)

Grüße,
Frieder

(Edit: Fehlende "volatile" keywords und 4.ter Vorschlag ergänzt)
Zuletzt geändert von just_me am Dienstag 4. April 2006, 19:27, insgesamt 1-mal geändert.
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

Habe eben mal das neutrino-jff2[1].img2x von racker geflasht, aber leider wird der mmc.o Treiber dort nicht im log angezeigt und demzufolge auch nicht die Karte erkannt.

In welchem Bereich müsste der denn auftauchen?

Gruß Gorcon

PS: das yadd läuft leider garnicht, es bleibt bei Loading Kernel hängen.
saruman
Erleuchteter
Erleuchteter
Beiträge: 682
Registriert: Samstag 13. Juli 2002, 10:05

Beitrag von saruman »

Ist das Modul denn überhaupt drin? Mach doch mal ein

Code: Alles auswählen

find /lib/modules -name mmc*
Wenns da auftaucht, im lsmod-Output aber nicht kannst Du's ja mal mit insmod laden.
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

Code: Alles auswählen

Nokia D-BOX2 - Kernel 2.4.32-dbox2 (14:42:22).
dbox login: root


BusyBox v1.01 (2006.03.13-01:20+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

~ # find /lib/modules -name mmc*
/lib/modules/2.4.32-dbox2/misc/mmc.o
~ #
Der Treiber ist schon drinn, nur taucht er im Log nicht auf. :gruebel:

Zu Ismod könntest Du mir das mal etwas näher erklären?

Gruß Gorcon
zexma
Tuxboxer
Tuxboxer
Beiträge: 2067
Registriert: Mittwoch 6. März 2002, 15:29

Beitrag von zexma »

Gorcon hat geschrieben: Zu Ismod könntest Du mir das mal etwas näher erklären?

Code: Alles auswählen

insmod mmc.o
bzw.
insmod /lib/modules/2.4.32-dbox2/misc/mmc.o
loaded modules-listing

Code: Alles auswählen

lsmod
remove

Code: Alles auswählen

rmmod mmc
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

zexma hat geschrieben:
Gorcon hat geschrieben: Zu Ismod könntest Du mir das mal etwas näher erklären?

Code: Alles auswählen

insmod mmc.o
bzw.
insmod /lib/modules/2.4.32-dbox2/misc/mmc.o
loaded modules-listing

Code: Alles auswählen

lsmod
remove

Code: Alles auswählen

rmmod mmc
Danke.

Code: Alles auswählen

mmc Hardware init
mmc Card init
mmc Card init *1*
mmc Card init *2*
Size = 501760, hardsectsize = 512, sectors = 1003520
Partition check:
 mmca: p1
Scheint also zu funktionieren.

mounten geht auch

Nachtrag: ab und zu klappt das initialisieren nicht, dann kommt nur

Code: Alles auswählen


[timeThread] time(): 04.04.2006 15:45:48, tim: Tue Apr  4 15:45:48 2006
mmc Hardware init
mmc Card init
mmc Card init
mmc: error in mmc_card_init (1)
mmc: error in mmc_init (-1)
Wenn ich dann bei Telnet

Code: Alles auswählen

rmmod mmc
insmod /lib/modules/2.4.32-dbox2/misc/mmc.o
eingebe dann gehts wieder. :gruebel:

Dann kann ich das Teil ja erstmal fest einbauen.

Gruß Gorcon
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

ja, bei mir ist es auch erst beim 2. oder 3. anlauf erfolgreich.
kann man das nicht per schleife so lange laden, bis erfolg da ist ?? und dann erst mounten.
Soli
Interessierter
Interessierter
Beiträge: 44
Registriert: Montag 5. Mai 2003, 08:44

Beitrag von Soli »

Hi,
wegen der Initialisierung...kann es sein, das es da Probleme bei größeren SD Cards gibt ? Bei meiner 128er klappts immer sofort.


@racker
klappt leider nicht mit mmc Treiber im Kernel. Er wird einfach nicht gebaut..
Ansonsten weil du gerade am der U-boot arbeitest..checkst du die mmc Änderung dann auch mit ein.. ?

Hat jemand anders schon den MMC Treiber mit in den Kernel bekommen ?

cu
Soli
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Gorcon hat geschrieben: PS: das yadd läuft leider garnicht, es bleibt bei Loading Kernel hängen.
Die Images und yadds funktionieren alle. Das 1x-Image macht nur Sinn,
wenn du den Sagemtreiber selbst einfügst.
Die Yadd mit Bootmanger und mmc macht Probleme (sehr viele Aussetzer).
Mit so einer Fehlermeldung kann ich da nichts anfangen.
mb405 hat geschrieben:ja, bei mir ist es auch erst beim 2. oder 3. anlauf erfolgreich.
kann man das nicht per schleife so lange laden, bis erfolg da ist ?? und dann erst mounten.
Der Treiber versucht 2x die Karte zu initialisieren.
Ansonsten musst du dir z.Z. ein "Ladescript" schreiben.
Ich hatte bisher beim Laden mit einer 128MB und einer 256MB Karte keine Probleme.
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Soli hat geschrieben: @racker
klappt leider nicht mit mmc Treiber im Kernel. Er wird einfach nicht gebaut..
Ansonsten weil du gerade am der U-boot arbeitest..checkst du die mmc Änderung dann auch mit ein.. ?

Hat jemand anders schon den MMC Treiber mit in den Kernel bekommen ?

cu
Soli
:oops: :oops: sorry!
Ich gebe zu, die "Anleitung" habe ich aus der Erinnerung geschrieben. Wobei es keine Anleitung ist, es fehlen ja ein paar Details.
Es fehlt noch ein "kleines" diff:

Code: Alles auswählen

--- linux-2.4.32/arch/ppc/config.in.original	2006-04-10 00:43:10.000000000 +0200
+++ linux-2.4.32/arch/ppc/config.in	2006-04-10 01:19:59.000000000 +0200
@@ -399,6 +399,8 @@
 
 source drivers/parport/Config.in
 
+source drivers/misc/Config.in
+
 tristate 'Generic /dev/rtc emulation' CONFIG_GEN_RTC
 if [ "$CONFIG_GEN_RTC" = "n" -a "$CONFIG_APUS" != "y" ]; then
   tristate 'Support for /dev/rtc' CONFIG_PPC_RTC
Z.Z. bin ich ein bisserl im Stress und habe den u-boot Source nur überflogen.
Wenn ich das richtig gesehen habe, wird es Probleme geben, wenn ich den
so committe. Das Laden des Kernels aus dem Flash wird nicht mehr gehen.

Generell sollten wir uns überlegen wie es weitergehen soll.
Solange die Philips noch nicht mit im Boot ist, würde ich noch keinen 1-4-all-Treiber bauen. (*mit dem Zaunpfahl wink*).
Vlt. können die Hardwaregurus ein paar Hinweise geben,
wie man einen nicht benutzten GPIO-Pin herausfindet?
Es spricht auch nichts dagegen einen eigenen mmc-branch während der Testphase anzulegen.
Mehr dann im Laufe der Woche.
mgerald21
Interessierter
Interessierter
Beiträge: 30
Registriert: Montag 14. Februar 2005, 11:58

Beitrag von mgerald21 »

racker hat geschrieben: Vlt. können die Hardwaregurus ein paar Hinweise geben,
wie man einen nicht benutzten GPIO-Pin herausfindet?
Es spricht auch nichts dagegen einen eigenen mmc-branch während der Testphase anzulegen.
Mehr dann im Laufe der Woche.
Bild

Für die, dies interessiert bzw. sich zutrauen die Kabel direkt auf die PCB der Sagem zu löten. Damit kann der Nokia Treiber verwendet werden :D :D :D :D :D
gurgel
Tuxboxer
Tuxboxer
Beiträge: 2473
Registriert: Dienstag 8. Oktober 2002, 21:06

Beitrag von gurgel »

der PB23 wird übrigens bei IDE später noch für DMA gebraucht...
Test
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

gurgel hat geschrieben:der PB23 wird übrigens bei IDE später noch für DMA gebraucht...
Weiß man schon ob das überhaupt funktioniert?
Wie bereits geschrieben, ich glaube nicht, dass jemand IDE und GPIO-SD
in einer Box einbaut.
Das Problem ist eher die gleichzeitige Unterstützung der HW in den Distributionen (Images).

@mgerald21
Klasse! Habe schon überlegt ob ich die Treiber nicht doch merge ...

Noch die Zuordnung (bitte prüfen und ggf. Fehler melden):

Code: Alles auswählen

Pins für Nokia-Layout u. Treiber:

PA7  = SD_DO = 0x0100 = SD_Card Pin 7 
PB19 = SD_DI = 0x1000 = SD_Card Pin 2 
PB22 = SD_CLK= 0x0200 = SD_Card Pin 5 
PB23 = SD_CS = 0x0100 = SD_Card Pin 1 


Pins für Sagem-Layout u. Treiber:

PA9  = SD_DO = 0x0040 = SD_Card Pin 7  
PA8  = SD_DI = 0x0080 = SD_Card Pin 2 
PB17 = SD_CLK= 0x4000 = SD_Card Pin 5 
PB16 = SD_CS = 0x8000 = SD_Card Pin 1


not used:
PB18 = nc    = 0x2000
mgerald21
Interessierter
Interessierter
Beiträge: 30
Registriert: Montag 14. Februar 2005, 11:58

Beitrag von mgerald21 »

racker hat geschrieben: Noch die Zuordnung (bitte prüfen und ggf. Fehler melden):

Code: Alles auswählen

Pins für Nokia-Layout u. Treiber:

PA7  = SD_DO = 0x0100 = SD_Card Pin 7 
PB19 = SD_DI = 0x1000 = SD_Card Pin 2 
PB22 = SD_CLK= 0x0200 = SD_Card Pin 5 
PB23 = SD_CS = 0x0100 = SD_Card Pin 1 


Pins für Sagem-Layout u. Treiber:

PA9  = SD_DO = 0x0040 = SD_Card Pin 7  
PA8  = SD_DI = 0x0080 = SD_Card Pin 2 
PB17 = SD_CLK= 0x4000 = SD_Card Pin 5 
PB16 = SD_CS = 0x8000 = SD_Card Pin 1


not used:
PB18 = nc    = 0x2000
Aus meiner Sicht korrekt ...
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

ich hab das problem gelöst, das es bei mir erst beim 2-3.versuch klappt, den treiber zu laden. in der start_neutrino

Code: Alles auswählen

insmod mmc.o
i=5
while expr $i != 0 > /dev/null
do
	if [ ! -e /dev/mmc ]; then
		rmmod mmc
		sleep 2
		insmod mmc.o
	fi
i=`expr $i - 1`
sleep 1
done

if [ -e /dev/mmc ]; then
	mount /dev/mmc/disc0/part1 /mnt/mmc
fi
die maximale anzahl von 5 reicht bei mir. kann aber angepasst werden.
evtl.könnte man das noch in abhängigkeit einer getouchten datei laden. so wie das mit tuxmail/tuxcal gemacht wird.
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

Welche Datei ausser der mmc.o ist denn noch nötig damit man mounten kann?

Gruß Gorcon
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

Gorcon hat geschrieben:Welche Datei ausser der mmc.o ist denn noch nötig damit man mounten kann?

Gruß Gorcon
Wenn du das Testimage hast, ist alles vorhanden.
In anderen Images brauchst du einen Kernel mit FAT/VFAT- Support (siehe 2.Seite).
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

racker hat geschrieben:
Gorcon hat geschrieben:Welche Datei ausser der mmc.o ist denn noch nötig damit man mounten kann?

Gruß Gorcon
In anderen Images brauchst du einen Kernel mit FAT/VFAT- Support (siehe 2.Seite).
Würde es ohne "Spezail Kernel" gehen wenn man ein Linux Format auf der MMC formatiert und hat das jemand schon geschafft eine MMC unter Linux so zu ändern? (Ich habe mit der Live DVD von Suse es noch nicht geschaft die MMC (mit Original FAT Formatierung) zu erkennen.)

Gruß Gorcon
mgerald21
Interessierter
Interessierter
Beiträge: 30
Registriert: Montag 14. Februar 2005, 11:58

Beitrag von mgerald21 »

Gorcon hat geschrieben: Würde es ohne "Spezail Kernel" gehen wenn man ein Linux Format auf der MMC formatiert und hat das jemand schon geschafft eine MMC unter Linux so zu ändern? (Ich habe mit der Live DVD von Suse es noch nicht geschaft die MMC (mit Original FAT Formatierung) zu erkennen.)

Gruß Gorcon
Ich hab meine SD mit Ext2 formatiert, damit ich mal ein fertiges Image draufspielen kann. (FAT/VFAT unterstützt keine Links ...)

Dazu einfach mal die busybox-1.1.1 mit den ganzen disk-tools und ext2 konfiguriert, kompiliert und gut is.

PS: Mir ist aufgefallen, dass wenn man das mmc.o Modul mit insmod nachlädt der Pfad zB. /dev/mmc/disc0/part1 lautet. Wenn das Modul direkt in den Kernel integriert wird der Pfad /dev/mmc/disc bzw. /dev/mmc/part1 lautet!!! Feature oder Bug???
Gorcon
Tuxboxer
Tuxboxer
Beiträge: 5873
Registriert: Samstag 23. Februar 2002, 22:46

Beitrag von Gorcon »

mgerald21 hat geschrieben: Ich hab meine SD mit Ext2 formatiert, damit ich mal ein fertiges Image draufspielen kann. (FAT/VFAT unterstützt keine Links ...)
Gut zu wissen, denn das brauche ich zwingend

Dazu einfach mal die busybox-1.1.1 mit den ganzen disk-tools und ext2 konfiguriert, kompiliert und gut is.
Das fällt dann schon wieder aus :roll:

Gruß Gorcon
Soli
Interessierter
Interessierter
Beiträge: 44
Registriert: Montag 5. Mai 2003, 08:44

Beitrag von Soli »

@racker
Danke daran lags..jetzt wirds auch fürn Kernel kompiliert.


Ansonsten wollte ich auch meine SD Card mit ext2 Formatieren. Habe die Busybox und den Kernel angepasst. Leider Probleme

Das Formatieren klappt..denke ich

~ # mkfs.ext2 /dev/mmc/disc0/part1
mke2fs 1.37 (21-Mar-2005)
mkfs.ext2: Could not determine if /dev/mmc/disc0/part1 is mounted

Warning: 75 blocks unused

Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
30840 inodes, 122881 blocks
6147 blocks (5.00%) reserved for the super user
First data block=1
15 block groups
8192 blocks per group, 8192 fragments per group
2056 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.



Mounten aber nicht
VFS: Can't find ext2 filesystem on dev mmc(121,1).
mount: Mounting /dev/mmc/disc0/part1 on /mnt/mmc failed: Invalid argument

Mit Vfat ging ja vorher noch alles. Leider kann ich die Karte nicht woanders mal schnell formatieren . :roll:

Jemand einen Tip für mich. Oder habe ich was vergessen ?
mb405
Tuxboxer
Tuxboxer
Beiträge: 2331
Registriert: Donnerstag 24. März 2005, 21:52

Beitrag von mb405 »

zwecks busybox und den ganzen sachen ?
muss ich den abschnitt aktivieren ?
#
# Linux Ext2 FS Progs
#
# CONFIG_CHATTR is not set
# CONFIG_E2FSCK is not set
# CONFIG_FSCK is not set
# CONFIG_LSATTR is not set
# CONFIG_MKE2FS is not set
# CONFIG_TUNE2FS is not set
# CONFIG_E2LABEL is not set
# CONFIG_FINDFS is not set
racker
Einsteiger
Einsteiger
Beiträge: 369
Registriert: Samstag 29. Mai 2004, 01:50

Beitrag von racker »

So, die Philips läuft jetzt bei mir :D
Allerdings habe ich am Modemconnector keine 3.3V gefunden und habe sie
deswegen aus den 5V von Pin 1 über 3 Dioden (Reihenschaltung) erzeugt.
Wer das nicht will, muss sich die 3,3V z.B. vom Netzteil holen.

Code: Alles auswählen

Pins für Philips-Layout 

Modem Connector:

   2 4 6 8 10 12   ---> Netzteil
   1 3 5 7  9 11

PA9  = SD_DO = 0x0040 = SD_CARD Pin 7  = MODEM_CN 11
PA8  = SD_DI = 0x0080 = SD_CARD Pin 2  = MODEM_CN 9
PB17 = SD_CLK= 0x4000 = SD_CARD Pin 5  = MODEM_CN 7
PB16 = SD_CS = 0x8000 = SD_CARD Pin 1  = MODEM_CN 5
GND  =       = Masse  = SD_Card Pin 3,6= Modem_CN 2
Widerstand 100 kOhm zwischen  SD_CARD Pin 4 und 7
5V von Modem_CN 1 über 3 in Reihe geschaltete Dioden (1N4007) an SD_Card Pin 4
Wie man sieht , wird der "Sagem-Treiber" verwendet, der übrigens mittlerweile
auch auf meiner Nokia läuft.
Ich werde diesen Treiber als mmc2 committen, dann könnt ihr morgen
die "Eier" suchen, die ich evtl. gelegt habe :)

Danach kommt dann die Fehlerbehebung im Treiber.
Zuletzt geändert von racker am Sonntag 16. April 2006, 11:56, insgesamt 1-mal geändert.