Syn-3 dreambox image
Deze pagina legt stap voor stap uit hoe we een image gemaakt hebben op basis van het Syn-3 buildsysteem en met de Syn-3 filosofie.
Aan het eind vind je een samenvatting van alle settings, packages en daemons voor als je snel aan de slag wit.
Basis omgeving
Eerst moeten we zover komen dat we een eigen kernel kunnen booten die een NFS root filesystem heeft om te testen. Hierna kunnen we pas beginnen met het daadwerkelijk verzamellen en configureren van software, en het inelkaar zetten van een simpel init script.
Crosscompile toolchain
Zelf heb ik een dm500, met powerpc architectuur. We moeten dus gaan crosscompilen en werken met andere architecturen.
In wiki:npl/toolchains vind je de toolchains voor andere architecturen. Hiervoor was nog geen aanpassing nodig aan het buildsysteem
Hierna konden we beginnen met het maken van een kernel.
Omdat deze kernel ook de package naam linux_src en linux krijgt, zul je een conflict krijgen met de huidige i386 kernel. Hiervoor hebben we het buildsysteem aangepast. npl/ is vanaf nu voor i386 packages en i386 crosscompilers. ppc/ is nu voor powerpc packages.
Hiervoor is source:trunk/npl/findfile is aangepast, zodat deze naar de ARCH environment variabelle kijkt. Hij zal dan eerst in syn3/$ARCH kijken en daarna in syn3/npl. Zo kunnen we eenvoudig meerdere architecturen aan. Vergeet deze variabelle dus niet te zetten als je zelf met de dreambox bezig gaat'''
Kernel
We beginnen eerst met de kernel. Deze willen we zelf compilen. Hierna gaan we vervolgens via tftp deze kernel booten en testen met de huidige image die in de flash staat.
Info over het maken en de problemen met de kernel vind je hier in wiki:ppc/kernel.
Damn...wat fscking veel werk om dat voorelkaar te krijgen. (2 dagen)
NFS boot
Om handig te kunnen testen, moeten we eerst het booten over nfs voorelkaar krijgen. Hiervoor gebruik ik de bestaande gemini project omgeving als root filesystem.
Gemini image: http://www.dreambox4u.com/dm500/gemini/Gemini_410_DM500_23102007.img
Zon image is vrij kut ingepakt: een cramfs + squashfs aanelkaar geplakt (heb ik uit tuxbox). Bovendien in de endianness verkeert, dus het lukte me niet om hem 'uit te pakken'. Dan maar met scp de image gekopieert. (half krikky, zonder symlinks en devices).
Dit is eerst voldoende om mee te testen. Als het enigsinds in busybox komt weten we dat het nfs deel werkt en kunnen we beginnen aan onze eigen omgeving.
De kernelimage word dus al geboot via tftp. Nu moet de kernel zelf dus nog zn rootfs over nfs kunnen mounten.
In Documentation/nfsroot.txt van de kernel sources vind je meer info over nfsroot filesystem.
De kernel parameters voor mijn nfsboot zien er zo uit:
console=ttyS0,115200n8 ro root=/dev/nfs nfsroot=192.168.13.1:/home/dreamboxroot ip=dhcp
Dit lijkt te werken, kernel krijgt ip en wil nfs mounten:
NET: Registered protocol family 17 Sending DHCP requests ., OK IP-Config: Got DHCP answer from 0.0.0.0, my address is 192.168.13.2 IP-Config: Complete: device=eth0, addr=192.168.13.2, mask=255.255.255.0, gw=192.168.13.1, host=192.168.13.2, domain=psy.datux.nl, nis-domain=(none), bootserver=0.0.0.0, rootserver=192.168.13.1, rootpath= Looking up port of RPC 100003/2 on 192.168.13.1 portmap: server 192.168.13.1 not responding, timed out Root-NFS: Unable to get nfsd port number from server, using default Looking up port of RPC 100005/1 on 192.168.13.1 ...
Nu nog de nfs server opzetten.
Dit gaat heel simpel: standaard slackware pakketjes nfsd en portmap installen en starten. /etc/exports editten zodat ie naar de /home/dreamboxroot wijst.
Rebooten met juiste kernel parameters en BOOM...het werkt ...half :). Dit komt omdat gemini het ip adress veranderd of weggooit, maar boeie...het werkt !
Nou nog even verder kutten zodat we generieke kernel paramaters voor nfs hebben. (niet gebonden aan mijn ip adres)
Zie volgende paragraaf.
Overzicht instellingen basis omgeving netwerk boot
De volgende deamons en configs heb je nodig om van linux server te kunnen booten.
Firewall
Ik had geen zin om alle poorten uit te zoeken, dus ik heb mn firewall volledig open voor de lan-kant.
Minicom seriele settings
Je moet de seriele console gebruiken om te booten vanaf het netwerk.
Minicom settings zijn: 115200,n,8,1 geen flowcontrol.
Je moet op METEEN op enter drukken tijdens het booten om in het boot menu te komen.
Kernel commandline dreambox (is hardcoded in onze image, dus moet standaard goed staan als je zometeen via tftp boot):
console=ttyS0,115200n8 root=/dev/nfs ip=both ro
DM500 Root filesystem
Zorg dat je het root filesystem maakt onder /home/dm500_root. Hier zal onze eigen dreambox omgeving ook komen als we straks pakketjes gaan maken. Als test heb ik even geminie er in gescp-ed om te kijken of het wil.
Voor andere dreamboxen zullen we straks dus andere directories krijgen.
tftp deamon en kernel image
Deze is nodig om de kernel in te laden via het netwerk. Installeer de package atftpd.
Installeer eerst dm500_linux op je server, zodat je de kernel in /home/dm500_root/boot/zImage.treeboot krijgt.
atftpd deamon parameters, om de kernel te kunnen laten booten:
atftpd --daemon -v /home/dm500_root
NFS server
De nfs server is nodig om het rootfilesystem te kunnen mounten, zodat alles vanaf het netwerk boot.
Installeer de standaard slackware pakketjes nfs-utils en portmap.
Daarna de volgende dingen doen om nfs server te starten. Hij zal bij een reboot vanaf nu ook automatisch starten:
[Syn-3] root@psy.datux.nl /home/dreamboxroot# chmod +x /etc/rc.d/rc.nfsd [Syn-3] root@psy.datux.nl /home/dreamboxroot# chmod +x /etc/rc.d/rc.portmap [Syn-3] root@psy.datux.nl /home/dreamboxroot# cat /etc/exports # See exports(5) for a description. # This file contains a list of all directories exported to other computers. # It is used by rpc.nfsd and rpc.mountd. /home/dm500_root [Syn-3] root@psy.datux.nl /home/dreamboxroot# /etc/rc.d/rc.portmap start [Syn-3] root@psy.datux.nl /home/dreamboxroot# /etc/rc.d/rc.nfsd start
DHCP server
De dhcp server bepaald het ip van je box en geeft aan waar de kernel via tftp en de nfsroot staan.
Instelling dhcp server in /etc/dhcpd.conf:
host db { hardware ethernet 00:09:34:3b:34:44; fixed-address 192.168.13.2; option root-path "192.168.13.1:/home/dm500_root"; filename "/boot/zImage.treeboot"; }
Restarten met svcrestart /service/dhcpd
Booten
Nu moet je kunnen booten.
- Zet dreambox aan
- Druk gelijk op enter in minicom (of houdt deze vast)
- Zorg dat je van netwerk boot
- De zooi moet geboot worden nu. :)
Werkt het niet? Probeer het dan te fixen met behulp van het hele verhaal wat je op deze pagina vind :)
Opzet root file system
Nu we onze eigen kernel hebben EN kunnen booten via het netwerk, is het tijd om losch te gaaaaan. :)
We kunnen nu onze eigen omgeving in deze root zetten.
Omdat we nu verschillende pakketjes gaan krijgen, ga ik 1 verzamel pakket maken voor het dm500 root filesystem. Op deze manier kunnen we bepaalde pakketten generiek houden en voor meerdere dreamboxen of andere platvormen gebruiken.
Dit pakketje zal in ppc/dreambox/dm500_root komen, en alleen files in /home/dm500_root hebben. Allerlei andere losse pakketjes zoals busybox, enigma en closed source driver pakketten zullen verzameld worden in dit ene pakketje.