Worschter Geschrieben 16. Juli 2005 Melden Share Geschrieben 16. Juli 2005 Ich hab mir mal die Mühe gemacht das Bauen einse Squashfs Neutrino Images bisl zu erklären. Das Ganze ist nicht 100% vollständig, In der Hauptsache geht es mir mal um das Verständis wie man die Partitionen einteilt und worauf es ankommt daß was rauuskommt Hier ist der Support Thread Zu allererst sei gesagt, das Ganze am Besten nicht mit Root-Rechten machen sondern als User. Als erstes mal feststellen, ob die richtigen Datei-Versionen installiert sind. dafür hänge ich mal im ersten Packet ein Script namens check an mit dem man das kontrollieren kann. Vorsichtshalber ist auch mkfs.jffs2 und mksquashfs mit drin, die müssen nach $HOME/bin und ein rpm Packet -> Fakeroot, das müsste installiert werden. dann check ausführen und schauen ob die Versionen oder höher installiert sind: - cvs - autoconf >= 2.57a - automake >= 1.7 - libtool >= 1.4.2 - gettext >= 0.12.1 - make >= 3.79 - makeinfo (texinfo) - tar - bunzip2 (bzip2) - gunzip (gzip) - patch - infocmp (ncurses-bin / ncurses-devel) - gcc 2.95 or >= 3.0 - g++ 2.95 or >= 3.0 - flex - bison - pkg-config - wget - libpng2 or libpng3 (DirectFB) es ist je Punkt immer nur eine Datei nötig. wenn das passt, dann: makedir $HOME/tuxbox-cvscd $HOME/tuxbox-cvs set CVS_RSH=ssh && cvs -danoncvs@82.149.243.100:/cvs/tuxbox -z3 co -P . Der Punkt am Schluß ist wichtig! Nun werden ein Paar Verzeichnisse erstellt, falls sie noch nicht existieren: [ ! -d $HOME/tuxbox-cvs/cdk ] && mkdir -v $HOME/tuxbox-cvs/cdk[ ! -d $HOME/tuxbox-cvs/cdk/.deps ] && mkdir -v $HOME/tuxbox-cvs/cdk/.deps [ ! -d $HOME/tuxbox-cvs/cdk/Archive ] && mkdir -v $HOME/tuxbox-cvs/cdk/Archive Nun bisl wissenswetes, das CVS besteht hauptsächlich aus den DBOX eigenen Files und aus Patches für allgemeine Linux-Sachen. Die DBox eigenen Sachen hat man nun schon, die andren Sachen werden als Archive downgeloadet. Diese Archive brauch man ansich auch nur beim ersten mal runterladen, die ändern sich kaum, haben allerdings zusammen glaub 150-200 MB. Falls man die schon mal hat, dann werden die nun einfach nach $HOME/tuxbox-cvs/cdk/Archive kopiert oder einfach der ganze Ordner dahin verlinkt, ansonsten erklär ich später noch wie man am Besten zu denen kommt. nun aber weiter: cd $HOME/tuxbox-cvs/cdk/./autogen.sh ./configure --prefix=$HOME/dbox2 --with-cvsdir=$HOME/tuxbox-cvs --enable-maintainer-mode --with-targetruleset=flash Nun ist das CVS "vorkonfiguriert" und es wird Zeit das Archive Verzeichnis zu füllen: make download In der Regel findet das manche Sachen nicht, dann muss man die von Hand runterladen. Zum Beispiel hier: http://tuxbox.berlios.de/pub/tuxbox/cdk/src/ oder über Google suchen. Wenn das ganze durch ist, wie oben beschrieben das Zeug wegsichern. Es ist nun Zeit fü erste Patches. Damit der Kernel gepatch werden kann, muss das Archiv ausgepackt werden: make .deps/linuxdir als erstes die Datei $HOME/tuxbox-cvs/cdk/linux/drivers/mtd/maps/dbox2-flash.c da muss dieser Teil von so: static struct mtd_partition partition_info[]= { { .name = "BR bootloader", .size = 128 * 1024, .offset = 0, .mask_flags = MTD_WRITEABLE }, { .name = "FLFS (U-Boot)", .size = 128 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "root (Cramfs)", .size = 6528 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "var (JFFS2)", .size = 1408 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "Flash without bootloader", .size = MTDPART_SIZ_FULL, .offset = 128 * 1024, .mask_flags = 0 }, { .name = "Complete Flash", .size = MTDPART_SIZ_FULL, .offset = 0, .mask_flags = MTD_WRITEABLE } }; in so geändert werden: static struct mtd_partition partition_info[]= { { .name = "BR bootloader", .size = 128 * 1024, .offset = 0, .mask_flags = MTD_WRITEABLE }, { .name = "root (squashfs)", .size = 6528 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "var (jffs2)", .size = 1408 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "flfs (u-boot)", .size = 128 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "flash without bootloader", .size = MTDPART_SIZ_FULL, .offset = 128 * 1024, .mask_flags = 0 }, { .name = "complete flash", .size = MTDPART_SIZ_FULL, .offset = 0, .mask_flags = MTD_WRITEABLE } }; Dann die Datei : $HOME/tuxbox-cvs/apps/tuxbox/neutrino/src/gui/update.cpp Dazu das diff: #ifdef SQUASHFS #define LIST_OF_UPDATES_LOCAL_FILENAME "squashfs.list" #define UPDATE_LOCAL_FILENAME "update.squashfs" -#define RELEASE_CYCLE "2.0" +#define RELEASE_CYCLE "2.1" #define FILEBROWSER_UPDATE_FILTER "squashfs" #define MTD_OF_WHOLE_IMAGE 4 -#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd/2" +#define MTD_DEVICE_OF_UPDATE_PART "/dev/mtd/1" #else #define LIST_OF_UPDATES_LOCAL_FILENAME "cramfs.list" #define UPDATE_LOCAL_FILENAME "update.cramfs" Das steht ziemlich am Anfang und bedeutet, daß Zeilen mit dem Minus am Anfang rausfliegen und welche mit nem Plus eingefügt werden. -- nun die Datei: $HOME/tuxbox-cvs/cdk/Patches/linux-2.4.31-dbox2.config-flash hier sucht man nach: # CONFIG_BLK_DEV_LOOP is not set und ändert ihn nach CONFIG_BLK_DEV_LOOP=y und nach : CONFIG_CRAMFS=y und ändert in: # CONFIG_CRAMFS is not set -- Nun die Datei $HOME/tuxbox-cvs/hostapps/flash/flashmanage.pl dort ändert man: my %partdef = ( 0 => [ "ppcboot", 0, 0x20000 ], 1 => [ "root", 0x20000, 0x660000 ], 2 => [ "var", 0x680000, 0x160000 ], ); in my %partdef = ( 0 => [ "root", 0, 0x660000 ], 1 => [ "var", 0x660000, 0x160000 ], 2 => [ "ppcboot", 0x7c0000, 0x20000 ], ); ---- nun noch die Datei u-boot.config aus dem Packet nach $HOME/tuxbox-cvs/boot/u-boot-config/u-boot.config einspielen. --- Hier gehören auch weitere Patches hin, aber auf die will ich erst mal nicht eingehen, das würde zu weit führen und kann später noch erfolgen. Es sei gesagt, daß man durch diese Patche bisher eine Speicheraufteilung von 6,5MB ROOT SQUASHFS und 1,5MB VAR JFFS2 bekommt. Das ist YADI Standart, aber ehrlich gesagt recht mies. Deswegen ein kleiner Ausflug in die Grössen-berechnung. Die Box hat insgesamt 8192*1024 Speicherplatz. Davon gehen 128*128k für den Bootloader ab, bleiben 8064+1024 für den Rest. Davon gehen nochmal 128*1024 für u-boot weg, bleiben 7936*1024. die 7936 ist also wichtig, denn genau so groß muss ROOT + VAR werden! Wichtig: die Werte müssen unbedingt Vielfache von 128 sein! ein gutes Paar für den Anfang wäre z.B. 128*39 = 4992 für ROOT 128*23= 2944 für VAR -------------------------- 128*62=7936 in der Datei $HOME/tuxbox-cvs/cdk/linux/drivers/mtd/maps/dbox2-flash.c sind die Grössen der Bereiche angegeben, somit ergäbe sich für das Beispiel: { .name = "root (squashfs)", .size = 4992 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, { .name = "var (jffs2)", .size = 2944 * 1024, .offset = MTDPART_OFS_APPEND, .mask_flags = 0 }, in der Datei $HOME/tuxbox-cvs/hostapps/flash/flashmanage.pl sind die Werte mit Startposition und Grösse angegeben, wobei die Werte in Hex sind. my %partdef = ( 0 => [ "root", 0, 0x660000 ], 1 => [ "var", 0x660000, 0x160000 ], 2 => [ "ppcboot", 0x7c0000, 0x20000 ], ); Somit erst mal umrechnen: 4992 * 1024= 5111808 das entspricht in Hex: 0x4E0000 2944 * 1024 = 3014656 das entspricht in Hex: 0x2E0000 ROOT beginnt bei 0, VAR bei 0 + Grösse ROOT, ppcboot (u-boot) beginnt bei Grösse ROOT+ Grösse VAR und ist 128*1024= 131072 = 0x2000 groß. Das ergibt also im Beispiel: my %partdef = ( 0 => [ "root", 0, 0x4E0000 ], 1 => [ "var", 0x4E0000, 0x2E0000 ], 2 => [ "ppcboot", 0x7c0000, 0x20000 ], ); in der Datei $HOME/tuxbox-cvs/boot/u-boot-config/u-boot.config ist das noch bisl verzwickter, da sind die entsprechenden Zeilen: #define CFG_FS_PART0_TYPE CFG_FS_SQUASHFS #define CFG_FS_PART0_OFFSET 0x10020000 #define CFG_FS_PART0_SIZE 0x660000 #define CFG_FS_PART1_TYPE CFG_FS_JFFS2 #define CFG_FS_PART1_OFFSET 0x10680000 #define CFG_FS_PART1_SIZE 0x160000 Der Flash der DBox beginnt bei Adresse 0x10000000, da sitzt erst mal der Bootloader mit 0x20000 (128*1024) somit ist Startadresse für Root 0x10000000+ 0x20000 -> #define CFG_FS_PART0_OFFSET 0x10020000 dann folgt wieder die Grösse von ROOT, das wäre bei unsrem Beispiel: #define CFG_FS_PART0_SIZE 0x4E0000 Startadresse für VAR ist dann folglich 0x10020000 + 0x4E0000 #define CFG_FS_PART1_OFFSET 0x10500000 und wieder die Grösse von VAR #define CFG_FS_PART1_SIZE 0x2E0000 ################## Örks schreiben ist anstrengend ################## So die wichtigsten Patches haben wir nun. Nun geht´s an die ersten Makes. Zuerst das u-boot cd $HOME/tuxbox-cvs/cdkrm -v .deps/u-boot make u-boot Nun wird das U-Boot gestrickt, das dauert erst mal bisl Kaffee hole und Brot schmiere wenn das durch ist, dann muss das U-Boot versenkt werd, nee, dann muss das in das flfs Filesystem der DBOX gebracht werden. cd $HOME/tuxbox-cvs/hostapps/mkflfs/ gcc -o mkflfs mkflfs.c minilzo.c rm -v test cp -v $DBOX/tftpboot/u-boot test ./mkflfs 1x mv -v flfs.img $DBOX/flfs/squashfs1x.img ./mkflfs 2x mv -v flfs.img $DBOX/flfs/squashfs2x.img nun wird Neutrino gebastelt cd $HOME/tuxbox-cvs/cdk rm -v .deps/neutrino make neutrino Jetzt müssen wir erst mal alle Dateien die bisher im Verzeichnis $HOME/dbox2/cdkflash erstellt wurden wiedeer löschen. rm -rfv $HOME/dbox2/cdkflash/ Weil nun die eigentlichen Datein da rein kommen. Der Reihe nach: -- Neutrino-- -- Plugins -- -- ftpd -- -- telnetd -- -- dvbtune -- -- contrib-apps -- (weiß auch grad net was des ist ) -- dvb tools -- cd $HOME/tuxbox-cvs/cdkmake flash-neutrino make flash-plugins make flash-ftpd make flash-telnetd make dvbtune make contrib_apps make flash-dvb-tools Nun kommt ein wichtiger Teil das Verstrippen der Librarys, damit wirklich nur das nötige ins Image gelangt: make flash-lib ----- jetzt kommt ein Part wo ich mir net sicher bin ob das sein muss, aber stören tuts net, der Kernel wird für Squashfs gepatcht: Wir vergleichen nochmal die Dateien : $HOME/tuxbox-cvs/cdk/linux/.config $HOME/tuxbox-cvs/cdk/linux/drivers/mtd/maps/dbox2-flash.c ob da die Patches vom Anfang hingelangt sind. Wenn nicht, Patch nochmal machen, wenn ja, dann weiter: cd $HOME/tuxbox-cvs/cdk rm -v .deps/linuxkernel make .deps/linuxkernel rm -v $HOME/dbox2/cdkflash/root/vmlinuz cp -v $HOME/dbox2/tftpboot/kernel-cdk $HOME/dbox2/cdkflash/root/vmlinuz ################## Pühhh ################## Hier angekommen wird es Zeit die gewünschten Änderungen für das Image vorzunehmen. Das liegt nun ausgepackt im Verzeichnis $HOME/dbox2/cdkflash/root/ wenn iIhr ins Verzeichnis $HOME/dbox2/cdkroot/ schaut, so findet man da so manch nützliches was noch nicht im Image drin ist. Aber es gibt auch wichtiges was unbedingt rein muss, damit´s bisl einfache für mich wird, geh ich mal davon aus, daß wir uns im ROOT Bereich ( $HOME/dbox2/cdkflash/root/) bewegen. cp -fv $HOME/dbox2/cdkroot/bin/saa $HOME/dbox2/cdkflash/root/bin/saa cp -fv $HOME/dbox2/cdkroot/bin/aviaext $HOME/dbox2/cdkflash/root/bin/aviaext cp -fv $HOME/dbox2/cdkroot/bin/rcsim $HOME/dbox2/cdkflash/root/bin/rcsim cp -v $HOME/dbox2/cdkroot/sbin/udpstreampes $HOME/dbox2/cdkflash/root/sbin/udpstreampes cp -fv $HOME/dbox2/cdkroot/sbin/lircd $HOME/dbox2/cdkflash/root/sbin/lircd nach /etc/init.d/ müssen rcS start nach /var/etc/init.d/ rcS.local start_neutrino die Dateien müssen dann von /etc/init.d/ nach dort verlinkt werden. cd $HOME/dbox2/cdkflash/root/etc/init.d/ ln -sfv /var/etc/init.d/rcS.local rcS.local ln -sfv /var/etc/init.d/start_neutrino start_neutrino in /etc muss die Datei fstab gelöscht werden und durch die im Packet ersetzt werden. die Network Interfaces Datei muss von /etc/network/ nach /var/etc/network verschoben und dann dahin verlinkt werden. [ -d $HOME/dbox2/cdkflash/root/etc/network ] && rm -rv $HOME/dbox2/cdkflash/root/etc/network cd $HOME/dbox2/cdkflash/root/etc/ ln -sfv /var/etc/network network das gelcihe gilt für folgende Dateien in /etc nach /var/etc/ profile passwd group hosts issue.net resolv.conv cd $HOME/dbox2/cdkflash/root/etc/ mv -v group $HOME/dbox2/cdkflash/root/var/etc mv -v hosts $HOME/dbox2/cdkflash/root/var/etc mv -v passwd $HOME/dbox2/cdkflash/root/var/etc mv -v profile $HOME/dbox2/cdkflash/root/var/etc ln -sfv /var/etc/issue.net issue.net ln -sfv /var/etc/group group ln -sfv /var/etc/hosts hosts ln -sfv /var/etc/passwd passwd ln -sfv /var/etc/resolv.conf resolv.conf ln -sfv /var/etc/profile profile Das default.script muss nach: $HOME/dbox2/cdkflash/root/share/udhcpc/default.script ############# ui langsam hab ich kein Bock mehr ############ Das allerwichtigste ist drin, ausser die ucodes und die Services und bouquets, das muss noch. Und nun schaut euch das Teil mal durch was Ihr noch reinkleben wollt. ------------------------------------ Jetzt müssen noch VAR und ROOT getrennt werden: [ -d $HOME/dbox2/cdkflash/var ] && rm -rv $HOME/dbox2/cdkflash/var mv -v $HOME/dbox2/cdkflash/root/var/ $HOME/dbox2/cdkflash/ [ -d $HOME/dbox2/cdkflash/root/var ] && rm -rv $HOME/dbox2/cdkflash/root/var mkdir -v $HOME/dbox2/cdkflash/root/var Jetzt wird das Image zusammengebaut: cd $HOME/dbox2/cdkflash fakeroot mksquashfs root root.img -be #-always-use-fragments fakeroot mkfs.jffs2 -b -e 131072 -p -o var.img -r var Kontrolliert nun mal die 2 Dateien im Verzeichnis $HOME/dbox2/cdkflash var.img root.img die dürfen nicht grösser sein, als wir sie eingestellt haben, also root.img maximal 4992 * 1024= 5111808 Byte var.img 2944 * 1024 = 3014656 Byte fakeroot $HOME/tuxbox-cvs/hostapps/flash/flashmanage.pl -i $HOME/dbox2/"SQUASHFS_1x.img" -o build --part ppcboot=$HOME/dbox2/flfs/squashfs1x.img --part root=root.img --part var=var.img fakeroot $HOME/tuxbox-cvs/hostapps/flash/flashmanage.pl -i $HOME/dbox2/"SQUASHFS_2x.img" -o build --part ppcboot=$HOME/dbox2/flfs/squashfs2x.img --part root=root.img --part var=var.img Achtung! die letzten Zeilen beginnen mit fakeroot das sieht nur mehr aus wegen dem Zeilenumbruch!!! Es sind exakt 2 Zeilen!!! So in cd $HOME/dbox2/cdkflash/ sollten nun 2 Images liegen. Lange nicht perfekt aber ein Einstieg sollte man hiermit schon haben. Ich hoffe ich hab net zuviel vergessen Ich hab nu kein Bock mehr was zu schreiben Probieren geht über studieren und Fragen sind erlaubt EDIT: Hab vergessen zu sagen, daß ich den Thread absichtlich nicht zum Antworten offen gehalten hab, da ich hier evtl. noch weitere Sachen geplant hab und in einem Posting würde das zu unübersichtlich. (Wenn´s das nicht eh schon ist ) Den ersten Fragen Thread z.B. im DBox Forum werde ich aber dann hier verlinken SQUASHFS.rar Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Worschter Geschrieben 21. Juli 2005 Autor Melden Share Geschrieben 21. Juli 2005 Ich hab mal ein minimal Script aus meinem Image Script gemacht. Ich hab es nicht ganz durchgetestet!!! Aber wenn man ein bisl Scripting Kenntnisse hat, dann sollten evtl auftretende Fehler zu beheben sein. Es sind (hoffentlich) alle nötigen Dateien drin um ein SQUASHFS Image mit den oben angegebenen Partitionen zu generieren. Mehr aber auch fast nicht. Es ist also zwingend erforderlich, das Image von Hand zu kontrollieren und anzupassen. Oder eben das Script zu erweitern. Ein paar Sicherheitschecks sind aber doch drin, so wird zu Anfang kontrolliert ob alle nötigen Programmversionen installiert sind. Falls eine Datei im CVS geändert wurde, so wird der veraltete Patch nicht mehr angenommen und das make bricht mit entsprechenden Info´s ab. Das Paket entpacken. Falls die Archive bereits auf dem Rechner vorhanden sind dann diese nach ~/image/img/Archive kopieren, Ansonsten werden sie downgeloadet, bzw. siehe Beschreibung im ersten Thread. Gestartet wird das Script mit ./build im Verzeichnis ~/image/img/ Das zweite Script dient zum erneuten Packen, falls später Änderungen nötig waren. Es fehlen garantiert einige Dateien oder Links! Nochmals der Hinweis, das Teil dient ansich nur zum Verständnis bzw. als Grundlage, ohne Kenntnisse über Neutrino Images wird man hiermit keine gut laufenden Images bauen können. EDIT: 31.07.2005 : Kleine Bugs beseitigt, siehe: http://www.keywelt-board.com/index.php?sho...ndpost&p=380449 image.rar Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Worschter Geschrieben 21. Juli 2005 Autor Melden Share Geschrieben 21. Juli 2005 Eine Korrektur im ersten Thread, da waren mir jeweils hier: #define CFG_FS_PART0_SIZE 0x4E0000 und hier #define CFG_FS_PART1_SIZE 0x2E0000 ne Null zuviel dran geraten, Sorry! Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Worschter Geschrieben 25. Juli 2005 Autor Melden Share Geschrieben 25. Juli 2005 hm, ich glaub das war es auch schon wieder mit dem Script, Irgendwem scheint das nicht so gefallen zu haben. Jedenfalls wurden anscheinend gestern seitens tuxbox die öffentlichen Make rules geändert. Ich hab noch nicht geaschaut in wie weit sich das auswirkt, aber das Script wird glaub so nimmer gehen. Tja, kurzes Vergnügen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Worschter Geschrieben 25. Juli 2005 Autor Melden Share Geschrieben 25. Juli 2005 Hach, ne gute Nachricht, die Changes wurden reverted, also sollte man auch wieder was mit dem Script anfangen können Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Empfohlene Beiträge