Building on Debian/fr

Cette page de documentation est un travail en cours

Le but de cette page est de collecter les instructions four la préparation à partir de zéro, d'une carte SD permettant de booter sur un système basé sur l'A10.

= Prérequis =

Une installation Debian Wheezy.

Vous aurez besoin de quelques paquets pour commencer :

apt-get install build-essential libncurses5-dev u-boot-tools qemu-user-static debootstrap git \ binfmt-support libusb-1.0-0-dev pkg-config

= Compilateur =

Les Cross-compilateurs pour Debian sont maintenus par http://www.emdebian.org/crosstools.html. Les compilateurs pour armhf utilisables sont uniquement disponibles sur Debian Sid. Si vous construisez uniquement u-boot et le noyau, les compilateurs gnueabi de Debian testing devraient suffir.

Vous avez donc besoin d'ajouter les sources de paquets emdebian dans les listes de sources (sources.list ou sources.list.d) d'APT.

deb http://www.emdebian.org/debian/ wheezy main deb http://www.emdebian.org/debian/ sid main

Installer le trousseau de clé embedian apt-get install emdebian-archive-keyring apt-get update

Pour installer le compilateur hardfloat (nombres flottants matériels) :

apt-get install gcc-4.5-arm-linux-gnueabihf cd /usr/bin for i in arm-linux-gnueabi*-4.5 ; do ln -s $i ${i%%-4.5} ; done Le compilateur Softfloat (nombres flottants logiciels) dans wheezy est gcc-4.4-arm-linux-gnueabi. gcc 4.6 et 4.7 sont également disponibles dans Sid.

= u-boot =

Un dépôt u-boot avec le support sunxi est maintenu à https://github.com/linux-sunxi/u-boot-sunxi/wiki.

Pour contruire u-boot :

git clone https://github.com/linux-sunxi/u-boot-sunxi.git cd u-boot-sunxi make distclean CROSS_COMPILE=arm-linux-gnueabihf- make cubieboard CROSS_COMPILE=arm-linux-gnueabihf- # change to your board model

= Noyau =

Un noyau Linux avec les patchs sunxi est maintenu à https://github.com/linux-sunxi/linux-sunxi.

Prendre une branche du noyau depuis le dépôt.

sunxi-3.0 et sunxi-3.4 devraient être stable. Les branches stage (intermédiaires) sont pour le développement, doivent être considérés comme instables et n'être utilisé que pour des tests. Ces patches sont fusionné (merged) dans les versions non-stage à intervalles régulières.

Dans le futur, les nouvelles branches pour les noyaux plus récents devraient être disponibles.

Utilisez la liste déroulante des branches sur la page web pour voir les branches disponibles. Utilisez le nom de branche après -b pour télécharger cette branche.

git clone https://github.com/linux-sunxi/linux-sunxi.git -b sunxi-3.4

Pour télécharger la version stage (moins stable, mais avec certains pilotes plus avancés ) git clone https://github.com/linux-sunxi/linux-sunxi.git -b stage/sunxi-3.4

Il faut ensuite entrer dans le répertoire des sources pour la suite cd linux-sunxi

Créer une configuration. Il y a quelques configurations par défaut disponibles dans le répertoire arch/arm/configs/.

Les fichiers sont de type _defconfig, où est celle dont vous avez besoin.

Sur sunxi, les principales disponibles sont :
 * sun4i_defconfig (pour AllWinner A10), sun4i_crane_defconfig est une version pour certaines tablettes, peut être vérifier dans les paramètres de l'Android pré-installé (void le sujet sur xda-developers).
 * sun5i_defconfig (pour AllWinner A13 et 10s)
 * sun7i_defconfig (pour AllWinner A20)

Si votre carte n'est pas disponibles et que vous n'avez pas un fichier .config pour commencer, si vous possedez par exemple une Cubiboard1, utilisez le fichier defconfig sun4i. cp arch/arm/configs/sun4i_defconfig .config # Remplacez sun4i par l'architecture du SoC de votre carte.

Pour une cubieboard2, vous pouvez utiliser arch/arm/configs/sun7i_defconfig comme base. cp arch/arm/configs/sun7i_defconfig .config # Remplacez par l'architecture du SoC de votre carte.

make ARCH=arm menuconfig     # Vérifiez si vous désirez activer ou désactiver certaines options

Sur les cubieboard, avec le noyau stable, il ne faut pas oublier une fois menuconfig terminé, d'ajouter la ligne suivante dans le fichier .config, pour avoir le support de l'interface ethernet. Elle est déjà activé dans la version stage : CONFIG_SUNXI_EMAC=y

La compilation du noyau (qui produit une uImage) et des modules se fait comme suit :

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules

= rootfs =

Les Howtos (comment faire) pour le chroot arm peuvent se trouvent à http://wiki.debian.org/EmDebian/CrossDebootstrap, http://tinkering-is-fun.blogspot.jp/2009/12/running-arm-linux-on-your-desktop-pc_12.html et https://wiki.ubuntu.com/ARM/BuildEABIChroot.

Le Howto pour construire le fichier script.bin se trouve à Premiers pas

Récupérer les outils Sunxi
git clone https://github.com/linux-sunxi/sunxi-tools.git git clone https://github.com/linux-sunxi/sunxi-boards.git make -C sunxi-tools

Bootstrap simple
mkdir chroot-armhf cd chroot-armhf debootstrap --foreign --arch armhf wheezy. cp /usr/bin/qemu-arm-static usr/bin LC_ALL=C LANGUAGE=C LANG=C chroot. /debootstrap/debootstrap --second-stage LC_ALL=C LANGUAGE=C LANG=C chroot. dpkg --configure -a

chroot. passwd # choisir le mot de passe root echo A10 > etc/hostname # choisir le nom d'hôte

Vous désirez maintenant configurer le système, installer les paquets etc... dans l'environnement chrooté.

cp /etc/resolv.conf etc

echo deb http://http.debian.net/debian/ wheezy main contrib non-free > etc/apt/sources.list echo deb http://security.debian.org/ wheezy/updates main contrib non-free >> etc/apt/sources.list chroot. apt-get update chroot. apt-get upgrade chroot. apt-get install nvi rm etc/resolv.conf echo T0:2345:respawn:/sbin/getty -L ttyS0 115200 vt100 >> etc/inittab cp ../linux-sunxi/arch/arm/boot/uImage boot make -C ../linux-sunxi INSTALL_MOD_PATH=`pwd` ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install

Spécifiez certains arguments par défaut du noyau. cat > boot/boot.cmd <<END setenv bootargs console=ttyS0,115200 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x1024p60 root=/dev/mmcblk0p1 rootwait panic=10 ${extra} ext2load mmc 0 0x43000000 boot/script.bin ext2load mmc 0 0x48000000 boot/uImage bootm 0x48000000 END mkimage -C none -A arm -T script -d boot/boot.cmd boot/boot.scr

Récupérez un fichier .fex à adapter selon vos besoin, afin de construire le fichier script.bin. cp ../sunxi-boards/sys_config/a10/cubieboard.fex boot # pick config for your board

Note: La majorité des cartes n'ont pas d'eeprom pour conserver l'adresse MAC de la carte réseau. Voir Premiers pas pour configurer l'adresse MAC dans le fichier .fex.

Pour compiler le fichier script.bin ../sunxi-tools/fex2bin boot/cubieboard.fex boot/script.bin

Pour régler l'adresse MAC au système Linux, ajoutez au fichier etc/network/interfaces # set Debian to configure the interface automatically on boot auto eth0 allow-hotplug eth0

# use IP autoconfiguration iface eth0 inet dhcp # set the mac address pre-up ifconfig eth0 hw ether " "

= Carte SD =

L'arrangement (des partitions) de la carte SD est décrite dans la page U-boot et sur le Wiki Github.

Formater la carte
card=le périphérique de votre carte (par exemple : /dev/sde) dd if=/dev/zero of=$card bs=1k count=1025

Si vous utilisez gparted pour créer le MBR, il alignera automatiquement la première partition créée au premier mégaoctet (Vérifiez avec les informations de partition).

Il est également possible d'utiliser sfdisk.

Installer u-boot
cd u-boot-sunxi dd if=spl/sunxi-spl.bin of=$card bs=1024 seek=8 dd if=u-boot.bin of=$card bs=1024 seek=32

Copier les fichiers
Depuis le chroot ARM vers la partition de la carte SD

mount ${card}1 /mnt cd chroot-armhf tar --exclude=qemu-arm-static -cf -. | tar -C /mnt -xvf -

= Installer sur la NAND =

Une fois que vous disposez d'un Linux fonctionnant depuis la carte SD et adapté à vos périphériques et applications, vous pouvez essayer de l'installer sur la NAND.

Sauvegarder la NAND
dd if=/dev/nand of=/un/endroit/avec/suffisamment/d'espace

Vous pouvez brancher une clé USB, copier depuis une autre machine via SSH, etc.

ssh root@ dd if=/dev/nand | dd of=/un/fichier

Pour accéder à la partition nanda originale

losetup -fro 16777216 /un/fichier

Cela devrait fonctionner tant que l'arrangement original de la NAND est correct. Vérifiez à l'aide de sfdisk et nand-part pour confirmer que votre arrangement correspond.

Construire u-boot pour la NAND
L'u-boot-sunxi ne supporte pas (encore) le démarrage depuis la NAND dans la branche de développement. Une version proche du principal u-boot sunxi avec quelques corrections est disponible dans la branche lichee-dev.

cd u-boot-sunxi git checkout origin/lichee-dev -b lichee-dev

L' u-boot lychee-dev a une commande de démarrage (boot) par défaut inutile. Dans include/configs/sun4i.h changez cette ligne :

#define CONFIG_BOOTCOMMAND    "fatload nand 0 0x43000000 script.bin; fatload nand 0 0x48000000 uImage; bootm 0x48000000\0"

Si vous cherchez à régler les argument du noyau par défaut vous devriez pouvoir changer la ligne (non-testé)

#define CONFIG_BOOTCOMMAND    "setenv bootargs root=/dev/nandb console=something some more kernel arguments;fatload nand 0 0x43000000 script.bin; fatload nand 0 0x48000000 uImage; bootm 0x48000000\0"

Vous pouvez à présent compiler u-boot.

make sun4i

installer u-boot
mount /dev/nanda /mnt

Verifiez que la taille du système de fichier nanda est de 16 Mio (par exemple avec la commande df), que la partition est de 16 Mio et commence à l'offset (au décalage) 16 Mio. Certaines cartes pourraient avoir des partitions cassées. Voir formater la Flash, plus loin.

cp u-boot.bin /mnt/linux umount /mnt

Installer le noyau
LA ligne de commande par défaut n'est pas passé par la commande u-boot ci-dessus, ajoutez la donc dans le noyau.

cd linux-sunxi

Dans le fichier .config, changez la ligne

CONFIG_CMDLINE="console=ttyS0,115200 hdmi.audio=EDID:0 disp.screen0_output_mode=EDID:1280x1024p60 root=/dev/nandb rootwait panic=10"

Recompiler le noyau avec la nouvelle ligne de commande.

make uImage

Copiez le noyau sur nanda.

mount /dev/nanda /mnt cp arch/arm/boot/uImage /mnt/ umount /mnt

Formater la NAND
Regardez attentivement l'arrangement de votre partition - L'arrangement original de la flash (ou NAND) possède une demi-douzaine de partitions.

cd sunxi-tools ./nand-part

check partition table copy 0: OK check partition table copy 1: OK  check partition table copy 2: OK  check partition table copy 3: OK  partition  0: name =   bootloader, partition start =    32768, partition size =    32768 partition 1: name =     A10-root, partition start =    65536, partition size =  5701632 2 partitions

sfdisk -s

/dev/nand:   3989504 /dev/nanda:    16384 /dev/nandb:  3956736

Notez que la nanda est de 16 Mio et qu'elle à un offset de 16 Mio. 2x la taille de nanda + taille de nandb sont ajoutés à la taille de la NAND. Cela c'est produit après repartitionnement. Pour produire cette arrangement, copiez le nom et la longue de la nandb ci-dessus (pour une NAND de 4 Gio).

./nand-part A10-root 5701632

Redémarrez pour appliquer les changements. Ce pilote NAND ne supporte pas le changement du partitionnement après le démarrage.

Après avoir redémarré, vérifiez que la sortie de sfdisk correspond à la sortie de nand-part. Créez le système de fichier de votre choix sur nandb.

mke2fs -j -L A10-root-nand /dev/nandb

Copier les fichiers
Pusique les sources de mon noyau sont très larges et ne pourront pas rentrer dans la NAND interne avec Gnome et le reste, j'ai déplacé tous les fichiers dev dans /opt et l'ai exclus du système de fichier de la nand.

mount /dev/nandb /mnt cd / tar -cf - --exclude dev --exclude run --exclude proc --exclude sys --exclude tmp --exclude mnt \ --exclude opt. | tar -xvf - -C /mnt mkdir /mnt/{dev,run,proc,sys,tmp,mnt,opt} chmod 1777 /mnt/tmp

= Graphisme =

X11
Mali400

framebuffer
Ioquake3

XBMC