Jump to content

Ein SQUASHFS Image bauen ....


Empfohlene Beiträge

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 :D

 

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-cvs

cd $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 :D

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/cdk

rm -v .deps/u-boot

make u-boot

 

Nun wird das U-Boot gestrickt, das dauert erst mal bisl :P

Kaffee hole und Brot schmiere :wub:

 

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 :D )

-- dvb tools --

cd $HOME/tuxbox-cvs/cdk

make 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 :wub: 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 :P

 

 

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 :D )

Den ersten Fragen Thread z.B. im DBox Forum werde ich aber dann hier verlinken :o

SQUASHFS.rar

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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

  • Wer ist Online   0 Benutzer

    • Keine registrierten Benutzer online.
×
×
  • Neu erstellen...