[LINUX] [Memo] Verbinden Sie Raspberry Pi Zero mit einem einzigen USB-Kabel mit dem Internet! (Verwenden Sie NFS, keine SD-Karte, Tastatur, Maus, Monitor erforderlich)

Überblick

--Referenz: [WIE MAN RASPBIAN OHNE SD-CARD AUF EINER RASPBERRY PI ZERO LAUFEN ODER BOOTEN KANN](https://dev.webonomic.nl/how-to-run-or-boot-raspbian-on-a-raspberry- pi-zero-without-an-sd-card)
Oder besser gesagt, ich habe es so wie es ist auf Buster überprüft

Umgebung

Verfahren

Installation der virtuellen Umgebung

  1. Starten Sie PowerShell als Administrator (Win + x, a, ALT + y).

  2. Chocolatey-Installation (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. Installieren Sie Virtualbox + Extension und stecken Sie es fest (kein Upgrade ohne Erlaubnis)

    #choco pin remove --name virtualbox
    #choco uninstall  -y virtualbox -x
    cinst -y virtualbox --params "/ExtensionPack /NoQuickLaunch /NoRegister /NoPath"
    choco pin add    --name virtualbox
    
  4. Vagabund und andere Installation

    cinst -y vagrant vscode
    
  1. Starten Sie den Hostcomputer (Windows 10) einmal neu und starten Sie PowerShell erneut als Administrator.

  2. Vagrant Plug-In Installation

    vagrant plugin install vagrant-vbguest
    vagrant plugin install vagrant-disksize 
    
  3. Beenden Sie mit exit

Vorbereitung der virtuellen Maschine (VM-Gast)

  1. Starten Sie PowerShell normal (Win + x, i)

  2. Arbeitsordner: Erstellen Sie C: \ Vagrant \ u20 (> mkdir C: \ Vagrant \ u20) und verschieben Sie ('> cd C: \ Vagrant \ u20`)

  3. Erstellen Sie das folgende Vagrantfile mit VSCode (> Code C: \ Vagrant \ u20 \ Vagrantfile).
    Fügen Sie das Plug-In hinzu
    ![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 #Das Virtualbox-Fenster wird geöffnet
        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. Starten Sie die virtuelle Maschine mit "vagrant up"

  5. Warten Sie eine Weile. Etwa 20 bis 30 Minuten?

  1. Einmal mit "Vagrant Halt" herunterfahren.

  2. Ändern Sie das add von vb.customize [" usbfilter "," add "... in Vagrantfile in modify. (Führen Sie alle drei aus. Nur zwei Bilder unten .. drei Ich versuche meine Augen zu ändern ...)
    ![Image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/75594/c33e2e68-3a16 -5f13-4567-b565bd87ead8.png)

  3. Beginnen Sie mit "vagrant up" und melden Sie sich mit "vagrant ssh" an

Vorbereitung zum Starten von RPi Zero

  1. Melden Sie sich bei der virtuellen Maschine an

  2. Erstellen Sie usbboot / rpiboot

    cd ${HOME} && \
    git clone --depth=1 https://github.com/raspberrypi/usbboot && \
    cd usbboot && \
    make && \
    cd ${HOME}
    
  3. Laden Sie Raspbian lite herunter und entpacken Sie es

    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. Hängen Sie das Raspbian Lite-Image ein.

    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 zum Starten

    # 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
    
    #Starten Sie ssh automatisch
    cd /pi/root/etc/systemd/system/multi-user.target.wants
    sudo ln -s /lib/systemd/system/ssh.service ssh.service
    cd ${HOME}
    
    #Bring 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. Ubuntu-Seiteneinstellungen

    #NFS-Einstellungen
    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
    
    #Weisen Sie Ethernet eine feste IP für die USB-Verbindung zu.
    #Der Gerätename kann usb0 oder enx5ea14f5dcfd2 sein..
    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
    
    #Anpassung
    sudo netplan generate
    sudo netplan apply
    
    #IP-Weiterleitung aktiviert
    sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/' /etc/sysctl.conf
    
  7. Beenden Sie mit exit, virtuelle Maschine mit vagrant halt, fahren Sie einmal herunter

Starten Sie RPi Zero

  1. RPi Zero stellt keine Verbindung her

  2. Starten Sie PowerShell normal (Win + x, i)

  3. Führen Sie Folgendes aus

    #Zum Arbeitsordner wechseln
    cd C:\Vagrant\u20
    #Start der virtuellen Maschine
    vagrant up
    #Melden Sie sich bei der virtuellen Maschine an
    vagrant ssh
    
  4. Führen Sie Folgendes aus

    #IP-Weiterleitungseinstellungen(Rette nicht)
    sudo iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE
    #
    #Raspbian Lite Image Mount
    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
    #
    #Führen Sie rpiboot aus
    cd ${HOME}
    sudo usbboot/rpiboot -d /pi/boot/
    
  5. Schließen Sie den RPi Zero USB-Anschluss (nicht den PWR des Netzteils) an Ihren PC an.
    Es ist möglicherweise besser, RPi Zero an einen Fernseher anzuschließen und zu sehen, wie es aussieht.

  6. Bete

Ausführungsbeispiel

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

Andere

Wie erstelle ich initrd.img

  1. Legen Sie Raspbian auf SD und starten Sie es.

  2. Beginnen Sie mit RPi Zero

  3. Führen Sie Folgendes aus

    ## 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. Eine Datei mit dem Namen "/ boot / initrd.img-4.19.97 +" wird erstellt. Kopieren Sie sie daher in die Datei "/ pi / boot / initrd.img" der VM.

Recommended Posts

[Memo] Verbinden Sie Raspberry Pi Zero mit einem einzigen USB-Kabel mit dem Internet! (Verwenden Sie NFS, keine SD-Karte, Tastatur, Maus, Monitor erforderlich)
Ein Memo zur einfachen Verwendung des Beleuchtungsstärkesensors TSL2561 mit Raspberry Pi 2
Raspberry Pi --1 - Zum ersten Mal (Schließen Sie einen Temperatursensor an, um die Temperatur anzuzeigen)
Stellen Sie eine Verbindung zur Raspberry PI-Konsole her und zeigen Sie lokale IP- und SD-Informationen an
Versuchen Sie, die 4-Kern-CPU des Raspberry Pi 2 mit Parallel Python zu verbrauchen