使用串行控制台或网络控制台 (PCH) 在嵌入式系统上安装 Debian

使用串行控制台或网络控制台 (PCH) 在嵌入式系统上安装 Debian

我有一个基于 Intel-Atom 和 PCH 的嵌入式系统,我们正在忙于开发它。在嵌入式环境中我有:

  • 通过 PCH 的串行控制台,这意味着它不适用于标准内核。 (按CONFIG_SERIAL_PCH_UART_CONSOLE要求)
  • SATA驱动器仅在嵌入式环境中可用,不能取出安装。
  • 我可以通过 USB 驱动器启动。
  • 该系统确实有通过 PCH 的以太网,我尚未确认它是否可以工作。

我已经成功构建了一个自定义的 Linux 3.16.7 内核,可以启动该内核console=uartPCH0,115200,然后在串行线路上显示控制台。

然而,从这里转移到实际安装似乎是有问题的。我无法说服 debian-installer 使用我的自定义内核构建。

我当前的理论是双引导过程,我首先将安装引导到 USB 驱动器中,然后引导它,然后将安装引导到系统上的 SATA 驱动器中?还有更好的建议吗?

我不确定是否有某种方法可以通过网络控制台安装?

该系统需要 e1000e 驱动程序,我认为该驱动程序将内置于标准 debian 安装程序 ISO 中,但是到目前为止,我无法找到关于如何说服安装系统启动然后打开 ssh/telnet 的非常清晰的文档。

有什么提示吗?

答案1

我设法通过 debootstrap 解决了我的问题,这里是我所遵循的过程的快速概述。

  1. 卸载USB
  2. 对 USB (4GB) 进行分区

    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. 挂载 /dev/sdb1 /media/usb
  5. debootstrap jessie /媒体/USBhttp://my.mirror/debian

    I highly recommend setting up something like apt-cacher
    
  6. chroot /媒体/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. 编辑 /etc/fstab : (我通常使用 nano 进行编辑)

    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. 家政:

    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. 安装grub和内核

    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. 现在编辑/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. 编辑 /etc/default/console-setup :

    CODESET="guess"
    FONTFACE=
    FONTSIZE=
    VIDEOMODE=
    
  12. 创建 /etc/kernel-img.conf 并在其中包含以下内容:

    image_dest = /
    do_symlinks = yes
    do_bootloader = yes
    do_bootfloppy = no
    do_initrd = yes
    link_in_boot = no
    
  13. 现在使用 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. 重启前要做的其他事情(可选)

    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
    

在此阶段,我可以在目标嵌入式系统上启动 USB,并再次重复整个过程以在 SATA 驱动器上安装 debian。显然,我需要首先在 USB 驱动器上安装 debootstrap 之类的东西来促进这一点,但这只是次要的。

答案2

您可以通过以下方式激活 Debian 安装程序的网络控制台预播。安装指南实际上包含以下内容例子:

# 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

您必须取消注释该anna/choose_modules设置。如果您想使用 SSH 密钥登录,请通过某个 URL 访问公钥并取消注释该network-console/authorized_keys_url设置。如果您想使用密码,请取消注释其他两项设置。

当然,您还必须预先准备好前面的所有问题,因为在按上述设置启动网络控制台之前,您没有界面可以回答这些问题。在 DHCP 环境中,这意味着您还需要类似的东西

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

preseed.cfg您可以在内核命令行上提供所有这些设置,而不是向 initrd添加文件(您的引导加载程序可能不直接支持)

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

(参见缩略语表)。

相关内容