21/06/2022

 Linux underground

BeagleBone Black et Gentoo

Avertissement :
armv7a-hardfloat-linux-gnueabihf devient armv7a-unknown-linux-gnueabihf !
https://www.gentoo.org/support/news-items/2018-09-07-arm-17-profile-migration.html

Premier démarrage

Ce matériel est livré prêt à l'emploi. Branchez simplement la cable USB à votre PC d'une part et au BeagleBone Black via le port microUSB d'autre part. Celui-ci démarre alors, alimenté par l'USB. Pour se connecter en SSH :
adresse IP : 192.168.7.2
Login : debian
password : temppwd

Ce 29 août 2014, j'arrive enfin à booter mon BeagleBone black sur la carte microSD. En vrac, voici quelques notes...

Console série

NB:  Pin 1 on the cable is the black wire and connects to pin 1 on the board, the pin with the white dot next to it (https://elinux.org/Beagleboard:Terminal_Shells).

dmesg donne :

[ 1728.681876] usbcore: registered new interface driver usbserial
[ 1728.682022] usbcore: registered new interface driver usbserial_generic
[ 1728.682080] usbserial: USB Serial support registered for generic
[ 1728.698254] usbcore: registered new interface driver ftdi_sio
[ 1728.699633] usbserial: USB Serial support registered for FTDI USB Serial Device
[ 1728.699834] ftdi_sio 1-2.1:1.0: FTDI USB Serial Device converter detected
[ 1728.701000] usb 1-2.1: Detected FT232RL
[ 1728.704377] usb 1-2.1: FTDI USB Serial Device converter now attached to ttyUSB0

# screen /dev/ttyUSB0 115200

ATTENTION : le câble FTDI doit être connecté avant de lancer la commande screen, à tout le moins côté prise USB. Remarquez aussi que je lance screen en root. Y aurait-il un groupe à rajouter à l'utilisateur pour éviter d'utiliser root ?

Environnement de compilation Gentoo

# crossdev -C armv7a-hardfloat-linux-gnueabihf
# crossdev -P -v -t armv7a-unknown-linux-gnueabihf

Pour configurer votre environnement de compilation "armv7a-unknown-linux-gnueabihf", consultez directement le Wiki Gentoo.

Signalons aussi pour ceux qui n'utiliseraient pas le "crosscompiler" de Gentoo que la distribution de la "toolchain" arm (anciennement Linaro) est mainteant libre et disponible ici : https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads -> AArch32 target with hard float (arm-linux-gnueabihf).

Compilation de U-boot

Avec les sources du dépôt Github :

$ git clone -b v2019.04 https://github.com/u-boot/u-boot --depth=1
$ cd u-boot/

Avec les sources du dépôt Gitlab :

$ wget -c https://gitlab.denx.de/u-boot/u-boot/-/archive/v2019.04/u-boot-v2019-04.tar.bz2
$ tar xvjf u-boot-v2019-04.tar.bz2
$ cd u-boot-v2019-04-3c99166441bf3ea325af2da83cfe65430b49c066

Ensuite pour l'un et l'autre :

$ wget -c https://github.com/eewiki/u-boot-patches/raw/master/v2019.04/0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
$ wget -c https://github.com/eewiki/u-boot-patches/raw/master/v2019.04/0002-U-Boot-BeagleBone-Cape-Manager.patch
$ patch -p1 < 0001-am335x_evm-uEnv.txt-bootz-n-fixes.patch
$ patch -p1 < 0002-U-Boot-BeagleBone-Cape-Manager.patch
$ make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- distclean
$ make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- am335x_evm_defconfig
$ make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf-

Il semblerait que u-boot-2019.04 soit la dernière version à prendre en charge notre bien aimé BBB.

Binaires U-boot

Pour ceux qui ne peuvent pas compiler u-boot, vous pouvez récupérer mes fichers u-boot compilés :
$ wget https://www.linuxunderground.be/BBB/u-boot-bin/MLO
$ wget https://www.linuxunderground.be/BBB/u-boot-bin/u-boot.img

omap4+

ATTENTION:
Remplacez toujours /dev/sdX par le fichier correspondant à votre périphérique de lecture de carte SD !

Effacez l'actuelle table de partition (et les labels) :

# dd if=/dev/zero of=/dev/sdX bs=1M count=10

Partionnez la microSD :

# sfdisk /dev/sdX <<-__EOF__
4M,,L,*
__EOF__

Installez le bootloader. MLO et u-boot.img sont "dd'ed to drive" :

# dd if=MLO of=/dev/sdX count=1 seek=1 conv=notrunc bs=128k
# dd if=u-boot.img of=/dev/sdX count=2 seek=1 conv=notrunc bs=384k

Formatez la microSD :

# mkfs.ext4 -L rootfs -O ^metadata_csum,^64bit /dev/sdX1

Sources :
https://eewiki.net/display/linuxonarm/BeagleBone+Black
https://elinux.org/Beagleboard:U-boot_partitioning_layout_2.0.

Compilation du kernel

Le kernel Gentoo pour BeagleBone Black

La démache sera identique pour le kernel linux officiel.

# cd /usr/src/linux-5.11.5-gentoo
# mkdir -p deploy/boot
# wget https://www.linuxunderground.be/BBB/files/bb.org_defconfig.sh
# chmod +x bb.org_defconfig.sh
# ./bb.org_defconfig.sh
# make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- bb.org_defconfig
# make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- olddefconfig
# make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- -j4 zImage modules dtbs
# make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- INSTALL_MOD_PATH=deploy modules_install
# make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- INSTALL_PATH=deploy/boot zinstall
# make ARCH=arm CROSS_COMPILE=armv7a-unknown-linux-gnueabihf- INSTALL_PATH=deploy/boot dtbs_install
# cd deploy
# echo uname_r=$(ls boot/dtbs/) > boot/uEnv.txt
# tar cvzf ../deploy.tar.gz .

Vous verrez par la suite comment utiliser ce fichier deploy.tar.gz

Stage3

Télécharger sur un miroir Gentoo un stage3 et portage :
(...)/releases/arm/autobuilds/current-stage3-armv7a_hardfp/stage3-armv7a_hardfp-20200509T210605Z.tar.xz
(...)/snapshots/portage-latest.tar.xz

# mkdir /mnt/bbb
# mount /dev/sdX1 /mnt/bbb
# cd /mnt/bbb
# tar xJpf chemin_téléchargement/stage3-armv7a_hardfp-20200509T210605Z.tar.xz
# cd var/db/repos
# tar xJpf chemin_téléchargement/portage-latest.tar.xz
# mv portage gentoo
# cd /mnt/bbb/etc/init.d
# ln -s net.lo net.eth0
# cd /mnt/bbb/etc/runlevels/default
# ln -s /etc/init.d/net.eth0
# ln -s /etc/init.d/sshd
# cd /mnt/bbb/etc/runlevels/boot
# unlink hwclock
# ln -s /etc/init.d/swclock
# cd /mnt/bbb
# echo "Europe/Brussels" > etc/timezone
# tar xvzf /usr/src/linux-5.7.7-gentoo/deploy.tar.gz

Pour définir le mot de passe root, le principe est d'aller écrire le hash du mot de passe directement dans le fichier /mnt/bbb/etc/shadow à la ligne root :
root:<hash_mot_de_passe>:10770:0:::::

Ce hash pourra être obtenu en tapant un mot de passe avec la commande :
$ openssl passwd -1
Ou en faisant un copier/coller du hash de votre /etc/shadow dans votre /mnt/bbb/etc/shadow.

Dans le fichier /mnt/bbb/etc/inittab, en dessous de la ligne "# SERIAL CONSOLES", assurez-vous d'avoir :
s0:12345:respawn:/sbin/agetty -L 115200 ttyS0 vt100

Finalisez votre configuration sur base des exemples de fichiers de etc/.

# umount /mnt/bbb

Mettez votre carte sd dans votre BeagleBone Black et démarrez-le. Au 1er démarrage, pensez à initialiser l'heure et le fuseau horraire :
# date MMDDhhmmYYYY
# emerge --config sys-libs/timezone-data

Trucs et astuces

Mettre à jour l'horloge software

tlsdate fait partie de l' "overlay" de linuxunderground. Pour l'installer :
# ACCEPT_KEYWORDS="**" emerge tlsdate

# tlsdate -V -l -t
# touch /sbin/openrc-run

Pour rappel, si vous deviez utiliser la commande date à la place de tlsdate, tapez quelque chose du genre :

# date -u -s 2020-03-22T20:34:00
# touch /sbin/openrc-run

Créez de la mémoire swap pour une opération ponctuelle

# dd if=/dev/zero of=/swapfile bs=1M count=512
# chmod 600 /swapfile
# mkswap /swapfile
# swapon /swapfile
...
# swapoff -a

Gentoo - lors de la mise à jour du stage3 (assez ancien), pour me sortir du blocage de portage

# emerge -1 --nodeps dev-python/six

Liens

https://wiki.gentoo.org/wiki/Embedded_Handbook/Boards/BeagleBone_Black
https://wiki.gentoo.org/wiki/BeagleBone_Black
https://wiki.gentoo.org/wiki/Embedded_Handbook/General/Cross-compiling_the_kernel
https://eewiki.net/display/linuxonarm/BeagleBone+Black
https://www.twam.info/hardware/beaglebone-black/u-boot-on-beaglebone-black
https://wiki.beyondlogic.org/index.php?title=BeagleBoneBlack_Default_uBoot_Environment_Variables
https://beagleboard.org/blog/2022-06-06-using-the-u-boot-extension-board-manager-beaglebone-boards-example


Contact