lint-all #3
1 changed files with 71 additions and 54 deletions
|
@ -8,48 +8,56 @@ Slug: Home router with sama5d35
|
|||
Lang: fr
|
||||
Summary: Un article dans lequel je vais essayer de décrire/documenter comment j'ai installé une debian à côté de l'OS de démo sur la carte sama5d35 gagnée au Fosdem 2013 (merci encore ! )
|
||||
|
||||
|
||||
Un article dans lequel je vais essayer de décrire/documenter comment j'ai installé une debian à côté de l'OS de démo sur la carte sama5d35 gagnée au Fosdem 2013 (merci encore ! )
|
||||
L'idée était de ne pas écraser le système de démo et d'essayer d'utiliser le système le plus "normal" possible. C'est à dire le moins de patch noyau et une debian ARM.
|
||||
|
||||
[TOC]
|
||||
|
||||
## Compilation
|
||||
### Toolchain / sources
|
||||
# Compilation
|
||||
|
||||
## Toolchain / sources
|
||||
|
||||
Je me suis inspiré de ce [wiki][1] pour gcc et u-boot. J'ai aussi pris les patch u-boot en suivant les liens donnés sur le wiki.
|
||||
Une fois le compilateur installé, on exporte la variable `CC` qui contient le chemin et le préfix de l'architecture et en informant make que l'on utilise un autre compilateur :
|
||||
|
||||
``` bash
|
||||
export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi-
|
||||
ARCH=arm CROSS_COMPILE=${CC} make [...]
|
||||
export CC=`${HOME}/cross/gcc-arm-none-eabi-4_6-2012q4/bin/arm-none-eabi-
|
||||
ARCH=arm CROSS_COMPILE=${CC} make [...]
|
||||
```
|
||||
|
||||
U-boot et le noyau seront compilés de cette manière.
|
||||
|
||||
Comme je le dirai plus bas, je n'ai pas utilisé at91bootstrap et j'ai laissé celui d'origine dans le firmware.
|
||||
|
||||
### u-boot
|
||||
## u-boot
|
||||
|
||||
- Sources
|
||||
- Patches
|
||||
- Configuration : `ARCH=arm CROSS_COPILE=${CC} make sama5d3x_defconfig`
|
||||
- Installation : copie de `u-boot.bin à la racine de la carte SD
|
||||
|
||||
### Noyau
|
||||
## Noyau
|
||||
|
||||
- at91 patché [TODO: retrouver l'adresse du git]
|
||||
- Les patch d'at91 ne sont toujours pas intégrés au noyau 3.9.
|
||||
- Peut-être pour le 3.10 ? Oui \o/ à tester ;-)
|
||||
|
||||
#### 3.10.1
|
||||
### 3.10.1
|
||||
|
||||
- Essai de compilation à partir de la configuration fonctionnelle du 3.6.9
|
||||
- Freeze au chargement de l'usb
|
||||
- Si je désactive l'USB, ça freeze au chargement des pilotes mmc.
|
||||
- À creuser vu que ces deux sous-systèmes utilisent le DMA et j'ai cru voir que cette partie n'était pas terminée.
|
||||
|
||||
#### 3.12
|
||||
### 3.12
|
||||
|
||||
- Ça marche !
|
||||
- Par rapport à la version -rc3, j'ai activé le debug DMA
|
||||
- Activé le thumb2 workaround pour netfilter et rajouté des *_nftables. TODO retester sans le thumb2 workaround
|
||||
- TODO refaire les tests sans les workaround
|
||||
|
||||
#### Script de compilation du noyau
|
||||
### Script de compilation du noyau
|
||||
|
||||
Voici un exemple de script de compilation du noyau
|
||||
|
||||
``` bash
|
||||
|
@ -85,7 +93,8 @@ make ARCH=arm CROSS_COMPILE=${CC} modules_install INSTALL_MOD_PATH=${DEPLOY_PATH
|
|||
make ARCH=arm CROSS_COMPILE=${CC} firmware_install INSTALL_FW_PATH=${DEPLOY_PATH}/firmware
|
||||
```
|
||||
|
||||
#### Déploiement et tests
|
||||
### Déploiement et tests
|
||||
|
||||
Une fois tous les éléments compilés, il faut copier les fichiers dans `/boot`.
|
||||
Vu que pour l'instant, je n'ai pas réussi à compiler de noyau mainline fonctionnel, je copie les fichiers à côté de ceux du 3.6.9-at91 qui fonctionnent.
|
||||
|
||||
|
@ -96,8 +105,10 @@ rsync -aP arch/arm/boot/dts atmel-host:/boot/dtbs-new
|
|||
rsync -aP arch/arm/boot/zImage atmel-host:/boot/zImage-new
|
||||
```
|
||||
|
||||
## Configuration
|
||||
### Firmware
|
||||
# Configuration
|
||||
|
||||
## Firmware
|
||||
|
||||
Je n'ai pas flashé le bootloader ni la NAND pour l'instant.
|
||||
|
||||
Le chargeur d'amorçage interne [at91bootstrap] vérifie s'il y a une carte SD avant de démarrer sur la NAND.
|
||||
|
@ -112,30 +123,32 @@ Pour la configuration, j'ai utilisé le cable µUSB<-> USB pour connecter la car
|
|||
|
||||
Ensuite, j'ai utilisé `screen` pour me connecter à la console série :
|
||||
|
||||
screen /dev/ttyACM0
|
||||
```bash
|
||||
screen /dev/ttyACM0
|
||||
```
|
||||
|
||||
!!! NOTE: On peut interrompre le démarrage d'U-Boot en frappant une touche avant qu'il ne commence à analyser les différents périphériques d'amorçage.
|
||||
|
||||
# Chargeur d'amorçage
|
||||
|
||||
## Chargeur d'amorçage
|
||||
Les paramètres d'U-boot
|
||||
|
||||
On peut configurer les paramètres qu'U-Boot utilisera depuis la ligne de commande.
|
||||
Voici des paramètres pour démarrer le noyau original fourni avec la carte et un système sur la carte SD :
|
||||
|
||||
```
|
||||
```bash
|
||||
setenv bootargs console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfs=ext3 root=/dev/mmcblk0p2 rootdelay=2
|
||||
```
|
||||
|
||||
Pour les archives, voici les paramètres de démarrage d'origine, pour démarrer depuis la NAND :
|
||||
|
||||
```
|
||||
```bash
|
||||
console=ttyS0,115200 mtdparts=atmel_nand:8M(bootstrap/uboot/kernel)ro,-(rootfs) rw rootfstype=ubifs ubi.mtd=1 root=ubi0:rootfs
|
||||
```
|
||||
|
||||
|
||||
Les paramètres peuvent être aussi être donnés dans un fichier de configuration : `uEnv.txt`
|
||||
Voici le mien :
|
||||
|
||||
``` bash
|
||||
dtb_file=sama5d35ek.dtb
|
||||
|
||||
|
@ -147,6 +160,7 @@ mmcrootfstype=ext2 rootwait fixrtc
|
|||
```
|
||||
|
||||
Voici ma configuration u-boot après l'interruption :
|
||||
|
||||
``` bash
|
||||
baudrate=115200
|
||||
bootargs=console=ttyS0,115200 earlyprintk root=/dev/mmcblk0p2 rw rootfstype=ext2 rootwait
|
||||
|
@ -170,7 +184,6 @@ mmcroot=/dev/mmcblk0p2 ro
|
|||
mmcrootfstype=ext4 rootwait
|
||||
```
|
||||
|
||||
|
||||
La ligne bootcmd va être exécutée lorque l'on tape `boot`.
|
||||
Elle est composée de plusieurs autres commandes :
|
||||
|
||||
|
@ -183,21 +196,26 @@ On voit donc que la plupart des noms de fichiers sont paramétrables, on peut do
|
|||
|
||||
Voici donc les commandes pour booter le noyau de test compilé plus haut :
|
||||
|
||||
```
|
||||
```bash
|
||||
bootfile=zImage-new
|
||||
loaddtb=load mmc ${mmcdev} ${dtbaddr} /dtbs-new/${dtb_file}
|
||||
boot
|
||||
```
|
||||
|
||||
## Système d'exploitation
|
||||
# Système d'exploitation
|
||||
|
||||
- debian wheezy armhf installée avec `debootstrap --arch=armhf`, puis en ajoutant `--stage2`une fois la carte sd montée depuis le système ARM existant dans la NAND
|
||||
|
||||
TODO: retrouver les commande initiales pour lancer debootstrap
|
||||
|
||||
## Mon expérience
|
||||
### Uname
|
||||
# Mon expérience
|
||||
|
||||
## Uname
|
||||
|
||||
- Linux jouet 3.6.9-sama5-armv7-d0.8 #1 Wed May 8 13:04:54 CEST 2013 armv7l GNU/Linux
|
||||
|
||||
### Mon usage
|
||||
## Mon usage
|
||||
|
||||
J'utilise la carte comme routeur pour ma connexion internet.
|
||||
Je l'utilise aussi pour quelques autres services liés au réseau : serveur DHCP, Annonces RA, serveur DNS (comme serveur faisant autorité ainsi que comme resolver/cache pour le lan), pare-feu et serveur NTP pour le lan.
|
||||
J'ai une connexion plutôt bonne, FTTH, 100 Mbps / 50 Mbps, d'après le vendeur, et au moins séparément, cela semble vrai.
|
||||
|
@ -205,8 +223,8 @@ J'ai une connexion plutôt bonne, FTTH, 100 Mbps / 50 Mbps, d'après le vendeur,
|
|||
Le système semble parfaitement stable et n'a pour l'instant jamais planté ni affiché de message d'erreur particulier dans les logs kernel.
|
||||
J'ai du mal à utiliser toute ma connexion avec la carte, parce que le trafic réseau provoque énormément d'IRQ et celà occupe tout le processeur. J'essaie d'investiguer pour savoir si on ne pourrait pas faire mieux avec les noyaux plus récents.
|
||||
|
||||
## Mesures
|
||||
|
||||
### Mesures
|
||||
Quelques "mesures" faites avec le noyau 3.6.9-at91, avec routage IPv6 et NAT IPv4 :
|
||||
|
||||
Métrique | DL Steam | BT | FTPS | HTTP |
|
||||
|
@ -215,23 +233,23 @@ eth0 RX (bit/s) | 275k | 25 M | | |
|
|||
eth0 TX (bit/s) | 45 M | 2 M | 65 M | 70 M |
|
||||
eth0 RX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k |
|
||||
eth0 TX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.5k |
|
||||
----------
|
||||
----------------|----------|-------|--------|--------|
|
||||
eth1 RX (bit/s) | 45 M | 2 M | 65 M | 70 M |
|
||||
eth1 TX (bit/s) | 275 k | 25 M | | |
|
||||
eth1 RX (pkt/s) | 4000 | 2.2k | 5.5 k | 5.5k |
|
||||
eth1 TX (pkt/s) | 500 | 1.4k | 2.7 k | 2.5k |
|
||||
----------
|
||||
----------------|----------|-------|--------|--------|
|
||||
IRQ (%) | 60 | | 65 | 80 |
|
||||
Sys (%) | | | | |
|
||||
User (%) | | | | 4 |
|
||||
Idle (%) | | | 30 | 15 |
|
||||
----------
|
||||
eth0 IRQ | | | | 8k |
|
||||
----------------|----------|-------|--------|--------|
|
||||
eth0 IRQ | | | 8k | |
|
||||
eth1 IRQ | | | | 8k |
|
||||
|
||||
Sur le dernier test, en HTTP, on remarque qu'il semble y avoir autant d'interruptions que de paquets reçus/envoyés. Le mécanisme NAPI qui permet de stocker les interruptions pour passer plusieurs paquets d'un seul coup au noyau ne semble pas activé/disponible. Ce qui serai plutôt une bonne nouvelle et permettrai d'augmenter les performances à l'avenir.
|
||||
|
||||
#### 3.6.12
|
||||
### 3.6.12
|
||||
|
||||
Métrique | HTTP(routé) | HTTP local |
|
||||
----------------|---------------|--------------|
|
||||
|
@ -239,22 +257,22 @@ eth0 RX (bit/s) | | |
|
|||
eth0 TX (bit/s) | 60 M | |
|
||||
eth0 RX (pkt/s) | 2.5k | |
|
||||
eth0 TX (pkt/s) | 5k | |
|
||||
----------
|
||||
----------------|---------------|--------------|
|
||||
eth1 RX (bit/s) | 60 M | 55 M |
|
||||
eth1 TX (bit/s) | | |
|
||||
eth1 RX (pkt/s) | 5 k | 4.7k |
|
||||
eth1 TX (pkt/s) | 2.5k | 1.5k |
|
||||
----------
|
||||
----------------|---------------|--------------|
|
||||
IRQ (%) | 85 | 65 |
|
||||
Sys (%) | | 12 |
|
||||
User (%) | 0 | 4 |
|
||||
Idle (%) | 15 | 17 |
|
||||
----------
|
||||
----------------|---------------|--------------|
|
||||
eth0 IRQ | 8k | |
|
||||
eth1 IRQ | 8k | 2.2k|
|
||||
|
||||
eth1 IRQ | 8k | 2.2k |
|
||||
|
||||
# Images
|
||||
|
||||
[![atmel et raspi](http://blog.kleph.eu/images/atmel_et_raspi_small.png)][5]
|
||||
|
||||
[1]: http://www.eewiki.net/display/linuxonarm/SAMA5D3
|
||||
|
@ -263,7 +281,6 @@ eth1 IRQ | 8k | 2.2k|
|
|||
[4]: http://www.devicetree.org/Main_Page
|
||||
[5]: http://blog.kleph.eu/images/atmel_et_raspi.jpg
|
||||
|
||||
|
||||
<!---
|
||||
vim: spelllang=fr
|
||||
--->
|
Loading…
Reference in a new issue