Загружаем последнее ядро Linux с дискеты на 486-м компьютере

Автор оригинала: FozzTexx
  • Перевод

Ещё в августе 2019 года я проводил конкурс Sing-Along Week по синхронизации MIDI-файла с речевым синтезатором, который поёт песню. На своём складе я нашел MIDI-карту MQX-32M (клон Roland MPU-401), которую хотел использовать для преобразования MIDI-сигналов в интерфейс Apple II+ с синтезатором речи Echo II, но в конечном итоге использовал ноутбук с интерфейсом USB MIDI. Другой конкурс Pizza Week сподвиг меня заинтересоваться поиском компьютера 486, который бы поместился в коробку для пиццы, и вот предоставился подходящий случай.

Поиск на eBay был нелёгким, потому что не удавалось подобрать действительно хороший поисковый запрос. Я не стал утруждаться сохранением поиска, так как этот проект не приоритетный. Вместо этого время от времени что-то вдохновляло меня зайти на eBay и попробовать новые поисковые запросы. Пару недель назад я заметил этот 486-й компьютер и сделал предположение о размере корпуса, судя по высоте 5,25-дюймового отсека. Он довольно тонкий, и у него есть специальная карта, чтобы вставлять другие карты боком, а корпус короче, чем карта ISA. Хотя он и толще коробки для пиццы, но уже близко!

Материнская плата TMC PAT48PG4 поставляется с 32 МБ оперативной памяти (технически 36 МБ, в ней четыре 30-контактных SIM) и четырьмя картами: VGA, SoundBlaster, модем и многофункциональный I/O. Продавец проверил компьютер и продавал его как нерабочий, поскольку тот не проходил POST, хотя все карты работали. Мне в основном был нужен корпус, так что я особо не беспокоился. Конечно, когда я получил комп, нужно было проверить, действительно ли материнская плата мертва. У меня он тоже не заработал, но потом я обнаружил, что если нажать кнопку сброса, раздаётся несколько звуковых сигналов ошибки. Я попробовал другой источник питания, и систем ожила после нажатия кнопки Reset! Он все ещё не загружается из холодного выключения по нажатию кнопки питания, не уверен, там плохая крышка или небольшое повреждение батарейки (батарейка менялась раньше) мешает отключению линии Reset после включения питания. Тем не менее, он работал достаточно для того, чтобы исследовать его возможности.

Моя конечная цель — установить самый последний дистрибутив Linux и Python 3 на «большой» жёсткий диск. Поскольку у нас 486-й компьютер, установка текущего дистрибутива Linux — нетривиальная задача. Единственные дистрибутивы Linux, которые ещё поддерживают установку с дискет, довольно устарели. Обычно я полностью обходил установку с дискет и просто загружал старый компьютер через PXE, а затем устанавливал систему по сети. Я думал, что могу записать iPXE на дискету и вставить в ISA NIC, но iPXE просто зависает без каких-либо сообщений об ошибках сразу после загрузки с дискеты.

BIOS древний и мучается с поддержкой «большого» жёсткого диска, который я подключил. Размер диска 8,45 ГБ, но BIOS видит только 8,0 ГБ. Включение LBA в BIOS приводит к зависанию компьютера во время POST после обнаружения диска. Win98 fdisk настаивает, что диск всего 504 МБ. FreeDOS вообще его не видит. Я попробовал вставить в гнездо сетевой адаптер с XTIDE ROM, и XTIDE также настаивает на том, что диск не подключен.

Поскольку я хотел посмотреть, как Linux определит диск, мне нужно было найти способ загрузки Linux. Немного погуглив, я обнаружил опцию make tinyconfig, которая делает очень маленькое (но бесполезное) ядро, достаточно маленькое, чтобы поместиться на дискете. Я включил пару других опций, нашёл достаточно маленький initramfs и смог загрузить его на 486-й. Как и ожидалось, Linux без проблем видит диск и его полную ёмкость.

Следующий шаг — это фактически установить Linux на жёсткий диск. Я бы предпочёл не выпускать собственный дистрибутив, но, возможно, придётся это сделать. Другая возможность — загрузить Linux с дискеты, а затем загрузить ядро и initrd из текущего дистрибутива и kexec к нему. Но мне кажется, что это всё равно что заново изобрести iPXE.

Компиляция ядра Linux из исходного кода


Краткое изложение шагов по созданию образа на флоппи:

  • git clone git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

    • v5.8-rc2-1-g625d3449788f на время написания статьи
  • make ARCH=x86 tinyconfig
  • make ARCH=x86 menuconfig

    • Установить процессор на 486: CONFIG_M486=y

      • Processor type and features > Processor family > 486
    • Включить tty: CONFIG_TTY=y
      • Device Drivers > Character devices > Enable TTY
    • Включить printk: CONFIG_PRINTK=y

      • General Setup > Configure standard kernel features (expert users) > Enable support for printk
    • Включить initramfs: CONFIG_INITRAMFS_COMPRESSION_GZIP=y

      • General Setup > Initial RAM filesystem and RAM disk (initramfs/initrd) support > Support initial ramdisk/ramfs compressed using gzip
    • Включить ELF: CONFIG_BINFMT_ELF=y
      • Executable file formats > Kernel support for ELF binaries
  • make ARCH=x86 bzImage

Вам понадобится rootfs, возьмите образ system-image-486 from Aboriginal Linux, извлеките rootfs.cpio.gz.

Тестовая загрузка с qemu:

qemu-system-i386 -kernel arch/x86/boot/bzImage -initrd ../system-image-486/rootfs.cpio.gz

Создание пустого образа флоппи:

dd if=/dev/zero of=linux-boot.img bs=1k count=1440
mkdosfs linux-boot.img
syslinux --install linux-boot.img
mount -o loop linux-boot.img /mnt
cp arch/x86/boot/bzImage /mnt
cp rootfs.cpio.gz /mnt

Создание /mnt/syslinux.cfg:

DEFAULT linux
LABEL linux
 SAY Now booting the kernel from SYSLINUX...
 KERNEL bzImage
 APPEND initrd=rootfs.cpio.gz

Запись образа на дискету:

umount /mnt
fdformat /dev/fd0
ddrescue -f -D linux-boot.img /dev/fd0


См. также:

Средняя зарплата в IT

120 000 ₽/мес.
Средняя зарплата по всем IT-специализациям на основании 5 953 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
Реклама
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее

Комментарии 12

    +2
    Следующий шаг — это фактически установить Linux на жёсткий диск. Я бы предпочёл не выпускать собственный дистрибутив, но, возможно, придётся это сделать.

    Понимаю, что разговор с переводом, но мб buildroot это как раз то, что надо.
      0
      А там и вторая часть есть, с Gentoo
      +5
      Яркий образчик гуглоперевода.
      поиском компьютера 486, который бы поместился в коробку для пиццы

      Не «поместился бы в коробку», а «в корпусе типа коробка-для-пиццы».
      То бишь плоский и невысокий при этом.
      у него есть специальная карта

      Для riser card вполне установился перевод «райзер-карта».
      многофункциональный I/O

      А это обычно зовут мульткарта.
      могу записать iPXE на дискету и вставить в ISA NIC

      stick in — это просто вставить. То есть не дискету вставить в ISA-сетевушку, а воткнуть ISA-сетевушку в компьютер.

      Ну и т.п. Текст причёсывать и причёсывать.

      Если по теме — проще всего на более современном компьютере всё установить, а потом воткнуть уже установленную систему в 486. Как минимум время сэкономите. Хотя тут вопрос параметров жесткого диска встаёт.
      Либо взять именно устаревший дистрибутив, который поддерживает установку с дискет — debian etch, по-моему, последний из дебианов — а потом апгрейдиться.
        0
        вставить в ISA NIC

        Насколько я понимаю, имеется в виду вставить NIC в ISA.
          0
          Если переводить по значению, то можно и так — но тогда NIC надо было перевести.
          Потому что в оригинале «an ISA NIC» — это одно «слово».
            0
            Насколько я знаю, NIC — Network Interface Card, т.е. тупо сетевушка. На ISA были разные, из последних на чипсете RT8019, вроде.
              0
              Тут не про терминологию претензия, а про косой перевод.
            0
            Нет, имеется в виду именно «вставить ISA NIC [в матплату ПК]».
          0
          .
            0
            нашёл достаточно маленький initramfs
            initramfs-то нафига?
              0
              батарейка менялась раньше

              Не менялась, а была убрана. Т.е. плату могла повредить батарейка, но она( батарейка ) была удалена до того, как автор получил компьютер

                0

                Проще всего найти старый дистр с поддержкой дискет, установить дистр на жёсткий диск, затем обновиться до желаемого через чрут

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое