Montagem do Kernel
Vou explicar por que as imagens existentes não são adequadas. O principal problema deles é que eles são construídos no antigo kernel 3.4, e isso impõe imediatamente um limite na versão máxima do compilador 4 e no ubuntu 12.04 com certeza, não me lembro do 14.04. Portanto, se você quiser usar o software e as bibliotecas mais recentes, precisará reconstruir o kernel mais recente. Obviamente, você pode remover a restrição de compilar pelo menos a versão 5 do gcc nas fontes e corrigir o código para que ele possa ser construído na versão 4, mas isso ainda é uma porcaria. Sem mencionar o fato de que, no nosso caso, a parte gráfica do linux é supérflua.
Para começar com o kernel.org, lançamos o kernel 4.14.57; na época, era a última versão estável.
Na pasta de origem, crie um script que inicie a configuração:
Temos algo parecido com isto:

No menu arquivo em
/linux-4.14.57/arch/arm/configs/
selecione o arquivo
/linux-4.14.57/arch/arm/configs/
, existem as configurações básicas dos processadores da série sunxi. E então você precisa adicionar algumas configurações. I.e. Pesquisamos abaixo dos sinalizadores especificados e os configuramos.
Incorporamos tudo no kernel sempre que possível.
CONFIG_BLK_DEV_INITRD - em vez disso, não usaremos ramfs; em seguida, iniciaremos o Aufs (sistema de arquivos avançado de unificação em várias camadas). Em resumo, remova a caixa de seleção.
CONFIG_MEMCG - ligue como tudo dentro
CONFIG_BLK_CGROUP - ativar
CONFIG_CGROUP_DEVICE - ativar
CONFIG_CGROUP_CPUACCT - ativar
CONFIG_CGROUP_PERF - ligue como tudo dentro
CONFIG_EXPERT - basta selecionar e deixar tudo dentro por padrão
CONFIG_BLK_WBT - escolha como tudo dentro
CONFIG_PARTITION_ADVANCED - selecione dentro
CONFIG_SUN_PARTITION - selecione
ARCH_SUNXI - no interior deixamos apenas MACH_SUN5I
No suporte ao barramento, selecione CONFIG_PCI, pois o wifi USB requer suporte ao barramento PCI. Obviamente, quando o suporte a wifi está ativado, o kernel não requer um barramento pci; no entanto, sem esse wpa, o suplicante não encontra o wifi usb. Por que isso acontece, você pode examinar as profundezas da história, mas, a julgar por tudo, aconteceu historicamente; em geral, você precisa saber e lembrar disso.
CONFIG_CPU_FREQ_STAT - encontre e selecione
Dentro do CONFIG_NET, selecionamos WIRELESS e, em seguida, CONFIG_CFG80211 e lá marcamos CONFIG_NL80211_TESTMODE e CONFIG_CFG80211_WEXT, o último inclui nosso driver wifi para o suplicante.
CONFIG_MAC80211 - ligue a pilha de rede.
CONFIG_MAC80211_MESH - ativar
CONFIG_MAC80211_LED - bem, vamos escolher este
CONFIG_NFC - incluímos o que está dentro, exceto CONFIG_NFC_NCI.
CONFIG_PARPORT - ativar
CONFIG_LED_TRIGGER_PHY - selecione
CONFIG_REALTEK_PHY - selecione
CONFIG_WLAN - selecione
CONFIG_RTL8XXXU - selecione e dentro de CONFIG_RTL8XXXU_UNTESTED nós marcamos.
CONFIG_SERIO_SUN4I_PS2 - ativar
CONFIG_SERIAL_DEV_BUS - ligue-o e selecione SERIAL_DEV_CTRL_TTYPORT dentro.
CONFIG_USB_WUSB_CBAF - ativar
CONFIG_USB_WUSB_CBAF_DEBUG - ativar
CONFIG_USB_WDM - ativar
CONFIG_USB_SERIAL - selecione
CONFIG_UWB - selecione e dentro selecione CONFIG_UWB_HWA e CONFIG_UWB_I1480U e depois disso CONFIG_USB_WUSB aparecerá e também selecione.
Selecionamos CONFIG_STAGING e, dentro, selecionamos o driver CONFIG_RTL8192U e CONFIG_RTLLIB, e, no último, também selecionamos tudo. Eles são marcados por módulos por poesia depois, eles terão que ser parafusados separadamente.
CONFIG_R8188EU - selecione
Em geral, esse é um mínimo necessário de configurações do kernel; se você deseja ativar repentinamente outra coisa, leia atentamente as dependências desse parâmetro; caso contrário, haverá um erro ao compilar. Em seguida, você precisa iniciar a compilação:
make O=../olimex-kernel-4.14.57/ -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
Ao mesmo tempo, colete e divirta-se:
make O=../olimex-kernel-4.14.57 -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs
Este é apenas o caso, porque os arquivos de origem podem estar com erro, mesmo sendo iguais no kernel e no uboot. Portanto, não um para o outro funcionará.
O próximo passo é coletar os arquivos coletados na primeira seção do cartão SD:
-
/olimex-kernel-4.14.57/arch/arm/boot/
partir daqui, obtemos o kernel montado, chamado uImage e pesando apenas 4,7 metros.
-
/olimex-uboot/arch/arm/dts/
partir daqui, obtemos a árvore compilada, arquivo sun5i-a13-olinuxino.dtb
-
/u-boot-2018.05/
partir daqui, obtemos o script de inicialização compilado boot.scr.
Compilação Ubuntu
Como todas as partes necessárias para o download do rootfs estão preparadas, resta construir o ubuntu e, para isso, usamos a versão mais recente 18.04.
Primeiro, crie uma pasta no diretório raiz:
sudo mkdir /destrupt
Exatamente aqui, porque para aplicar o chroot posteriormente, você precisa de direitos completos, como no diretório raiz, ou registrar a configuração do chroot em qualquer outra pasta. Em resumo, é mais fácil criar uma pasta no diretório raiz e não se engana com a configuração.
Para montagem, precisamos dos seguintes pacotes, eles precisam ser fornecidos, se não:
- Qemu-user-static
- debootstarp
- schroot
Em seguida, execute a compilação do ubuntu:
sudo qemu-debootstrap
# usamos o qemu porque o qemu será instalado junto com o assembly do ubuntu, o que permitirá que você execute imediatamente o chroot na versão montada do ubuntu
--arch armhf
# tipo de arquitetura do processador
--variant=minbase
montagem
--variant=minbase
# na versão mínima
bionic
# build versão 18.04
/destrup/
# endereço onde coletar
http://ports.ubuntu.com/ubuntu-ports
# onde coletar fontes
Bem, como o ubuntu 18.04 já está montado, iremos agora para a configuração passo a passo:
1. Antes de começar, subimos para / destrrup / etc / apt / e editamos o sources.list, adicione o seguinte:
deb http://ports.ubuntu.com/ubuntu-ports bionic main restricted deb http://ports.ubuntu.com/ubuntu-ports bionic universe deb http://ports.ubuntu.com/ubuntu-ports bionic multiverse
Estas são apenas fontes de distribuição para o nosso processador.
2. Execute change root no ubuntu distrib recém-criado:
sudo chroot /destrup
Primeiro, defina a senha para o usuário root:
passwd root
Essa senha é necessária para efetuar login no momento da inicialização.
3. Instale os seguintes pacotes.
apt update
- pacotes de atualização
iputils-ping, dhcpcd5, iproute2, iw, networkd-dispatcher, wireless-tools, net-tools.
os pacotes para a rede:
iputils-ping, dhcpcd5, iproute2, iw, networkd-dispatcher, wireless-tools, net-tools.
Pacotes de sistema de rede:
linux-firmware, wpasupplicant, systemd, hostapd, kmod, udev.
Bem, e o resto, para que fosse conveniente editar e configurar tudo isso: nano, mc, usbutils, sudo.
E não vou descrever tudo, porque ele vai se estender por mais alguns artigos, apenas passaremos por alguns dos pacotes necessários para a configuração.
Configurando o suplicante wpa.
Para começar, analisaremos brevemente o que é o wifi usb.
O chip em si que fornece wifi (neste caso, rtl8188) é um ADC empacotado, com sua própria apresentação especial de dados e acesso a usb. isto é se você executar o comando lsmod sem o módulo r8188eu.ko carregado, veremos apenas que alguém acessou a porta usb. Quando o módulo é carregado, o nome do dispositivo já estará visível, ou seja, este módulo é apenas uma interface de programa para controlar este microcircuito.
A próxima biblioteca mais importante é lib80211.ko, o próprio padrão IEEE 802.11, em palavras simples, é a interpretação dos sinais de éter digital na representação de protocolos de ehternet específicos. Mas, para gerenciar tudo isso, você precisa instalar o firmware Linux, ele incluirá o driver -wext-, que fará tudo isso. Vamos conectá-lo ainda mais ao suplicante.
Vamos começar a configuração do suplicante.
Subimos para um ubunte recém-montado neste endereço:
/ etc / wpa_supplicant / wpa_supplicant.conf
E criamos um arquivo de configuração, se não, e se houver, corrigimos para este tipo:
ctrl_interface_group=0
Se tudo estiver configurado corretamente e os módulos descritos acima forem carregados, um arquivo de dispositivo será criado no endereço especificado na configuração (parâmetro ctrl_interface).
Configuração do Systemd
Configuramos o suplicante, mas ainda não há ninguém para executá-lo. É claro que você pode instalar o gerenciador de rede e aproveitar o ajuste automático, mas onde está o hardcore e o lixo. Em geral, puro tédio.
Portanto, subimos para o endereço:
/ etc / systemd / system/
E aqui criamos um arquivo chamado
network-wireless.service
se não, e se houver, começamos a editar:
[Unit]
Vamos nos debruçar sobre o lançamento do suplicante:
ExecStart=/sbin/wpa_supplicant
# path para acessar o suplicante
-B
# executado em segundo plano
-i wlx007005012449
# interface para executar, o mesmo arquivo de dispositivo
-D wext
nome do driver
-D wext
# para apito do firmware linux
-c /etc/wpa_supplicant/wpa_supplicant.conf
# endereço do arquivo de configuração do suplicante
Bem, em geral, tudo o que você precisa está configurado, vá para a instalação dos módulos.
Instalação de módulos.
Para instalar os módulos, vamos voltar um pouco, ou seja, para a pasta com a fonte do kernel e execute o comando para copiar os módulos do kernel para a pasta com o ubuntu de lá:
make O=../olimex-kernel-4.14.57 -j2 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install
Depois disso, todos os nossos módulos montados são copiados para o ubuntu em:
/ lib / modules / 4.14.57 / kernel
Agora, o mais importante é registrar o lançamento dos módulos copiados e todas as suas dependências, para que subamos para o endereço:
/ etc / modules
E execute o arquivo de módulos para edição e adicione os seguintes módulos:
michael_mic r8188eu # r8192e_pci rtllib rtllib_crypt_ccmp rtllib_crypt_tkip rtllib_crypt_wep r8192u_usb # lib80211 # IEEE 802.11
Agora resta copiar todo o ubuntu montado para a seção do cartão sd marcada no artigo anterior como uma seção para o ubuntu.
Depois disso, você pode inserir a unidade flash USB na placa, aplicar energia e sentar-se no seu uart para acessar seu gerenciamento ou entrar via ssh. Você pode adicionar um comando ao systemd para definir o endereço IP ou outra configuração em geral, e tudo o mais está em suas mãos ...
A primeira parte do artigoA segunda parte do artigo