Pour une carte à bas prix Terasic DE10 nano avec FPGA intégré au processeur ARM J'écrirai sur la façon de construire et de mettre à jour le noyau Linux.
Plusieurs images de carte SD Linux pour cette carte ont été téléchargées sur le site Terasic, et si vous vous enregistrez en tant qu'utilisateur, vous pouvez télécharger et démarrer Linux immédiatement. En jouant avec cette carte, si vous essayez d'ajouter un pilote de noyau ou de configurer FPGA avec la superposition de l'arborescence des périphériques, vous voudrez créer le noyau vous-même.
Si vous avez l'habitude de créer un Linux embarqué, ces informations devraient être suffisantes.
--Souce au noyau - https://github.com/altera-opensource/linux-socfpga
make socfpga_defconfig; make zImage; make dtbs
make modules; make modules_install ...
――Où écrire les binaires créés sur la carte SD
--zImage, socfpga_cyclone5_de0_sockit.dtb-> Remplacer par le fichier correspondant dans Fat Partition
--lib / modules / * Répertoire-> Copier sous "/" dans la partition Linux
--Référence: site du portail Linux pour Intel SoC FPGA RocketBoards.org--PC pour le développement. Le système d'exploitation est Ubuntu Linux. Ce sera OK même s'il fonctionne dans l'environnement suivant. - Virtual Machine - Windows SubSystem for Linux(WSL) - Docker container
Le contenu de la carte SD nécessaire pour faire fonctionner Linux peut être divisé en deux types: lié au noyau et système de fichiers racine. Seuls les fichiers liés au noyau sont générés ici, et les fichiers du système de fichiers racine sont utilisés tels quels.
Reportez-vous à la documentation sur le site du portail Linux RocketBoards.org pour les FPGA Intel SoC. https://rocketboards.org/foswiki/Documentation/GSRDCompilingLinux Vous exécuterez la partie Construction du noyau Linux de «5. Construction du noyau et de l'U-Boot séparément à partir des arbres Git» dans.
Tout d'abord, téléchargez le compilateur croisé et préparez les commandes requises pour la construction du noyau. Par exemple, si le PC de développement est Ubuntu 18.04 (64 bits) dans son état d'origine, les packages suivants sont requis au minimum.
$ sudo apt update
$ sudo apt install -y wget git build-essential bc kmod libncursesw5-dev
$ sudo apt install -y lib32stdc++6 lib32ncurses5 lib32z1
Téléchargez le compilateur croisé et définissez la variable d'environnement CROSS_COMPILE. Je travaille sous le répertoire personnel ici, mais vous pouvez aller dans n'importe quel répertoire que vous aimez (dans ce cas, changez le PATH défini dans CROSS_COMPILE en conséquence).
$ cd ~
$ wget https://releases.linaro.org/archive/14.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.bz2 --no-check-certificate
$ tar xjf gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux.tar.bz2
$ export CROSS_COMPILE=~/gcc-linaro-arm-linux-gnueabihf-4.8-2014.04_linux/bin/arm-linux-gnueabihf-
Clonez la source du noyau à partir du référentiel Git. Ensuite, consultez votre branche ou étiquette préférée. Dans l'exemple, la branche socfpga-4.14.130-ltsi est extraite. Encore une fois, je commence à travailler dans mon répertoire personnel, mais faites-le où vous voulez. Vous pouvez changer le "test_branch" après -b en n'importe quel nom que vous voulez.
$ cd ~
$ git clone https://github.com/altera-opensource/linux-socfpga
$ cd linux-socfpga
$ git checkout -b test_branch origin/socfpga-4.14.130-ltsi
Enfin, créez le corps du noyau cible final, zImage et l'arborescence des périphériques. (En supposant que l'exportation CROSS_COMPILE = ... est déjà définie)
$ export ARCH=arm
$ make socfpga_defconfig
$ make zImage
$ make socfpga_cyclone5_de0_sockit.dtb
Ce qui précède générera zImage sous arch / arm / boot / et socfpga_cyclone5_de0_sockit.dtb sous arch / arm / boot / dts /. D'ailleurs, socfpga_cyclone5_de0_sockit.dtb est un fichier d'arborescence de périphériques pour DE10 nano. Remplacez-les par les fichiers zImage, .dtb dans la partition FAT de votre carte SD.
Tout d'abord, vous devez vérifier le contenu de la partition de la carte SD à réécrire (une carte qui peut démarrer DE10nano sous Linux). Insérez la carte SD dans le PC de développement et affichez les informations de partition. Si le nom de périphérique de la carte SD sur votre PC est / dev / mmcblk0 La commande est sudo fdisk -l / dev / mmcblk0
.
$ sudo fdisk -l /dev/mmcblk0
...Abréviation...
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 2048 206848 204801 100M b W95 FAT32
/dev/mmcblk0p2 227331 7395332 7168002 3.4G 83 Linux
/dev/mmcblk0p3 206849 227330 20482 10M a2 unknown
À partir de ces informations, vous pouvez voir que la partition FAT est Partition1 (/ dev / mmcblk0p1) et la partition Linux est Partition2 (/ dev / mmcblk0p2).
Réécrivez zImage et .dtb dans la partition1 (/ dev / mmcblk0p1) de la partition FAT avec la vôtre. Par exemple, sur le site Terasic Page de ressources du kit DE10-Nano Si vous utilisiez l'image de la carte MicroSD de "Linux LXDE Desktop (noyau 4.5)", le fichier correspondant dans la partition FAT est nommé zImage, soc_system.dtb, remplacez-les.
$ sudo mount /dev/mmcblk0p1 /mnt
$ cp /mnt/zImage /mnt/zImage.org
$ cp /mnt/soc_system.dtb /mnt/soc_system.dtb.org
$ cp arch/arm/boot/zImage /mnt
$ cp arch/arm/boot/dts/socfpga_cyclone5_de0_sockit.dtb /mnt/soc_system.dtb
$ sudo umount /mnt
(En supposant que le nom de périphérique de la carte SD est / dev / mmcblk0 et que le répertoire vide / mnt existe déjà)
Les paramètres du noyau sont définis à la fois avec le make socfpga_defconfig
ci-dessus, mais ceux définis ici incluent également le module avec le paramètre [M] qui n'est pas inclus dans zImage et est défini sur un fichier séparé (.ko) en tant que module. Il y a plusieurs. Comme ce sont également des fichiers liés au noyau, écrivez-les à l'emplacement spécifié sur la carte SD. Ceci est également nécessaire si vous souhaitez utiliser le module sélectionné comme [M] dans le paramètre Kernel (bien que je ne pense pas que ce soit nécessaire dans la plage où vous utilisez normalement DE10 nano).
$ make modules
$ mkdir /tmp/kmod
$ make modules_install INSTALL_MOD_PATH=/tmp/kmod
$ cd /tmp/kmod
$ tar cvzf /tmp/mod.tgz *
$ sudo mount /dev/mmcblk0p2 /mnt
$ sudo tar xf /tmp/mod.tgz -C /mnt
$ sudo umount /mnt
$ rm -rf /tmp/mod.tgz /tmp/kmod
(Ceci est un exemple lorsque le nom de périphérique de la carte SD est / dev / mmcblk0 et la partition Linux de la carte SD est / dev / mmcblk0p2) (Dans cet exemple, / tmp / kmod / lib / modules / \ * / build, / tmp / kmod / lib / modules / \ * / source est un lien symbolique vers le répertoire Kernel Source sur votre PC de développement. Dans ce cas, copiez-le dans un autre environnement avec, je pense que c'est correct de les supprimer puis de tar cvzf .. Parce que c'est un lien symbolique qui sera nécessaire lors de la construction du module à l'avenir sur l'environnement côté ARM. )
L'image de la carte SD fournie par Terasic a une image qui vous permet d'utiliser l'interface graphique du moniteur HDMI (comme l'image "Linux LXDE Desktop" ci-dessus), mais si vous la réécrivez dans le noyau créé dans la procédure ci-dessus, Il n'y a pas de sortie moniteur. Le pilote pour la sortie du moniteur (pilote de tampon de trame) n'est pas inclus dans le socfpga_defconfig par défaut. Afin d'activer la sortie du moniteur, il est nécessaire de créer un noyau contenant un pilote de tampon de trame. Entre make socfpga_defconfig
et make zImage
mentionné ci-dessus
$ make menuconfig
Veuillez exécuter le. Cela lancera l'interface graphique pour définir les paramètres du noyau, utilisez donc pleinement les touches de curseur et la touche Entrée.
Allez sur la ligne Device Drivers-> Graphics support-> Frame buffer Devices-> Altera VIP Frame Reader framebuffer support
et marquez-la comme <*> (avec la touche Espace). Sélectionnez enregistrer dans le menu en bas et enregistrer dans .config pour quitter.
Ensuite, vous devez également ajouter un fichier d'arborescence de périphériques pour lancer le tampon d'images que vous venez d'activer. Copiez socfpga_cyclone5_de0_sockit.dts comme socfpga_cyclone5_de10nano_FB.dts et utilisez votre éditeur préféré pour modifier socffpga_cyclone5_de10nano_FB.dts.
$ cd arch/arm/boot/dts
$ cp socfpga_cyclone5_de0_sockit.dts socfpga_cyclone5_de10nano_FB.dts
$ vi socfpga_cyclone5_de10nano_FB.dts #Éditer
$ cd ../../../..
La modification consiste à ajouter ce qui suit à la fin du fichier.
&base_fpga_region {
ranges = <0x00000000 0xff200000 0x00200000>;
alt_vip_vfr_hdmi: vip@0x100031000 {
compatible = "ALTR,vip-frame-reader-14.0", "ALTR,vip-frame-reader-9.1";
reg = <0x00031000 0x00000080>;
max-width = <1024>;
max-height = <768>;
bits-per-color = <8>;
colors-per-beat = <4>;
beats-per-pixel = <1>;
mem-word-width = <128>;
};
};
Créez ensuite une arborescence de périphériques .dtb avec la zImage renommée et remplacez-les par les fichiers de la carte SD.
$ make zImage
$ make socfpga_cyclone5_de10nano_FB.dtb
J'ai écrit comment construire et mettre à jour uniquement le noyau Linux de la carte SD DE10 nano Linux. En fait, il y a un aspect que j'ai écrit ce contenu parce qu'il était nécessaire dans "FPGA Config with Device Tree Overlay" écrit dans un autre article. Dans l'exemple de commande de travail ci-dessus, la carte SD du DE10nano est insérée dans le PC de développement, montée et le contenu est réécrit, mais j'ai connecté le DE10nano et le PC de développement avec Ethernet et je l'ai généré avec le PC de développement. Je travaille en envoyant le binaire à DE10nano avec scp et en réécrivant le fichier avec DE10nano (car il est difficile d'insérer et de retirer la carte SD).
Référence: Compiling Linux du site portail Linux pour Intel SoC FPGA
Recommended Posts