Outils pour utilisateurs

Outils du site


freebsd_sur_nanopi_neo

Test : FreeBSD sur NanoPI NEO

Installer une FreeBSD sous Virtualbox

Compiler une image FreeBSD pour NanoPi NEO

  • Démarrer la machine virtuelle FreeBSD. Pour plus de confort
    • configurer /etc/ssh/sshd_config pour accepter root login
    • travailler via une connexion ssh en tant que root sur la machine virtuelle
  • Créer une image :
    # pkg install git subversion u-boot-nanopi_neo
    # svn co https://svn0.us-west.freebsd.org/base/head /usr/src      
    # git clone https://github.com/bz31/crochet
    # cd crochet/
    # ./crochet.sh -c nanopi-neo.config.sh
    • A la fin de la compilation, on voit le message
      ...
      Completed disk image is in: /root/crochet/work/FreeBSD-armv7-12.0-GENERIC-334785-NanoPi-NEO.img
  • Voici une image à télécharger : FreeBSD-armv7-12.0-GENERIC-334785-NanoPi-NEO.img.zip
    • Le login/password par ssh est bz31/bz31
    • On passe ensuite au compte root sans avoir besoin de mot de passe.
    • :!: La taille de /tmp n'est pas assez grand pour que pkg tourne. Editer /etc/fstab pour modifier la ligne
      md              /tmp            mfs rw,noatime,-s50m    0 0

      (utiliser l'option -s50m (50M) au lieu de -s30m semble suffit. Voir mount_mfs. Cela sera corrigé pour la prochaine compilation de l'image.)

    • Régler date et heure
      # /usr/sbin/ntpd -qg
      # tzsetup
    • Fixer une adresse IP : En DHCP, chaque reboot change l'adresse MAC et le routeur propose une nouvelle adresse IP. Selon la doc, on peut définir une plage d'adresses IP pour DHCP dans le routeur, et on choisit une adresse IP pour NanoPi NEO en dehors de cette plage pour éviter un éventuel conflit, cela fonctionne en modifiant le premier paragraphe dans /etc/rc.conf :
      hostname="nanopi-neo"
      #ifconfig_awg0="DHCP"
      ifconfig_awg0="inet 192.168.0.99 netmask 255.255.255.0"
      defaultrouter="192.168.0.1"
      sshd_enable="YES"

Audio sur NanoPi NEO

  • La partie de dmesg sur l'interface audio usb
    uaudio0 on uhub2
    uaudio0: <USB Audio 2.0(F1)> on usbus2
    uaudio0: Play: 384000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 352800 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 192000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 176400 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 96000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 88200 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 48000 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: Play: 44100 Hz, 2 ch, 32-bit S-LE PCM format, 2x8ms buffer.
    uaudio0: No recording.
    uaudio0: No MIDI sequencer.
    pcm0: <USB audio> on uaudio0
    uaudio0: No HID volume keys found.
  • root@nanopi-neo:/usr/home/bz31 # uname -a
    FreeBSD nanopi-neo 12.0-CURRENT FreeBSD 12.0-CURRENT #0 r334785: Mon Jun 11 00:32:24 CEST 2018     root@:/root/crochet/work/obj/usr/src/arm.armv7/sys/GENERIC  arm
  • root@nanopi-neo:/usr/home/bz31 # cat /dev/sndstat
    Installed devices:
    pcm0: <USB audio> (play) default
    No devices installed from userspace.
    
    
    root@nanopi-neo:/usr/home/bz31 # sysctl hw.snd
    hw.snd.maxautovchans: 16
    hw.snd.default_unit: 0
    hw.snd.version: 2009061500/armv7
    hw.snd.default_auto: 1
    hw.snd.verbose: 0
    hw.snd.vpc_mixer_bypass: 1
    hw.snd.feeder_rate_quality: 1
    hw.snd.feeder_rate_round: 25
    hw.snd.feeder_rate_max: 2016000
    hw.snd.feeder_rate_min: 1
    hw.snd.feeder_rate_polyphase_max: 183040
    hw.snd.feeder_rate_presets: 100:8:0.85 100:36:0.92 100:164:0.97
    hw.snd.feeder_eq_exact_rate: 0
    hw.snd.feeder_eq_presets: PEQ:16000,0.2500,62,0.2500:-9,9,1.0:44100,48000,88200,96000,176400,192000
    hw.snd.basename_clone: 1
    hw.snd.compat_linux_mmap: 0
    hw.snd.syncdelay: -1
    hw.snd.usefrags: 0
    hw.snd.vpc_reset: 0
    hw.snd.vpc_0db: 45
    hw.snd.vpc_autoreset: 1
    hw.snd.timeout: 5
    hw.snd.latency_profile: 1
    hw.snd.latency: 0
    hw.snd.report_soft_matrix: 1
    hw.snd.report_soft_formats: 1
    
    
    root@nanopi-neo:/usr/home/bz31 # sysctl hw.usb.uaudio
    hw.usb.uaudio.buffer_ms: 8
    hw.usb.uaudio.default_channels: 0
    hw.usb.uaudio.default_bits: 32
    hw.usb.uaudio.default_rate: 0
    hw.usb.uaudio.debug: 0
  • Configurer la sortie audio : Voir la doc. Ajouter dans /etc/sysctl.conf
    dev.pcm.0.mixer.vol_0.val=0
    dev.pcm.0.play.vchans=0

    (volume max et désactiver vchans)
    et update

    # service sysctl restart
    • root@nanopi-neo:/usr/home/bz31 # sysctl dev.pcm.0
      dev.pcm.0.feedback_rate: 95996
      dev.pcm.0.mixer.mute_1.desc: 
      dev.pcm.0.mixer.mute_1.max: 1
      dev.pcm.0.mixer.mute_1.min: 0
      dev.pcm.0.mixer.mute_1.val: 0
      dev.pcm.0.mixer.vol_0.desc: 
      dev.pcm.0.mixer.vol_0.max: 0
      dev.pcm.0.mixer.vol_0.min: -32512
      dev.pcm.0.mixer.vol_0.val: 0
      dev.pcm.0.bitperfect: 0
      dev.pcm.0.buffersize: 0
      dev.pcm.0.play.vchans: 0
      dev.pcm.0.hwvol_mixer: vol
      dev.pcm.0.hwvol_step: 5
      dev.pcm.0.%parent: uaudio0
      dev.pcm.0.%pnpinfo: 
      dev.pcm.0.%location: 
      dev.pcm.0.%driver: pcm
      dev.pcm.0.%desc: USB audio
    • Note : La commande
      # sysctl dev.pcm.0.mixer.vol_0.val=n

      contrôle le volume. De façon indépendante, l'outil mixer fait aussi le même travail. Par exemple

      root@nanopi-neo:/usr/home/bz31 # mixer
      Mixer vol      is currently set to  75:75
      Mixer pcm      is currently set to  75:75
      root@nanopi-neo:/usr/home/bz31 # mixer -s vol 100
      Setting the mixer vol from 75:75 to 100:100.
      root@nanopi-neo:/usr/home/bz31 # mixer -s pcm 100
      Setting the mixer pcm from 75:75 to 100:100.

      Arrêter et puis relancer le service mixer permet de sauvegarder ces valeurs dans /var/db/mixer0-state. Ces valeurs sont restaurées au boot par service mixer qui est activé par défaut dans /etc/defaults/rc.conf.

  • Tester le son avec sox :
    # pkg install sox
    • test :
      play -V test.mp3
      play -V test.wav
      play -V test.flac
    • un exemple :
      % play -V 01-01-Allemande-SMR.flac 
      play INFO oss: Using default OSS device name: /dev/dsp
      play INFO oss: OSS driver only supports bytes and words
      play INFO oss: Forcing to signed linear word
      play:      SoX v14.4.2
      play INFO formats: detected file format type `flac'
      
      Input File     : '01-01-Allemande-SMR.flac'
      Channels       : 2
      Sample Rate    : 96000
      Precision      : 24-bit
      Duration       : 00:02:48.64 = 16189910 samples ~ 12648.4 CDDA sectors
      File Size      : 49.1M
      Bit Rate       : 2.33M
      Sample Encoding: 24-bit FLAC
      Endian Type    : little
      Reverse Nibbles: no
      Reverse Bits   : no
      Comments       : 
      album=The French Suites, BWV 812-817
      copyright=2017 Accentus Music
      disctotal=1
      artist=Zhu Xiao-Mei
      title=French Suite No. 2 in C Minor, BWV 813:Allemande
      tracktotal=40
      date=2017
      albumartist=Zhu Xiao-Mei
      composer=Bach, Johann Sebastian (1685-1750)
      genre=Classical
      tracknumber=1
      discnumber=1
      description=Label : Accentus Music - Kontor
      
      
      play INFO oss: Using default OSS device name: /dev/dsp
      
      Output File    : 'default' (ossdsp)
      Channels       : 2
      Sample Rate    : 96000
      Precision      : 32-bit
      Duration       : 00:02:48.64 = 16189910 samples ~ 12648.4 CDDA sectors
      Sample Encoding: 32-bit Signed Integer PCM
      Endian Type    : little
      Reverse Nibbles: no
      Reverse Bits   : no
      
      play INFO sox: effects chain: input        96000Hz  2 channels
      play INFO sox: effects chain: output       96000Hz  2 channels
      In:2.33% 00:00:03.93 [00:02:44.72] Out:377k  [  -===|====  ]        Clip:0 
  • MPD :
    # pkg install musicpd

    Il est utilisé seulement par Upmpdcli comme un audio player. Utiliser donc une config simple suffit. Remplacer le contenu de /usr/local/etc/musicpd.conf par

    audio_output {
            type            "oss"
            name            "Interface USB XMOS"
            device          "/dev/dsp"
            mixer_type      "none"
    }

    (voir Odroid-HC1 pour la config de Upmpdcli)
    Ajouter

    musicpd_enable="YES"

    dans /etc/rc.conf et lancer

    # service musicpd start
  • Installer le package shairport-sync. Ajouter <file>dbus_enable=“YES” avahi_daemon_enable=“YES” shairport_sync_enable=“YES” </file> dans /etc/rc.conf et activer ces trois services ou bien rebooter. * Cela fonctionne, mais il occupe la carte son, donc MPD ne marche plus. Parce qu'il utilise sndio …
  • Test :
    • Temps de latence. Ajouter dans /etc/sysctl.conf (voir cette explication)
      kern.timecounter.alloweddeviation=0
      hw.usb.uaudio.buffer_ms=2
      hw.snd.latency=0

      et ensuite

      # service sysctl restart
    • :?: Bitperfect :?: En mettant
      dev.pcm.0.bitperfect=1

      dans /etc/sysctl.conf, play ou mpg123 ou mplayer ne marche plus. Mais MPD fonctionne toujours, pourquoi ?

      • Il me semble que, comparant à ALSA sous Linux, “réglage audio dans /etc/rc.conf” ←→ “/etc/asound.conf”, mixer ←→ alsamixer ou amixer. Certaines applications utilisent ces réglages, mais MPD a sa propre config.
    • :?: hardware volume :?: La ligne (voir plus haut) dev.pcm.0.hwvol_mixer: vol signifie “contrôle le hardware volume par vol” ?
  • Désactiver le service ntp : Commenter la ligne ntpd_enable=“YES” dans /etc/rc.conf. Configurer ntp pour qu'il se lance une fois par jour :
    # crontab -e

    et ajouter la ligne

    0  3   *   *   *  /usr/sbin/ntpd -qg

    et reboot.

  • Désactiver les “Serial terminals” dans /etc/ttys.
freebsd_sur_nanopi_neo.txt · Dernière modification: 2018/06/12 07:18 par bz31