MOD Duo USB Ethernet
Este tutorial apresenta como configurar o MOD-Shield-ICNovaA20 (versão protótipo de desenvolvimento do MOD Duo) pra automaticamente durante o boot:
- carregar o g_ether: módulo de kernel com suporte a Ethernet via "USB Gadget"
- setar um IP fixo padrão (192.168.128.2) na interface de rede usb0
- subir um servidor DHCP que aloca dinamicamente IPs numa faixa livre de 192.168.128.10 a 192.168.128.20
Eu percebi que demora um pouco pro daemon dhcpd de fato alocar e entregar um IP. Some-se a isso o tempo de boot do device. Essas são coisas que vamos ter que pensar sobre como lidar.
A configuração abaixo me permite acessar o MOD por meio de: $ ssh [email protected]
Contents
TUTORIAL - USB-ETHERNET
Pra fazer essas configurações tudo utilizamos os mecanismos do systemd. Segue abaixo uma descrição do procedimento geral:
Ajuste nas configurações do Kernel
No commit 61fdb39 foi feito um ajuste dos parâmetros do arquivo script.fex/script.bin pra habilitar as portas USB com uma delas configurada como USB-OTG. Então para o módulo g_ether funcionar será necessário fazer o checkout do kernel:
$ git clone https://github.com/portalmod/linux-sunxi.git $ git checkout mod-sunxi-3.4-fsanches
E compilar:
$ make -j4 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage modules
Inserir um cartão SD, montá-lo manualmente e rodar o script de deploy:
$ sh ./deploy.sh
E depois bootar a placa usando esse cartão SD pra continuar o procedimento de configuração.
Para carregar o driver de Ethernet-USB automaticamente no boot
$ nano /etc/modules-load.d/usb_ethernet.conf
g_ether
Para setar um IP fixo na interface de rede usb0 automaticamente no boot
$ nano /etc/conf.d/net-conf-usb0
address=192.168.128.2 netmask=24 broadcast=192.168.128.255
$ nano /etc/systemd/system/[email protected]
[Unit] Description=Network connectivity (%i) Wants=network.target Before=network.target BindsTo=sys-subsystem-net-devices-%i.device After=sys-subsystem-net-devices-%i.device [Service] Type=oneshot RemainAfterExit=yes EnvironmentFile=/etc/conf.d/net-conf-%i ExecStart=/usr/local/bin/net-up.sh %i ExecStop=/usr/local/bin/net-down.sh %i [Install] WantedBy=multi-user.target
$ nano /usr/local/bin/net-up.sh
#!/bin/bash ip link set dev "$1" up ip addr add ${address}/${netmask} broadcast ${broadcast} dev "$1" [[ -z ${gateway} ]] || { ip route add default via ${gateway} }
$ nano /usr/local/bin/net-down.sh
#!/bin/bash ip addr flush dev "$1" ip route flush dev "$1" ip link set dev "$1" down
$ chmod +x /usr/local/bin/net-{up,down}.sh
$ systemctl enable network@usb0
Para subir um servidor DHCP automaticamente durante o boot
$ pacman -S dhcp $ cp /etc/dhcpd.conf{,.backup} $ nano /etc/dhcpd.conf
option routers 192.168.128.2; subnet 192.168.128.0 netmask 255.255.255.0 { range 192.168.128.10 192.168.128.20; }
E no arquivo /usr/lib/systemd/system/dhcpd4.service eu tive que editar a linha do ExecStart pra ficar assim:
[Unit] Description=IPv4 DHCP server After=network.target [Service] Type=forking PIDFile=/run/dhcpd4.pid ExecStart=/usr/bin/dhcpd -4 -q usb0 -pf /run/dhcpd4.pid KillSignal=SIGINT [Install] WantedBy=multi-user.target
$ systemctl enable dhcpd4