Разработка операционных систем: ядро, оболочка, сеть, кросс-компиляция и т. Д.
1 ответ

Ограничения реального режима в части разработки драйверов устройств

Мой запрос касается разработки драйвера устройства. Если я хочу использовать реальный режим для создания игрушечной ОС, но решаю написать сетевой стек / набор сетевых драйверов, достаточно ли места для этого? Должен ли я сделать как DOS и перейти в …
28 май '15 в 19:01
1 ответ

CPUID на нескольких ядрах /NUMA

Я работаю над обнаружением процессора и общим кодом обнаружения среды для моей хобби ОС. Есть ли когда-нибудь случай, когда CPUID нужно вызывать несколько раз? То есть, если система имеет несколько ядер, должна ли ОС вызывать CPUID на каждом ядре? Т…
19 дек '11 в 22:00
1 ответ

Ошибка синтаксиса встроенного ассемблера

Я получал какую-то странную ошибку при разработке своей операционной системы. Я делал драйвер ввода-вывода, используя outb а также inb, мой outb Функция выглядит следующим образом: static inline void outb(uint16_t port, uint8_t val) { __asm("outb %0…
09 фев '16 в 08:52
1 ответ

Операция ввода-вывода с отображением в память (в процессоре Intel) с использованием команды ввода / вывода... все еще кэшироваться?

Будет ли кэшированная операция ввода-вывода в память (в процессоре Intel) по-прежнему кэшироваться, если диапазон адресов сопоставленного ввода-вывода печатается как запись с обратной записью (WB), даже если я использую инструкцию ввода / вывода? РЕ…
15 янв '11 в 06:51
1 ответ

От каких стандартных функций C зависит libgcc?

У меня есть кросс-компилятор с libgcc, скомпилированный для целевой платформы, но никакой стандартной библиотеки C нет. От каких функций зависит libgcc и где я могу найти эту информацию?
20 апр '14 в 19:04
0 ответов

Intel VT-x: физическое и линейное адресное пространство не совпадает

В настоящее время я разрабатываю ядро ​​x86-64 с нуля для исследовательских целей. Цель состоит в том, чтобы виртуализировать мою собственную ОС с использованием технологии виртуализации Intel (VT-x). Однако я наткнулся на чрезвычайно странную пробл…
22 окт '18 в 22:48
1 ответ

Чтение сектора из-за сбоя диска

Я пытаюсь сделать очень простой двухэтапный загрузчик и сталкиваюсь с проблемами при чтении второго этапа. Когда я пытаюсь использовать int 13h с ah = 2, Прерывание завершается ошибкой с кодом возврата 1 (недопустимая команда). Я компилирую с nasm и…
05 май '18 в 20:57
1 ответ

Как настроить новый сегмент стека для программ в x86, чтобы отделить от моего ядра?

Я занимаюсь разработкой 32-битной ОС, и мне нужно иметь возможность настраивать НОВЫЕ сегменты данных / сегменты стека для программ. Однако я не могу найти ЛЮБОЙ хорошей информации о том, как использовать эти регистры сегментов в защищенном режиме. …
11 янв '13 в 23:36
2 ответа

Ядро не загружается по правильному адресу

Хорошо, я вырвал оставшиеся волосы у меня с этой проблемой... По сути, я пытаюсь разработать очень простую хобби ОС. Операционная система будет работать на платформе X86 без дискеты FAT12. Прежде чем протестировать его на своем компьютере, я создаю …
31 июл '13 в 05:20
0 ответов

Как установить 16-битную версию libcc

$uname -i x86_64 $ uname -r 4.15.0-041500-generic Я пытаюсь скомпилировать, что получает карту памяти системы. OSDev показывает некоторый код, как это можно сделать. Код выглядит следующим образом: // running in real mode may require: __asm__(".code…
31 май '18 в 12:55
3 ответа

Вычислить следующий кластер

Недавно я прочитал несколько хороших руководств по разработке ОС на BrokenThorn: это хорошая серия OSDev. У меня возникли проблемы с пониманием идеи "вычисления следующего кластера", когда я хочу загрузить второй этап нашего загрузчика. Код является…
12 дек '12 в 15:59
1 ответ

Вызов прерываний с использованием регистра

Я пытаюсь вызвать некоторые прерывания из защищенного режима в C++, возвращаясь в реальный режим, вызывая прерывание и возвращаясь обратно в защищенный режим. Я получаю ошибку: C2400: неправильный тип операнда Я пытаюсь это исправить, но я не знаю, …
19 май '16 в 17:33
1 ответ

Сборка Почему, когда я изменяю код, результат не загружается

Я разрабатываю операционную систему на ассемблере. Во время разработки я изменяю небольшую часть кода, и выходной файл не является загрузочным. Есть код: BITS 16 start: mov ax, 07C0h ; Set up 4K stack space after this bootloader add ax, 288 ; (4096 …
15 дек '18 в 19:03
0 ответов

Загрузка с USB-накопителя с QEMU

Я играю с моей хобби операционной системой. Он имеет простой загрузчик на основе BIOS, который использует int 0x13; Ах =0x42 для загрузки данных с USB-накопителя. Мой загрузчик отлично читает сектора, если я запускаю qemu следующим образом: $ qemu-s…
29 июн '17 в 15:46
1 ответ

Адресация в защищенном режиме

Я пробую учебники по разработке загрузчиков. Я могу читать загрузчик stage2, используя соглашения FAT12. Сейчас я пытаюсь загрузить ядро ​​в реальном режиме, а затем скопировать его по адресу 0x0100000. Я получаю тройную ошибку при копировании + пер…
03 фев '18 в 16:48
1 ответ

Сборка INT 0x13: ошибка при попытке чтения с диска

Всякий раз, когда я запускаю это в QEMU, я, похоже, не получаю сообщение об ошибке, но сообщение не выводится на экран, поэтому я не уверен, что на самом деле происходит, чего я не вижу. Вот мой код: [org 0x7c00] mov bp, 0x8000 mov sp, bp mov si, na…
25 июл '15 в 05:25
0 ответов

Write28 Dosent всегда записывать на жесткий диск / диск

У меня проблема с этой функцией Write28(), которая записывает в драйвер ATA (драйвер жесткого диска) в режиме 28-битного PIO. Ну, во-первых, вы можете увидеть в моем kernel.C++ здесь, я называю это: ret_chr_arr file_contents=filealgo.File_to_char(sa…
24 сен '16 в 03:28
1 ответ

Не могу показать верхнюю и нижнюю память

ОС Dosent по какой-то причине отображает верхнюю и нижнюю память. Как вы можете видеть здесь, в Викитете Обнаружения Памяти: http://wiki.osdev.org/Detecting_Memory_(x86), там написано Обратитесь к mbd->mem_lower для обычной памяти (например, физичес…
22 авг '16 в 03:43
0 ответов

Странное поведение компоновщика: перемещение сокращено до нужного

У меня есть скрипт компоновщика для ядра с двумя абсолютными символами: _kernel_start а также _kernel_end, Однако я получаю ошибку перемещения компоновщика только для _kernel_end: In function `kernel::mem::mm::setup_memorymap': /home/virtlink/kernel…
08 апр '15 в 10:11
0 ответов

Перезагрузите цикл при включении прерываний с помощью sti

Всякий раз, когда я пытаюсь включить прерывания, используя sti По команде, эмулятор мгновенно перезагружается. Я выполняю следующий код в защищенном режиме при загрузке: void* idt = (void*) 0x00000; struct { uint16_t length; void* base; } __attribut…
13 май '17 в 08:45