/
macOS USB Workaround

macOS USB Workaround

We're currently having issues getting USB passthrough of the programmer to work properly through VirtualBox. See ELEC-405 - Getting issue details... STATUS  for context. Since the SSH solution can be done in a shell script, I'm documenting the process here.

Setup

You should already have set up your Vagrant box as specified in Setup.

  1. Save the following as macos.sh.

    macos.sh
    #!/usr/bin/env bash
    
    # Disable USB filters - you may need to manually remove them
    sed -i -e 's:BetterUSB.usbfilter_add:# BetterUSB.usbfilter_add:g' Vagrantfile
    vagrant reload
    
    # Build and install setsid
    git clone https://github.com/tzvetkoff/setsid-macosx.git
    make -C setsid-macosx
    mv setsid-macosx/setsid /usr/local/bin
    rm -rf setsid-macosx
    
    # Install brew non-interactively - copied from https://brew.sh/
    ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null
    brew install openocd
    brew install make
    brew install minicom
    # Install gcc-arm-embedded 6-2017-q2-update (gcc7 segfaults)
    brew cask install https://raw.githubusercontent.com/caskroom/homebrew-cask/4d16a06d09bc695c6a7252843106c5d7adce5877/Casks/gcc-arm-embedded.rb
    
    # Generate SSH keypair and copy the public key into the host
    vagrant ssh -c "cat /dev/zero | ssh-keygen -q -N '' && echo 'Generated SSH keypair'"
    vagrant ssh -c 'cat ~/.ssh/id_rsa.pub' >> ~/.ssh/authorized_keys
    
    # Disable password authentication on host SSH server for safety, then enable Remote Login (SSH)
    sudo sh -c "sed -i -e 's:#PermitRootLogin prohibit-password:PermitRootLogin no:g' /etc/ssh/sshd_config \
    && sed -i -e 's:#PasswordAuthentication yes:PasswordAuthentication no:g' /etc/ssh/sshd_config \
    && sed -i -e 's:#ChallengeResponseAuthentication yes:ChallengeResponseAuthentication no:g' /etc/ssh/sshd_config \
    && sed -i -e 's:UsePAM yes:UsePAM no:g' /etc/ssh/sshd_config \
    && systemsetup -setremotelogin on"
    
    # Add environment variables so we can SSH from the guest
    vagrant ssh -c "echo 'export MACOS_SSH_USERNAME=\"$(whoami)\"' >> ~/.bashrc"
    vagrant ssh -c "echo 'export MACOS_SSH_BOX_PATH=\"$(pwd)\"' >> ~/.bashrc"
    # Switch OpenOCD script dir since it's different when installed by brew
    echo "export OPENOCD_SCRIPT_DIR=/usr/local/share/openocd/scripts/" >> ~/.bashrc
    
    # Set up paths and add a .bash_profile for SSH
    echo "[[ -f ~/.bashrc ]] && source ~/.bashrc" >> ~/.bash_profile
    echo 'export PATH="/usr/local/bin:/usr/local/opt/make/libexec/gnubin:$PATH' >> ~/.bashrc
    source ~/.bashrc
  2. Run the following in your terminal:

    macOS Terminal
    # Move to your box directory
    # cd ~/box
    ./macos.sh

Related content

Setup for Apple Silicon
Setup for Apple Silicon
More like this
Setup
More like this
MSXII Development Environment
MSXII Development Environment
More like this
Board Validation
Board Validation
More like this
Running HelloWorld on Hardware (Deprecated)
Running HelloWorld on Hardware (Deprecated)
More like this
SSH into Firmware PC
SSH into Firmware PC
More like this