A arte do xamanismo ou firmware personalizado para o Olinuxino. Kernel e Ubuntu Parte 3

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:

#!/bin/sh make O=../olimex-kernel-4.14.57 #      -j2 #     ARCH=arm #      CROSS_COMPILE=arm-linux-gnueabihf- #   xconfig #   

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 #   modules #   LOADADDR=0x40008000 #        

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 #        ctrl_interface=/var/run/wpa_supplicant #       #       usb  #      ap_scan=1 #wpa_supplicant   ,  - network={ ssid="SSID_" psk=" " key_mgmt=WPA-PSK #   proto=WPA2 pairwise=CCMP } 

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] #       Description=Wireless network connectivity Wants=network.target After=sys-subsystem-net-devices-wlx007005012449.device Before=network.target BindsTo=sys-subsystem-net-devices-wlx007005012449.device [Service] #    Type=oneshot RemainAfterExit=yes ExecStart=/sbin/ifconfig wlx007005012449 up #   ExecStart=/sbin/wpa_supplicant -B -i wlx007005012449 -D wext -c /etc/wpa_supplicant/wpa_supplicant.conf #   ExecStart=/sbin/dhcpcd wlx007005012449 #  dhcp   [Install] WantedBy=multi-user.target 

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 #     INSTALL_MOD_PATH=/destrup #    

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 artigo
A segunda parte do artigo

Source: https://habr.com/ru/post/pt435586/


All Articles