Sziasztok!
Nem tudom ki az, aki próbálkozott már a fenti problémával, de nekem most utamba akadt egy 2x16 karakteres párhuzamos porton csüngő viszonylag gyakori típus (hd 44780). Ennek életre keltésére találtam több programot is:
- LCDproc: nagyszerű daemon program, van belőle deb package is, csak az ékezetes karakterekre nem leht rábírni.
- lcdmod: egyszerű kis kernel modul, tud ékezeteket is, csak kernel és forrása kell hozzá. Elég halottnak tűnik a project.
- lcd-linux: hasonló az előzőhöz, csak még élőnek látszik.
Szóval a helyzet az, hogy van egy minimális lemezterülettel (fél GB) rendelkező debian-os gépem, amire szeretnék felvarázsolni egy lcd drivert. Az elsőt sikerült is, de az az ékezetek miatt kiesett. A második kettőnek meg az a nagy baja, hogy a fordításukhoz kell a kernel forrása és feltelpített dolgai is. Ez pedig fél gigában nem megoldható dolog, hiszen csak maga a kernel forrása több 400 megánál! (2.6.18)
Szóval az lenne a kérdésem, hogy hogyan lehet valahogy úgy fordítani a kernelmodulokat, hogy ne kelljen hozzájuk a teljes kernel forrás és a lefordított dolgai is?
Arra is kiváncsi lennék, hogy később ebből fogok tudni standalone package-et csinálni? Vagy esetleg másik gépen ezt meg tudom úgy csinálni, hogy elég legyen csak a csomagot átvinni és telepíteni a célgépen?
A segítséget előre is köszönöm!
Üdv:
denx
- 1489 megtekintés
Hozzászólások
itt van egy leiras hogy hogyan tudsz debian csomagot csinalni a kernelbol: http://www.howtoforge.com/kernel_compilation_ubuntu
udv Zoli
- A hozzászóláshoz be kell jelentkezni
Egy másik gépen fordítsd le a kernelt, készíts belőle deb csomagot és a célgépen telepítsd fel a csomagot.
Azon a gépen, ahol van hely és erős CPU:
cd /usr/local/src/_path_to_kernel_source
make menuconfig (itt beállítod a célgépnek megfelelő konfigot)
make-kpkg --bzimage --revision=1.0 kernel_image
(van még sok szép kapcsoló pl. --appendo-to-version és --append_to_version is hasznos lehet, de először ez is elég, ha úgyanezen kernelverzió még nincs feltelepítve a célgépen)
A létrejött deb csomagot meg átmásolod a célgépre és dpkg -i paranccsal telepíted, majd reboot.
(persze még szebb, ha van az általunk késztett deb csomagokra hivatkozás a source.list-ben)
Bye, Fifi
- A hozzászóláshoz be kell jelentkezni
Na igen az előttem hozzászóló szép színes szagos howto-ra linkelt, amíg én pötyörésztem, de a lényeg a make-kpkg parancs használata.
Bye, Fifi
- A hozzászóláshoz be kell jelentkezni
Köszönöm a gyors válaszokat!
Az oldalt amit fent írtatok, magam is olvastam az alpján fordítottam is egy kernelt. Agond csak az, hogy az lcd driver fordítás közben a következő könyvtárakat használná:
/lib/modules/${KERNEL_VERSION}/build #src könyvtár
/lib/modules/${KERNEL_VERSION}/kernel/drivers/misc #célkönyvtár
/lib/modules/${KERNEL_VERSION}/build/include #felteszem innen include-ál
Ezek pedig csak akkor jönnek létre, ha fel is telepítem a lefordított kernelt! És természetesen csak akkor, ha a feltelpített kernelnek a forrása is megvan! Szóval a kernel átcipelése triviális, de ebbe a csomagba hogy tudom belevarázsolni a szükséges drivert is, vagy hogy tudok a driverből külön lefirdított bináris csomagot csinálni?
- A hozzászóláshoz be kell jelentkezni
Csinalj a kernel forditas vegen egy make modules_install -t, ez atpakolja oda a leforditott modulokat, de nem zavar be mast a futo rendszerben. Ezutan leforditod az lcd modulokat, kiszeded a konyvtarbol oket, aztan le is torolheted az egeszet. Atmasolod a kis gepre ugyanoda, ahol itt voltak, es kiadsz egy "dempmod -a" -t, ez "beregisztralja" oket, es latni fogja a rendszer, mehet a modprobe..
- A hozzászóláshoz be kell jelentkezni
A fenti 'depmod -a'-ba becsúszott egy 'm'...
- A hozzászóláshoz be kell jelentkezni
Meg egy aprocska kis hiba: a kernel modul forditas az eppen aktualis kernelhez fordit (ha jol tudom, eppen ezert keresi a /lib -ben a forrast). Tehat telepiteni kell szerintem a kernel csomagot, majd akkor leforditani a modult. igy atvive, majd 'depmod -a' parancsot futtatva kellene hogy mukodjon.
- A hozzászóláshoz be kell jelentkezni
Világos. Most ott tartok, hogy fordítottam egy kernelt, meg fordítottam egy modult is hozzá. Először a célgépen felrakom a kernelt, majd mellé pakolom a lefordított modult (meg a szükséges install dolgokat megcsinálom, mint depmod) és így menni fog? Akkor ebből akár csinálhatok deb package-et is, ha jól értem, csak az a lényeg, hogy mindig ugyanazzal a kernellel kell telepíteni, ugye?
- A hozzászóláshoz be kell jelentkezni
szerk: torolve
- A hozzászóláshoz be kell jelentkezni
Köszönöm a segítséget, sikerült a kernel és a modul áttelepítése.
Most már csak az a gondom, hogy telepítés közben "mknod" és "ln" parancsokkal csinálódnak meg a /dev alatt a szükséges "fájlok" és symlinkek. Ám ezek egy újraindítás után nem jönnek létre maguktól! Hogyan lehet erre rávenni a rendszert, hogy ezeket minden startup-nál csinálgassa meg? Az tiszta sor, hogy a kernelmodult és pramétereit a /etc/modules fájlba kell rögzíteni, de nyilván kellenek a karakteres device-ok is a /dev alatt a helyes működéshez!
- A hozzászóláshoz be kell jelentkezni
csinálj rá egy udev rule-t.
echo 'KERNEL=="< lcd modul neve >", NAME="%k", MODE="0666"' > /etc/udev/rules.d/xxx_lcd.rules
a NAME-nál nem biztos hogy a modul neve kell (a %k modulnévvel hoz létre device-t), ezen kívül a symlink opciót is használnod kell ha akarsz symlinket, meg a mode sem biztos ez. De valami hasonlót kell csinálnod. Ebben az esetben amikor betöltődik a driver az udevd létrehozza a rule alapján a device-okat.
P.S: persze ha UDEV-et használsz.
- A hozzászóláshoz be kell jelentkezni
Köszi a választ! Valszeg ez lesz a megoldás, de valamit elszúrhattam, mert nem csinál semmilyen dev fájlt a modprobe közben. Ezt írtam de a /etc/udev/lcd.rules fájlba (csináltam egy linket a /etc/udev/rules.d könyvtárban lcd névvel rá):
KERNEL=="hd44780", NAME="%k", MODE="0666", SYMLINK="lcd"
Ez pedig amit kiír az "udevmonitor --env" amikor a "modprobe hd44780" utasítást futtatom:
UEVENT[1164026512.664432] add@/module/lcd_linux
ACTION=add
DEVPATH=/module/lcd_linux
SUBSYSTEM=module
SEQNUM=681
UEVENT[1164026512.667805] add@/module/hd44780
ACTION=add
DEVPATH=/module/hd44780
SUBSYSTEM=module
SEQNUM=682
UDEV [1164026512.673652] add@/module/lcd_linux
UDEV_LOG=3
ACTION=add
DEVPATH=/module/lcd_linux
SUBSYSTEM=module
SEQNUM=681
UDEVD_EVENT=1
UDEV [1164026512.687419] add@/module/hd44780
UDEV_LOG=3
ACTION=add
DEVPATH=/module/hd44780
SUBSYSTEM=module
SEQNUM=682
UDEVD_EVENT=1
Szóval mit ronthatok el? Ha kézzel csinálom a device fájlokat, akkor a következőket kell csinálnom:
mknod /dev/lcd0 c 120 0
ln -s /dev/lcd0 /dev/lcd
Ezt kellene udev-vel csináltatni.
- A hozzászóláshoz be kell jelentkezni
Igen.
Elfelejtettem mondani, hogy ahhoz hogy a device létrejöjjön autómatikusan az udev által a major numkbere 0 kell legyen. Így kell betölteni a modult. Ezt a modprobe.d-ben létrehozott < modulnév > fájllal tudod megtenni, amibe beírod, hogy : 'option < modulnév > major=0'. Ebben az esetben echo 'option hd44780 major=0' > /etc/modprobe.d/hd44780 . Persze ez csak akkor lehet, ha van ilyen opciója a modulnak. Mondjuk úgy tudom, hogy ezt már javították az udev-ben, de lehet hogy csak patch-ben elérhető. Tehát ha minden igaz ez nem szükséges hozzá, de azért egy próbát megér. Szóval nézd meg modinfo-val van e ilyen paramétere a modulnak.
A fenti udev rule alapján a betöltött modul hd44780 nevű, ami során létrehozza a /dev/hd44780 eszközt és csinál egy /dev/lcd symlinket rá. Ha lcd0 nevűt akarsz, akkor a NAME után ezt add meg. A %k behejettesíti a kernelmodul nevét, és neked nem ez kell.
A másik megoldás, hogy ha nincs major opciója amodulnak, akkor futtathatsz parancsokat is a rule-on belül, pl egy mknod-ot és egy ln-t is. Erre való a RUN directíva.
Persze lehet hogy nem jól tudom. Annyit én sem foglalkoztam a dologgal.
- A hozzászóláshoz be kell jelentkezni
Köszi, de nem jött be ez se. A modulnak nincs major paramétere, csak minor! Szóval első lehetőség kilőve, a második meg szintén! Ha jól sejtem az udev eleve csak akkor foglalkozik a dologgal, ha a major-ja 0, így a RUN direktívát sem tudom használni, mert eleve nem veszi észre a rá vonatkozó sort! Más ötlet?
- A hozzászóláshoz be kell jelentkezni
/etc/rc.local -ba bele aztán éljen :)
- A hozzászóláshoz be kell jelentkezni
Ez marad! :)
Azért köszi a segítséget!
- A hozzászóláshoz be kell jelentkezni