Прежде всего, отметьте, что это моя первая статья, и я надеюсь, что она вам понравится.
В этой серии мы будем подражать Линус Торвальдс, мы собираемся создать нашу операционную систему из 0. В этом первом эпизоде мы увидим загрузку и поместим на экран текст из нашего ядра.
В моем случае операционная система называется NextDive. Первое решение, которое мы должны принять, как только мы рассмотрим операционную систему, - это какой будет загрузчик?
Здесь есть несколько вариантов, и мы даже можем создать один сами; однако в этом уроке я собираюсь использовать GRUB, потому что большинство знает о нем более или менее кое-что. Мы создаем папку, которая будет корнем нашей операционной системы, и там мы создаем папку / boot / grub
mkdir nextroot && cd nextroot
mkdir -p boot/grub
Там мы создаем файл grub.cfg следующим образом:
menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}
В этом файле мы увидели, как GRUB в данном случае загрузит наше ядро в /next/START.ELF. Теперь мы должны создать наше ядро.
Для этого нам понадобится НКУ y ГАЗ (ассемблер проекта GNU, обычно поставляется с gcc). Итак, мы собираемся создать ядро.
Сначала мы создаем файл с именем kernel.asm. Этот файл будет содержать начальную точку нашего ядра, а также будет определять мультизагрузку (функция некоторых загрузчиков, таких как GRUB). Содержимое kernel.asm будет таким:
.text
.globl start
start:
jmp multiboot_entry
.align 4
multiboot_header:
.long 0x1BADB002
.long 0x00000003
.long -(0x1BADB002+0x00000003)
multiboot_entry:
movl $(stack + 0x4000), %esp
call NextKernel_Main
loop: hlt
jmp loop
.section ".bss"
.comm stack,0x4000
Все, что связано с мультизагрузкой, просто не соответствует спецификации. Все начнется при запуске, он вызовет multiboot_entry, мы определили мультизагрузочный заголовок в первых 4k и поместим его (с помощью movl).
Позже мы вызываем NextKernel_Main, которая является нашей функцией ядра C. В цикле делаем остановку для остановки компьютера. Это компилируется с:
as -o kernel.o -c kernel.asm
Теперь перейдем к программированию на C. Вы подумаете, что теперь все - кусок пирога, мы ставим Printf en main и все, мы сделали это.
Ну нет, так как Printf y main это функции, которые определены операционной системой, но мы их создаем! Мы можем использовать только те функции, которые определяем сами.
В следующих главах я буду говорить о том, как установить нашу собственную библиотеку C (glibc, bionic, newlibc), но время от времени. Мы обсуждали, что хотим вывести текст на экран, что ж, посмотрим, как мы это сделаем.
Есть два варианта: один - вызвать BIOS а другой - напрямую управлять памятью экрана. Мы собираемся сделать последнее, потому что это яснее из C, и это также позволит нам сделать это, когда мы войдем в защищенный режим.
Мы создаем файл NextKernel_Main.c со следующим содержимым:
int NextKernel_Main()
{
char *str = "NextDivel says Hello World", *ch;
unsigned short *vidmem = (unsigned short*) 0xb8000;
unsigned i;
for (ch = str, i = 0; *ch; ch++, i++)
vidmem[i] = (unsigned char) *ch | 0x0700;
return 0;
}
Этим мы напрямую манипулируем памятью VGA и по буквам мы это пишем. Мы компилируем, отключив stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding
Если вы зашли так далеко, вы захотите попробовать свою новую операционную систему прямо сейчас, но мы еще не закончили. Нам нужен небольшой файл, который сообщает компилятору, где в файле оставить каждый раздел. Это делается с помощью сценария компоновщика. Создаем link.ld:
ENTRY(start)
SECTIONS
{
. = 0x00100000;
.multiboot_header :
{
*(.multiboot_header)
}
.text :
{
code = .; _code = .; __code = .;
*(.text)
. = ALIGN(4096);
}
.data :
{
data = .; _data = .; __data = .;
*(.data)
*(.rodata)
. = ALIGN(4096);
}
.bss :
{
bss = .; _bss = .; __bss = .;
*(.bss)
. = ALIGN(4096);
}
end = .; _end = .; __end = .;
}
Этим мы определяем положение каждого раздела и точку входа start, которую мы определили в kernel.asm. Теперь мы можем объединить всю эту смесь:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
Теперь мы копируем START.ELF в / next внутри нашей папки, которая имитирует корень нашей операционной системы. Переходим в корневую папку нашей новой операционной системы с консолью и проверяем наличие двух файлов: один /boot/grub/grub.cfg и другой /next/START.ELF.
Мы переходим в верхний каталог и вызываем утилиту создания ISO с именем GRUB. grub-mkrescue
grub-mkrescue -o nextdivel.iso nextroot
Как только мы это сделаем, у нас будет ISO. Этот ISO можно открыть на компьютерах x86 (Тоже 64 бита) и виртуальные машины. Чтобы проверить это, я собираюсь использовать QEMU. Мы называем QEMU из командной строки:
qemu-system-i386 nextdivel.iso
Начнет Морской БИОС а позже у нас будет GRUB. Позже, если все будет правильно, мы увидим нашу фразу.
Вы подумаете, что это сложно, я отвечаю: да, это так.
На самом деле создать операционную систему сложно, и эта здесь не делает ничего полезного. В следующих главах мы увидим, как обрабатывать цвета на экране, зарезервировать память и, если получится, как получить данные с клавиатуры.
Если кто-то не хочет копировать все сюда, у меня есть репозиторий по адресу GitHub (подробнее) с операционной системой NextDive. Если вы хотите скомпилировать NextDive вам просто нужно иметь git и cmake:
git clone https://github.com/AdrianArroyoCalle/next-divel
cd next-divel
mkdir build && cd build
cmake ..
make
make DESTDIR=next install
chmod +x iso.sh
./iso.sh
qemu-system-i386 nextdivel.iso
Я призываю вас сотрудничать с NextDivel, если у вас есть время и желание создать операционную систему. Возможно, даже превосходит Linux ... время покажет.
:O
Торвальдс передал Эндрю С. Таненбауму операционную систему Minix (производную от UNIX) и улучшил ее.
Таненбаум поссорился с Линусом, они оскорбляли друг друга. Таненбаум говорит, что за Microkernel будущее (HURD, Minix new cone Microkernel).
http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html
Это лучший пост, который я когда-либо видел в этом блоге. Я уже хочу знать, что еще делать.
Быть под впечатлением
Действительно впечатляет !!
ФУУУУУУА!
Это самый увлекательный пост, который я когда-либо видел, хе-хе. Поздравляю Адриана, статья про шлюху! гипер интересно !!! 🙂
Я согласен. Представляю себе такую ситуацию:
Опытный пользователь GNU / Linux (со счастливым лицом):
«Я уже знаю, как скомпилировать свой Gentoo»
Ботан (с презрением): «Пфф, я создал свой собственный дистрибутив ...»
Да, я могу создать свой собственный дистрибутив Linux. Фактически в нем я разрабатываю initramfs и ядро для встраиваемого Linux. Создать операционную систему - это не то же самое, что и дистрибутив linux. Первое намного сложнее, почти невозможно, второе, как вы сказали, может быть любым, даже Ubuntu с измененным логотипом xD. Поэтому я бы оставил это так:
Опытный пользователь GNU / Linux (со счастливым лицом)
- Я уже знаю, как скомпилировать свой Gentoo
Полубук
- Пфф, я с нуля следил за Linux и сделал свой собственный дистрибутив
Ботан (с презрением)
- pff, потому что я программировал ядро на ассемблере и на C
Saludos!
Мне это интересно, в ожидании следующих глав.
Некоторое время назад я видел этот учебник, он для C ++
https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System
Спасибо за ссылку, посмотрю.
Мне нужна операционная система, на 100% совместимая с графикой AMD: /
Windows
хахаха, в Windows Catalyst нет поддержки OpenGL, хотя в Linux я не могу использовать всю графическую мощь, я буду ждать, чтобы увидеть, что произойдет!
Просто подождите, пока клапан уничтожит рынок
Волшебный, идеальный, отличный вклад, похоже, отличная серия постов 🙂
Буах, я хотел бы знать, как программировать, чтобы помочь вам, просто как способ практиковать знания, которые вы изучаете, а один помогает. Сейчас я оставлю вас девиз, чтобы привлечь внимание к проекту, как только вы закончите «Use NextDivel, порно выглядит так же (или лучше).»
Муооооолааа !!!!
Очень хорошая статья, но интересно, почему вы не следили за проектом Linux From Scratch?
привет
Ну, Linux от Scratch в порядке, и вы можете сказать, что он ваш, но на самом деле он очень механический:
-Скачать шрифты
-Затей их
-Составить
-Установить
-Следующий
Здесь, даже если в итоге результат будет хуже, вы можете сказать, что просмотрели все файлы.
Как видно из моего предыдущего комментария, потому что он не имеет такого же уровня сложности. Кроме того, linux с нуля, вопреки своему названию, на самом деле не создает систему с нуля. Создание системы с нуля - это ее программирование самостоятельно, написание собственного ядра, а не ядра Linux, если возможно, даже собственного загрузчика вместо grub, lilo, syslinux и т. д. Хотя LFS - немалый подвиг и довольно сложный процесс, он даже близко не подходит к программированию собственного ядра ...
Кроме того, я согласен с AdrianArroyo Calle, что это слишком механически, я когда-то читал это, и вы в конечном итоге отказываетесь от шестой страницы, они также говорят вам использовать какие версии пакетов, потому что в противном случае инструкции не работают (что показывает отсутствие гибкости, на мой взгляд). Я думаю, что лучше иметь что-то свое, скомпилировать пакеты, которые вы хотите, даже запрограммировать некоторые, скомпилировать ядро Linux и спокойно.
Saludos!
уууоооооо !! Я никогда не получал столько постов, сколько этот.
Пожалуйста, продолжайте 😀
Не знаю, что случилось:
ошибка: не найден мультизагрузочный заголовок.
ошибка вам нужно сначала загрузить ядро
Если это меня утешает, я совершил ту же ошибку. Попробуйте использовать исходники, которые есть в GitHub, там ошибка уже решена. В любом случае, я думаю, если вы измените строку grub.cfg с «multiboot /next/START.ELF» на «kernel /next/START.ELF», это может сработать. Я точно не знаю.
Во-первых, великолепный вход 🙂
У меня такая же проблема с загрузкой ядра из grub. Даже используя исходники GitHub или меняя мультизагрузку для ядра ...
ошибка: не найден мультизагрузочный заголовок.
ошибка: не загружено ядро
Вы используете clang в качестве компилятора? Измените его на gcc
Вы не забыли использовать скрипт компоновщика? Компоновщику (в нашем случае ld) необходимо знать, где в файле он будет помещать каждую вещь. В этом случае заголовок мультизагрузки должен быть в начале.
Вы используете систему CMake? Если вы его используете, я думаю, он не подведет.
Если у вас не сработает, я попробую найти другое решение.
[+100]
Просто прекрасно !!!
Это действительно круто 🙂
Снимаю шляпу. Впечатляющий пост. Поздравляю.
Вау!
Было бы замечательно, если бы вы могли открывать приложения, созданные на HTML5 и Javascript, без использования браузера, возможно ли это?
Я говорю о том, что они похожи на нативные приложения.
Так что программировать под эту операционную систему было бы легко 😀
В данном случае я не собираюсь этого делать, потому что для этого требуется гораздо больше работы, но есть операционная система под названием «is», которая выполняет то, что вы говорите. Фактически, командная строка - это JavaScript, а окна отрисовываются с использованием функций JavaScript Canvas. Инженеры Nintendo сделали это, и теперь это открытый исходный код.
http://code.google.com/p/es-operating-system/
Валла, спасибо за информацию 😀
я взгляну
Тот, кто может сделать свою собственную ОС, может умереть мирно, так как интеллектуальный уровень, которого он должен достичь с ее помощью; Это заставляет вас отказаться от рая или ада.
Кусок проводки.
до сих пор никто не сделал ничего, что можно было бы назвать достойной операционной системой, созданной с нуля, даже Linux Torvalds, как вы говорите в начале, так как это началось из исходных кодов Unix, а все остальное создано совместно с другими чем один человек, жизнь очень коротка и начинать с нуля немыслимо ни для кого, даже если требуется обратное, это демонстрируется во многих ошибках, допущенных при копировании и вставке Linux Torvalds
Исходники unix закрыты, использование minix ... что-то другое.
а те кто QDOS что сделал?
были на чем-то основаны?
Из того, что я вижу, у кого нет собственной операционной системы, потому что они не хотят, хахахаха.
А теперь серьезно, очень интересно! Многое выходит за рамки моих ограниченных познаний в области программирования, но я с нетерпением буду читать другие части этой серии.
Спасибо за сообщение!
Ты оставил меня с лицом О_О ... без намерения недооценивать чей-либо вклад, это самый "профи", который я видел за последнее время. Привет.
Очень хорошая статья, Адриан. Продолжайте, пожалуйста…
Вы шутите в День дураков? Не говорите «Эмуляция Линуса Торвальдса: создайте свою собственную операционную систему с нуля». Я не думаю, что это сложно для тех, кто делает карьеру в каком-нибудь технологическом институте или университете; но для меня я начинающий лучник (есть те, кто называет нас «нубами», но я считаю себя более новичком, несколько ленивым), это звучит как не ступить на землю. В любом случае, ДАННАЯ СТАТЬЯ создает много любопытства, БЕЗ СОМНЕННОГО УВАЖЕНИЯ И УВАЖЕНИЯ ЕГО РЕДАКТОРА, ПОЗДРАВЛЯЕМ; Первое, что я сделаю, это постараюсь хоть немного разобраться в этом ценном материале.
СПАСИБО, Адриан Арройо Калле, отличная работа и благородная передача знаний.
LEL Отличный пост, так держать.
Какой замечательный пост, вот это я пропустил desde linux. Замечательный.
Отличный пост, большое спасибо.
Я не понял, что делает файл link.ld, может мне кто-нибудь объяснить?
Файл link.ld сообщает компоновщику (в данном случае ld), в какой позиции в итоговом файле должна находиться каждая часть кода. Мы также определяем точку входа, поскольку, поскольку у нас нет операционной системы, мы не можем использовать main как обычную программу, в этом случае мы выбираем функцию запуска.
Здорово весь твой пост! Жду 7! Что делать, если у меня есть сомнения, например, если я просто хочу запустить алгоритм без ОС, как мне узнать, что я могу использовать, а что нет?
Если вы используете его таким образом, вы не сможете использовать что-либо из stdlib, которое практически все используют (без malloc, free, printf, scanf, strcmp и т. Д.). Все должно быть реализовано прямо из памяти или ASM. Возможно, в более высокой главе я покажу вам, как установить библиотеку C для операционной системы. Если вы используете C ++, вы не можете использовать исключения и операторы new и delete (и, конечно же, многое другое).
Я думаю что Эсто он может дать вам лучшее представление о том, как это сделать.
Здравствуйте, около 5 лет назад я следил за аналогичной публикацией и разработал микроядро, которое запускается таким же образом, у него есть некоторые аспекты, которые нужно улучшить, но это может вас заинтересовать, оно работает в защищенном режиме, выполняет многозадачность и выполняет виртуализацию памяти, в последнее время я работал над драйвером диска и приводом компакт-диска, чтобы сделать его устанавливаемым, а не просто запускать на живом компакт-диске ... Приветствую.
Уважаемый, у меня ошибка при выполнении команды:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
link.ld: 5 синтаксическая ошибка
collect2: ошибка: ld вернул 1 статус выхода
link.ld
. = 0x00100000;
.multiboot_header: {
* (. multiboot_header)
}
В строке 5 ошибки не вижу, у кого-то такое же происходит?
Я работаю с виртуализированным debian wheezy в virtualbox
добавить ";" в конце * (. multiboot_header)
Отличная инициатива, я обязательно буду следить за главами этого поста, чтобы многому у него научиться. Большое спасибо за то, что нашли время научить нас. Единственной деталью в этой связи следует отметить, что Линус Торвальдс не является создателем какой-либо операционной системы, он создал Ядро системы GNU / Linux (то, что использовалось в других ОС), которое до сих пор достойно, но важно отдать должное Ричарду Столмену, создавшему большую часть ОС.
Большое спасибо за ваш вклад, и я надеюсь, что вы примете во внимание мое наблюдение.
Я уже какое-то время возился с этой темой, заинтересовался, как только прочитал заголовок. но сообщение продолжает получать
ошибка: не найден мультизагрузочный заголовок.
ошибка вам нужно сначала загрузить ядро
Я загрузил то, что беру, в репо на github https://github.com/rkmax/GenyOS
То же самое происходит и со мной. Вы нашли решение?
вопрос Я начал вводить синтаксис, и строка меню говорит мне, что команда не найдена, кто может сказать мне, почему
вот что я делаю
ЧЕРНЫЙ @ ЧЕРНЫЙ-pc: ~ / blackroot $ menuentry «NextDivel» {
menuentry: команда не найдена
Содержимое этого содержимого следует вводить не в командной строке, а в созданном вами файле с именем grub.cfg.
Отличная статья, спасибо!
Захватывающий…!! это как недостающее звено.
Мне нравятся ваши руководства по эмуляции LInus Torvalds, но есть один шаг, который я не понимаю, а именно:
Теперь мы копируем START.ELF в / next внутри нашей папки, которая имитирует корень нашей операционной системы. Переходим в корневую папку нашей новой операционной системы с консолью и проверяем наличие двух файлов: один /boot/grub/grub.cfg и другой /next/START.ELF.
Мы переходим в верхний каталог и вызываем утилиту создания ISO с GRUB под названием grub-mkrescue.
Может ли кто-нибудь объяснить мне это: p
Просто чтобы сгенерировать минимальный ISO, который может загрузить GRUB, мы копируем ядро (/ ISO, любая папка) /next/START.ELF и файл конфигурации GRUB в (/ ISO, любая папка) / boot / grub / grub.cfg. Как только это будет сделано, мы еще не установили GRUB на ISO, и есть утилита, которая генерирует ISO из папки и устанавливает GRUB под названием grub-mkrescue. Тогда мы, наконец, получим загрузочный ISO с установленным GRUB, который может считывать конфигурацию для последующего правильного выполнения START.ELF. Не знаю, объяснил ли я себя, но то, что мы делаем, является своего рода ложной файловой системой, с помощью которой мы генерируем ISO.
Hottie
Что ж, на самом деле посмотрите на новую систему не так много, но если улучшить Linux, например, создать exonucleus linux с серверным компонентом, который действует как микроядро, если это необходимо, то есть структура exo с поведением micronucleus, которая будет супер и Linux .
Другое дело, что я не эксперт в программировании, всего несколько дрянных C ++ и немного java, мне было бы достаточно дать программе ядра Linux модуль, распотрошить его, модифицировать и т. Д.
Вне всяких сомнений, уже в отпуске надо делать.
Этот хороший, а в какой программе он его проектирует и кодирует?
пожалуйста, дайте мне этот ответ
При компиляции из вашего git я получаю:
[jmponce @ jar build] $ cmake ..
- Создание каталога NextRoot
- Генерация скрипта ISO
сделать DESTDIR = следующая установка
./изо.ш
- Найден Doxygen: / usr / bin / doxygen (найдена версия "1.8.9")
- Настройка выполнена
- Генерация сделана
- Файлы сборки записаны в: / home / jmponce / next-divel / build
[jmponce @ jar build] $ make
Сканирование зависимостей целевого START.ELF
[7%] Создание объекта ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
[14%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
[21%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
[28%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
[35%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
[42%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
[50%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
[57%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
[64%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
[71%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
[78%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
[85%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
[92%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
[100%] Создание объекта CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
Связывание исполняемого файла CXX START.ELF
/ usr / bin / ld: Несовместимый /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a пропускается при поиске -lgcc
/ usr / bin / ld: не удается найти -lgcc
collect2: ошибка: ld вернул статус выхода 1
src / CMakeFiles / START.ELF.dir / build.make: 402: невыполненные инструкции для цели 'src / START.ELF'
make [2]: *** [src / START.ELF] Ошибка 1
CMakeFiles / Makefile2: 106: невыполненные инструкции для целевого src / CMakeFiles / START.ELF.dir / all
make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Ошибка 2
Makefile: 117: Ошибка в инструкциях для цели «все»
make: *** [all] Ошибка 2
Ошибка, похоже, заключается в том, что он не может найти llibgcc, поскольку у вас 64-разрядная версия, и в настоящее время система сборки вынуждена использовать 32-разрядную версию. Вам следует установить пакет совместимости в свой дистрибутив или лучше использовать 32-битную систему.
У меня 32 бита, и я получаю ту же ошибку, вы имеете в виду операционную систему или архитектуру? у меня 64-битная, но я использую 32-битную Ubuntu, не спрашивайте, финансовые проблемы, этим я говорю все.
Отличная тема, ждем большего размаха. С уважением
Отлично, я надеюсь на большее
Здравствуйте, я молодой посол, который хочет создать операционную систему, поддерживающую все программы и платформы, чтобы разработчикам не приходилось иметь мощные машины, приложения или программы на ПК.
Вот почему меня интересует этот пост, но когда я загружаю ваш git или пытаюсь его создать, все работает, пока я не выполню команду ./iso.sh или grub-mkrescue -o nextdivel.iso nextroot, вы получите эту ошибку
«Grub-mkrescue: предупреждение: ваш xorriso не поддерживает« –grub2-boot-info ». Некоторые функции были отключены. Используйте xorriso 1.2.9 или новее.
grub-mkrescue: предупреждение: ваш xorriso не поддерживает «–grub2-boot-info». Ваш образ ядра слишком велик. Загрузка с диска отключена. Используйте xorriso 1.2.9 или новее .. »
Я действительно понятия не имею, так как я много знаю о приложениях и веб-сетях, но я ничего не знаю о grub
Возможно, вам потребуется обновить программу xorriso в вашем дистрибутиве. Какой дистрибутив и версию вы используете?
Я использую xubuntu 14.04lts и пытаюсь запустить xorriso, но оболочка сообщает мне, что не может ее найти, и я получаю apt-get install xorriso, хотя я искренне ожидал ответа, потому что у меня был плохой опыт установки вещей, которые я не знаю в linux, хе-хе . Я обновлю его прямо сейчас и расскажу, что случилось
Затем установите xorriso из программного центра или просто из терминала выполните «sudo apt-get install xorriso»
Я уже сделал все, что вы мне сказали, и как с git, так и с моим, я получаю xorriso 1.3.2: манипулятор файловой системы RockRidge, проект libburnia.
Ток привода: -outdev 'stdio: nextdivel.iso'
Текущий медиа: файл stdio, перезаписываемый
Статус СМИ: пусто
Сводка СМИ: 0 сеансов, 0 блоков данных, 0 данных, 1901 мин. Свободного места
В образ ISO добавлен каталог '/'='/tmp/grub.OEqSzV'
xorriso: ОБНОВЛЕНИЕ: 546 файлов добавлены за 1 секунду
xorriso: FAILURE: невозможно определить атрибуты исходного файла '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': нет такого файла или каталога
xorriso: ОБНОВЛЕНИЕ: 546 файлов добавлены за 1 секунду
xorriso: aborting: -abort_on 'FAILURE' обнаружил 'FAILURE'
И кордрой, я не понимаю, что моя структура - это /nextroot/boot/grub/grub.cfg и nextroot / next / START.ELF
Спасибо, я готов двигаться дальше, друг помог мне и сказал, что я сделал не так, это была организация каталога, так что я уладил это и все
Извините, не могли бы вы сказать, какую процедуру вы выполнили, поскольку я получаю сообщение об ошибке: ничего не загружается: нет такого файла или каталога
отсутствует загрузочное устройство.
С Уважением! Я собирался попросить вас об одолжении, если бы вы могли отправить мне электронное письмо с тем, что вы здесь объясняете, я немного запутался, и мне нужно сравнить то, что у меня есть, с тем, что вы объясняете, возможно, мне не ясно, создание grub. cfg происходит в терминале gcc или где именно? большое спасибо друг!
Вы создаете файл grub.cfg с помощью любого текстового редактора и должны сохранить его в PROJECT_FOLDER / boot / grub / grub.cfg.
Привет, Адриан, прежде всего поздравляю вас и благодарим за ваш вклад.
Вы знаете, я делаю это для практики, и я начал собирать это после вашего обучения, однако после начала я обнаружил первую ошибку
$ as -o ядро.o -c ядро.asm
bash: as: команда не найдена ...
Подобные команды:
'са'
'ac'
Я работаю над Fedora 20, и я не могу найти решение в этом отношении, я был бы признателен за ваше руководство о том, следует ли мне что-то менять в gcc или gas
заранее спасибо
Вы должны установить GAS, чтобы я мог видеть код ошибки. У меня под рукой нет Fedora, но теоретически, если вы выполните yum install gcc-c ++, вы установите весь пакет GCC и GNU, как обычно, вместе с ним.
Я с вами, я кое-что знаю о C ++, C # (хотя последний не очень полезен в этом вопросе) плохо то, что мне до сих пор не хватает опыта, я никогда не работаю с языком C, ваша публикация отличная, Мне нечего сказать, если у меня будет время, я увижу. Спасибо.
Большое спасибо за большую помощь….
Я люблю Linux, это лучший район, правда для моих окон - мусор, потому что я знаю, что создатель Linux является создателем окон
Привет, я получаю сообщение об ошибке в grub:
ошибка: файл /next/START.ELF не найден
ошибка: сначала нужно загрузить ядро
Не могли бы вы мне помочь и погуглили, но я не могу найти
Пожалуйста, как мне сделать так, чтобы он показывал сообщение HELLO WORLD? Я новичок и все еще недостаточно знаю
Со мной происходит следующее:
gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
/ usr / bin / ld: kernel.o: перемещение R_X86_64_32 против символа `stack 'не может использоваться при создании объекта PIE; перекомпилировать с -fPIE
/ usr / bin / ld: ошибка последней ссылки: непредставимый раздел на выходе
collect2: ошибка: ld вернул 1 статус выхода