Как Linux взаимодействует с оборудованием вокруг процессора?

Как Linux взаимодействует с оборудованием вокруг процессора?

Мой вопрос больше касается разработки Unix/Linux, чем самого администрирования.

Я думаю, что это больше для программистов Unix/Linux низкого уровня, чем для администраторов. Это поможет мне начать разработку ядра и/или понять разработку системы Linux

Какая конкретно информация об оборудовании мне нужна, чтобы начать изучать, как Linux взаимодействует с периферийными устройствами и модулями оборудования. Например, архитектура шины и как взаимодействовать с контроллерами.

Также я хотел бы отметить, что в большинстве сред сейчас виртуальная машина — это то, на чем работает Linux. Так что то, что видит ОС под ней, это то, что я имел в виду.

Мне нужны какие-нибудь ссылки, пожалуйста, или как начать изучать эту тему.

Я знаю основные инструкции x86, но мои вопросы больше касаются контроллеров памяти и шин вокруг самого процессора; я имею в виду модель программатора в современной среде параллельного программирования.

решение1

То, как это работает, во многом зависит от архитектуры/машины. Linux (ядро) создает древовидную схему доступных устройств и их подключений при загрузке (и по мере появления/исчезновения подключенных устройств). Откуда берется информация, зависит от базового оборудования.

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

Например, работая с оригинальным ПК (или его эмуляцией), вы получаете доступ к рядузафиксированныйустройства, к которым в некоторых случаях осуществляется доступзафиксированный(или почти) путь. Некоторые Unice, которые я имел удовольствие наблюдать, поставлялись с объектным кодом для системы, для добавления/перенастройки устройств требовалось редактирование некоторых файлов C, перекомпиляция и перелинковка ядра. Тонны веселья.

решение2

Купите себе что-то вроде макетной платы z80 и попробуйте что-нибудь послать через последовательный порт или запустите эмулированный компьютер IBM с DOS и сделайте то же самое, используя DOS IRQ.

На старых машинах Z80 с текстовым дисплеем, отображаемым в памяти, можно было легко отобразить хотя бы текст.

Подобные вещи можно (легко или немного сложнее или непрактично) делать, используя: ассемблер, Pascal, Ada, C (почему для этого следует использовать C++), BASIC и довольно много других языков, но ожидайте МНОГО РАБОТЫ!

Если вы хотите программировать на C/Assembler/Ada (я думаю, на Pascal), то для сравнительно современных процессоров, которые могут поддерживать приличный объем памяти, обратите внимание на MIPS2000 и его сородичей (большой объем памяти, который легко обеспечивает прямой доступ к 512 МБ ОЗУ). Я говорю это, потому что это семейство процессоров имеет довольно простую архитектуру памяти.

Проверьте исходники grub!

Если вам интересно, как загрузить программу (загрузчик) при загрузке, или посмотрите игры, созданные с помощью grub, например, Space Invaders (клон Space Invaders, работающий на «голом железе»).

Вы можете загрузить grub-invaders на виртуальной машинесм. grub-invaders

Связанный контент