5.1. Ξεκινώντας τον εγκαταστάτη στην αρχιτεκτονική 32-bit hard-float ARMv7

5.1.1. Μορφοποιήσεις της Εικόνας Εκκίνησης

Σε συστήματα βασισμένα στην αρχιτεκτονική ARM, στις περισσότερες περιπτώσεις χρησιμοποιείται μία από τις παρακάτω δύο μορφοποιήσεις των εικόνων εκκίνησης: α) συνήθεις πυρήνες μορφής Linux zImage-format («vmlinuz») σε συνδυασμό με συνήθεις "αρχικούς" δίσκους μνήμης («initrd.gz») ή β) πυρήνες μορφής uImage-format («uImage») σε συνδυασμό με αντίστοιχες αρχικές εικόνες μνήμης («uInitrd»).

uImage/uInitrd είναι μορφοποιήσεις εικόνων σχεδιασμένες για το υλισμικό U-Boot που χρησιμοποιείται σε πολλά συστήματα βασισμένα στην αρχιτεκτονική ARM (κυρίως 32-bit). Παλιότερες εκδόσεις του U-Boot μπορούν να εκκινήσουν μόνο αρχεία στ μορφοποίηση uImage/uInitrd, οπότε αυτές χρησιμοποιούνται σε παλιότερα συστήματα armel. Νεότερες εκδόσεις U-Boot μπορούν - εκτός από την εκκίνηση εικόνων uImages/uInitrds - να εκκινήσουν επίσης συνηθισμένους πυρήνες Linux και εικόνες ramdisk, αλλά η σύνταξη των εντολών για να γίνει αυτό διαφέρει ελαφρά από αυτήν για την εκκίνηση εικόνων uImages.

Για συστήματα που χρησιμοποιούν έναν πυρήνα πολλαπλών πλατφορμών, εκτός από τον πυρήνα και την αρχική ramdisk εκκίνησης χρειάζεται και το λεγόμενο αρχείο device-tree (ή device-tree blob, «dtb»). Είναι συγκεκριμένο για κάθε υποστηριζόμενο σύστημα και περιέχει μια περιγραφή του συγκεκριμένου υλικού. Το αρχείο dtb θα πρέπει να παρέχεται στην συσκευή από το υλισμικό, αλλά στην πράξη ένα πιο πρόσφατο χρειάζεται συνήθως να φορτωθεί.

5.1.2. Ρύθμιση της κονσόλας

Το συμπιεσμένο αρχείο netboot (Τμήμα 5.1.3.2, «Προκατασκευασμένο συμπιεσμένο αρχείο netboot»), και οι εικόνες του εγκατατάτη σε κάρτες SD (Τμήμα 5.1.5, «Χρήση προκατασκευασμένων εικόνων SD-card με τον εγκαταστάτη») χρησιμοποιούν την (εξαρτώμενη από την πλατφόρμα) προεπιλεγμένη κονσόλα που καθορίζεται από το U-Boot για την μεταβλητή «console». Στις περισσότερες περιπτώσεις αυτή είναι μια σειριακή κονσόλα οπότε, σ' αυτές τις πλατφόρμες, χρειάζεστε εξ ορισμού ένα καλώδιο σειριακής κονσόλας για να χρησιμοποιήσετε τον εγκαταστάτη.

Σε πλατφόρμες που υποστηρίζουν επίσης μια κονσόλα οθόνης (video console), μπορείτε να τροποποιήσετε την μεταβλητή «console» του U-Boot ανάλογα αν θέλετε ο εγκαταστάτης να ξεκινά από την κονσόλα οθόνης.

5.1.3. Εκκίνηση με TFTP

H εκκίνηση από το δίκτυο προαπαιτεί ότι διαθέτετε μια δικτυακή σύνδεση και έναν δικτυακό TFTP server εκκίνησης (και πιθανόν επίσης έναν εξυπηρετητή DHCP, RARP, ή BOOTP για αυτόματη ρύθμιση του δικτύου).

Η ρύθμιση από την πλευρά του εξυπηρετητή για την υποστήριξη της δικτυακής εκκίνησης περιγράφεται στο Τμήμα 4.3, «Προετοιμασία Αρχείων για δικτυακή εκκίνηση με TFTP».

5.1.3.1. Εκκίνηση με TFTP σε U-Boot

Η εκκίνηση από το δίκτυο σε συστήματα που χρησιμοποιούν το υλισμικό U-Boot συνίσταται σε τρία βήματα: α) ρύθμιση του δικτύου, β) φόρτωση των εικόνων (kernel/initial ramdisk/dtb) στη μνήμη και γ) πραγματική εκτέλεση του κώδικα που έχει φορτωθεί προηγουμένως.

Πρώτα πρέπει να ρυθμίσετε το δίκτυο, είτε αυτόματα μέσω DHCP εκτελώντας την εντολή

setenv autoload no
dhcp

ή με το χέρι ορίζοντας αρκετές μεταβλητές περιβάλλοντος

setenv ipaddr <ip διεύθυνση του πελάτη>
setenv netmask <netmask>
setenv serverip <ip διεύθυνση του εξυπηρετητή tftp>
setenv dnsip <ip διεύθυνση του εξυπηρετητή ονοματοδοσίας>
setenv gatewayip <ip διεύθυνση της προεπιλεγμένης πύλης>

Αν το προτιμάτε, μπορείτε να κάνετε αυτές τις ρυθμίσεις μόνιμες εκτελώντας

saveenv

Στη συνέχεια θα πρέπει να φορτώσετε τις εικόνες (kernel/initial ramdisk/dtb) στη μνήμη. Αυτό γίνεται με την εντολή tftpboot, η οποία θα πρέπει να εκτελεστεί με τη διεύθυνση στην οποία θα αποθηκευτεί η εικόνα στη μνήμη. Δυστυχώς ο "χάρτης της μνήμης" (memory map) μπορεί να διαφέρει από σύστημα σε σύστημα, οπότε δεν υπάρχει γενικός κανόνας για το ποιες διευθύνσεις μπορούν να χρησιμοποιηθούν γι' αυτό.

Σε μερικά συστήματα, το U-Boot προκαθορίζει ένα σύνολο μεταβλητών περιβάλλοντος με κατάλληλες διευθύνσεις φόρτωσης: kernel_addr_r, ramdisk_addr_r και fdt_addr_r. Μπορείτε να ελέγξετε αν είναι ορισμένες εκτελώντας την εντολή

printenv kernel_addr_r ramdisk_addr_r fdt_addr_r

Αν δεν είναι ορισμένες, πρέπει να ελέγξετε την τεκμηρίωση του συστήματός σας για κατάλληλες τιμές και να τις θέσετε με το χέρι. Για συστήματα βασισμένα στις SoC Allwinner SunXi (πχ. τα Allwinner A10, όνομα αρχιτεκτονικής «sun4i» ή τα Allwinner A20, όνομα αρχιτεκτονικής «sun7i»), μπορείτε πχ. να χρησιμοποιήσετε τις ακόλουθες τιμές:

setenv kernel_addr_r 0x46000000
setenv fdt_addr_r 0x47000000
setenv ramdisk_addr_r 0x48000000

Όταν έχουν οριστεί οι διευθύνσεις φόρτωσης, μπορείτε να φορτώσετε τις εικόνες στη μνήμη από τον εκ των προτέρων καθορισμένο εξυπηρετητή tftp με

tftpboot ${kernel_addr_r} <filename of the kernel image>
tftpboot ${fdt_addr_r} <filename of the dtb>
tftpboot ${ramdisk_addr_r} <filename of the initial ramdisk image>

Το τρίτο μέρος είναι η ρύθμιση της γραμμές εντολών τιου πυρήνα και η εκτέλεση όντως του κώδικα που έχει φορτωθεί. Το U-Boot περνά το περιεχόμενα της μεταβλητής περιβάλλοντος «bootargs» ως γραμμή εντολής στον πυρήνα, οπότε οποιεσδήποτε παράμετροι για τον πυρήνα και τον εγκαταστάτη - όπως η συσκευή της κονσόλας (δείτε Τμήμα 5.3.1, «Κονσόλα Εκκίνησης») ή επιλογές προρύθμισης (δείτε Τμήμα 5.3.2, «Παράμετροι του Εγκαταστάτη του Debian» και Παράρτημα B, Αυτοματοποίηση της εγκατάστασης με χρήση προρυθμίσεων (preseeding)) - μπορούν να τεθούν με μια εντολή όπως η

setenv bootargs console=ttyS0,115200 rootwait panic=10

Η ακριβής εντολή για την εκτέλεση του κώδικα που έχει φορτωθεί από πριν εξαρτάται από την διαμόρφωση της εικόνας που χρησιμοποιείται. Με τις εικόνες uImage/uInitrd, η εντολή είναι

bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}

και με αυθεντικές εικόνες Linux είναι

bootz ${kernel_addr_r} ${ramdisk_addr_r}:${filesize} ${fdt_addr_r}

Σημείωση: όταν εκκινείτε συνηθισμένες εικόνες linux, είναι σημαντικό να φορτώνετε την αρχική εικόνα ramdisk μετά τον πυρήνα και το αρχείο dtb καθώς το U-Boot θέτει ως τιμή της μεταβλητή του μεγέθους αρχείου το μέγεθος του τελευταίου αρχείου που φορτώθηκε και η εντολή bootz απαιτεί το μέγεθος της εικόνας της ramdisk να δουλεύει σωστά. Σε περίπτωση εκκίνησης ενός πυρήνα μιας συγκεκριμένης πλατφόρμας, δηλαδή ενός πυρήνα χωρίς δέντρο-συσκευών, απλά παραλείψτε την παράμετρο ${fdt_addr_r}.

5.1.3.2. Προκατασκευασμένο συμπιεσμένο αρχείο netboot

Το Debian παρέχει ένα έτοιμο συμπιεσμένο αρχείο ( .../images/netboot/netboot.tar.gz ) που μπορεί απλά να αποσυμπιεστεί στον εξυπηρετητή tftp και περιέχει όλα τα απαραίτητα αρχεία για δικτυακή εκκίνηση. Περιλαμβάνει επίσης ένα σενάριο εκκίνησης που αυτοματοποιεί όλα τα βήματα για τη φόρτωση του εγκαταστάτη. Σύγχρονες εκδόσεις του U-Boot περιέχουν ένα γνώρισμα για αυτόματη εκκίνηση του tftp (autoboot) που ενεργοποιείται όταν δεν υπάρχει τοπική συσκευή αποθήκευσης (MMC/SD, USB, IDE/SATA/SCSI) περίπτωση στην οποία φορτώνει αυτό το σενάριο εκκίνησης από τον εξυπηρετητή tftp. Προαπαιτούμενο για τη χρήση αυτού του γνωρίσματος είναι να έχετε έναν εξυπηρετητή dhcp στο δίκτυό σας που παρέχει στον πελάτη την διεύθυνση του εξυπηρετητή tftp.

Αν θέλετε να ενεργοποιήσετε το γνώρισμα της αυτόματης εκκίνησης του tftp από τη γραμμή εντολών του U-Boot, μπορείτε να χρησιμοποιήσετε την ακόλουθη εντολή:

εκτελέστε την εντολή bootcmd_dhcp

Για να φορτώσετε με το χέρι το σενάριο εκκίνησης (bootscript) που παρέχεται από το συμπιεσμένο αρχείο (tarball), μπορείτε, εναλλακτικά, να δώσετε τις παρακάτω εντολές στο προτρεπτικό του U-Boot:

setenv autoload no
dhcp
tftpboot ${scriptaddr} /debian-installer/armhf/tftpboot.scr
source ${scriptaddr}

5.1.4. Εκκίνηση από ένα κλειδί μνήμης USB σε U-Boot

Πολλές σύγχρονες εκδόσεις του U-Boot διαθέτουν υποστήριξη για USB και επιτρέπουν την εκκίνηση από συσκευές μαζικής αποθήκευσης USB όπως κλειδιά USB. Δυστυχώς τα ακριβή βήματα που απαιτούνται για να γίνει αυτό μπορεί να διαφέρουν αρκετά από συσκευή σε συσκευή.

Η έκδοση U-Boot v2014.10 έχει εισαγάγει έναν κοινό χειρισμό της γραμμής εντολών και του πλαισίου αυτόματης εκκίνησης (autoboot). Αυτό επιτρέπει την κατασκευή γενικών εικόνων εκκίνησης που δουλεύουν σε οποιοδήποτε σύστημα υλοποιεί αυτό το πλαίσιο. Ο debian-installer υποστηρίζει την εγκατάσταση από ένα κλειδί USB σε τέτοια συστήματα αλλά, δυστυχώς, αυτό το πλαίσιο δεν έχει ακόμα υιοθετηθεί από όλες τις πλατφόρμες.

Για να φτιάξετε ένα εκκινήσιμο κλειδί USB για την εγκατάσταση του Debian, αποσυμπιέστε το συμπιεσμένο αρχείο hd-media (δείτε Τμήμα 4.2.1, «Πού να βρείτε αρχεία της εγκατάστασης») σε ένα κλειδί USB διαμορφωμένο με ένα σύστημα αρχείων που υποστηρίζεται από την έκδοση του U-Boot στη συσκευή σας. Για σύγχρονες εκδόσεις του U-Boot, οποιοδήποτε από τα συστήματα FAT16/FAT32/ext2/ext3/ext4 δουλεύουν συνήθως. Στη συνέχεια αντιγράψτε το αρχείο της εικόνας ISO από το πρώτο CD ή DVD της εγκατάστασης του Debian στο κλειδί.

Το πλαίσιο της αυτόματης εκκίνησης (autoboot) σε σύγχρονες εκδόσεις του U-Boot δουλεύει παρόμοια με τις επιλογές της σειράς εκκίνησης στο BIOS/UEFI ενός PC, δηλαδή ελέγχει μια λίστα πιθανών συσκευών εκκίνησης για μια έγκυρη εικόνα εκκίνησης και ξεκινά την πρώτη που θα βρει. Αν δεν υπάρχει εγκατεστημένο κάποιο λειτουργικό σύστημα, τοποθετώντας το κλειδί USB και ξεκινώντας το μηχάνημα θα πρέπει να έχει σαν αποτέλεσμα την εκκίνηση του εγκαταστάτη. Μπορείτε επίσης να ξεκινήσετε τη διαδικασία εκκίνησης από το USB οποιαδήποτε στιγμή από το προτρεπτικό του U-Boot εισάγοντας της εντολή «run bootcmd_usb0».

Ένα πρόβλημα που μπορεί να προκύψει όταν εκκινείτε από ένα κλειδί USB κι ενώ χρησιμοποιείτε μια σειριακή κονσόλα είναι μια αναντιστοιχία στον ρυθμό μετάδοσης (baudrate) της κονσόλας. Αν μια μεταβλητή για την κονσόλα είναι ορισμένη στο U-Boot, το σενάριο εκκίνησης του debian-installer την περνάει αυτόματα στον πυρήνα για τον καθορισμό της κύριας συσκευής κονσόλας και, εφόσον εφαρμόζεται, του ρυθμού μετάδοσης της κονσόλας. Δυστυχώς, η διαχείριση των μεταβλητών κονσόλας διαφέρει από πλατφόρμα σε πλατφόρμα - σε μερικές πλατφόρμες, η μεταβλητή της κονσόλας περιλαμβάνει το baudrate (όπως στην «console=ttyS0,115200»), ενώ σε άλλες η μεταβλητή της κονσόλας περιέχει μόνο την συσκευή (όπως πχ. στην«console=ttyS0»). Η τελευταία περίπτωση οδηγεί σε μιααλλοιωμένη έξοδο της κονσόλας όταν ο προκαθορισμένος ρυθμός μετάδοσης διαφέρει ανάμεσα στο U-Boot και τον πυρήνα. Σύγχρονες εκδόσεις του U-Boot χρησιμοποιούν συχνά έναν ρυθμό 115200 baud ενώ ο πυρήνας έχει ακόμα ως προεπιλογή τα 9600 baud. Αν συμβαίνει κάτι τέτοιο, θα πρέπει να ορίσετε με το χέρι την μεταβλητή της κονσόλας ώστε να περιέχει την σωστή τιμή του ρυθμού μετάδοσης για το σύστημά σας και στη συνέχεια να ξεκινήσετε τον εγκαταστάτη με την εντολή «run bootcmd_usb0».

5.1.5. Χρήση προκατασκευασμένων εικόνων SD-card με τον εγκαταστάτη

Για έναν αριθμό συστημάτων, το Debian παρέχει εικόνες καρτών SD που περιέχουν τόσο το U-Boot όσο και τον εγκαταστάτη debian-installer. Αυτές οι εικόνες παρέχονται σε δύο εκδοχές - μία για τη μεταφόρτωση πακέτων από το δίκυτο (διαθέσιμη στο .../images/netboot/SD-card-images/ ) και μία για εγκαταστάσεις χωρίς δίκτυο με τη χρήση ενός Debian CD/DVD (διαθέσιμου στο .../images/hd-media/SD-card-images/ ). Για να εξοικονομήσετε χώρο και εύρος δικτύου, η εικόνα αποτελείται από δύο τμήματα - ένα κομμάτι που εξαρτάται από το σύστημα με την ονομασία «firmware.<system-type>.img.gz», και ένα κομμάτι που δεν εξαρτάτια από το συγκεκριμένο σύστημα με την ονομασία «partition.img.gz».

Για να δημιουργήσετε μια πλήρη εικόνα από τα δύο αυτά μέρη σε συστήματα Linux, μπορείτε να χρησιμοποιήσετε την εντολή zcat ως εξής:

 zcat firmware.<system-type>.img.gz partition.img.gz > complete_image.img

Σε συστήματα Windows, θα πρέπει πρώτα να αποσυμπιέσετε τα δύο μέρη ξεχωριστά, κάτι που μπορεί να γίνει πχ. χρησιμοποιώντας το εργαλείο 7-Zip, και τότε στη συνέχεια να συμπαραθέσετε (concatenate) τα αποσυμπιεσμένα μέρη εκτελώντας την εντολή

copy /b firmware.<system-type>.img + partition.img complete_image.img

σε ένα παράθυρο των Windows με την εντολή CMD.exe.

Γράψτε την εικόνα που θα προκύψει στην κάρτα SD, εκτελώντας, για παράδειγμα, την παρακάτω εντολή σε ένα σύστημα Linux system:

cat complete_image.img > /dev/SD_CARD_DEVICE

Αφού τοποθετήσετε την κάρτα στο προς εγκατάσταση σύστημα και το θέσετε σε λειτουργία, ο εγκαταστάτης θα φορτωθεί από την κάρτα SD card. Αν χρησιμοποιείτε την εκδοχή hd-media για εγκατάσταση εκτός δικτύου, θα πρέπει να δώσετε πρόσβαση στον εγκαταστάτη στο πρώτο Debian CD/DVD σε ένα διαφορετικό μέσο, το οποίο μπορεί να είναι πχ. μια εικόνα CD/DVD ISO σε ένα κλειδί USB.

Όταν φτάσετε στο βήμα της διαμέρισης στον εγκαταστάτη (δείτε Τμήμα 6.3.4, «Διαμέριση και Επιλογή Σημείων Προσάρτησης»), μπορείτε να διαγράψετε ή να αντικαταστήσετε οποιεσδήποτε προηγούμενες κατατμήσεις στην κάρτα. Από τη στιγμή που ξεκινά ο εγκαταστάτης, εκτελείται πλήρως στην κύρια μνήμη του συστήματος και δεν χρειάζεται πλέον πρόσβαση στην κάρτα SD, οπότε μπορείτε να την χρησιμοποιήσετε ολόκληρη για να εγκαταστήσετε το Debian. Ο ευκολότερος τρόπος για να δημιουργήσετε ένα κανονικό σχήμα διαμέρισης στην κάρτα SD είναι να αφήσετε τον εγκαταστάτη να δημιουργήσει για σας ένα αυτόματα (δείτε την ενότητα Τμήμα 6.3.4.2, «Καθοδηγούμενη Διαμέριση»).