Linux на 286?

Я искал то же самое в прошлом и нашел это:

tree.sh

#!/bin/sh
#######################################################
#  UNIX TREE                                                            
#  Version: 2.3                                       
#  File: ~/apps/tree/tree.sh                          
#                                                     
#  Displays Structure of Directory Hierarchy          
#  -------------------------------------------------  
#  This tiny script uses "ls", "grep", and "sed"      
#  in a single command to show the nesting of         
#  sub-directories.  The setup command for PATH       
#  works with the Bash shell (the Mac OS X default).  
#                                                     
#  Setup:                                             
#     $ cd ~/apps/tree                                
#     $ chmod u+x tree.sh                             
#     $ ln -s ~/apps/tree/tree.sh ~/bin/tree          
#     $ echo "PATH=~/bin:\${PATH}" >> ~/.profile      
#                                                     
#  Usage:                                             
#     $ tree [directory]                              
#                                                     
#  Examples:                                          
#     $ tree                                          
#     $ tree /etc/opt                                 
#     $ tree ..                                       
#                                                     
#  Public Domain Software -- Free to Use as You Like  
#  http://www.centerkey.com/tree  -  By Dem Pilafian  
#######################################################

echo
if [ "$1" != "" ]  #if parameter exists, use as base folder
   then cd "$1"
   fi
pwd
ls -R | grep ":$" |   \
   sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'
# 1st sed: remove colons
# 2nd sed: replace higher level folder names with dashes
# 3rd sed: indent graph three spaces
# 4th sed: replace first dash with a vertical bar
if [ `ls -F -1 | grep "/" | wc -l` = 0 ]   # check if no folders
   then echo "   -> no sub-directories"
   fi
echo
exit

Я хотел тот, который перечислил файлы также, и я узнал о sed и записал это:

fulltree.sh

#!/bin/sh
#############################################
# Script that displays a recursive formatted folder and file listing
# @author Corbin
# @site iamcorbin.net
#Folder Seperator
BREAK='-------------------------------------------------------------------------------------'

#Optional: if a folder is passed as an argument, run fulltree on that folder rather than the current folder
if [ "$1" != "" ]
   then cd "$1"
   fi
pwd

## Recursive Directory Listing with files
 # 1- preserve directories from being removed in 2 & 3
 # 2- strip first 4 columns
 # 3- strip size and date
 # 4- prepend '  -- ' on each line
 # 5- remove '  -- ' from directories
 # 6- remove extra lines
 # 7- Insert a line break after directories
 # 8- Put a | at the beginning of all lines
 # 9- Indent and process 1st level sub dirs
 #10- Indent and process 2nd level sub dirs
ls -Rhl | sed \
    -e 's/^\.\//x x x x 00:00 |-/' \
    -e 's/^\([^\ ]*.\)\{4\}//' \
    -e 's/.*[0-9]\{2\}:[0-9]\{2\}//' \
    -e 's/^/  -- /' \
    -e 's/\ \ --\ \ |-//'  \
    -e '/--\ $/ d' \
    -e '/^[^ ]/ i\'$BREAK \
    -e 's/^/| /' \
| sed -e '/[^/]*\//,/'$BREAK'/ s/^|/\t&/' -e '/^\t/,/'$BREAK'/ s/'$BREAK'/\t&/' -e 's/[^/]*\//\t\| /' \
| sed -e '/[^/]*\//,/'$BREAK'/ s/^\t|/\t&/' -e '/^\t\t/,/'$BREAK'/  s/'$BREAK'/\t&/' -e 's/[^/]*\//\t\t\| /' \
| sed -e '/[^/]*\//,/'$BREAK'/ s/^\t\t/\t&/' -e 's/[^/]*\//\t\t\t\| /'
echo $BREAK
15
14.01.2013, 15:25
9 ответов

Существуют части в ядре, записанном в блоке, и они должны были бы быть переписаны для поддержки 286.

Относительно ЛОСЕЙ в их FAQ они указывают, что это - подмножество ядра Linux, поэтому возможно, они портировали только абсолютные предметы первой необходимости.

3
27.01.2020, 19:50
  • 1
    Был математический сопроцессор для этих 286, 80287. –  Renan 14.01.2013, 18:05

Я думаю, что реальный ответ на мой вопрос - это:

Каждая главная архитектура ЦП (или главная версия этого) требует некоторого кода поддержки блока в дополнение к коду C.

Даже если бы Вы заставили GCC компилировать ядро Linux в 16-разрядные 286 машинных кодов, то там все еще пропустил бы существенные 16-разрядные 286 совместимых ассемблерных кодов.

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

На основе этого я предполагаю, что это точно, что, например, Лоси и подобные проекты делают, когда реализация Linux на 286 или другой архитектуре - они реализуют тот недостающий код поддержки блока.

3
27.01.2020, 19:50

Linux требует аппаратных средств поддержка VM86?

Я не парень блока, но согласно этому:

Как исходная реализация 32-разрядного расширения 8 086 архитектуры, 80 386 систем команд, модель программирования и двоичная кодировка являются все еще общим знаменателем для всех 32-разрядных x86 процессоров, это называют x86, IA-32 или i386-архитектурой, в зависимости от контекста.

Эти 386 представляют расширенную систему команд от этих 286, поэтому кто знает, как трудно порт был бы. Достаточно очевидно то, что почти никто не потрудился пробовать его... Я предполагаю, что можно спросить людей ЛОСЕЙ об этом.

2
27.01.2020, 19:50

Недавно ядро Linux отказалось от 386 как от поддерживаемой платформы, и ядро Linux НЕ поддерживает процессоры Intel 286.. 80286 не CPU на 32 бита, который требуется, чтобы загружаться.

1
27.01.2020, 19:50
  • 1
    Linux был первоначально записан на 386 в 1991. К тому времени 286's были уже стары, и основное дерево ядра никогда не имело бэкпортированного кода для поддержки 286. –  Flukas88 14.01.2013, 16:04
  • 2
    Это может быть, но вопрос состоял все еще в том, почему имеет место это? Не, почему решение было принято для отбрасывания поддержки 286/386 (который очевиден), но что является техническими причинами, что поддержка такого старого процессора не может легко быть сделана. Т.е. почему ядро ТРЕБУЕТ 32-разрядного ЦП? Почему ядро не может быть скомпилировано для 286? –  ioctlvoid 14.01.2013, 16:09
  • 3
    Ядро также не имело арифметического сопроцессора, поскольку это - требования? –  Bonsi Scott 14.01.2013, 17:52
  • 4
    Нет, ядро поддерживает математическую эмуляцию, по крайней мере, это сделало это прежде. Следовательно Вы могли даже выполнить ядро Linux на ЦП с поврежденным FPU. Однако 286 все еще поддерживали математический сопроцессор, 80287. –  ioctlvoid 24.01.2013, 18:30
  • 5
    В вырезанной части моего ответа я действительно указывал, что эмуляция реализована в ядре Linux. Это даже привыкло к порту Linux к S/390 (иначе Универсальный компьютер типа IBM), поскольку это не имело сопроцессора для операций с плавающей точкой в то время, когда это было портировано. –  Didi Kohen 26.06.2014, 19:35

Linux X86 не может быть легко обратно в 80286, потому что это 16-битный процессор, а Linux X86 требует 32-битного процессора.

Более конкретно, регистры на 286 все еще были всего лишь 16 бит. Ни один из регистров EX не был доступен. Кроме того, сегменты памяти и смещения были еще только 16 битами. Программы по-прежнему приходилось иметь дело с рядом / далеким кодом и данными.

Это означает, что Linux / 286 понадобится радикально разное ядро ​​и API пользователя, чем Linux / 386. Каждый исходный файл сборки и многие исходные файлы C должны были бы переписаны. Это было бы как разница между программированием для Win16 против Win32.

Короче говоря, вы не можете просто сказать GCC для компиляции для другого процессора. Каждый код кода должен быть переписан для 16-битной среды.

1
27.01.2020, 19:50

От того, что я прочитал канонический способ получить Linux, чтобы запустить на 80286, чтобы запустить его внутри виртуальной машины. Это то, что здесь сделала Фабрис Беллард . Вам придется реализовать виртуальную машину самостоятельно или портировать один.

0
27.01.2020, 19:50

80386 поддерживает пейджинг в дополнение к сегментации памяти, в то время как 286 поддерживает только сегментацию памяти. Linux сильно зависит от поддержки подкачки, то есть использует плоскую схему памяти, которая в основном устанавливает все сегментные регистры в 0 и использует подкачку для управления приложениями. Чтобы перенести Linux на 286, необходимо полностью переработать основной менеджер памяти для работы в сегментированном режиме без подкачки страниц, что, вероятно, потребует много работы.

3
27.01.2020, 19:50

Самая большая причина в том, что первоначальный проект GNU был нацелен на 32-битные машины (вроде рабочих станций Unix середины 1980-х), а не на поддержку чего-то меньшего, поэтому весь инструментарий GNU был непригоден для генерации 16-битного кода. Перенос раннего, тяжелого для ассемблера, использующего сегменты ядра Linux на 286-ю машину был бы проще, чем любая другая цель переноса - если бы у GCC была возможность производить код в защищенном режиме для 286-й машины. Но нацеливание GCC на защищенный режим 286 было бы огромным проектом для поддержки устаревшего процессора.

2
27.01.2020, 19:50

286 защищенный режим (PM) принципиально отличается от того, что предлагает 386. Подумайте о 286 PM как о прототипе, у которого было так много недостатков, что его почти никто никогда не использовал, и все это было полностью переработано с нуля для 386.

В нем не использовалась плоская модель памяти, она использовалась сегментированная модель, такая как реальный режим, что означало, что вам приходилось перепрыгивать через обручи, чтобы получить доступ к памяти в блоках размером более 64 КБ за раз.

Он был полностью несовместим со всеми (MS-DOS) программами, доступными в то время, поэтому, когда вы были в личном кабинете, вы не могли использовать ни одну из программ, к которым вы привыкли.

Вы также не могли снова выйти из защищенного режима, если не перезагрузили компьютер, поэтому производители придумали креативные решения, такие как установка флага в ОЗУ, а затем запись магического значения в контроллер клавиатуры, которое щелкало бы контактом сброса на ЦП. перезагрузить машину. Первое, что сделает BIOS, - это обнаружит установленный ранее флаг, после чего он вернется к исходной программе вместо выполнения процедуры POST, позволяя исходной программе продолжить работу после "выхода" из PM.

Это означало, что использование 286 PM не позволяло вам запускать обычные программы DOS без большого количества уловок. В то время, когда существовали только программы DOS, использование PM вообще не стоило усилий.

В итоге работать с 286 PM оказалось сложнее, чем просто жить без него и полагаться на EMS и XMS для доступа к дополнительной памяти. Некоторые из 286 материнских плат имели поддержку набора микросхем для EMS, так что вы могли использовать всю дополнительную системную память без PM.

Intel осознала эти недостатки и выпустила совершенно новый PM в 386. Модель с плоской памятью упрощает доступ к памяти в блоке размером до 4 ГБ. ЦП может входить и выходить из режима PM с помощью пары инструкций, поэтому не нужны неуклюжие протоколы перезагрузки. VM86 означает, что в большинстве случаев вам даже не нужно выходить из PM, вы можете запускать программы DOS, все еще находясь в PM.

Все эти улучшения означают, что 386 PM стал не только более функциональным, но и значительно более совместимым.

Другими словами, единственное, что объединяет защищенные режимы 286 и 386, - это название. Вот почему операционные системы PM обычно 386 или новее. Добавление поддержки для 286 PM было бы полностью независимым усилием, с небольшим количеством кода или без него, который можно было бы совместно использовать с совершенно другим 386 PM.

Напротив, 386 PM работает почти таким же образом вплоть до последнего из 32-битных процессоров, и даже после того, как вы запускаете 32-битное программное обеспечение на 64-битных процессорах.

4
27.01.2020, 19:50

Теги

Похожие вопросы