L'art du chamanisme ou du firmware personnalisé pour Olinuxino. UBOOT Partie 2

Tout cela a été collecté sous Ubuntu 16.04.

La décision de construire le firmware est née du manque d'accès gratuit à l'image de cette carte (Olimex A13-Olinuxino). Et le fabricant a proposé d'acheter une carte SD avec une image et cela coûtait environ 10 euros à l'époque, ce qui ne fonctionnait pas vraiment, et en plus, elle a été conçue pour un moniteur.

Nous allons configurer la configuration du chargeur de démarrage pour démarrer à partir de la carte SD. Comme il n'y a pas de mémoire NAND sur la carte et que toutes les autres options de démarrage sont légèrement tordues (quiconque peut assembler uboot pour démarrer à partir d'un support USB, laissez-le faire deux pas en avant et partager). L'algorithme de chargement du processeur allwinner a13 est disponible sur le site Web du fabricant. Ou voici un extrait d'une fiche technique.



Il ressort clairement de l'algorithme que le chargeur de démarrage est d'abord vérifié sur la carte SD, puis les autres sont vérifiés, et ce n'est qu'à la fin que le chargeur de démarrage est vérifié pour l'USB. Par conséquent, les tablettes et les smartphones peuvent être effectués avec Ubuntu s'ils glissent la carte SD de la manière appropriée. Et apparemment, un tel algorithme sera approximativement, sinon pour tous, puis pour de nombreux fabricants de processeurs de bras.

Vous devez d'abord casser la carte SD, pour cela, afin de ne pas faire d'erreur dans le processus de saisie des commandes, nous réduirons le processus entier en fichier de script (je préfère tout réduire à ces fichiers, car vous devrez l'exécuter plus d'une fois).

#!/bin/sh DEViCELINK=/dev/sdb fdisk $DEViCELINK <<EOF n #    p #   1 #   2048 #     2MiB +64M #  ,    kernel     dts  n p 2 +2G #    ubuntu n p 3 +2G #         n p 4 #         w EOF mkfs.ext2 /dev/sdb1 << EOF #   kernel    fat16  ext2 y EOF mkfs.ext4 /dev/sdb2 << EOF y EOF mkfs.ext4 /dev/sdb3 << EOF y EOF mkfs.ext4 /dev/sdb4 << EOF y EOF 

UBOOT Build


Arrêtons-nous plus en détail sur le chargeur de démarrage, et comme nous sélectionnons UBOOT, nous pompons la version de u-boot-2018.05, cette dernière à l'époque.

Il est supposé que tous les logiciels nécessaires à l'assemblage sont déjà installés. Et démarrez la construction en configurant le chargeur de démarrage.

Pour démarrer la configuration, vous devez aller dans le dossier avec UBOOT et à partir de celui-ci exécuter la commande:

 make O=../olimex-uboot #       -j4 #     ARCH=arm #      CROSS_COMPILE=arm-linux-gnueabihf- #    xconfig #   GUI  

À la suite de l'exécution, nous obtenons une telle fenêtre.



Il s'agit de la version dite X du configurateur, ils utilisent généralement l'option console; plus d'informations y sont fournies, mais cela est d'autant plus évident et cela couvrira complètement nos besoins.

Et puis, si vous avez beaucoup de temps ou si cela ne vous dérange pas, vous pouvez configurer vous-même le chargeur de démarrage à partir de zéro. Cependant, il est préférable de télécharger la configuration finale de cette carte via le menu fichier. Dans le dossier avec la source du chargeur de démarrage à /u-boot-2018.05/configs/, sélectionnez le fichier A13-OlinuXino_defconfig c'est notre configuration, où tout est déjà installé. Ensuite, cliquez sur enregistrer et fermez la fenêtre, car rien ne doit être modifié ici.

Il reste à exécuter la commande build:

 make O=../olimex-uboot -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 

Dans cette commande, les éléments sont tous les mêmes que dans le précédent, mais sans le paramètre xconfig, ce que signifie la configuration. C'est tout, le bootloader est assemblé.

Une fois l'assemblage terminé, dans le dossier spécifié dans la commande, nous devons trouver ce fichier «u-boot-sunxi-with-spl.bin», c'est le chargeur de démarrage souhaité.

Ensuite, pour télécharger le chargeur de démarrage sur la carte SD, utilisez la commande:

 dd if=../olimex-uboot/u-boot-sunxi-with-spl.bin #      of=/dev/sdb #     SD  bs=1024 seek=8 #  8KiB  ,      

Le chargeur de démarrage qui vient d'être enregistré après le démarrage pointera vers la section suivante de la carte SD / dev / sdb1, et là, il recherchera un fichier de script avec des variables d'environnement qui contient des instructions pour un chargement ultérieur.

Ce fichier doit être nommé boot.scr, un fichier portant ce nom recherche uboot après son téléchargement. Bien sûr, le nom du fichier peut être modifié ainsi que la méthode de téléchargement si vous entrez dans la configuration UBOOT, mais laissez-nous nous attarder sur cette option.

Vous devriez également compiler les fichiers devicetree pour une chose, ils sont dans la source avec le chargeur de démarrage à /u-boot-2018.05/arch/arm/dts/ nous sommes intéressés par le fichier sun5i-a13-olinuxino.dts. Il représente une configuration de registres et de périphériques du processeur. Il s'agit d'un fichier de configuration universel, donc l'option est possible lorsqu'un chargeur de démarrage uboot est utilisé pour différents processeurs, mais que des fichiers dts différents sont utilisés. Les mêmes fichiers dts sont dans le code source du noyau Linux, ils sont fondamentalement les mêmes, ils sont écrits un peu différemment, et vous pouvez choisir où obtenir l'arborescence des périphériques assemblés. En général, pour créer des fichiers dts, vous devez exécuter cette commande:

 make O=../olimex-uboot -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs #      dts  

Le fichier compilé sera à ../olimex-uboot/arch/arm/dts/.
Pensez à obtenir le fichier boot.scr plus en détail.
Créez d'abord le fichier boot.cmd avec le contenu:

 load mmc 0 0x43000000 sun5i-a13-olinuxino.dtb load mmc 0 0x42000000 uImage setenv bootargs root=/dev/mmcblk0p2 rootfstype=ext4 rw rootwait console=ttyS0,115200 bootm 0x42000000 – 0x43000000 

Mais pour que uboot comprenne les instructions, ce fichier doit être sous la forme d'un script et pour cela vous devez exécuter la commande:

  mkimage -C none -A arm -T script -d boot.cmd boot.scr 

Où boot.scr est le fichier requis.

La première ligne charge mmc 0 0x43000000 sun5i-a13-olinuxino.dtb charge le fichier d'arborescence des périphériques à l'adresse spécifiée dans la RAM. load mmc 0 indique que vous devez télécharger le fichier à partir de la première section de la carte SD, tandis que la numérotation pour uboot est zéro et non un.

La deuxième ligne charge mmc 0 0x42000000 uImage charge le noyau Linux assemblé à l'adresse spécifiée.

Pour notre version, la variable de mode vidéo setenv, qui est généralement utilisée plus loin, n'est pas nécessaire pour nous car le moniteur n'est pas prévu d'être utilisé.

Troisième ligne:

 setenv bootargs #    root=/dev/mmcblk0p2 #    SD    rootfs rootfstype=ext4 #    rootfs rw #    rootwait console=ttyS0,115200 #    uart0 

Eh bien, la dernière commande bootm charge le noyau à partir du précédent chargé en mémoire.

Dans le prochain article, la dernière partie qui devrait être placée sur la première section de la carte SD sera la formation du noyau du noyau Linux.

La première partie de l'article
La troisième partie de l'article

Source: https://habr.com/ru/post/fr434942/


All Articles