Eu tenho um sistema embarcado rodando um kernel 3.10.9 com o Ubuntu 12.04.5. Devido às muitas vulnerabilidades de segurança que agora existem com o antigo sistema operacional Ubuntu, estou tentando atualizar o sistema operacional Ubuntu ou o sistema operacional Ubuntu e o kernel. Consegui atualizar e atualizar o sistema, mas a solução precisa ser empacotada para que eu possa usá-lo com um servidor intermitente.
O processo atual de atualização consiste em um PEEDI que programa um gerenciador de inicialização personalizado no eMMC do dispositivo. Depois que o dispositivo é reinicializado, ele procura e se conecta ao servidor TFTP, monta o driver de rede do servidor NFS e faz o download das imagens binárias para o uboot, kernel, arquivo dtb e rootfs. Em seguida, ele pisca as imagens no eMMC. Este processo funciona com um kernel 3.10.9 e um SO Ubuntu 12.04.5.
Sabemos que há quatro componentes principais no sistema embarcado:
1) dtb
2) imagem do u-boot
3) kernel
4) sistema de arquivos raiz
Meu pensamento inicial foi tentar simplesmente substituir o sistema de arquivos e deixar todos os outros componentes intocados, se possível. Isso parece funcionar e por que compilar um novo kernel e dtb se não for necessário?
Primeiro eu tentei atualizar e atualizar o dispositivo in-loco indo para o ports.ubuntu e depois trabalhando o sistema de arquivos. O sistema de arquivos 14.04.5 LTS resultante é então colocado no servidor TFTP e usado no processo de flashing (nenhum dos outros componentes listados acima é tocado). Depois de concluir o processo de flash e reiniciar o dispositivo, o dispositivo aparentemente está funcionando e executando o Ubuntu 14.04.5 LTS. A primeira coisa que notei está desativada são as interfaces de rede - antes do upgrade do sistema de arquivos, eu tinha eth0 e wlan0. Após o upgrade, agora tenho eth1 e wlan1. Em geral, isso não parece ser um grande problema, mas eu tenho um software aplicativo que depende de que essas interfaces sejam consistentes, então isso não funcionará. Além disso, eu realmente não sei a extensão do problema.
eth1 Link encap:Ethernet HWaddr d8:b8:f6:01:00:3d
inet addr:10.1.134.22 Bcast:10.1.134.255 Mask:255.255.255.0
inet6 addr: fe80::dab8:f6ff:fe01:3d/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:77 errors:0 dropped:0 overruns:0 frame:0
TX packets:59 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:9868 (9.8 KB) TX bytes:8537 (8.5 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1296 (1.2 KB) TX bytes:1296 (1.2 KB)
wlan1 Link encap:Ethernet HWaddr 88:33:14:1c:6e:61
inet6 addr: fe80::8a33:14ff:fe1c:6e61/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:14 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1808 (1.8 KB) TX bytes:2196 (2.1 KB)
O eth1 funcionará quando configurado, mas não consigo conectar o wlan1.
root@device-01036e:~# ifup wlan1
Internet Systems Consortium DHCP Client 4.2.4
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Listening on LPF/wlan1/88:33:14:1c:6e:61
Sending on LPF/wlan1/88:33:14:1c:6e:61
Sending on Socket/fallback
DHCPDISCOVER on wlan1 to 255.255.255.255 port 67 interval 2 (xid=0xaceefe56)
DHCPDISCOVER on wlan1 to 255.255.255.255 port 67 interval 5 (xid=0xaceefe56)
DHCPDISCOVER on wlan1 to 255.255.255.255 port 67 interval 4 (xid=0xaceefe56)
No DHCPOFFERS received.
No working leases in persistent database - sleeping.
Em seguida, tentei baixar o código-fonte do kernel do link e compilá-lo com a configuração padrão.
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- defconfig
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
O novo kernel foi então colocado no servidor intermitente junto com o 14.04.5 tarred OS e passou para o dispositivo. Este dispositivo é inicializado e mostra as versões esperadas do kernel e do SO, mas as interfaces de rede não estão funcionando corretamente, especificamente o wlan.
sudo ifconfig wlan0 up
wlan0: ERROR while getting interface flags: No such device
Perguntas:
1) O DTS / DTB precisa ser atualizado se um novo kernel é compilado (o hardware permanece inalterado)?
2) O que fez com que as interfaces parassem de funcionar corretamente?
3) Qual é a maneira mais fácil de produzir um sistema de arquivos atualizado, dada a configuração intermitente mencionada? É possível fazer isso sem tocar nos outros componentes?