experiments
December 1

Боже, храни андеграунд!

Кросс-компиляция из Windows 11 в.. Linux 0.11 от 1991 года. Нет, вашей любимой Убунты тогда еще не было даже в планах.

Обои - очередной шедевр от нейросетей, 21й век же.

Из исторического readme от 12/9/1991:

1. WHAT IS LINUX 0.11 
     LINUX 0.11 is a freely distributable UNIX clone. It is almost 
fully System V compatible. LINUX has been written from scratch, and 
therefore does not contain any AT&T or MINIX code--not in the kernel, 
the compiler, the utilities, or the libraries. For this reason it can 
be made available with the complete source code via anonymous FTP. 
Sorrily, it runs only on 386/486 AT-bus-machines. EISA will probably do 
too, but you need an AT-Bus controller for your harddisk. 

     Version 0.11 is still a beta release, but it provides almost full 
functionality. Various users have been able to compile bigger projects 
like bison/flex by only changing the makefile to their needs, and these 
tools are fully functional. 

Вообщем дела давно минувших дней, а весь прикол подобной кросс-компиляции заключается в тщательном подборе тулчейна, поскольку современные компиляторы разумеется не дадут собрать приложение под столь древнюю версию Линукса.

Спасибо дяде neozeed, который знает толк в особых удовольствиях и подготовил для вас весь тулчейн, по мотивам его статьи я и пишу этот пост.

Для начала будет необходимо скачать тулчейн и образ Linux 0.11 сразу с эмулятором Qemu.

Если по ссылкам файлы более не будут доступны, их можно скачать на нашем канале в Телеграм.

Тулчейн

Распаковываете архив каталог без пробелов, что-то простое вроде:

c:\work\linux011 

Нужно будет исправить файл env.bat, который находится в корне тулчейна, поскольку в нем задаются полные пути:

set path=c:\work\linux011\aoutgcc\bin;c:\mingw\msys\1.0\bin;%PATH%
set GCCLIB=c:\work\linux011\aoutgcc\lib
title GCC-1.40_a.out

MinGW ставить не нужно и путь к нему можно убрать — он очевидно использовался для компиляции самого тулчейна из исходников.

Запуск компиляции необходимо производить с предварительным запуском env.bat:

В каталоге test находится тестовое приложение и скрипт для сборки с_.cmd

Вызывается он просто:

c_ hello

Результат работы:

Должен появиться файл hello в этом же каталоге test:

Для того чтобы перекинуть собранный бинарник в эмулятор с Linux 0.11 автор делает хитрый финт ушами: упаковывает бинарник в tar, а затем монтирует этот tar в качестве floppy-диска в эмуляторе Qemu.

Создаем архив:

..\bin\tar.exe cvf hello.tar hello

Сам архиватор находится в каталоге bin, вместе с компилятором и линковщиком, после запуска должен появиться файл hello.tar.

Эмулятор

Распаковываем архив с эмулятором, кладем в соседний каталог с тулчейном:

c:\work\linux011 

Должно получиться что-то вроде:

Наконец запускаем эмулятор, указав собранный архив в качестве параметра:

cd c:\work\linux011\qemu-12.5.i386 
qemu -L pc-bios -hda linux-0.11-devel-060625.qcow2 -no-reboot -m 16 -k en-us -fda ..\aoutgcc\test\hello.tar

Произойдет запуск эмулятора и выбор устройства для загрузки:

Нужно нажать цифру 1, произойдет запуск в "Single Mode", без авторизации:

Теперь необходимо со стороны запущенного Linux выполнить:

tar -xvf /dev/fd0

Это распакует архив, подключенный в качестве floppy-диска, появится файл hello — та самая сборка, созданная в Windows:

Дальше все совсем просто:

chmod +x ./hello

Установит бит запуска, ну и собственно запуск:

./hello

Вот оно, чудо кросс-компиляции: