Outils pour utilisateurs

Outils du site


buildroot

Buildroot sur ZeroPi, NanoPi NEO/NEO2 et Raspbery Pi 3

OS images

Objectif

  • Créer un mini lecteur audio réseau basé sur une Linux minimaliste (kernel + busybox + upmpdcli/mpd [ou squeezelite] + shairport-sync) avec sortie audio par USB vers une interface XMOS.
    • UPnP/OpenHome player, Apple AirPlay et Web Radio fonctionnent dès le premier démarrage.
    • Squeezelite est installé mais pas utilisé. Un script de démarrage est dans le répertoire /root/, on le trouve aussi ici.
    • Shairport-sync : Si on ne l'utilise pas :
      mv /etc/init.d/S99shairport-sync /root/
      reboot
    • :!: Upmpdcli : Il est installé mais je ne l'utilise pas. Pour le désactiver :
      mv /etc/init.d/S99upmpdcli /root/
      reboot 

      J'utilise Upmpdcli sur le serveur Odroid-HC1. Cela permet d'alléger encore un peu plus le système sur NanoPi NEO|NEO2 ou ZeroPi. Un aperçu du charge système lors de la lecture d'un fichier 24/96 :
      (ZeroPi)
      (NanoPi NEO2)
      (NanoPi NEO)

      • Note : En usage normal, on a besoin seulement de init, mpd, udhcpc et dropbear. Lorsque tout marche bien, on peut arrêter les logs système
        mv /etc/init.d/S01syslogd /root/
        mv /etc/init.d/S02klogd /root/
        reboot

        Et on peut aussi arrêter “temporairement” le service dropbear

        /etc/init.d/S50dropbear stop
        exit

        Il suffit de redémarrer pour avoir à nouveau le service dropbear

  • Roon Bridge : Je n'utilise pas Roon. Roon propose un “free 14 day trial”, j'en ai profité pour tester et intégrer Roon Bridge dans ma config.
    • Un aperçu du charge système lors de la lecture d'un fichier 24/96 :
      (NanoPi NEO2)
      (NanoPi NEO)
  • iperf3 : Un test avec iperf3. Sur le player NanoPi NEO2 (résultat similaire avec le ZeroPi)
    # iperf3 -s

    et ensuite sur le NAS Odroid-HC1

    root@odroidxu4:~# iperf3 -c 192.168.0.16

    192.168.0.16 est l'adresse IP de NanoPi NEO2. Voici les sorties après ces deux commandes :

    root@odroidxu4:~# iperf3 -c 192.168.0.16
    Connecting to host 192.168.0.16, port 5201
    [  4] local 192.168.0.23 port 47226 connected to 192.168.0.16 port 5201
    [ ID] Interval           Transfer     Bandwidth       Retr  Cwnd
    [  4]   0.00-1.00   sec   108 MBytes   905 Mbits/sec    0    372 KBytes       
    [  4]   1.00-2.00   sec   110 MBytes   924 Mbits/sec    0    392 KBytes       
    [  4]   2.00-3.00   sec   110 MBytes   924 Mbits/sec    0    392 KBytes       
    [  4]   3.00-4.00   sec   110 MBytes   924 Mbits/sec    0    392 KBytes       
    [  4]   4.00-5.00   sec   110 MBytes   924 Mbits/sec    0    392 KBytes       
    [  4]   5.00-6.00   sec   110 MBytes   924 Mbits/sec    0    392 KBytes       
    [  4]   6.00-7.00   sec   110 MBytes   924 Mbits/sec    0    411 KBytes       
    [  4]   7.00-8.00   sec   110 MBytes   924 Mbits/sec    0    431 KBytes       
    [  4]   8.00-9.00   sec   110 MBytes   924 Mbits/sec    0    431 KBytes       
    [  4]   9.00-10.00  sec   110 MBytes   926 Mbits/sec    0    536 KBytes       
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth       Retr
    [  4]   0.00-10.00  sec  1.07 GBytes   922 Mbits/sec    0             sender
    [  4]   0.00-10.00  sec  1.07 GBytes   921 Mbits/sec                  receiver
    
    iperf Done.

    et

    # iperf3 -s
    warning: this system does not seem to support IPv6 - trying IPv4
    -----------------------------------------------------------
    Server listening on 5201
    -----------------------------------------------------------
    Accepted connection from 192.168.0.23, port 47224
    [  5] local 192.168.0.16 port 5201 connected to 192.168.0.23 port 47226
    [ ID] Interval           Transfer     Bandwidth
    [  5]   0.00-1.00   sec   102 MBytes   860 Mbits/sec                  
    [  5]   1.00-2.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   2.00-3.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   3.00-4.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   4.00-5.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   5.00-6.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   6.00-7.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   7.00-8.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   8.00-9.00   sec   110 MBytes   924 Mbits/sec                  
    [  5]   9.00-10.00  sec   110 MBytes   924 Mbits/sec                  
    [  5]  10.00-10.04  sec  4.72 MBytes   921 Mbits/sec                  
    - - - - - - - - - - - - - - - - - - - - - - - - -
    [ ID] Interval           Transfer     Bandwidth
    [  5]   0.00-10.04  sec  0.00 Bytes  0.00 bits/sec                  sender
    [  5]   0.00-10.04  sec  1.07 GBytes   917 Mbits/sec                  receiver
    -----------------------------------------------------------
    Server listening on 5201
    -----------------------------------------------------------

ZeroPi et NanoPi NEO/NEO2

Créer une image système

  • Avec mes fichiers de config : https://github.com/bz31/Buildroot et sur un ordinateur Linux (Debian Stretch) :
    # apt-get install libncurses-dev build-essential gettext-base
    
    $ git clone https://github.com/bz31/NanoPi_NEO-NEO2_Buildroot.git br
    $ cd br
    $ git clone -b 2019.02.x --single-branch git://git.buildroot.net/buildroot buildroot-2019.02.x
      
    $ mkdir nanopineo2-output  (mkdir nanopineo-output)
    $ cd nanopineo2-output     (cd nanopineo-output)
    $ make O=$PWD -C ../buildroot-2019.02.x defconfig BR2_DEFCONFIG=../configs/nanopi-neo2_buildroot-2019.02.x_linux-4.19.x_defconfig
     (make O=$PWD -C ../buildroot-2019.02.x defconfig BR2_DEFCONFIG=../configs/nanopi-neo_buildroot-2019.02.x_linux-4.19.x_defconfig)
    [$ make busybox-menuconfig] (dans "Linux System Utilities", sélectionner"taskset" et éventuellement simplifier un peu. Copier "build/busybox-1.29.3/.config" vers "../configs/busybox.config") 
    [$ make menuconfig]
    [$ make savedefconfig]
    [$ make linux-menuconfig]
    $ make
  • Note :
    • L'organisation de ces fichiers :
      $ tree -d -L 1 br/
      br/
      ├── board  <-- mes configs pour la création de l'image et patches
      ├── buildroot-2019.02.x  <-- source Buildroot
      ├── configs  <-- mes "defconfig" pour Buildroot (sauvegardées)
      ├── dl  <-- les packages téléchargés par Buildroot pendant la compilation, conservés pour accélérer une compilation ultérieure
      ├── linux-configs  <-- mes configs pour kernel
      ├── nanopineo2-output <-- "output" en externe de buildroot-2019.02.x pour ne pas modifier ce dernier
      └── nanopineo-output
    • Etape “make menuconfig” : les options modifiées/complétées par rapport à la config par défaut de Buildroot :
      Build options  --->
        (../configs/nanopi-neo2_buildroot-2019.02.x_linux-4.19.x_defconfig) Location to save buildroot config
        ($(TOPDIR)/../dl) Download dir
        ($(TOPDIR)/../board/nanopi-neo2/patches) global patch directories
      Toolchain  --->
      [Toolchain choix 1 : pour réduire grandement le temps de compilation :]
        Toolchain type (External toolchain)  --->
        *** Toolchain External Options ***
        Toolchain (Arm AArch64 2018.11)  --->
        Toolchain origin (Toolchain to be downloaded and installed) 
      [Toolchain choix 2 // choix 3] 
        Toolchain type (Buildroot toolchain)  --->
        *** Toolchain Buildroot Options ***
        C library (uClibc-ng) // C library (glibc)
        Kernel Headers (Linux 4.19.x kernel headers)
        [*] Enable WCHAR support  [si utiliser uClibc-ng]
        [*] Enable C++ support
      System configuration  --->
        (nanopi-neo2) System hostname
        (Welcome to Buildroot for the NanoPi NEO2) System banner
        /dev management (Dynamic using devtmpfs only)
        [*] Enable root login with password
        (root) Root password
        [ ] Run a getty (login prompt) after boot
        (eth0) Network interface to configure through DHCP
        ($(TOPDIR)/../board/nanopi-neo2/post-build.sh) Custom scripts to run before creating filesystem images
        (support/scripts/genimage.sh) Custom scripts to run after creating filesystem images
        (-c $(TOPDIR)/../board/nanopi-neo2/genimage.cfg) Extra arguments passed to custom scripts
      Kernel  --->
        Kernel version (Latest version (4.19))
        Kernel configuration (Using a custom (def)config file)  --->
        ($(TOPDIR)/../linux-configs/nanopi-neo2_linux-4.19.x_usb-audio.config) Configuration file path
      Target packages  --->
        -*- BusyBox
        (../configs/busybox.config) BusyBox configuration file to use?
        Audio and video applications  --->
          [*] alsa-utils
            [*]   aplay/arecord
          [*] mpd  --->
            [*]   dsd
            [*]   faad2
            [*]   ffmpeg
            [*]   flac
            [*]   mad
            [*]   curl
            [*]   alsa
            [*]   tcp sockets
          [*] squeezelite
            [*]   Enable WMA and ALAC decoding
            [*]   Enable DSD decoding
          [*] upmpdcli   (note : pas besoin si utiliser upmpdcli sur le serveur odroid-hc1)
        Hardware handling  --->
          [*] hwloc
        Interpreter languages and scripting  --->
          [*] python     (note : seulement nécessaire si installer upmpdcli)
                core python modules  --->
                  [*] xml module
                  [*] hashlib module
              External python modules  --->
                [*] python-requests
                [*] python-urllib3
        Networking applications  --->
          [*] dhcpcd  (ceci est optionnel, le choisir seulement si problème de connexion dhcp) 
          [*] dropbear
          [*] iperf3
          [*] ntp
            [ ]   ntpd
            [*]   ntpdate
          [*] shairport-sync
        System tools  --->
          [*] htop
        Text editors and viewers  --->
          [*] nano    (note : optionnel pour ceux qui n'aiment pas vi)
            [*]   optimize for size
      Filesystem images  --->
        (128M) exact size
        (0)   exact number of inodes (leave at 0 for auto calculation)
      Bootloaders  --->
        [*] U-Boot
          U-Boot Version (2018.09)  --->
        [*]   U-Boot needs pylibfdt
        [*]   Generate a U-Boot boot script
        ($(TOPDIR)/../board/nanopi-neo2/boot.cmd) U-Boot boot script source
      • Le support pour webradios dans Upmpdcli a besoin de python 2.x (et le module xml). Et le support pour Qobuz a besoin de ses modules hashlib module, python-requests et python-urllib3.
      • Le répertoire $(TOPDIR)/../board/nanopi-neo2/patches contient des patches pour certains packages.
      • Deux sources kernel au choix : * megous-linux-orange-pi-4.9 pour tester cpufreq et thermal. * Les patches pour NanoPi NEO : * sun8i-emac-thermal-cpufreq.patch (linux) * h3-Fix-PLL1-setup-to-never-use-dividers.patch (uboot) * linux-4.9.x suffit pour mon usage : * Les patches pour NanoPi NEO2 : * Driver pour ethernet : v4-01-10-ethernet-add-sun8i-emac-driver.patch, v4-04-10-ARM-dts-sun8i-h3-Add-dt-node-for-the-syscon-control-module.patch, v4-05-10-ARM-dts-sun8i-h3-add-sun8i-emac-ethernet-driver.patch * enable-sun8i-emac-on-the-nanopi-neo.patch (NanoPi NEO)
      • U-Boot pour NanoPi NEO : Selon ma lecture Voltage_regulators et DRAM, CPU_clock_speed_limit et uboot-board-sunxi-Kconfig (actuellement https://github.com/u-boot/u-boot/blob/v2018.01/arch/arm/mach-sunxi/Kconfig), uboot configure par défaut SYS_CLK_FREQ à 1008Mhz. Je la diminue à 816MHz avec un patch (Remarque : uboot configure RAM en 408Mhz CONFIG_DRAM_CLK=408). Voir cette discussion.
      • U-Boot pour NanoPi NEO2 : Avec la version v2018.01 de uboot, la fréquence CPU est configurée à 816MHz, exactement ce que je veux. Voir config SYS_CLK_FREQ. Et CONFIG_DRAM_CLK=672 qui est le défaut config DRAM_CLK, on passe à 408Mhz, Lower the default DRAM frequency of NanoPi NEO2 to 408MHz.
      • CPU Isolation :
        • La topologie du système :
          lstopo
        • Utiliser les CPU cores 0 et 1 pour le système. Isoler les deux autres cores 2 et 3 pour MPD. Pour cela, ajouter l'option isolcpus=2,3 dans boot.cmd (avant de compiler l'image), et utiliser un script /etc/init.d/S99taskset pour lancer taskset. Pour vérifier
          # cat /sys/devices/system/cpu/possible 
          0-3
          # cat /sys/devices/system/cpu/isolated 
          2-3
          # taskset -p $(pidof mpd)
          pid 128's current affinity mask: c

          Pour comprendre le mask c, voir système hexadécimal. Pour vérifier “Cpus_allowed_list”

          # cat /proc/$(pidof mpd)/status
          Name:	mpd
          Umask:	0022
          State:	S (sleeping)
          Tgid:	127
          Ngid:	0
          Pid:	127
          PPid:	1
          TracerPid:	0
          Uid:	0	0	0	0
          Gid:	0	0	0	0
          FDSize:	64
          Groups:	 
          NStgid:	127
          NSpid:	127
          NSpgid:	127
          NSsid:	127
          VmPeak:	  397824 kB
          VmSize:	  331776 kB
          VmLck:	       0 kB
          VmPin:	       0 kB
          VmHWM:	   17232 kB
          VmRSS:	   12580 kB
          RssAnon:	    3064 kB
          RssFile:	    9516 kB
          RssShmem:	       0 kB
          VmData:	   47660 kB
          VmStk:	     132 kB
          VmExe:	     548 kB
          VmLib:	   19624 kB
          VmPTE:	     140 kB
          VmSwap:	       0 kB
          CoreDumping:	0
          Threads:	5
          SigQ:	0/1956
          SigPnd:	0000000000000000
          ShdPnd:	0000000000000000
          SigBlk:	0000000000004003
          SigIgn:	0000000000001000
          SigCgt:	0000000180000000
          CapInh:	0000000000000000
          CapPrm:	0000003fffffffff
          CapEff:	0000003fffffffff
          CapBnd:	0000003fffffffff
          CapAmb:	0000000000000000
          NoNewPrivs:	0
          Seccomp:	0
          Cpus_allowed:	c
          Cpus_allowed_list:	2-3
          voluntary_ctxt_switches:	211171
          nonvoluntary_ctxt_switches:	142313

          MPD ouvre 4 threads, par exemple

          # cat /proc/$(($(pidof mpd)+4))/status
          Name:	output:Interfac
          Umask:	0022
          State:	S (sleeping)
          Tgid:	127
          Ngid:	0
          Pid:	131
          PPid:	1
          TracerPid:	0
          Uid:	0	0	0	0
          Gid:	0	0	0	0
          FDSize:	64
          Groups:	 
          NStgid:	127
          NSpid:	131
          NSpgid:	127
          NSsid:	127
          VmPeak:	  397824 kB
          VmSize:	  331776 kB
          VmLck:	       0 kB
          VmPin:	       0 kB
          VmHWM:	   17232 kB
          VmRSS:	   12580 kB
          RssAnon:	    3064 kB
          RssFile:	    9516 kB
          RssShmem:	       0 kB
          VmData:	   47660 kB
          VmStk:	     132 kB
          VmExe:	     548 kB
          VmLib:	   19624 kB
          VmPTE:	     140 kB
          VmSwap:	       0 kB
          CoreDumping:	0
          Threads:	5
          SigQ:	0/1956
          SigPnd:	0000000000000000
          ShdPnd:	0000000000000000
          SigBlk:	0000000000004003
          SigIgn:	0000000000001000
          SigCgt:	0000000180000000
          CapInh:	0000000000000000
          CapPrm:	0000003fffffffff
          CapEff:	0000003fffffffff
          CapBnd:	0000003fffffffff
          CapAmb:	0000000000000000
          NoNewPrivs:	0
          Seccomp:	0
          Cpus_allowed:	c
          Cpus_allowed_list:	 2-3
          voluntary_ctxt_switches:	190
          nonvoluntary_ctxt_switches:	0

Installation et configuration

  • Copier l'image compilée sur une carte micro SD, par exemple
    # dd bs=4M if=images/sdcard.img of=/dev/sdb
    # sync
  • Optionnellement adapter les trois lignes “friendlyname, ohproductroom, radiolist” dans /etc/upmpdcli.conf. Pour utiliser Qobuz, remplir les trois options “qobuzuser, qobuzpass, qobuzformatid”.
  • Adresse MAC : Elle est variable pour NanoPi NEO. Optionnellement, pour fixer une adresse MAC (ifconfig en montre une) qui permet au routeur d'attribuer un IP fixe, ajouter une ligne après “iface” <code>iface eth0 inet dhcp hwaddress ether xx:xx:xx:xx:xx:xx</code> dans /etc/network/interfaces. Problème résolu par une autre méthode plus efficace.
  • Un aperçu du système sur NanoPi NEO :
    • # cat /proc/asound/cards 
       0 [U20F1          ]: USB-Audio - USB Audio 2.0(F1)
                            Singxer USB Audio 2.0(F1) at usb-1c1d000.usb-1, high speed
    • Lecture d'un fichier 24/96 avec cpu réglé à 816MHz (le mediaserver pour Qobuz tourne aussi)
      nanopi_neo-play24-96.png Voir Real-Time Scheduling.
      # chrt -p 164
      pid 164's current scheduling policy: SCHED_FIFO
      pid 164's current scheduling priority: 50

      (Ceci est configuré dans les sources de MPD : https://github.com/MusicPlayerDaemon/MPD/blob/master/src/thread/Util.cxx )

      • Le système 64-bit sur NEO2 consomme 2 fois plus de RAM
    • # cat /etc/fstab 
      # <file system>	<mount pt>	<type>	<options>	<dump>	<pass>
      /dev/root	/		ext2	rw,noauto	0	1
      proc		/proc		proc	defaults	0	0
      devpts		/dev/pts	devpts	defaults,gid=5,mode=620,ptmxmode=0666	0	0
      tmpfs		/dev/shm	tmpfs	mode=0777	0	0
      tmpfs		/tmp		tmpfs	mode=1777	0	0
      tmpfs		/run		tmpfs	mode=0755,nosuid,nodev	0	0
      sysfs		/sys		sysfs	defaults	0	0
    • La config par défaut de tmpfs peut prendre la moitié de RAM
      # df -h
      Filesystem                Size      Used Available Use% Mounted on
      /dev/root               120.0M     43.0M     68.0M  39% /
      devtmpfs                250.4M         0    250.4M   0% /dev
      tmpfs                   250.9M         0    250.9M   0% /dev/shm
      tmpfs                   250.9M     28.0K    250.9M   0% /tmp
      tmpfs                   250.9M     32.0K    250.9M   0% /run
    • Buildroot évite l'accès à la carte microSD, c'est un très bon point
      # ls -l /var/
      total 2
      lrwxrwxrwx    1 root     root             6 Mar  4 21:28 cache -> ../tmp
      drwxr-xr-x    3 root     root          1024 Mar 24 15:03 lib
      lrwxrwxrwx    1 root     root             6 Mar  4 21:28 lock -> ../tmp
      lrwxrwxrwx    1 root     root             6 Mar  4 21:28 log -> ../tmp
      lrwxrwxrwx    1 root     root             6 Mar  4 21:28 run -> ../run
      lrwxrwxrwx    1 root     root             6 Mar  4 21:28 spool -> ../tmp
      lrwxrwxrwx    1 root     root             6 Mar  4 21:28 tmp -> ../tmp
      drwxr-xr-x    2 www-data www-data      1024 Mar 24 17:37 www
    • Température (avec megous-linux-orange-pi source) (température ambiant ~ 20°C) rapportée par le système (pendant la lecture de fichiers 24/96)
      # cat /sys/class/thermal/thermal_zone0/temp 
      33673
    • CPU (avec megous-linux-orange-pi source):
      # cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor 
      userspace
      # cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq 
      8160000
      # cat /sys/devices/system/cpu/cpufreq/policy0/stats/time_in_state 
      120000 0
      240000 0
      312000 0
      480000 0
      624000 0
      816000 450744
      1008000 0
      1200000 0

Raspberry Pi 3

Méthode simple

  • $ sudo apt-get install libncurses-dev build-essential gettext-bas
    
    $ git clone https://github.com/bz31/Buildroot.git br
    $ cd br
    $ wget https://buildroot.org/downloads/buildroot-2019.08.2.tar.gz
    $ tar zxvf buildroot-2019.08.2.tar.gz
    
    $ mkdir raspberrypi3-output
    $ cd raspberrypi3-output
    $ make O=$PWD -C ../buildroot-2019.08.2 defconfig BR2_DEFCONFIG=../configs/raspberrypi3_buildroot-2019.08.x_linux-4.19.x_defconfig
    [$ make menuconfig]
    [$ make savedefconfig]
    [$ make linux-menuconfig]
    $ make
    
    $ sudo dd bs=4M if=images/sdcard.img of=/dev/sdb  
    $ sudo sync
    • Le login/passwd pour la connexion ssh est root/root.
    • WiFi : Si utiliser le WiFi uniquement, ouvrir le fichier etc/wpa_supplicant.conf pour mettre SSID/passwd avant d'insérer la carte MicroSD dans Raspberry Pi.

Une autre méthode pour voir les détails de configuration

Créer une image système

  • Sur un ordinateur Linux, installer d'abord les packages libncurses-dev build-essential gettext-base. Ensuite compiler et installer la dernière version stable, par exemple
    $ wget https://buildroot.org/downloads/buildroot-2019.05.tar.gz
    $ tar zxvf buildroot-2019.05.tar.gz
    $ cd buildroot-2019.05
    $ make raspberrypi3_64_defconfig
    [Ou bien utiliser une autre config : ]
    [$ make defconfig BR2_DEFCONFIG=(chemin jusqu'à un fichier de config)]
    $ make busybox-menuconfig (Pour isoler deux Cores CPU pour MPD/Squeezelite, on a besoin de "taskset" dans "Linux System Utilities")
    $ make menuconfig    ([1] voir plus bas pour les options choisies/modifiées)
    [$ make savedefconfig] (sauvegarder ma config, elle remplece "configs/raspberrypi3_64_defconfig") 
    [$ make linux-menuconfig] (pour modifier la config kernel) 
    $ make
    # dd if=output/images/sdcard.img of=/dev/*** (adapter le nom ***) (ou bien utiliser Etcher)
    • [1] Dans cette étape, les options modifiées/complétées :
      Build options  --->
        $(TOPDIR)/../configs/raspberrypi3_64_defconfig
        $(TOPDIR)/../dl
      Toolchain  --->
        Toolchain type (External toolchain)  --->
        *** Toolchain External Options ***
        Toolchain (Arm AArch64 2018.11)  --->
      System configuration
        /dev management (Dynamic using devtmpfs + mdev)
        [*] Enable root login with password
        (root) Root password
        [ ] Run a getty (login prompt) after boot  ----
      Target packages
        Audio and video applications  --->
          [*] alsa-utils
          [*] mpd  --->
            [*]   faad2
            [*]   ffmpeg
            [*]   flac
            [*]   mad
            [*]   curl
            [*]   alsa
            [*]   tcp sockets
          [*] squeezelite
            [ ]   Enable WMA and ALAC decoding
          [*] upmpdcli
        Hardware handling  --->
          [*] hwloc
        Interpreter languages and scripting  --->
          [*] python
                core python modules  --->
                  [*] xml module
                  [*] hashlib module
              External python modules  --->
                [*] python-requests
                [*] python-urllib3
        Networking applications  --->
          [*] dropbear
          [*] iperf3
          [*] ntp
            [ ]   ntpd
            [*]   ntpdate
          [*] shairport-sync
        System tools  --->
          [*] htop
        Text editors and viewers  --->
          [*] nano
            [*]   optimize for size
      Filesystem images  --->
        (256M) exact size
      • Note : Le support pour webradios dans Upmpdcli a besoin de python 2.x (et le module xml). Et le support pour Qobuz a besoin de ses modules hashlib module, python-requests et python-urllib3.
    • WIFI : Si on veut utiliser le wifi, les options supplémentaires suivantes sont à modifier/compléter :
      Target packages
        Hardware handling  --->
          Firmware  --->
            [*] linux-firmware
                WiFi firmware  --->
                  [*] Broadcom BRCM bcm43xxx
        Networking applications  --->
          [*] crda
          [*] wireless tools
          [*] wpa_supplicant
            [*]   Enable nl80211 support
            [*]   Install wpa_cli binary
            [*]   Install wpa_client shared library
            [*]   Install wpa_passphrase binary

Configuration

  • Wifi : Deux façons de configurer le WiFi. Soit avec une connexion Ethernet via ssh, soit faire les modifications directement sur la carte SD sans avoir besoin de passer par Ethernet.
    # cd /lib/firmware/brcm/
    # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/brcmfmac43430-sdio.txt
    
    # cd /etc/network/
    # mv interfaces interfaces.orig
    # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/interfaces
    
    # cd /etc/
    # mv wpa_supplicant.conf wpa_supplicant.conf.orig
    # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/wpa_supplicant.conf
    # vi wpa_supplicant.conf (mettre ssid/passwd pour le wifi)
  • Audio player : Plusieurs choix possibles
    • Upmpdcli/MPD :
      # cd /etc/
      # mv mpd.conf mpd.conf.orig
      # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/mpd.conf
      # /etc/init.d/S95mpd restart
      
      # mv upmpdcli.conf upmpdcli.conf.orig
      # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/upmpdcli_radiolist
      # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/upmpdcli.conf
      # /etc/init.d/S99upmpdcli restart
    • Squeezelite : installé, mais non utilisé. un exemple de script de démarrage ici
    • Shairport-sync :
      # cat /proc/asound/cards
       0 [U20X1          ]: USB-Audio - USB Audio 2.0(X1)
                            Singxer USB Audio 2.0(X1) at usb-3f980000.usb-1.3, high speed
                           
      # cd /etc/
      # mv shairport-sync.conf shairport-sync.conf.orig
      # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/shairport-sync.conf
      # /etc/init.d/S99shairport-sync restart
      • Si on ne l'utilise pas, on peut le désactiver
        # mv /etc/init.d/S99shairport-sync /root/
    • Roon Bridge : installation
      # cd /opt/
      # wget http://download.roonlabs.com/builds/RoonBridge_linuxarmv8.tar.bz2
      # bunzip2 RoonBridge_linuxarmv8.tar.bz2
      # tar xvf RoonBridge_linuxarmv8.tar
      # rm RoonBridge_linuxarmv8.tar
      • Un script de démarrage si on veut l'utiliser.
        # cd /etc/init.d/
        # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/S95roonbridge
        # chmod +x S95roonbridge
        # ./S95roonbridge start
  • Date et heure : Utiliser ntpdate pour régler la date et l'heure au démarrage
    # cd /etc/init.d/
    # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/S45ntpdate
    # chmod +x S45ntpdate
  • CPU Isolation : Voir plus haut NanoPi NEO2 pour explication.
    # mount /dev/mmcblk0p1 /mnt
    # vi /mnt/cmdline.txt
    [modifier la ligne en :  root=/dev/mmcblk0p2 rootwait isolcpus=2,3 ]
    # cd /etc/init.d/
    # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/S99taskset
    # chmod +x S99taskset
    # reboot

    Vérification

    # cat /proc/$(pidof mpd)/status
    Name:	mpd
    ...
    Cpus_allowed:	c
    Cpus_allowed_list:	2-3
  • Fréquence CPU :
    # cd /etc/init.d/
    # wget http://download.tuxfamily.org/bz31notes/buildroot/board/raspberrypi3/S60cpufreq
    # chmod +x S60cpufreq
    # reboot
    
    # cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies
    600000 1200000 
    # cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq
    600000
    # cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor
    ondemand
buildroot.txt · Dernière modification: 2019/12/06 09:25 par bz31