L'art du chamanisme ou du firmware personnalisé pour Olinuxino. Noyau et Ubuntu Partie 3

Assemblage du noyau


Je vais expliquer pourquoi les images existantes ne conviennent pas. Leur principal problème est qu'ils sont construits sur l'ancien noyau 3.4, et cela impose immédiatement une limite à la version maximale du compilateur 4 et à ubuntu 12.04 pour sûr, je ne me souviens pas de 14.04. Il s'avère donc que si vous souhaitez utiliser les derniers logiciels et bibliothèques, vous devrez reconstruire le dernier noyau. Bien sûr, vous pouvez supprimer la restriction sur la compilation d'au moins la version 5 de gcc dans les sources et corriger le code afin qu'il puisse être construit sous la version 4, mais c'est toujours une merde. Sans oublier le fait que dans notre cas la partie graphique de linux est superflue.

Pour commencer avec kernel.org, nous pompons le noyau 4.14.57, à l'époque c'était la dernière version stable.

Dans le dossier source, créez un script qui démarre la configuration:

#!/bin/sh make O=../olimex-kernel-4.14.57 #      -j2 #     ARCH=arm #      CROSS_COMPILE=arm-linux-gnueabihf- #   xconfig #   

Nous obtenons quelque chose comme ça:



Dans le menu fichier de /linux-4.14.57/arch/arm/configs/ sélectionnez le fichier /linux-4.14.57/arch/arm/configs/ , il y a les paramètres de base pour les processeurs de la série sunxi. Et puis vous devez ajouter des paramètres. C'est-à-dire Nous recherchons ci-dessous les drapeaux spécifiés et les configurons.

Nous intégrons tout dans le noyau chaque fois que possible.

CONFIG_BLK_DEV_INITRD - nous n'utiliserons pas de ramfs à la place, puis nous lancerons Aufs (système de fichiers d'unification multicouche avancé). Bref, décochez la case.
CONFIG_MEMCG - allumer comme tout à l'intérieur
CONFIG_BLK_CGROUP - allumer
CONFIG_CGROUP_DEVICE - allumer
CONFIG_CGROUP_CPUACCT - allumer
CONFIG_CGROUP_PERF - allumer comme tout à l'intérieur
CONFIG_EXPERT - sélectionnez et laissez tout à l'intérieur par défaut
CONFIG_BLK_WBT - choisissez comme tout à l'intérieur
CONFIG_PARTITION_ADVANCED - sélectionnez l'intérieur
CONFIG_SUN_PARTITION - sélectionnez
ARCH_SUNXI - à l'intérieur nous ne laissons que MACH_SUN5I

Dans la prise en charge du bus, sélectionnez CONFIG_PCI, car l'USB wifi nécessite la prise en charge du bus PCI. Évidemment, lorsque le support wifi est activé, le noyau ne nécessite pas de bus pci, cependant, sans ce wpa, le demandeur ne trouve pas de wifi usb. Pourquoi cela se produit, vous pouvez regarder dans les profondeurs de l'histoire, mais à en juger par tout, cela s'est produit historiquement, en général, vous devez le savoir et vous en souvenir.

CONFIG_CPU_FREQ_STAT - rechercher et sélectionner
Dans CONFIG_NET, nous sélectionnons WIRELESS puis CONFIG_CFG80211 et là nous marquons CONFIG_NL80211_TESTMODE et CONFIG_CFG80211_WEXT ce dernier inclut notre pilote wifi pour le demandeur.
CONFIG_MAC80211 - allumez la pile réseau.
CONFIG_MAC80211_MESH - allumer
CONFIG_MAC80211_LED - eh bien, choisissons ceci
CONFIG_NFC - nous incluons aussi bien que ce qui est à l'intérieur sauf CONFIG_NFC_NCI.
CONFIG_PARPORT - activer
CONFIG_LED_TRIGGER_PHY - sélectionnez
CONFIG_REALTEK_PHY - sélectionnez
CONFIG_WLAN - sélectionnez
CONFIG_RTL8XXXU - sélectionnez et à l'intérieur de CONFIG_RTL8XXXU_UNTESTED nous marquons.
CONFIG_SERIO_SUN4I_PS2 - allumer
CONFIG_SERIAL_DEV_BUS - allumez-le et sélectionnez SERIAL_DEV_CTRL_TTYPORT à l'intérieur.
CONFIG_USB_WUSB_CBAF - activer
CONFIG_USB_WUSB_CBAF_DEBUG - allumer
CONFIG_USB_WDM - allumer
CONFIG_USB_SERIAL - sélectionnez
CONFIG_UWB - sélectionnez et à l'intérieur sélectionnez CONFIG_UWB_HWA et CONFIG_UWB_I1480U et après cela CONFIG_USB_WUSB apparaîtra et sélectionnez également.
Nous sélectionnons CONFIG_STAGING et à l'intérieur nous sélectionnons le pilote CONFIG_RTL8192U et CONFIG_RTLLIB, et à l'intérieur du dernier, nous sélectionnons également tout. Ils sont marqués par des modules de poésie plus tard ils devront être vissés séparément.
CONFIG_R8188EU - sélectionnez

En général, c'est un minimum nécessaire de paramètres du noyau, si vous voulez soudainement activer quelque chose d'autre, alors lisez attentivement les dépendances de ce paramètre, sinon il y aura une erreur lors de la compilation. Ensuite, vous devez commencer la compilation:

 make O=../olimex-kernel-4.14.57/ -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage #   modules #   LOADADDR=0x40008000 #        

Dans le même temps, collectez et créez des fichiers:

 make O=../olimex-kernel-4.14.57 -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs 

C'est juste au cas où, car les fichiers source peuvent être en erreur même s'ils sont les mêmes dans le noyau et dans uboot. Par conséquent, pas l'un pour que l'autre fonctionne.

L'étape suivante consiste à collecter les fichiers collectés sur la première section de la carte SD:
- /olimex-kernel-4.14.57/arch/arm/boot/ partir d'ici, nous obtenons le noyau assemblé, il s'appelle uImage et ne pèse que 4,7 mètres.
- /olimex-uboot/arch/arm/dts/ d'ici nous obtenons l'arbre compilé, fichier sun5i-a13-olinuxino.dtb
- /u-boot-2018.05/ partir d'ici, nous obtenons le script de démarrage compilé boot.scr.

Build Ubuntu


Puisque toutes les parties nécessaires au téléchargement de rootfs sont préparées, il reste à construire ubuntu et pour cela nous prenons la dernière version 18.04.

Créez d'abord un dossier dans le répertoire racine:

 sudo mkdir /destrupt 

Exactement ici, car pour appliquer le chroot plus tard, vous devez disposer des droits complets comme dans le répertoire racine ou enregistrer la configuration du chroot pour tout autre dossier. En bref, il est plus facile de créer un dossier dans le répertoire racine et ne se trompe pas avec la configuration.

Pour l'assemblage, nous avons besoin des packages suivants, ils doivent être fournis sinon:
- Qemu-user-static
- debootstarp
- schroot

Ensuite, exécutez la build ubuntu:

sudo qemu-debootstrap # nous utilisons qemu car qemu sera installé avec l'assemblage ubuntu, ce qui vous permettra d'exécuter immédiatement chroot sur la version assemblée d'ubuntu
--arch armhf # type d'architecture de processeur
--variant=minbase # assembly dans la version minimale
bionic # build version 18.04
/destrup/ # adresse où collecter
http://ports.ubuntu.com/ubuntu-ports # où collecter les sources

Eh bien, que Ubuntu 18.04 est déjà assemblé, nous allons maintenant procéder à la configuration étape par étape:

1. Avant de commencer, nous montons dans / destrup / etc / apt / et éditons sources.list, ajoutez ce qui suit:

 deb http://ports.ubuntu.com/ubuntu-ports bionic main restricted deb http://ports.ubuntu.com/ubuntu-ports bionic universe deb http://ports.ubuntu.com/ubuntu-ports bionic multiverse 

Ce ne sont que des sources de distributions pour notre processeur.

2. Exécutez change root sur la nouvelle distribution ubuntu:

 sudo chroot /destrup 

Tout d'abord, définissez le mot de passe de l'utilisateur root:

 passwd root 

Ce mot de passe est requis pour se connecter au démarrage.

3. Installez les packages suivants.

apt update - mise à jour des packages

Nous iputils-ping, dhcpcd5, iproute2, iw, networkd-dispatcher, wireless-tools, net-tools. les packages pour le réseau: iputils-ping, dhcpcd5, iproute2, iw, networkd-dispatcher, wireless-tools, net-tools.

linux-firmware, wpasupplicant, systemd, hostapd, kmod, udev. système réseau: linux-firmware, wpasupplicant, systemd, hostapd, kmod, udev.

Eh bien et le reste pour qu'il soit pratique d'éditer et de configurer tout cela: nano, mc, usbutils, sudo.
Et je ne décrirai pas tout, car cela s’étendra sur quelques articles de plus, nous allons simplement parcourir certains des packages nécessaires à la configuration.

Configuration de wpa supplicant.


Pour commencer, nous analyserons brièvement ce qu'est le wifi USB.

La puce elle-même qui fournit le wifi (dans ce cas rtl8188) est un ADC enveloppé, avec sa propre présentation spéciale des données et l'accès à l'usb. c'est-à-dire si vous exécutez la commande lsmod sans le module r8188eu.ko chargé, nous verrons seulement que quelqu'un a pris le port usb. Lorsque le module est chargé, le nom de l'appareil sera déjà visible, en d'autres termes, ce module n'est qu'une interface de programme pour contrôler cette puce.

La bibliothèque suivante la plus importante est lib80211.ko, la norme IEEE 802.11 elle-même, en termes simples, c'est l'interprétation des signaux numériques éther dans la représentation de protocoles ehternet spécifiques. Mais pour gérer tout cela, vous devez installer linux-firmware, il inclura le pilote -wext-, qui fera tout cela. Nous le relierons plus loin au suppliant.

Commençons la configuration suppliante.

Nous montons dans un ubunte fraîchement assemblé à cette adresse:

 / etc / wpa_supplicant / wpa_supplicant.conf 

Et nous créons un fichier de configuration sinon et s'il y en a, nous corrigeons ce type:

 ctrl_interface_group=0 #        ctrl_interface=/var/run/wpa_supplicant #       #       usb  #      ap_scan=1 #wpa_supplicant   ,  - network={ ssid="SSID_" psk=" " key_mgmt=WPA-PSK #   proto=WPA2 pairwise=CCMP } 

Si tout est correctement configuré et que les modules décrits ci-dessus sont chargés, un fichier de périphérique sera créé à l'adresse spécifiée dans la configuration (paramètre ctrl_interface).

Configuration de Systemd


Nous avons configuré le suppliant, mais il n'y a encore personne pour l'exécuter. Vous pouvez bien sûr installer le gestionnaire de réseau et profiter du réglage automatique, mais où est le hardcore puis où se trouve la poubelle. En général, l'ennui pur.

Nous montons donc à l'adresse:

 / etc / systemd / system/ 

Et ici, nous créons un fichier appelé network-wireless.service sinon, et s'il y en a, nous commençons à éditer:

 [Unit] #       Description=Wireless network connectivity Wants=network.target After=sys-subsystem-net-devices-wlx007005012449.device Before=network.target BindsTo=sys-subsystem-net-devices-wlx007005012449.device [Service] #    Type=oneshot RemainAfterExit=yes ExecStart=/sbin/ifconfig wlx007005012449 up #   ExecStart=/sbin/wpa_supplicant -B -i wlx007005012449 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf #   ExecStart=/sbin/dhcpcd wlx007005012449 #  dhcp   [Install] WantedBy=multi-user.target 

Arrêtons-nous sur le lancement du suppliant:

ExecStart=/sbin/wpa_supplicant # chemin d'accès au demandeur
-B # exécuté en arrière-plan
-i wlx007005012449 # interface à exécuter, le même fichier de périphérique
-D wext # nom du pilote pour sifflet depuis linux-firmware
-c /etc/wpa_supplicant/wpa_supplicant.conf # adresse du fichier de configuration du -c /etc/wpa_supplicant/wpa_supplicant.conf

Eh bien, en général, tout ce dont vous avez besoin est configuré, allez à l'installation des modules.

Installation de modules.


Pour installer les modules, revenons un peu en arrière, à savoir dans le dossier avec la source du noyau et exécutons la commande pour copier les modules du noyau dans le dossier avec ubuntu à partir de là:

 make O=../olimex-kernel-4.14.57 -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install #     INSTALL_MOD_PATH=/destrup #    

Après cela, tous nos modules assemblés sont copiés sur ubuntu à:

 / lib / modules / 4.14.57 / kernel 

Maintenant, la chose la plus importante est d'enregistrer le lancement des modules copiés et toutes leurs dépendances, nous montons donc à l'adresse:

 / etc / modules 

Et exécutez ouvrir le fichier des modules pour l'édition et ajoutez les modules suivants:

 michael_mic r8188eu #   r8192e_pci rtllib rtllib_crypt_ccmp rtllib_crypt_tkip rtllib_crypt_wep r8192u_usb # lib80211 #   IEEE 802.11 

Il reste maintenant à copier tous les ubuntu assemblés dans la section de carte sd marquée dans l'article précédent en tant que section pour ubuntu.

Après cela, vous pouvez insérer le lecteur flash USB dans la carte, mettre sous tension et vous asseoir sur son uart pour accéder à sa gestion ou entrer via ssh. Vous pouvez ajouter une commande à systemd pour définir l'adresse IP ou une autre configuration en général, puis tout le reste est entre vos mains ...

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

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


All Articles