Instalando o Debian no sistema embarcado com console serial ou console de rede (PCH)

2

Eu tenho um sistema embarcado baseado no Intel-Atom com PCH que estamos desenvolvendo. No ambiente embarcado eu tenho:

  • Um console serial através do PCH, o que significa que isso não funciona com o kernel padrão. (como CONFIG_SERIAL_PCH_UART_CONSOLE é obrigatório)
  • A unidade SATA está disponível apenas no ambiente incorporado e não pode ser removida para instalação.
  • posso inicializar via drive USB.
  • O sistema tem ethernet através do PCH que ainda não confirmei para funcionar.

Eu consegui criar um kernel Linux 3.16.7 personalizado que pode ser inicializado com console=uartPCH0,115200 e, em seguida, exibe um console na linha serial.

No entanto, passar daqui para uma instalação real parece ser problemático. Eu não consigo convencer o debian-installer a ser construído usando o meu kernel personalizado.

Minha teoria atual é um processo de bootstrap duplo onde eu primeiro inicializo uma instalação em uma unidade usb e, em seguida, inicializo isso e, em seguida, inicializo uma instalação na unidade SATA no sistema? Alguma sugestão melhor?

Não tenho certeza se existe alguma maneira de instalar por meio de um console de rede?

O sistema requer o driver e1000e, que eu suponho que esteja embutido no ISO padrão do instalador Debian, mas até agora não consegui encontrar uma documentação muito clara sobre como convencer o sistema de instalação a inicializar e depois abrir o ssh / telnet.

Alguma dica?

    
por Heinrich du Toit 22.07.2015 / 11:56

2 respostas

5

Consegui resolver o meu problema com o debootstrap, aqui está um resumo rápido do processo que segui.

  1. desmontar usb
  2. Particione o USB (4 GB)

    Zap out GPT with gdisk, as my board didn't want to boot GPT.
    Created just one linux partition, nothing else.
    I had lots of problems getting a usb drive bootable on my embedded system.        
    
  3. mkfs.ext4 / dev / sdb1

  4. mount / dev / sdb1 / media / usb
  5. joomie do debootstrap / media / usb link

    I highly recommend setting up something like apt-cacher
    
  6. chroot / media / usb

    Mount all these: 
    mount -t devtmpfs dev /dev
    mount -t devpts devpts /dev/pts
    mount -t proc proc /proc
    mount -t sysfs sysfs /sys
    
  7. Edite / etc / fstab: (eu uso nano para edição normalmente)

    proc /proc proc defaults 0 0
    sysfs /sys sysfs defaults 0 0
    UUID=xxxx / ext4 errors=remount-ro 0 1
    
    to write UUID into file use: blkid -o value -s UUID /dev/sdb1 >> /etc/fstab
    
  8. manutenção da casa:

    apt-get install locales
    dpkg-reconfigure locales
    apt-get install console-setup
    dpkg-reconfigure keyboard-configuration (optional?)
    apt-get install console-data
    passwd root
    adduser linuxuser
    
  9. Instale o grub e o kernel

    apt-get install grub-pc
    I installed grub into both /dev/sdb and /dev/sdb1 but you can use install-mbr for /dev/sdb I think
    apt-get install linux-image-686-pae
    
  10. agora edite o / etc / default / grub:

    uncomment GRUB_TERMINAL=console
    add GRUB_GFXPAYLOAD_LINUX=text
    to GRUB_CMDLINE_LINUX_DEFAULT add: console=tty0 console=ttyPCH0,115200
    run upgrade-grub2 
    
  11. edite o arquivo / etc / default / console-setup:

    CODESET="guess"
    FONTFACE=
    FONTSIZE=
    VIDEOMODE=
    
  12. crie /etc/kernel-img.conf com isto dentro:

    image_dest = /
    do_symlinks = yes
    do_bootloader = yes
    do_bootfloppy = no
    do_initrd = yes
    link_in_boot = no
    
  13. Agora instale o kernel personalizado com o dpkg -i

    For me 2 options was important:
    CONFIG_SERIAL_PCH_UART=y
    CONFIG_SERIAL_PCH_UART_CONSOLE=y
    although I did highly customize the kernel after that.
    Currently I am compiling 3.14 with the rt-patch from linux-source-3.14 I downloaded out of wheezy-backports
    
  14. Outras coisas a fazer antes de reiniciar (opcional)

    edit /etc/modules to force drivers to load
    edit /etc/network/interfaces
    echo myHostName > /etc/hostname
    apt-get install telnetd
    apt-get install openssh-server
    

Nesta fase eu poderia inicializar o usb no meu sistema embarcado de destino e repetir todo o processo novamente para instalar o debian na unidade SATA. Obviamente, eu precisava instalar coisas como o debootstrap na unidade usb primeiro para facilitar isso, mas isso era menor.

    
por 24.07.2015 / 09:57
2

Você pode ativar o console de rede do Instalador Debian via pré-configuração . O Guia de instalação, na verdade, contém o seguinte exemplo :

# Use the following settings if you wish to make use of the network-console
# component for remote installation over SSH. This only makes sense if you
# intend to perform the remainder of the installation manually.
#d-i anna/choose_modules string network-console
#d-i network-console/authorized_keys_url string http://10.0.0.1/openssh-key
#d-i network-console/password password r00tme
#d-i network-console/password-again password r00tme

Você precisa descomentar a configuração anna/choose_modules . Se você quiser fazer o login com sua chave SSH, torne a chave pública acessível através de algum URL e descomente a configuração network-console/authorized_keys_url . Se você quiser usar uma senha, descomente as outras duas configurações.

É claro que você também precisa pré-configurar todas as perguntas anteriores, porque você não tem nenhuma interface para respondê-las antes que o console de rede seja iniciado pelas configurações acima. Em um ambiente DHCP, isso significa que você também precisará de algo como

d-i debian-installer/language string en
d-i debian-installer/country string US
d-i debian-installer/locale string en_US.UTF-8
d-i keyboard-configuration/xkb-keymap select us

Em vez de adicionar um arquivo preseed.cfg ao seu initrd (que seu gerenciador de inicialização pode não suportar diretamente), você pode fornecer todas essas configurações na linha de comando do kernel, como

linux language=en country=US locale=en_US.UTF-8 keymap=us anna/choose_modules=network-console network-console/authorized_keys_url="http://..." initrd=initrd.gz

(veja a lista de abreviaturas ).

    
por 26.07.2015 / 21:29