Forum: PC Hard- und Software RTC @ Debian: /dev/rtc feht. :-(


von LinuxDAU (Gast)


Angehängte Dateien:

Lesenswert?

Hallo liebe Liebenden^^
ich habe heute wieder ein neues Problem, mit dem ich nicht wirklich 
zurecht komme, da google mir sehr spezifisches ausspuckt - und zwar für 
x(&, während ich auf einem ARM (armel) arbeite.

Ich habe den Linux Kernel 2.6.33.2 und dort I2C als festen Modul mit 
einkonfiguriert.
Ebenso die RTC und dort meinen RTC-Chip ausgewählt. Zusetzlich noch die 
Konfigurationen wie im Anhang - m.M.n wird dort beschrieben wie der 
Kernel die RTC einbindet. hmmh.

Passiert aber nicht, warum? Muss man eine Datei editieren, damit die RTC 
gefunden wird?

hwclock --debug ist nutzlos. Sagt mir auch nur das offensichtliche: 
/dev/rtc fehlt.

Hier meine Aufglistung von dev (ls):

MAKEDEV             null    stderr  tty26  tty47  ttyS1      usbmon0
bus                 ppp     stdin   tty27  tty48  ttyS2      usbmon1
char                psaux   stdout  tty28  tty49  ttyS3      usbmon2
console             ptmx    tty     tty29  tty5   ttyp0      vcs
cpu_dma_latency     pts     tty0    tty3   tty50  ttyp1      vcs1
fb0                 ptyp0   tty1    tty30  tty51  ttyp2      vcs2
fd                  ptyp1   tty10   tty31  tty52  ttyp3      vcs3
full                ptyp2   tty11   tty32  tty53  ttyp4      vcs4
initctl             ptyp3   tty12   tty33  tty54  ttyp5      vcs5
input               ptyp4   tty13   tty34  tty55  ttyp6      vcs6
kmem                ptyp5   tty14   tty35  tty56  ttyp7      vcsa
kmsg                ptyp6   tty15   tty36  tty57  ttyp8      vcsa1
loop0               ptyp7   tty16   tty37  tty58  ttyp9      vcsa2
mem                 ptyp8   tty17   tty38  tty59  ttypa      vcsa3
mtd0                ptyp9   tty18   tty39  tty6   ttypb      vcsa4
mtd0ro              ptypa   tty19   tty4   tty60  ttypc      vcsa5
mtd1                ptypb   tty2    tty40  tty61  ttypd      vcsa6
mtd1ro              ptypc   tty20   tty41  tty62  ttype      zero
mtd2                ptypd   tty21   tty42  tty63  ttypf
mtd2ro              ptype   tty22   tty43  tty7   ubi_ctrl
net                 ptypf   tty23   tty44  tty8   urandom
network_latency     random  tty24   tty45  tty9   usbdev1.1
network_throughput  shm     tty25   tty46  ttyS0  usbdev2.1


..es fehlt auch zeug wie GPIO, I2C, SPI usw. keine ahnung, ob ich da was 
falsches erwarte.. aber hmmh.

im root-verzeichnis: find . -name "*rtc*" findet auch nichts relevantes:
./usr/share/man/man8/rtcwake.8.gz
./usr/share/mime/application/x-kexiproject-shortcut.xml
./usr/sbin/rtcwake
./sys/bus/i2c/drivers/rtc-m41t80  <<---- treiber da, oder?
./sys/class/rtc   <<-----------  hmmmh


ich würde mich riesig über hilfe freuen :-)

von (prx) A. K. (prx)


Lesenswert?

Wozu benötigst du /dev/rtc? Im aktuellen Debian/amd64 ist das auch nicht 
drin, hwclock funktioniert aber trotzdem.

von LinuxDAU (Gast)


Lesenswert?

es existert wohl eine hw-clock-Option --directisa, dann kommt man ohne 
/dev/rtc aus.
allerdings klingt ..ISA nach sehr x86-spezifischer Magie... und ich habe 
die option bis jetzt auch nur  für x86 im Einsatz gefunden.
und bevor ich mir irgendwelche config-files verwurste, frag ich lieber 
nach.

von LinuxDAU (Gast)


Lesenswert?

..unabhängig davon ist auch irgendwie so: man sagt es dem kernel, wie er 
sich verhalten soll, und nix passiert...
Indess sthts hier auch konkret: das mit dem directisa ist nur für 
gewisse platformen zu gebrauchen.
http://linux.die.net/man/8/hwclock


hmmmmmh. Wo bekommt linux eigentlich seine dev-Device-Auflistung her? 
:-O

von (prx) A. K. (prx)


Lesenswert?


von LinuxDAU (Gast)


Lesenswert?

hmmh, danke.
Laut
http://www.linuxfromscratch.org/lfs/view/development/chapter07/udev.html

>Drivers that have been compiled into the kernel directly register their >objects 
with a sysfs (devtmpfs internally) as they are detected by the >kernel.

Aaalso sollte es automatisch passieren, wenn man das fest 
eionkompiliert, so wie ich es tue...

aber:
>7.4.3.6. Udev does not create a device
>Further text assumes that the driver is built statically into the kernel
>or already loaded as a module, and that you have already checked that
>Udev doesn't create a misnamed device.

> ... Create a static device node in /lib/udev/devices ...

Was ist ein "device node" :-/ Und wie soll das helfen, zu sagen, das da 
ein RTC-Chip am I2C hängt??

von LinuxDAU (Gast)


Lesenswert?

ok, ich bin nicht faul, aber bzgl Linux extrem schwer von begriff:
natürlich suche ich weiter per google.
eine suche nach "/lib/udev/devices" hat mich auf "mknod" gestupst.
Eine Suche danach brachte mich auf 
http://www.lanana.org/docs/device-list/devices-2.6+.txt
So. Dort drin ist sogar /dev/rtc zu finden!!  (unter Non-serial mice, 
misc features)

Aber hilf mir Gott, beim zusammenstellen der Kommandozeile -.-
sry, bin völlig aufgeschmissen :-(

was sagt mit "10 char 135"

->  mknod /dev/rtc c 10 135               ?????????????????
->  mknod /lib/udev/devices/rtc c 10 135  ?????????????????

und wieso soll das danach gehen??
denkt bei opensource eigentlich auch mal iiiirgendjeamnd an die 
anwender, wie nen leben abseits von linux haben -.-

von Georg A. (georga)


Lesenswert?

10 (Major) und die 135 (Minor) sind magische Zahlen, die mit den 
Major/Minor-Nummern im Treiber übereinstimmen müssen. Allein darüber 
läuft die Verlinkung, du kannst auch ein "mknod /dev/leberwurst c 10 
135" machen, und hast dann hinter leberwurst deinen RTC-Treiber.

"Früher" war /dev statisch, d.h. irgendjemand hat bei der Installation 
schon die diversen mknods für alle relevanten Devices gemacht. Deswegen 
war /dev auch so riesig, da war viel Zeug ohne dahinterliegenden Treiber 
drin. Mit Hotplug wird das aber alles sehr mühsam, insb. auch dank USB, 
weil viele Geräte auch ohne root ansprechbar sein sollen.

Inzwischen wird es dynamisch gemanaged (über udev), sodass das Laden des 
Treibers an udev meldet, welche Devices es überhaupt gibt. Desweiteren 
können über zusätzliche udev-Regeln auch Rechte gesetzt und 
Firmware-Loader gestartet werden.

Wenn kein udev läuft (zB. auf Embeddedsystemen) muss man weiterhin mknod 
machen. Mit udev ist es nicht notwendig und wäre auch ein Zeichen dafür, 
dass das Gerät auch im Kernel nicht vorhanden ist.

Was sagt den dmesg zum Thema rtc? Normalerweise sollte es da auftauchen, 
wenn der generische RTC-Treiber und der Chip-Treiber sich gefunden 
haben, am PC zB.

rtc_cmos 00:04: rtc core: registered rtc_cmos as rtc0

von Georg A. (georga)


Lesenswert?

Nachtrag: auf dem PC (>2.6.3x) ist Major/Minor inzwischen 254,0 (bzw. 
1... für weitere RTCs*). Ich nehme mal stark an, dass das auf dem ARM 
dann auch so sein sollte.

*) Die Verschiebung von 10,135 auf 254,x kommt vermutlich daher, dass es 
inzwischen mehrere RTCs geben kann.

von LinuxDAU (Gast)


Angehängte Dateien:

Lesenswert?

Hallo, danke für deine Rückmeldung :-)

ich habe dmesg einfach mal in eine Datei umgeleitet -> Anhang.

von RTC steht erstmal nichts drin. außer, dass keine da ist.

Da du von der geschichte scheinbar ahnung hast, hast du mich leider noch 
mehr verunsichert (die geänderten werte), ebenso dass ich vermute, dass 
das problem noch tiefer leigt, da etwas mit der RTC in der Ausschrift 
erwartet wird, aber nix zu finden ist.
I2C meldet sich ja auch an, so wie ich es erwarte. (auch wenns erstmal 
nicht in /dev auftaucht)

Kannst du eine konkrete Kommandozeile erschaffen, die Frieden auf der 
Welt schafft, Hunger und Religion bekämpft, Zwangabitur einführt und die 
Weltformel findet?

...zumindest bzgl der rtc ;-)

von Omega G. (omega) Benutzerseite


Lesenswert?

Deine RTC geht über I²C, oder? Ist die in der Board Initialisierung 
irgendwo erwähnt?

von Εrnst B. (ernst)


Lesenswert?

Hmm, da steht garnix von deiner RTC drinnen.

Ist die auch sicher im Device-Tree / Platform init file mit angegeben?

Und wegen der Welformel:
das geht per "cat /dev/random | egrep -C 10 ......".

Statt "....." musst du die Frage auf die Antwort 42 einsetzen.

von Georg A. (georga)


Lesenswert?

Für I2C in /dev braucht es einen Extra-Treiber (CONFIG_I2C_CHARDEF), 
dann gehen auch so hilfreiche Tools wie i2cset/i2cdump. Allerdings sehen 
die Kernelmeldungen auch so aus, als gäbe es gar keinen 
Low-Level-I2C-Treiber. Keine Ahnung, was dein ARM da so braucht, sollte 
sich aber in "I2C system bus drivers" und folgende finden lassen.

Grundsätzlich sind viele Treiber in Linux auf High-Level und Low-Level 
aufgeteilt. Der Low-Level-Kram macht die eigentliche 
HW-Suche/Initialisierung/HW-IO. Der High-Level kümmert sich um die 
Verteilung im Kernel und den Userspace. Kann man zwar laden, hilft aber 
ohne die HW-Treiber nix...

von LinuxDAU (Gast)


Lesenswert?

"Device-Tree / Platform init file"


was was was? Wo, wie?

von Georg A. (georga)


Lesenswert?

Ich glaube Ernst meint, dass es ein Altera-FPGA wäre ;) Mir sieht das 
aber nach einem ganz gewöhnlichen Atmel-ARM aus.

von LinuxDAU (Gast)


Lesenswert?

SAM9G45 :-)also muss ich nicht besorfgt sein, dass ich das das erste mal 
höre? :-O
Andernfalls: irgendwas muss es ja sein. die RTC ist fest einkompiliert 
und taucht sowas von gar nicht auf... vllt ist da ja wirklich irgendwas 
schief :-/

von Εrnst B. (ernst)


Lesenswert?

Georg A. schrieb:
> Mir sieht das
> aber nach einem ganz gewöhnlichen Atmel-ARM aus.

Jup. Auch da kannst du mit device-tree booten.
schau mal nach /proc/device-tree, device-tree-files im uboot etc.

Oldschool geht das über das passende File in
<kernel-source>/arch/arm/mach-<was>/board_xyz.c.

LinuxDAU schrieb:
> was was was? Wo, wie?

I2C hat kein Plug'n'Play. Der Kernel muss irgendwoher wissen, welchen 
I2C-Bus an welcher Adresse welchen Chip angeschlossen hat.
Das geht entweder beim Booten hardgecoded im board-file, beim Booten 
über ein "device-tree"-Config-File, das vom Bootloader vorgeladen wird, 
oder später vielleicht irgendwie module-load-optionen? oder per 
sysfs-tricksereien?

von Georg A. (georga)


Lesenswert?

Ja, es fehlt der I2C-HW-Treiber, das erklärt dann auch alles. Im Log 
gibt es jedenfalls keine Spur davon...

Ich hab mal schnell über die Sourcen gegrept, du brauchst wohl den 
I2C_AT91-Treiber, damit sich da was überhaupt rührt.

von Εrnst B. (ernst)


Lesenswert?

Georg A. schrieb:
> Ja, es fehlt der I2C-HW-Treiber, das erklärt dann auch alles. Im Log
> gibt es jedenfalls keine Spur davon...

hmmm... vielleicht ist der nur "leise"?
grob mal die verfügbaren Boards in linux-3.5.0/arch/arm/mach-at91/ 
gecheckt, fast alle definieren da hart einen i2c-Bus.
(Ja, ich weiß, falsche Kernel-Version. Aber die hatte ich grad 
ausgepackt rumliegen)
Ausnahme ist unter anderem "board-dt.c" für Device-Tree-Konfigurierte 
AT91-Boards.

Evtl. kann der LinuxDAU mal sein .config-File anhängen?

oder mal ein "find /sys/bus/i2c/" ausführen?

Eigentlich müsste sowas hier reichen, um die RTC nachträglich zu 
"aktivieren"

echo "rtc-m41t80 0x42" > /sys/bus/i2c/devices/i2c-9/new_device

Statt "0x42" die richtige I²C-Adresse.
statt "i2c-9" den richtigen Bus.
statt "rtc-m41t80" vielleicht! nur "m41t80"...

von Georg A. (georga)


Lesenswert?

> hmmm... vielleicht ist der nur "leise"?

Möglich. Dann sollte der Bus aber wenigstens in /sys/bus/i2c/devices 
auftauchen.

von LinuxDAU (Gast)


Angehängte Dateien:

Lesenswert?

Gerne komm ich dem nach:
Zuerst das mit dem I2C: in meiner angehängten datei findet sich ein
"i2c /dev entries driver"
direkt dort wo auch die LEDs usw angemeldet werden.  Die sind auch Teil 
meines Entwicklungsboards - demnach würde ich behaupten: alles was mein 
Board kann, ist auch prinzipiell vorhanden.

Ich habe die I2C-Konfig mal per Screenshot dokumentiert.
das .config-File hab ich auch angehängt - ob das richtige ist???
ich rufe immer "make linux26-menuconfig" auf.

I2C_1: I2C-Support angekreuzt. -> I2C_2 untermenü
I2C_2: I2C-Device interface -> I2C_3 untermenü davon

Tja.. und ob ihr was mit dem Config-File anfangen könnt?? Fänd ich ja 
krass, wenn^^ Vllt ist es auch das falsche - sry.

So. Zum nächsten:

root@debian:~# find /sys/bus/i2c/   <<----------
/sys/bus/i2c/
/sys/bus/i2c/uevent
/sys/bus/i2c/devices
/sys/bus/i2c/drivers
/sys/bus/i2c/drivers/dummy
/sys/bus/i2c/drivers/dummy/uevent
/sys/bus/i2c/drivers/dummy/unbind
/sys/bus/i2c/drivers/dummy/bind
/sys/bus/i2c/drivers/rtc-m41t80
/sys/bus/i2c/drivers/rtc-m41t80/uevent
/sys/bus/i2c/drivers/rtc-m41t80/unbind
/sys/bus/i2c/drivers/rtc-m41t80/bind
/sys/bus/i2c/drivers/dev_driver
/sys/bus/i2c/drivers/dev_driver/uevent
/sys/bus/i2c/drivers/dev_driver/unbind
/sys/bus/i2c/drivers/dev_driver/bind
/sys/bus/i2c/drivers_probe
/sys/bus/i2c/drivers_autoprobe

eventuell hilft diese Liste, die Zeile
echo "rtc-m41t80 0x42" > /sys/bus/i2c/devices/i2c-9/new_device
zu konkretisieren?

von LinuxDAU (Gast)


Lesenswert?

Nachtrag: die RTC hängt an TWI0. Also I2C0.

von Εrnst B. (ernst)


Lesenswert?

LinuxDAU schrieb:
> das .config-File hab ich auch angehängt - ob das richtige ist???

Schaut aus wie das Buildroot-config-file. Der Kernel sollte auch eins 
haben. Notfalls im "make menuconfig" in ein alternatives File speichern.

von LinuxDAU (Gast)


Angehängte Dateien:

Lesenswert?

Ich vermute du meinst make linux26-menuconfig ? hmmh. Ich hab mal beide 
angehängt.

von LinuxDAU (Gast)


Angehängte Dateien:

Lesenswert?

Wenn meine Buildroot ihre Dateien final zusammenstellt ist mir folgende 
Datei ins auge gefallen: (Anhang) dort ist immerhin die rtc vermerkt.
Ist das eine Datei die ich dem Debian irgendwie geben sollte? bis jetzt 
habe ich nur den Kernel genutzt, nix anderes. (Debian ringsrum 
installiert)

von Georg A. (georga)


Lesenswert?

TWI0 ist nicht bitbanging, da fehlt definitiv der i2c_at91-Treiber in 
der Liste. Vermutlich wird der durch ein fehlendes Häckchen bei "General 
Setup/Prompt for development and/or incomplete code/drivers" nicht 
angezeigt, selbst in der 3.2er-Kconfig steht er nämlich mit
" depends on ARCH_AT91 && EXPERIMENTAL && BROKEN" drin.

von LinuxDAU (Gast)


Lesenswert?

määäh und wie bekommt man raus, welche Kombination an Kreuzen man setzen 
muss? ist das nen Scherz? :-O

von LinuxDAU (Gast)


Angehängte Dateien:

Lesenswert?

Hmmh. Broken. Wo macht man das an?? bääääh

von Georg A. (georga)


Lesenswert?

Experimental ist Ok und nicht ungewöhnlich, aber das mit Broken scheint 
Absicht zu sein:

http://www.at91.com/forum/viewtopic.php/f,12/t,4665/

D.h. du musst die TWI*-Pins als GPIO-Pins nutzen und das auch dem 
I2C-Bitbanging-Treiber mitteilen. Habe ich selber noch nie gemacht, hier 
steht wohl was dazu:

https://www.kernel.org/doc/Documentation/gpio.txt

Nachtrag: Zum Spass kann man ja das BROKEN aus 
drivers/i2c/busses/KConfig rausmachen, dann sollte der Treiber 
auftauchen..

von LinuxDAU (Gast)


Lesenswert?

Also ich habe mir den Text durchgelesen: dort steht was von 
I2C-Controllern, die die GPIOs erweitern, aber nicht andersrum :-(

Das mit dem Bitbanging, klingt erstmal ok, aber die Frage ist echt wie??
Müsste sowas nicht in meiner geposteten Devices.txt zu finden sein?

von Georg A. (georga)


Lesenswert?

Ich weiss nicht, wie/wo man die Pins für SDA und SCL definiert. Ich hab 
das noch nie gebraucht... Sollte sich aber doch googeln lassen ;)

Edit: Einige sagen, dass das Entfernen von BROKEN (und dann auch dem 
Bitnbanging-Treiber) reicht und der native Treiber bei ihnen läuft.

Ansonsten scheint das Bitbanging-I2C über das Board-Setup konfiguriert 
zu werden (at91*_devices.c). Evtl. ist das falsche Board ausgewählt...

von LinuxDAU (Gast)


Lesenswert?

Hallo, nochmal.
Um ehrlich zu sein, bin ich kein stück weiter gekommen.
Das Problem: I2C ist eigentlich vorhanden.
/sys/class/ bietet eigentlich alles vorhandene an.

root@debian:/sys/class# ls
backlight  gpio         i2c-dev   mem       net          scsi_host 
usb_device
bdi        graphics     input     misc      rtc          spi_master 
usbmon
dma        hwmon        leds      mmc_host  scsi_device  tty         vc
firmware   i2c-adapter  mdio_bus  mtd       scsi_disk    ubi 
vtconsole


i2c-adapter, i2c-dev, rtc: alles da.

Ich würde damit gerne mal die Pins zum wackeln bekommen.
interesse wäre auch hinsichtlich der SPI und anderen UARTs vorhanden.

muss man dafür zwangsläufig programmieren?
GPIO pins kann ich per Konsole beinflussen, aaaber der rest? hmmh. 
irgendwie inkonsistent. Ich finde leider nur programmieranleitungen... 
aber wenn man mal was über i2c aussucken könnte.. kann man auch mal das 
Oszi ranhalten.

Das problem ist eigentlich: normalerweise müsste es funktionieren. Der 
Kernel funktioneirt im Original mit der RTC und der Busybox. (soabld das 
modul geladen ist - ich habs fest einkompiliert) Eigentlich ist es nur 
so, das debian keine Referenz auf die RTC im /dev-Ordner findet.
Deswegen finde ich die modifikation der .config-Datei etwas hardcore, 
dafür dass das problem wohl eher im debian liegt, als im kernel. Ein 
I2C-treiber wird mir den RTC-Eintrag im /dev-Verzeichnis ja auch nicht 
erstellen.....

In der Original Busybox-Distri ist im /dev ordner die rtc und die rtc0 
vorhanden.  dei frage ist, wie man das im debian auch so hinbekommt.

hmmh. linux -.-

von Georg A. (georga)


Lesenswert?

> muss man dafür zwangsläufig programmieren?

Für I2C gibts die oben angesprochenen Tools (i2cset/i2cdump). Denen gibt 
man das I2C-Bus-Device und passende Kommandos, dann kann man aus dem 
Userspace rumstochern.

> ich habs fest einkompiliert

Hm, es gibt Treiber, die haben das nicht so gern. Versuchs mal als 
Module...

> das debian keine Referenz auf die RTC im /dev-Ordner findet.

Wenn das Device da nicht auftaucht, ist es kein Debian-Problem.

von LinuxDAU (Gast)


Lesenswert?

und wozu gibts dann programme wie mknod, vor dessen kommandozeile man 
die hände hochreist und schreiend davonrennt, weil man nicht genau weiß, 
was man eingeben muss? scheint ja ein tool zu sein, um fehlerhaftes 
Debian-Verhalten im dev-verzeichnis zu beheben. hmmh

von LinuxDAU (Gast)


Lesenswert?

i2cset: meckert, weil es im /dev kein i2c findet.

man eh. es ist doch alles vorhanden. In /sys/class/ ist alles da. Dieser 
bekiffte /dev-ordner, wozu braucht man überhaupt -.-

Ich kann auch im /sys/class/gpio ordner auf die Pins zugreifen. Über 
/dev geht das nicht, weil es dort auch keine GPIOs gibt. Das hat doch 
system, dass im /dev absolut KEINE peripherie auftaucht.
..hauptsache 70x tty0..tty69 (echt jetzt)

von Georg A. (georga)


Lesenswert?

mknod gibts seit Unix-Uhrschleim, gehört zum Basisystem wie rm, ls & Co 
und es dient u.a. zum Anlegen von Devices, wenn es keinen Automatismus 
ala udev gibt. Man kann damit aber auch als User Named Pipes (FIFOs) 
erzeugen.

Nur weil ein Tool existiert, heisst es nicht, dass es zwingend notwendig 
ist...

Ungeduldiger Padawan, noch viel lernen du musst ;)

von LinuxDAU (Gast)


Lesenswert?

korrektur: es geht nur bis tty63. steht ja auch ganz oben. sry.

wenn man mal die /dev-Ordner vergleicht: Debian
MAKEDEV             null    stderr  tty26  tty47  ttyS1      usbmon0
bus                 ppp     stdin   tty27  tty48  ttyS2      usbmon1
char                psaux   stdout  tty28  tty49  ttyS3      usbmon2
console             ptmx    tty     tty29  tty5   ttyp0      vcs
cpu_dma_latency     pts     tty0    tty3   tty50  ttyp1      vcs1
fb0                 ptyp0   tty1    tty30  tty51  ttyp2      vcs2
fd                  ptyp1   tty10   tty31  tty52  ttyp3      vcs3
full                ptyp2   tty11   tty32  tty53  ttyp4      vcs4
initctl             ptyp3   tty12   tty33  tty54  ttyp5      vcs5
input               ptyp4   tty13   tty34  tty55  ttyp6      vcs6
kmem                ptyp5   tty14   tty35  tty56  ttyp7      vcsa
kmsg                ptyp6   tty15   tty36  tty57  ttyp8      vcsa1
loop0               ptyp7   tty16   tty37  tty58  ttyp9      vcsa2
mem                 ptyp8   tty17   tty38  tty59  ttypa      vcsa3
mtd0                ptyp9   tty18   tty39  tty6   ttypb      vcsa4
mtd0ro              ptypa   tty19   tty4   tty60  ttypc      vcsa5
mtd1                ptypb   tty2    tty40  tty61  ttypd      vcsa6
mtd1ro              ptypc   tty20   tty41  tty62  ttype      zero
mtd2                ptypd   tty21   tty42  tty63  ttypf
mtd2ro              ptype   tty22   tty43  tty7   ubi_ctrl
net                 ptypf   tty23   tty44  tty8   urandom
network_latency     random  tty24   tty45  tty9   usbdev1.1
network_throughput  shm     tty25   tty46  ttyS0  usbdev2.1


Original Busybox:
audio   hda7  loop0     ptmx    sndstat     ttyp7
audio1   hda8  loop1     pts     tty         ttyp8
console  hda9  mem     ptyp0   tty0        ttyp9
dsp   hdb  mmcblk0    ptyp1   tty1        ttyS0
dsp1   hdb1  mmcblk0p1  ptyp2   tty2        ttyS1
fb0   hdb10  mmcblk0p2  ptyp3   tty3        ttyS2
fb1   hdb11  mmcblk0p3  ptyp4   tty4        ttyS3
fb2   hdb12  mtd0     ptyp5   tty5        ttyUS0
fb3   hdb13  mtd1     ptyp6   tty6        ttyUS1
fusion   hdb14  mtd2     ptyp7   tty7        ttyUS2
hda   hdb2  mtd3     ptyp8   ttygserial  ttyUS3
hda1   hdb3  mtd4     ptyp9   ttyp0       ttyUSB0
hda10   hdb4  mtd5     ram     ttyP0       ttyUSB1
hda11   hdb5  mtdblock0  ram0    ttyp1       ttyUSB2
hda12   hdb6  mtdblock1  ram1    ttyP1       ttyUSB3
hda13   hdb7  mtdblock2  ram2    ttyp2       ubi0
hda14   hdb8  mtdblock3  ram3    ttyP2       ubi_ctrl
hda2   hdb9  mtdblock4  random  ttyp3       urandom
hda3   input  mtdblock5  rtc     ttyP3       zero
hda4   kmem  net     rtc0    ttyp4
hda5   lcd  null     shm     ttyp5
hda6   log  psaux     snd     ttyp6




Dem debian fehlt so einiges. Und das bei gleichem Kernel. Sicher kein 
Debian-Problem?

von Georg A. (georga)


Lesenswert?

> i2cset: meckert, weil es im /dev kein i2c findet.

Wenn im /sys/bus/i2c/devices keinen Bus/Adapter (i2c-*) gibt, ist das 
kein Wunder. Es hängt immer noch ganz am Anfang.

von Georg A. (georga)


Lesenswert?

> Dem debian fehlt so einiges. Und das bei gleichem Kernel.
> Sicher kein Debian-Problem?

Nein. Der hd*-Kram wäre zB. für IDE-Platten. Debian nutzt udev/Hotplug, 
der IDE-Treiber findet keine IDE-Platten (oder wird gar nicht geladen), 
damit gibts kein udev-Callback, damit auch kein hd*. Das 
Busybox-Sparsystem legt das Zeug alles prophylaktisch per mknod an, 
selbst wenn kein Device dahinter ist.

von LinuxDAU (Gast)


Lesenswert?

>Wenn im /sys/bus/i2c/devices keinen Bus/Adapter (i2c-*) gibt, ist das
>kein Wunder.

korrekt, der ordner ist leer.
Allerdings ist der Treiber doch vorhanden - auch wenns nur eine 
GPIO-Emulation ist.

Ich werde das heute abend nochmal mit modulen kompilieren. vielleicht 
ist ja was dran, dass das nicht fest einkompiliert werden darf.

ich freue mich jetzt schon alle permutationen der kommandozeile planlos 
auszuprobieren: http://linux.die.net/man/8/modprobe

AHA. hoch intuitiv, unglaublich klar für jedermann. mal davon abgesehen: 
wie soll das modul heißen? haben die entstehenden module irgendwelche 
namen, die einduetig sind? Wenn ja, sind die auch intuitiv?

Und: woher kommen die module -> sind die im kernel prinzipiell vorhanden 
und nur nicht aktiv, oder muss ich neben dem Kernel einfach noch mehr 
auf die SD-Karte kopieren: wenn ja was?? :-O Wie bekomm ich einen 
Überlick welche dateien noch alle dazugehören?

...hat sicher was mit der "modules.dep"-Datei zu tun. ach herje. welch 
rattenschwanz. wieder fehlerqeulle für unendliche googlesucherei im 
vollkommenen wirrwar der distributionen und kryptischen antworten, die 
man selbst wieder googeln muss, um die zu verstehen. das ganze mit einer 
rekursionstiefe.. unaufhaltsame Zeitverschwendung, weil Open source so 
anwenderfreundlich ist...
dividieren durch 0 macht mehr spaß. :'-(

von Guido (Gast)


Lesenswert?

Du wöhlst bei den Treibern Modul statt fest in den
Kernel (M statt Haken). Vorher liest du natürlich
für jeden Treiber den Text, den Help anzeigt, der
erläutert eventuelle Abhängigkeiten. Dann baust du den
Kernel, anschließend mit make modules die Module, installierst
diese mit make modules_install und rufst depmod -a auf. Alles
natürlich mit Root-Privilegien.

von petar (Gast)


Lesenswert?

> i2cset: meckert, weil es im /dev kein i2c findet.
Mit
1
modprobe i2c-dev
bekommst du dein i2c-device, aber der richtige Treiber dürfte immer noch 
fehlen.

von LinuxDAU (Gast)


Lesenswert?

und landen die Module dann im Kernel (uImage) oder liegen die irgendwo 
anders im erzeugen Flashimage, das das gesamte root-verzeichnis 
beinhaltet...

das ist mir leider etwas unklar :-(

von Georg A. (georga)


Lesenswert?

Wenn sie im Kernel landen würden, wären sie keine Module...

Die kommen ins Flashimage und sind da typischerweise in 
/lib/modules/<Kernelversion> daheim. Falls zu Netzwerk/NFS/irgendeinen 
anderen Speicher hast, kannst die Module (*.ko) aber auch da ablegen und 
erstmal von Hand laden.

Und bevor du da weiterverzweifelst:

Module kann man mit insmod oder modprobe laden. insmod lädt exakt ein 
einzelnes angegebenes File (insmod blub.ko). Falls Module Abhängigkeiten 
haben (=Code aus anderen Modulen aufrufen), muss man mit denen anfangen, 
die keine haben. Andernfalls kommen "Symbol undefined" Meldungen. 
Typischerweise ist das erste immer das Modul des gesamten Subsystems, 
der Rest registriert sich dann da.

modprobe macht das Laden von abhnängigen Modulen automatisch (da lädt 
man quasi das unterste, zB. i2c_gpio, ohne .ko). Dazu muss aber vorher 
depmod eine Datenbank aufgebaut haben und die Module in /lib/modules/... 
liegen.

> unaufhaltsame Zeitverschwendung, weil Open source so
> anwenderfreundlich ist...

Dass Linux auf Embedded einfach ist, hat keiner gesagt. Erst recht 
nicht, wenn man nicht weiss, wie was in Linux allgemein so läuft. Du 
darfst ja gern mal Windows auf deinem AT91 installieren...

Ansonsten verbuch das unter Erfahrung. Das ist das, womit man Geld 
verdienen kann...

von LinuxDAU (Gast)


Lesenswert?

make modules_install
make modules

No rule to make target.... liegt wohl am Crosscompiling...
wo finde ich jetzt die module?

Der Ordner in dem die Module hätten landen müssen enhält aber bereits 
die module. irgendwelche .ko dateien.

Problem: ich darf die nicht kopieren (selbst als root).
Oder vielleicht kann ich es auch wirklich nicht:

root@debian:/media# cp -rf test/lib/modules/* 
d53a0c11-b552-40c4-85b5-454c38422096/lib/modules/

cp: reading 
`test/lib/modules/2.6.33.2/kernel/drivers/usb/gadget/g_file_storage.ko': 
Input/output error
cp: cannot access 
`test/lib/modules/2.6.33.2/kernel/drivers/rtc/rtc-core.ko': Input/output 
error
cp: cannot access 
`test/lib/modules/2.6.33.2/kernel/drivers/rtc/rtc-m41t80.ko': 
Input/output error
cp: reading `test/lib/modules/2.6.33.2/kernel/drivers/net/wireless': 
Input/output error
cp: cannot access `test/lib/modules/2.6.33.2/kernel/drivers/spi': 
Input/output error
cp: reading `test/lib/modules/2.6.33.2/kernel/drivers/video': 
Input/output error
cp: reading `test/lib/modules/2.6.33.2/kernel/drivers/misc': 
Input/output error
cp: cannot access `test/lib/modules/2.6.33.2/kernel/net': Input/output 
error
cp: cannot access `test/lib/modules/2.6.33.2/modules.seriomap': 
Input/output error
cp: cannot overwrite non-directory 
`d53a0c11-b552-40c4-85b5-454c38422096/lib/modules/2.6.33.2/modules.alias 
'  with directory `test/lib/modules/2.6.33.2/modules.alias'

hmmmh. habs trotzdem azusprobiert:

modules.dep steht drin:

/lib/modules/2.6.33.2/kernel/drivers/i2c/i2c-dev.ko

versuche ich die existenz des moduls zu prüfen

cd /lib/modules/2.6.33.2/kernel/drivers/i2c

-> not a directory. wtf
Was soll das!?
Wie bekomm ich die komischen module auf mein system??

von Guido (Gast)


Lesenswert?

LinuxDAU schrieb:
> make modules_install
> make modules
>
> No rule to make target...

Dann hat config das Makefile nicht richtig erstellt. Hast du in
config Module-Support aktiviert?

von LinuxDAU (Gast)


Lesenswert?

ja, ist an.

ich habe aber auch gerade gemerkt: im original-Dateisystem, das mir 
"make" erstellt, ist
lib/modules/2.6.33.2/kernel/drivers/i2c
auch kein Ordner.

muss das so sein? Ist das normal, ist das falsch?
..daher kommen auch die fehler beim kopieren der module....

määäh. wenigstens läuft bis jetzt alles genau so wie erwartet: gar 
nicht.

von LinuxDAU (Gast)


Lesenswert?

Also ich habe es auch nochmal doppelt überprüft: ich finde da keinen 
Weiteren eintrag, der etwas mit den Modulen zu tun hat
hmmg

von LinuxDAU (Gast)


Lesenswert?

ooups: ich habs auch grade beim erneuten durchlaufen von make gesehen: 
der installiert die module selbständig.
mehere Zeilen "INSTAL  modulename.ko"

Dei frage ist: wie bekommt man die module ins debian rein?

von LinuxDAU (Gast)


Lesenswert?

http://www.linuxquestions.org/questions/linux-newbie-8/manually-copying-kernel-modules-63828/

demnach muss man sich die module also selbst zusammenkopierenm wenn ich 
das richtig verstehe.
In der Tat habe ich die .ko-Datei für z.B. die RTC im angegeben Pfad 
gefunden.

Man könnte nun also ein script schreiben, das alle *.ko dateien auf die 
SD-Karte kopiert öder händisch das ganze zusammensuchen.

Problem:
rein intuitiv würde ich den entsprechen treiber in den entsprechenden 
Ordner legen. Also z.B. den i2c-dev.ko in 
lib/modules/2.6.33.2/kernel/drivers/i2c

der Pfad ist aber kein ordner - also ist immernoch unklar, wie man die 
module auf die karte bekommt. kann ich die module einfach irgendwohin 
kopieren, und die moduled.dep mit den pfaden füllen? das wäre einfacher.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.