Installation de Debian sur un système embarqué avec console série ou console réseau (PCH)

J'ai un système embarqué basé sur Intel-Atom avec PCH que nous sums en train de développer. Dans l'environnement embarqué j'ai:

  • Une console série à travers le PCH ce qui signifie que cela ne fonctionne pas avec le kernel standard. (car CONFIG_SERIAL_PCH_UART_CONSOLE est requirejs)
  • Le lecteur SATA n'est disponible que dans l'environnement embarqué et ne peut pas être retiré pour l'installation.
  • Je peux démarrer via un lecteur USB.
  • Le système a ethernet via le PCH dont je n'ai pas encore confirmé le fonctionnement.

J'ai réussi à build un kernel Linux 3.16.7 personnalisé qui peut être démarré avec console=uartPCH0,115200 et affiche ensuite une console sur la ligne série.

Cependant, passer d'ici à une installation réelle semble problématique. Je ne parviens pas à convaincre l'installateur Debian d'être construit en utilisant mon kernel personnalisé.

Ma théorie actuelle est un double process d'amorçage où je bootstrap une installation dans un lecteur USB, puis le démarrer puis bootstrap une installation dans le lecteur SATA sur le système? De meilleures suggestions?

Je ne suis pas sûr s'il existe un moyen d'installer via une console réseau?

Le système nécessite le pilote e1000e qui, je suppose, sera embedded dans l'ISO standard de l'installateur Debian, mais jusqu'à présent, je n'ai pas trouvé de documentation très claire sur la façon de convaincre le système d'installation de démarrer puis d'ouvrir ssh / telnet.

Tout indice?

J'ai réussi à résoudre mon problème avec debootstrap, voici un raccourci rapide du process que j'ai suivi.

  1. démonter usb
  2. Partitionnez l'USB (4 Go)

     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. debootstrap jessie / media / usb http: //my.mirror/debian

     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. Edit / etc / fstab: (j'utilise nano pour l'édition normalement)

     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. Ménagère:

     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. Installer grub et 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. maintenant éditez / 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. éditez le file / etc / default / console-setup:

     CODESET="guess" FONTFACE= FONTSIZE= VIDEOMODE= 
  12. créez /etc/kernel-img.conf avec ceci à l'intérieur:

     image_dest = / do_symlinks = yes do_bootloader = yes do_bootfloppy = no do_initrd = yes link_in_boot = no 
  13. Installez maintenant le kernel personnalisé avec 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. Autres choses à faire avant de redémarrer (optionnel)

     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 

À ce stade, je pourrais démarrer l'usb sur mon système embarqué cible et répéter tout le process pour installer Debian sur le lecteur SATA. Évidemment, j'avais besoin d'installer des choses comme debootstrap sur le lecteur USB d'abord pour faciliter cela, mais c'était mineur.

Vous pouvez activer la console réseau de l'installateur Debian via la préconfiguration . Le Guide d'installation contient en fait l' exemple suivant:

 # 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. #di anna/choose_modules ssortingng network-console #di network-console/authorized_keys_url ssortingng http://10.0.0.1/openssh-key #di network-console/password password r00tme #di network-console/password-again password r00tme 

Vous devez décommenter le paramètre anna/choose_modules . Si vous souhaitez vous connecter avec votre key SSH, rendez la key publique accessible via une URL et supprimez le commentaire du paramètre network-console/authorized_keys_url . Si vous souhaitez utiliser un mot de passe, décommentez les deux autres parameters.

Bien sûr, vous devez également pré-configurer toutes les questions précédentes, car vous n'avez pas d'interface pour y répondre avant le démarrage de la console réseau par les parameters ci-dessus. Dans un environnement DHCP, cela signifie que vous aurez également besoin de quelque chose comme

 di debian-installer/language ssortingng en di debian-installer/country ssortingng US di debian-installer/locale ssortingng en_US.UTF-8 di keyboard-configuration/xkb-keymap select us 

Au lieu d'append un file preseed.cfg à votre initrd (que votre bootloader ne supporte peut-être pas directement), vous pouvez fournir tous ces parameters sur la command line du kernel comme

 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 

(voir la list des abréviations ).