[LINUX] [Mémo] Connectez Raspberry Pi Zero à Internet avec un seul câble USB! (Utilisez nfs, pas de carte SD, clavier, souris, moniteur requis)

Aperçu

--Connectez Raspberry Pi Zero à Internet avec un seul câble USB

--Référence: [COMMENT COURIR OU BOOTER RASPBIAN SUR UNE FRAMBOISE PI ZERO SANS CARTE SD](https://dev.webonomic.nl/how-to-run-or-boot-raspbian-on-a-raspberry- pi-zero-without-an-sd-card)
Ou plutôt, je l'ai vérifié pour Buster tel quel

environnement

procédure

Installation de l'environnement virtuel

  1. Démarrez PowerShell en tant qu'administrateur (Win + x, a, ALT + y)

  2. Installation Chocolatey (https://chocolatey.org/install)

    Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))
    
  3. Installez Virtualbox + Extension et épinglez-le (ne pas mettre à niveau sans autorisation)

    #choco pin remove --name virtualbox
    #choco uninstall  -y virtualbox -x
    cinst -y virtualbox --params "/ExtensionPack /NoQuickLaunch /NoRegister /NoPath"
    choco pin add    --name virtualbox
    
  4. vagabond et autre installation

    cinst -y vagrant vscode
    
  1. Redémarrez une fois la machine hôte (Windows 10) et redémarrez PowerShell en tant qu'administrateur.

  2. Installation du plug-in Vagrant

    vagrant plugin install vagrant-vbguest
    vagrant plugin install vagrant-disksize 
    
  3. Quittez avec ʻexit`

Préparation de la machine virtuelle (invité VM)

  1. Démarrez PowerShell normalement (Win + x, i)

  2. Dossier de travail: Créez C: \ Vagrant \ u20 (> mkdir C: \ Vagrant \ u20), déplacez ('> cd C: \ Vagrant \ u20`)

  3. Créez le Vagrantfile suivant avec VSCode (> code C: \ Vagrant \ u20 \ Vagrantfile).
    Ajoutez le plug-in
    ![Image.png](https: // qiita) -image-store.s3.ap-northeast-1.amazonaws.com/0/75594/3817fecb-f4e0-65ee-d19d-4dce4078da26.png)

    # -*- mode: ruby -*-
    # vi: set ft=ruby :
    
    VB_NAME="u2004"
    VM_MEMORY=1024
    VM_CORES=2
    
    Vagrant.configure("2") do |config|
      config.vm.box = "ubuntu/focal64"
      config.vm.boot_timeout = 6000
      config.vm.network "public_network"
      
      config.vm.provider "virtualbox" do |vb|
        #vb.gui = true #La fenêtre Virtualbox s'ouvre
        vb.name         = VB_NAME
        vb.memory       = VM_MEMORY
        vb.cpus         = VM_CORES
        vb.customize ['modifyvm', :id, '--usb', 'on']
        vb.customize ['modifyvm', :id, '--usbehci', 'on' ] # USB 2.0 controller
        vb.customize ["modifyvm", :id, "--usbxhci", 'off' ] # USB 3.0 controller
        vb.customize ["usbfilter", "add", "0", "--target", :id, '--name', "Broadcom BCM2708 Boot","--vendorid","0a5c","--productid","2763", "--remote", "no"] #
        vb.customize ["usbfilter", "add", "1", "--target", :id, '--name', "Broadcom BCM2710 Boot","--vendorid","0a5c","--productid","2764", "--remote", "no"] #
        vb.customize ["usbfilter", "add", "2", "--target", :id, '--name', "Linux with usb RNDIS/Ethernet Gadget","--vendorid","0525","--productid","a4a2", "--remote", "no"] #
      end
    
      config.vm.provision "shell", privileged: true, inline: <<-SHELL
        sed -i -e 's/ console=ttyS0//g' /etc/default/grub.d/50-cloudimg-settings.cfg
        update-grub
        apt-get update
        apt install -y linux-modules-$(uname -r) linux-modules-extra-$(uname -r)
        apt install -y build-essential libusb-1.0-0-dev git unzip nfs-kernel-server
      SHELL
    end
    
  4. Démarrez la machine virtuelle avec vagrant up

  5. Attendez un moment. Environ 20 à 30 minutes? --ʻUbuntu / focal64Téléchargement d'image «Il faut beaucoup de temps pour démarrer ce type. Si je change le paramètre grub (enlevezconsole = ttyS0), cela semble être bon (https://bugs.launchpad.net/cloud-images/+bug/1829625), donc je le fais avec des dispositions vagabondes. --Télécharger les outils et autres informations --Installez linux-modules-extra-` pour le pilote USB Ethernet

    image.png

  6. Arrêtez-vous une fois avec "arrêt vagabond".

  7. Changez vb.customize [" usbfilter "," add "... ʻadd to modify` dans Vagrantfile. (Faites les trois. Seulement deux images ci-dessous .. trois J'essaye de changer mes yeux ...)
    ![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/c33e2e68-3a16 -5f13-4567-b565bd87ead8.png)

  8. Commencez par vagrant up, connectez-vous avec vagrant ssh

Préparation au lancement de RPi Zero

  1. Connectez-vous à la machine virtuelle

  2. Construisez usbboot / rpiboot

    cd ${HOME} && \
    git clone --depth=1 https://github.com/raspberrypi/usbboot && \
    cd usbboot && \
    make && \
    cd ${HOME}
    
  3. Téléchargez et décompressez Raspbian lite

    cd ${HOME} && \
    wget http://downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2020-02-14/2020-02-13-raspbian-buster-lite.zip && \
    unzip 2020-02-13-raspbian-buster-lite.zip
    
  4. Montez l'image Raspbian Lite.

    sudo losetup -P /dev/loop5 ${HOME}/2020-02-13-raspbian-buster-lite.img
    sudo mkdir -p /pi/{boot,root}
    sudo mount /dev/loop5p1 /pi/boot
    sudo mount /dev/loop5p2 /pi/root
    
  5. Patch pour commencer

    # Edit /pi/boot/config.txt
    grep -e '^dtoverlay=dwc2$' /pi/boot/config.txt || echo -e "# enable OTG\ndtoverlay=dwc2\n# set initramfs\ninitramfs initrd.img followkernel" | sudo tee -a /pi/boot/config.txt
    
    #cmdline.txt
    #console=serial0,115200 console=tty1 root=PARTUUID=738a4d67-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh
    echo 'otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=10.42.0.1:/pi/root rw ip=10.42.0.14:10.42.0.1::255.255.255.0:pi:usb0:static elevator=deadline modules-load=dwc2,g_ether fsck.repair=yes rootwait g_ether.host_addr=5e:a1:4f:5d:cf:d2' | sudo tee /pi/boot/cmdline.txt
    
    cat <<'EOF' | sudo tee /pi/root/etc/fstab
    proc            /proc           proc    defaults          0       0
    10.42.0.1:/pi/root / nfs defaults 0 1
    #PARTUUID=738a4d67-01  /boot           vfat    defaults          0       2
    #PARTUUID=738a4d67-02  /   
    EOF
    
    # /pi/root/etc/dhcpcd.conf
    grep -e '^interface usb0 #mt08$' /pi/root/etc/dhcpcd.conf || echo -e 'interface usb0 #mt08\nstatic ip_address=10.42.0.14/24\nstatic routers=10.42.0.1\nstatic domain_name_servers=8.8.8.8' | sudo tee -a /pi/root/etc/dhcpcd.conf
    
    #Démarrer ssh automatiquement
    cd /pi/root/etc/systemd/system/multi-user.target.wants
    sudo ln -s /lib/systemd/system/ssh.service ssh.service
    cd ${HOME}
    
    #Apportez initrd.
    cd ${HOME} && \
    wget "https://github.com/mt08xx/files/raw/master/2020-0512-1_RPIZero_initrd.img-4.19.97%2B" && \
    sudo cp 2020-0512-1_RPIZero_initrd.img-4.19.97+ //pi/boot/initrd.img
    
  6. Paramètres latéraux d'Ubuntu

    #Paramètres NFS
    grep 10.42.0 /etc/exports || echo "/pi/root 10.42.0.14(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports
    sudo systemctl restart nfs-server.service
    sudo exportfs -rav
    
    #Attribuez une adresse IP fixe à Ethernet pour la connexion USB.
    #Le nom de l'appareil peut être usb0 ou enx5ea14f5dcfd2..
    cat << 'EOF' | sudo tee /etc/netplan/50-cloud-init.yaml
    # This file is generated from information provided by the datasource.  Changes
    # to it will not persist across an instance reboot.  To disable cloud-init's
    # network configuration capabilities, write a file
    # /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
    # network: {config: disabled}
    network:
        ethernets:
            enp0s3:
                dhcp4: true
                match:
                    macaddress: 02:c2:ed:de:cc:93
                set-name: enp0s3
            usb0:
                dhcp4: no
                dhcp6: no
                addresses: [10.42.0.1/24]
            enx5ea14f5dcfd2:
                dhcp4: no
                dhcp6: no
                addresses: [10.42.0.1/24]
        version: 2
    EOF
    
    #Adaptation
    sudo netplan generate
    sudo netplan apply
    
    #Transfert IP activé
    sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
    
  7. Quittez avec ʻexit, machine virtuelle avec vagrant halt`, arrêtez une fois

Lancez RPi Zero

  1. RPi Zero ne se connecte pas

  2. Démarrez PowerShell normalement (Win + x, i)

  3. Exécutez les opérations suivantes

    #Déplacer vers le dossier de travail
    cd C:\Vagrant\u20
    #Démarrage de la machine virtuelle
    vagrant up
    #Connectez-vous à la machine virtuelle
    vagrant ssh
    
  4. Exécutez les opérations suivantes

    #Paramètres de transfert IP(Ne pas enregistrer)
    sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
    #
    #Monture d'image Raspbian Lite
    sudo losetup -P /dev/loop5 ${HOME}/2020-02-13-raspbian-buster-lite.img
    sudo mkdir -p /pi/{boot,root}
    sudo mount /dev/loop5p1 /pi/boot
    sudo mount /dev/loop5p2 /pi/root
    #
    #Exécutez rpiboot
    cd ${HOME}
    sudo usbboot/rpiboot -d /pi/boot/
    
  5. Connectez le port USB RPi Zero (et non l'alimentation PWR) à votre PC.
    Il peut être préférable de connecter le RPi Zero à un téléviseur et de voir à quoi il ressemble.

  6. Priez

Exemple d'exécution

--10.42.0.1: / pi / root sur / type nfs ... image.png

Autre

Comment faire initrd.img

  1. Mettez Raspbian sur SD et démarrez-le.

  2. Commencez avec RPi Zero

  3. Exécutez les opérations suivantes

    ## Make initramfs on "RPi-Zero"
    sudo apt install -y initramfs-tools
    
    grep -e '^g_ether$' /etc/initramfs-tools/modules || echo -e 'g_ether\nlibcomposite\nu_ether\nudc-core\nusb_f_rndis\nusb_f_ecm' | sudo tee -a /etc/initramfs-tools/modules
    
    sudo update-initramfs -c -k `uname -r`
    
  4. Un fichier appelé / boot / initrd.img-4.19.97 + sera créé, donc copiez-le dans le répertoire / pi / boot / initrd.img de la VM.

Recommended Posts

[Mémo] Connectez Raspberry Pi Zero à Internet avec un seul câble USB! (Utilisez nfs, pas de carte SD, clavier, souris, moniteur requis)
Un mémo pour utiliser simplement le capteur d'éclairement TSL2561 avec Raspberry Pi 2
Raspberry Pi --1 --Première fois (Connectez un capteur de température pour afficher la température)
Connectez-vous à la console Raspberry PI et affichez les informations IP et SD locales
Essayez d'utiliser le processeur à 4 cœurs du Raspberry Pi 2 avec Parallel Python