A meglévő initrd img-be szeretnék egy új modult betteni van e erre valamilyen egyszerű modszer.
- 1718 megtekintés
Hozzászólások
Az egyszerűt nem tudom. Az egyszerű módszer kiderítéséhez amúgy is előbb bonyolult túrásokra van szükség az alap initrd építő szkriptekben. :)
A boynolult módszer viszont így megy:
- vegyük az egyik meglévő initrd-t, pl. initrd-2.6.xxx
- valamint tegyük föl, hogy a loop.ko-t akarod beszúrni
- mkdir initrd; cd initrd
- $ gunzip < initrd-2.6.xxx | cpio -i
- ezzel kicsomagoltuk az initrd-t az adott könyvtárba. Ha végignézed, találsz egy ./init fájlt, az egy /bin/sh (vagy /bin/bash) szkript, az indul 1-es PID-del. (Ezt most fejből írom, nincs kéznél az Ubuntu-m, lehet, hogy ./sbin/init-nek hívják a fájlt. De az az érzésem, hogy Ubuntu alatt is inkább ./init.) Fogsz találni egy pár .ko fájlt is a ./lib könyvtárban. Na oda melléjük másold be a kívánt modult (pl. loop.ko-t).
- aztán a ./init-be egy szimpatikus helyre tedd be a "modprobe loop.ko" parancsot (lesz már egy pár insmod, vagy modprobe hívás, valamelyiket másold le).
- valószínűleg kell még majd mknod is a modulodhoz, pl. "mknod /dev/loop0 b 7 0". Ezt értelemszerűen csak azután a rész után szabad írni, ahol az init már megcsinálta a /dev fájlrendszert.
- ha minden megvan, akkor "find . | cpio --quiet -o -H newc | gzip -9 > /boot/initrd-2.6.xxx.hacked"
- még a /boot/grub/menu.lst-t kell átírni, hogy az új initrd-t használja a kernel, és lehet rebootolni
- a régi initrd-det le ne töröld! Ha valamit elrontasz, akkor nem fog bútolni a géped. Viszont amíg megvan a régi initrd-d, addig akár a grub boot menüben editálva is rá lehet bírni a kernelt, hogy azzal szépen elinduljon.
- A hozzászóláshoz be kell jelentkezni
Köszönöm.
Én az it821x.ko modult szeretném betöltetni ez a it821x chip-pel ellátott ata és raid vezérlők drivere ehhez is kell mknod?
- A hozzászóláshoz be kell jelentkezni
Na megnéztem a Breezy-t, hogy ne beszéljek levegőbe. A Dapper kicsit másképp van, azt most nem tudom megnézni, de fejből tudok segíteni, ha kell.
Szóval az initrd-n belül van egy /conf/modules nevű fájl. Ha abba beteszed a te modulodat, akkor a load_modules() rutin meghívja rá a modprobe-ot. A device node-okat elvileg létrehozza az udevstart nevű progi (ld. man udevstart), amit szintén meghív a a load_modules(). Hogy az it821x.ko-nak milyen /dev bejegyzés kell, azt sajna nem tudom. Gondolom valami /dev/sda-hoz hasonló, de ezt neked kell kideríteni. Hogy az udevstart megcsinálta-e mknod-dal a megfelelő /dev/sda, vagy hasonló bejegyzést, arra két tippem van. Ha működő rendszerben kiadod a "modprobe it821x.ko" parancsot, és létrejön magától a /dev/xxx, akkor valószínűleg az udevstart is megcsinálja majd.
Illetve közvetlenül is meg lehet nézni az initrd-n belülről:
- az init script-et meg lehet állítani a root fájlrendszer fölmountolása előtt, ha a kernelnek adsz egy extra "break" paramétert. Ekkor az init kiszáll (talán root jelszót kér majd), és kapsz egy promptot az initrd-n belül.
- ha már van egy promptod, akkor megkeresheted magad a /dev bejegyzést pl. a "find /dev" paranccsal. Sajnos "find" alapból nincs az initrd-n belül, azt be kell másolni pl. a bin/ könyvtárba a hackelt initrd.img elkészítése előtt (előtte "ldd bin/find" paranccsal ki kell listázni a szükséges .so fájlokat, és megnézni, hogy mind tényleg ott van a lib/ könyvtárban. Azért javasoltam a find-ot, mert annak nem kell semmi extra .so fájl, már minden elő van készítve. Ellentétben pl. az ls-sel, amihez kell még néhány library is.)
- ha ott vagy a promptnál, és "find /dev"-vel nem látod a megfelelő device node-ot, akkor ott helyben kézzel megcsinálhatod; persze az mknod parancsot majd be kell tenni az init szkriptbe valahova a load_modules hívás után
- és ha még mindig ott vagy a promptnál, és van /dev/sda (vagy hasonló) node-od, akkor gyorstesztként rögtön ki is próbálhatod a partíciód fölmountolását: "mount /dev/xxx /root -o ro" (lehet, hogy előtte egy "modprobe ext3" fog kelleni)
- A hozzászóláshoz be kell jelentkezni
Köszönöm a leírást működik a dolog csak simán be kellett másolni a könyvtárba.
De lenne még egy kérdésem egy it8212-es chip-el ellátott raid vezérlőn va két 40GB-os winyó raid 0-ban.
/dev/hde1 ntfs win xp
/dev/hde2 ext3 / dapper
/dev/hde3 ext3 /home
/dev/hde4 swap
Tehát most jelenleg a grub a /dev/hde2 partíción van floppyn smart boot manager erről indul a boot majd linux kiválasz és most már szépen elindul. Még annyi kellett hogy a kernelnek át kell adni hogy ide2=0xc800,0xc402 ezt innen szedtem: http://www.captain.at/programming/ultra-ata/
Ha grubot az mbr-be teszem akkor Error 22:No such partition-t kapok.
És a win xp sem indítja el mi lehet ennek az oka.
Előzőleg fent volt a Fedora 5 test 3 ott legalább az xp-t elindította.
- A hozzászóláshoz be kell jelentkezni
Hát initrd-t túrtam már, grub/menu.lst-t is, de a grub mélylélektanához nem értek. Szerintem egy másik topikban tedd föl ugyanezt a kérdést, hátha valamelyik Debianos ember tud segíteni.
- A hozzászóláshoz be kell jelentkezni
szerintem meg lehet mondani az mkinitrd-nek hogy addoljon meg modulokat. es akkor csak egy ujat kell csinalnod, nem pedig a regit haxolni. (es ha uj kernelt csinalsz akkor sem kell sz@r@kodni, mert mkinitrd eleve jo initrdt csinal)
- A hozzászóláshoz be kell jelentkezni
az /etc/mkinitramfs/modules-be kell betenni
- A hozzászóláshoz be kell jelentkezni