[tutoriel] Ajout du support d'une nouvelle carte

Discussions autour de Debian Firmware Toolkit (DFT)
https://github.com/wbonnet/dft
Répondre
-W.-
Messages : 25
Enregistré le : dim. mars 22, 2020 5:26 pm
Localisation : Allier

[tutoriel] Ajout du support d'une nouvelle carte

Message par -W.- »

Bonjour,

Je fais suite à l'initialisation des billets sur l'utilisation de DFT et vous présente le cas concret de l'ajout du support d'une nouvelle carte pour générer son BSP. Ce billet se focalise sur l'ajout de la carte dans l'idée de produire le u-boot de la nouvelle carte.

Il s’agit là d'un cas très concret :D Je viens de recevoir mon nouveau jouet tout droit de Chine et je veux booter la carte qui n'est pas encore supportée. :?

L’opération se fait dans un shell sur une machine de même architecture CPU que la nouvelle cible. Je prend le cas de la carte NanoPi R1 .

L'opération se passe dans l'espace de travail que je vous ai proposé d'initialiser dan le billet précédent.

Tout d'abord il faut créer une nouvelle entrée dans l'arborescence des makefiles du BSP. Rassurez-vous des helpers sont disponibles pour cela. La première étape est de se placer au bon endroit dans l'arborescence git.

Code : Tout sélectionner

(william@workstation):workspace$ cd ~/workspace/dft/bsp-packages/single-board-computer/
Cela semble logique puisque nous souhaitons ajouter une nouvelle carte de type SBC, et nous allons commencer par compiler son u-boot. Tout d'abord créons la carte.

Code : Tout sélectionner

make new-board  board_name=nanopi-r1 board_arch=armv7l uboot_support=1
La cible new-board permet d'initialiser l'arborescence et de générer les Makefiles et les fichiers de configuration nécessaires à DFT pour le téléchargement des sources et la compilation pour cette carte.

Le paramètre board_arch définie l’architecture conformément à la commande uname -m (dont la valeur est différente de l'architecture Debian qui utilise un autre nommage mais l’association est bien bijective :) Je sens que là vous vous sentez bien mieux de le savoir, et que vous avez hâte de retourner à la commande make :)

La cible supporte d'autres paramètres tels que :
  • grub_support (par défaut=0)
  • uboot_defconfig (par défaut=1)
  • defconfig default_dtb
Vous devez activer soit uboot, soit grub comme système d'amorce pour que la carte démarre, sachant que les cartes non x86 utilisent u-boot.

Code : Tout sélectionner

git add nanopi-r1
Last step before building is to add a u-boot version to the new nanopi-r1 board. You can use this example :
cd nanopi-r1/u-boot
make add-u-boot-version new-version=2020.04
Il ne reste plus qu'a copier coller les commandes proposées pour que la chaîne de makefiles initialise la nouvelle entrée de version, soit là 2020.04 version courante à la date de ce billet sinon il suffit de le lancer avec la version que vous souhaitez avoir tant qu'elle existe et supporte la carte sinon cela coincera vite :P

Attention, le git add ne sera pas fait automatiquement c'est à vous de la faire ainsi que vos commit et push selon votre configuration git et des dépôts que vous utilisez.

La chaîne Firmware Toolkit a généré le fichier de configuration (fichier propre à cet outil qui contient les paramètres donnés sur la ligne de commande.
Ce fichier contient :

Code : Tout sélectionner

#
# Board global parameters
#

# The board name fragment will be used in package naming, path and files content generation
BOARD_NAME = nanopi-r1

# Board architecture as defined by uname -m (armv7l, mips, aarch64, x86_64, etc.)
BOARD_ARCH = armv7l

#
# u-boot support and configuration
#

# Defines if u-boot should be generated (UBOOT_SUPPORT is set to 1) (0 means u-boot is not available).
# if UBOOT_SUPPORT is disabled packaging is skipped. In this case, you may have to activate GRUB.
UBOOT_SUPPORT     = 1

# Make use the defconfig file from UBOOT_DEFCONFIG unless you specify your own in USE_CONFIG_FILE
UBOOT_DEFCONFIG   = unknown_defconfig

# List of files to copy from build to install directory (path is relative to build dir)
UBOOT_BINARY_FILE = u-boot-$(BOARD_NAME)
DEFAULT_DTB       = nanopir1.dtb

#
# GRUB support and configuration (u-boot or grub should be activated to be able to boot the board).
#
GRUB_SUPPORT = 0

Etant donné que le defconfig n'était pas défini sur la ligne de commande de make il n'a pas été positionné dans le board.mk. Alors pourquoi ne pas l'avoir positionné :?: nous aurions pu enchaîner tout de suite un make package :!: et bien oui mais non :lol:

En théorie nous aurions pu le faire, sauf que la version upstream de u-boot ne supporte pas cette carte sans un petit ajout. Ce que nous venons de voir fonctionne donc pour toutes les cartes supportées nativement par u-boot. Pour cette carte nous devons utiliser une fonctionnalité supplémentaire de Firmware Toolkit permettant d'appliquer un patch suite à l'extraction des sources et avant la compilation .

Ce sera le sujet du prochain billet. Une chose à la fois :D

@+W.

Répondre