Емуляція Лінуса Торвальда: Створіть власну операційну систему з нуля (I)

Перш за все, прокоментуйте, що це моя перша стаття, і я сподіваюся, вам вона сподобалась.

Лінус Торвальс щасливий

У цій серії ми будемо наслідувати Лінус Торвальдс, ми збираємося створити нашу операційну систему з 0. У цьому першому епізоді ми побачимо завантаження і розмістимо текст на екрані з нашого ядра.

У моєму випадку викликається операційна система NextDivel. Перше рішення, яке ми повинні прийняти, як тільки розглянемо операційну систему, - яким буде завантажувач?

Тут є кілька варіантів, і ми навіть могли б створити один самі; однак у цьому підручнику я збираюся використати 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. Тепер ми повинні створити наше ядро.

Для цього нам знадобиться GCC 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. Ви подумаєте, що зараз все - шматок пирога, ми ставимо a printf en основний і все, ми це зробили.

Ну ні, оскільки printf y основний це функції, які визначає операційна система, але ми їх створюємо! Ми можемо використовувати лише ті функції, які ми самі визначаємо.

У наступних розділах я розповім про те, як розмістити нашу власну бібліотеку 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 = .;
}

Цим ми визначаємо позицію кожного розділу та точку входу, старт, яку ми визначили у 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

Почнеться SeaBIOS а пізніше ми матимемо GRUB. Пізніше, якщо все правильно, ми побачимо нашу фразу.
Ви подумаєте, що це важко, я вам відповідаю, так це.

Справді створити операційну систему складно, і ця тут не робить нічого корисного. У наступних главах ми побачимо, як обробляти кольори на екрані, резервувати пам’ять і, якщо зможу, як отримувати дані з клавіатури.

Якщо хтось не хоче копіювати все тут, я маю сховище на GitHub (більш докладно) з операційною системою NextDivel. Якщо ви хочете скомпілювати NextDivel ви просто повинні мати 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 ... час покаже.


Зміст статті відповідає нашим принципам редакційна етика. Щоб повідомити про помилку, натисніть тут.

85 коментарі, залиште свій

Залиште свій коментар

Ваша електронна адреса не буде опублікований. Обов'язкові для заповнення поля позначені *

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   елав - сказав він

    :O

    1.    marianogaudix - сказав він

      Торвальдс передав операційну систему Minix (похідну від UNIX) Ендрю С. Таненбауму та вдосконалив її.

      Таненбаум побився з Лінусом, вони ображали один одного. Таненбаум каже, що Мікроядро - це майбутнє (HURD, Minix новий конус Мікроядро).

      http://www.taringa.net/posts/linux/17215999/Linux-vs-Hurd-Kernel-Monolitico-vs-Microkernel.html

  2.   eliotime3000 - сказав він

    Це найкращий допис, який я бачив на даний момент у цьому блозі. Я вже хочу знати, що ще робити.

  3.   Карлос, udeюд - сказав він

    Будьте вражені

  4.   axl - сказав він

    Дійсно вражаюче !!

  5.   rhoconlinux - сказав він

    ФУУУУУУУА!
    Це найвигідніший пост, який я коли-небудь бачив, хе-хе. Вітаємо Адріана, стаття про повію! гіпер цікаво !!! 🙂

    1.    Хоакін - сказав він

      Я погоджуюсь. Я уявляю цю ситуацію:
      Потужний користувач GNU / Linux (зі щасливим обличчям):
      "Я вже знаю, як скласти свій Gentoo"

      Ботанік (зневажливо): «пфф, я створив власний дистрибутив ...»

      1.    дезікодер - сказав він

        Так, я можу створити власний дистрибутив Linux. Насправді в ньому я розробляю initramfs та ядро ​​для вбудованого Linux. Створити операційну систему - це не те саме, що дистрибутив Linux. Перший набагато складніше, майже неможливий, другий, як ви вже сказали, може бути чим завгодно, навіть Ubuntu зі зміненим логотипом xD. Тож я б залишив це так:

        Потужний користувач GNU / Linux (зі щасливим обличчям)
        - Я вже знаю, як скласти свій Gentoo

        Напівботанічний
        - Pff, я пішов за Linux з нуля і зробив власний дистрибутив

        Ботанік (з презирливим ставленням)
        - pff, тому що я запрограмував ядро ​​в асемблері та на C

        Saludos!

  6.   Кронос - сказав він

    Це цікаво для мене в очікуванні наступних розділів.

  7.   abimaelmartell - сказав він

    Я бачив цей підручник деякий час тому, він призначений для C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet - сказав він

      Дякую за посилання, я подивлюсь на нього.

  8.   Хосе Хакоме - сказав він

    Я хотів би, щоб операційна система на 100% сумісна з графікою AMD: /

    1.    IvanLinux - сказав він

      Windows

      1.    Хосе Хакоме - сказав він

        ха-ха-ха в Windows Catalyst не підтримує OpenGL, хоча в Linux я не можу використовувати всю графічну потужність, я буду чекати, щоб побачити, що станеться!

        1.    beny_hm - сказав він

          просто почекайте, поки клапан знищить ринок

  9.   KZKG ^ Гаара - сказав він

    Чарівний, ідеальний, чудовий внесок, схоже на чудову серію дописів 🙂

  10.   О_Піксот_О - сказав він

    Буа, я хотів би знати, як запрограмувати програму, щоб допомогти тобі, просто як спосіб практики з тими знаннями, які ти вчишся, і один допомагає. Наразі я залишаю вам девіз привертати увагу до проекту, як тільки ви закінчите його "Використовуйте NextDivel, порно виглядає однаково (або краще).", ​​Ви змітаєте xD.

  11.   це ім'я неправдиве - сказав він

    Mooooooolaaa !!!!

  12.   Нордрі - сказав він

    Дуже хороша стаття, але просто цікаво, чому ви не стежили за проектом Linux From Scratch?

    привіт

    1.    AdrianArroyoStreet - сказав він

      Ну, Linux від Scratch - це добре, і ви можете сказати, що це ваш, але насправді дуже механічно:
      -Завантажити шрифти
      -Патч їх
      -Скласти
      -Встановіть
      -Слідуючи
      Тут навіть якщо результат зрештою гірший, ви можете сказати, що переглянули всі файли.

    2.    дезікодер - сказав він

      Як видно з мого попереднього коментаря, оскільки він не має однакового рівня складності. Крім того, Linux з нуля насправді не є, на відміну від його назви, створенням системи з нуля. Створення системи з нуля - це програмування самостійно, написання власного ядра, а не ядра Linux, по можливості навіть власного завантажувача замість grub, lilo, syslinux тощо. Хоча LFS - це не маленький подвиг і досить складний, він навіть не наближається до програмування власного ядра ...

      Крім того, я погоджуюсь з AdrianArroyo Calle, що він занадто механічний, я колись його читав, і ви в кінцевому підсумку відмовляєтесь від шостої сторінки, вони також кажуть вам використовувати які версії пакетів, бо в іншому випадку інструкції не працюють (це свідчить про відсутність гнучкості , На мою думку ). Я думаю, що краще мати щось на власну ідею, скомпілювати потрібні пакети, навіть запрограмувати деякі, скомпілювати ядро ​​Linux і спокійно.

      Saludos!

  13.   печиво - сказав він

    uuuoooohh !! Я ніколи не захоплював пост так сильно, як цей.
    Будь ласка, продовжуйте 😀

  14.   linux_user - сказав він

    Я не знаю, що не так:

    помилка: багатозавантажувальний заголовок не знайдено.
    помилка, потрібно спочатку завантажити ядро

    1.    AdrianArroyoStreet - сказав він

      Якщо це якесь розраду, я зробив ту ж помилку. Спробуйте використати джерела, які є в GitHub, там помилка вже вирішена. У будь-якому випадку, я думаю, якщо ви зміните рядок grub.cfg з "multiboot /next/START.ELF" на "kernel /next/START.ELF", це може спрацювати. Я точно не знаю.

      1.    макбанана - сказав він

        Перш за все, розкішний вхід 🙂
        У мене така сама проблема із завантаженням ядра з grub. Навіть із використанням джерел GitHub або зміною мультизавантаження для ядра ...

        помилка: багатозавантажувальний заголовок не знайдено.
        помилка: немає завантаженого ядра

        1.    AdrianArroyoStreet - сказав він

          Ви використовуєте clang як компілятор? Змініть його на gcc
          Ви пам’ятали використовувати сценарій компонування? Посилальнику (ld у нашому випадку) необхідно знати, куди у файл він збирається помістити кожну річ. У цьому випадку мультизавантажувальний заголовок повинен бути на початку.
          Чи використовуєте ви систему CMake? Якщо ви використовуєте його, я думаю, він не зазнає невдачі.
          Якщо у вас це не працює, я спробую знайти інше рішення.

  15.   khourt - сказав він

    [+100]
    Просто здорово !!!

  16.   invisible15 - сказав він

    Це справді круто 🙂

  17.   Танракс - сказав він

    Я знімаю шапку. Вражаючий пост. Вітаю.

  18.   людина - сказав він

    Ого!
    Було б чудово, якби ви могли відкрити програми, створені в HTML5 та Javascript, не використовуючи браузер, чи можливо це?
    Я говорю про те, що вони схожі на рідні програми.
    Тому було б легко запрограмувати цю операційну систему 😀

    1.    AdrianArroyoStreet - сказав він

      У цьому випадку я не збираюся це робити, тому що за цим потрібно набагато більше роботи, але існує операційна система під назвою "є", яка виконує те, що ви кажете. Насправді командним рядком є ​​JavaScript, а вікна малюються за допомогою функцій JavaScript Canvas. Інженери Nintendo зробили це, і тепер це відкритий код.

      http://code.google.com/p/es-operating-system/

      1.    людина - сказав він

        Валла, дякую за інформацію 😀
        Я подивлюсь

  19.   patodx - сказав він

    Той, хто може створити власну ОС, може спокійно померти, оскільки інтелектуальний рівень він повинен досягти за допомогою неї; Це змушує його обійтися небом чи пеклом.
    Шматок проводки.

    1.    Мігель - сказав він

      Поки що ніхто не знав, що створив лише те, що можна сказати як пристойну операційну систему, створену з нуля, навіть Linux Torvalds, як ви говорили на початку, оскільки це почалося з джерел Unix, а все інше є загальним автором для більшості ніж у однієї людини, життя дуже коротке, і починати з нуля немислимо для будь-кого, навіть якщо хочеться протилежного, це можна продемонструвати в багатьох помилках, допущених при копіюванні та вставці Linux Torvalds

      1.    скармігліон - сказав він

        Джерела unix закриті, використання minix ... це щось інше.

      2.    Феліпе Робайна - сказав він

        а хто зробив QDOS що?
        були засновані на чомусь?

  20.   Тесла - сказав він

    З того, що я бачу, хто не має власної операційної системи, це тому, що він цього не хоче, ха-ха-ха-ха.

    Тепер серйозно, дуже цікаво! Багато чого виходить за рамки моїх обмежених знань програмування, але я з нетерпінням прочитаю інші частини цієї серії.

    Дякую за допис!

  21.   Мануель Р - сказав він

    Ви залишили мене з обличчям O_O ... без наміру недооцінювати внесок когось, це найбільший "профі", який я бачив останнім часом. З повагою.

  22.   aitor_cz - сказав він

    Дуже хороша стаття, Адріане. Будь ласка, продовжуйте…

  23.   mj - сказав він

    Ви жартуєте в День першого квітня?, Не майте на увазі "Емуляція Лінуса Торвальда: Створіть свою власну операційну систему з нуля". Я не думаю, що це важко для тих, хто продовжує кар'єру в якомусь технологічному інституті чи університеті; але для мене я початківець лучник (є ті, хто називає нас "Нуб", але я вважаю себе більш новачком дещо лінивим), що звучить як не ступання на сушу. У будь-якому випадку ЦЕЙ СТАТТЯ СТВОРИТЬ БАГАТО ДОПИТИМОСТІ І БЕЗ СУМНІШНОГО ЗАХОВЛЕННЯ ТА ПОВАГИ ДО ЇЇ РЕДАКТОРА, ВІТАЄМО; Перше, що я зроблю, це спробувати хоча б трохи зрозуміти цей цінний матеріал.
    ДЯКУЄМО Адріан Арройо Калле, відмінна робота та благородна передача знань.

  24.   Блер Паскаль - сказав він

    LEL Відмінний пост, так продовжуйте.

  25.   F3niX - сказав він

    Який чудовий пост, це те, чого я пропустив від Linux. Чудово.

  26.   рубін - сказав він

    Чудовий пост, велике спасибі.
    Я не зрозумів, що робить файл link.ld, хтось може мені це пояснити?

    1.    AdrianArroyoStreet - сказав він

      Файл link.ld повідомляє компоновщику (в даному випадку ld), де кожна частина коду повинна знаходитися в отриманому файлі. Ми також визначаємо точку входу, оскільки, оскільки у нас немає операційної системи, ми не можемо використовувати main як звичайну програму, в цьому випадку ми вибираємо функцію запуску.

  27.   Maxi - сказав він

    Чудово всі ваші пости! Чекаємо 7! Що робити, якщо у мене є сумніви, наприклад, якщо я хотів лише запустити алгоритм, без ОС, як я можу знати, що я можу використовувати, а що ні C?

    1.    AdrianArroyoStreet - сказав він

      Якщо ви використовуєте його таким чином, ви не можете використовувати нічого з stdlib, що практично всі використовують (без malloc, free, printf, scanf, strcmp тощо). Все має бути реалізовано безпосередньо з пам'яті або ASM. Можливо, у вищій главі я покажу вам, як встановити бібліотеку C для операційної системи. Якщо ви використовуєте C ++, ви не можете використовувати винятки та оператори new та delete (і, звичайно, більше).

    2.    Свічер - сказав він

      Я думаю це це може дати вам краще уявлення про те, як це зробити.

  28.   Естебан - сказав він

    Привіт, близько 5 років тому я підписався на подібну публікацію і розробив мікроядро, яке запускається так само, має деякі аспекти для вдосконалення, але це може вас зацікавити, воно працює в захищеному режимі, виконує багатозадачність і виконує віртуалізацію пам'яті, нещодавно я працював на ньому драйвер диска та компакт-диск, щоб зробити його інсталяційним, а не просто запускати на живому компакт-диску ... Привіт.

  29.   Йохан - сказав він

    Шановний, у мене виникає помилка під час виконання команди:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc

    link.ld: 5 синтаксичних помилок
    collect2: помилка: ld повернув 1 статус виходу

    link.ld
    . = 0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    У рядку 5 я не бачу помилки, хтось те саме?

    Я працюю з віртуалізованим debian wheezy у virtualbox

    1.    Джуліан Рейес Ескрігас - сказав він

      додайте ";" в кінці * (. multiboot_header)

  30.   Ерік Ореллана Ромеро - сказав він

    Відмінна ініціатива, я обов'язково дотримуватимусь розділів цього допису, маючи намір багато чому навчитися. Щиро дякуємо, що знайшли час навчити нас. Єдину деталь у цьому відношенні слід зазначити, що Лінус Торвальдс не є творцем жодної операційної системи, він створив ядро ​​системи GNU / Linux (те, що використовувалося в інших ОС), що все ще гідне, але важливо зробити кредит Річарда Столлмана за створення більшості ОС.

    Щиро дякую за внесок, і я сподіваюся, ви врахуєте моє спостереження.

  31.   Джуліан Рейес Ескрігас - сказав він

    Я певний час возився з темою, зацікавився, як тільки прочитав заголовок. але повідомлення продовжує отримувати

    помилка: багатозавантажувальний заголовок не знайдено.
    помилка, потрібно спочатку завантажити ядро

    Я завантажив те, що беру в репо на github https://github.com/rkmax/GenyOS

    1.    Мартін Віллалба - сказав він

      Те саме трапляється і зі мною. Ви знайшли рішення?

  32.   Карлос - сказав він

    питання, яке я почав вводити синтаксис, і рядок menuentry повідомляє мені, що команда не знайдена, хто міг би сказати мені чому
    цим я займаюся

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: команду не знайдено

    1.    AdrianArroyoStreet - сказав він

      Вміст цього вмісту слід вводити не в командному рядку, а у створеному вами файлі, який називається grub.cfg

  33.   Нодетіно - сказав він

    Відмінна стаття, дякую!

  34.   Девід - сказав він

    Вражаюче… !! це просто як відсутнє посилання.

  35.   р. garciag - сказав він

    Мені подобаються ваші підручники з Емуляції LInus Torvalds, але є один крок, який я не розумію, такий:
    Тепер ми копіюємо START.ELF до / next всередині нашої папки, що імітує корінь нашої операційної системи. Ми переходимо до кореневої папки нашої нової операційної системи за допомогою консолі та перевіряємо наявність двох файлів: один /boot/grub/grub.cfg та інший /next/START.ELF.

    Ми переходимо до верхнього каталогу та викликаємо утиліту створення ISO за допомогою GRUB, яка називається grub-mkrescue

    Хтось може пояснити мені це: с

    1.    AdrianArroyoStreet - сказав він

      Просто для створення мінімального ISO, який GRUB може завантажити, ми копіюємо ядро ​​в (/ ISO, будь-яку папку) /next/START.ELF та файл конфігурації GRUB в (/ ISO, будь-яку папку) / boot / grub / grub.cfg. Після цього ми ще не встановили GRUB на ISO, і існує утиліта, яка генерує ISO з папки та встановлює GRUB під назвою grub-mkrescue. Тоді, нарешті, у нас вийшов би завантажувальний ISO, у якому встановлений GRUB, який може читати конфігурацію, щоб пізніше правильно виконати START.ELF. Не знаю, чи пояснював я себе, але те, що ми робимо - це якась помилкова файлова система, за допомогою якої ми генеруємо ISO.

  36.   Мігель Джозе Гевара Атенсіо - сказав він

    Буенісімо

  37.   Майкл Морено - сказав він

    Ну, дійсно подивіться на нову систему не стільки, але якщо вдосконалювати Linux, наприклад, створюючи екзонуклеус Linux із серверним компонентом, який за бажанням виконує роль мікроядра, тобто екзоструктуру з поведінкою мікроядра, яка була б супер і Linux.

    Інша справа, що я не фахівець у програмуванні, лише кілька сирних с ++ та трохи Java, мені було б достатньо дати програмі ядра Linux модуль, випотрошивши її, змінивши і т.д.

  38.   Зимовий солдат53 - сказав він

    Без сумніву, мені вже доводиться робити відпустку.

  39.   Фермін - сказав він

    Цей хороший і в якій програмі ви його розробляєте та кодуєте
    будь ласка, дайте мені таку відповідь

  40.   Темний розум - сказав він

    При компіляції з вашого git я отримую:

    [jmponce @ build build] $ cmake ..
    - Створення каталогу NextRoot
    - Створення сценарію ISO
    зробити DESTDIR = наступне встановлення
    ./iso.sh
    - Знайдено кисень: / usr / bin / doxygen (знайдена версія "1.8.9")
    - Налаштування виконано
    - Генерація виконана
    - Файли збірки були записані в: / home / jmponce / next-divel / build
    [jmponce @ build 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: *** [усі] Помилка 2

    1.    AdrianArroyoStreet - сказав він

      Помилка полягає в тому, що він не може знайти llibgcc, оскільки у вас 64-розрядна версія, і в даний час система компіляції змушена використовувати 32-розрядну. Вам слід встановити пакет сумісності на вашому дистрибутиві або краще, використовуйте 32-розрядну систему.

      1.    Роналду Родрігес - сказав він

        У мене 32 біти, і я отримую ту саму помилку, ви маєте на увазі операційну систему чи архітектуру? мій - 64-бітний, але я використовую 32-бітну Ubuntu, не питайте, фінансові проблеми, з цим я все це кажу.

  41.   Хорхе - сказав він

    Відмінна тема, чекає на більший розмах. На ура

  42.   Jhon - сказав він

    Чудово, я сподіваюся на більше

  43.   Соїд Перес - сказав він

    Привіт, я молодий посол, який хоче створити операційну систему, яка підтримує всі програми та платформи, щоб розробники не мусили мати потужних машин, додатків чи програм на ПК.
    Ось чому мене цікавить цей пост, але коли я завантажую ваш 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

    1.    AdrianArroyoStreet - сказав він

      Можливо, вам доведеться оновити програму xorriso на вашому дистрибутиві. Який дистрибутив та версію ви використовуєте?

      1.    Соїд Перес - сказав він

        Я використовую xubuntu 14.04lts і намагаюся запустити xorriso, але оболонка повідомляє мені, що він не може його знайти, і я отримую apt-get install xorriso, хоча я щиро очікував певної відповіді, оскільки мав поганий досвід встановлення речей, яких я не знаю в linux hehe . Я оновлю його зараз і розповім вам, що сталося

      2.    AdrianArroyoStreet - сказав він

        Потім встановіть xorriso із програмного центру або просто з терміналу зробіть "sudo apt-get install xorriso"

      3.    Соїд Перес - сказав він

        Я вже зробив все, що ви мені сказали, і з git, і з моїм я отримую цей xorriso 1.3.2: маніпулятор файлової системи RockRidge, проект libburnia.

        Струм приводу: -outdev 'stdio: nextdivel.iso'
        Поточний носій: файл stdio, що перезаписується
        Стан носія: порожній
        Підсумок медіа: 0 сеансів, 0 блоків даних, 0 даних, 1901 м безкоштовно
        Додано до ISO-образу: каталог '/'='/tmp/grub.OEqSzV'
        xorriso: ОНОВЛЕННЯ: 546 файлів додано за 1 секунду
        xorriso: ПОМИЛКА: Не вдається визначити атрибути вихідного файлу '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Немає такого файлу або каталогу
        xorriso: ОНОВЛЕННЯ: 546 файлів додано за 1 секунду
        xorriso: aborting: -abort_on "FAILURE" виявлено "FAILURE"
        і вельвет, я не розумію, що моя структура /nextroot/boot/grub/grub.cfg та nextroot / next / START.ELF

      4.    Соїд Перес - сказав він

        Дякую, я готовий рухатися вперед, друг мені допоміг і сказав, що я зробив неправильно, це організація каталогу, тому я це врегулював і все.

      5.    Ерік - сказав він

        Вибачте, чи можете ви сказати мені, яку процедуру ви виконували, оскільки я не отримую помилки для завантаження: такого файлу чи каталогу немає

        немає завантажувального пристрою.

  44.   Хосе - сказав він

    На здоров’я! Я збирався попросити вас про послугу, якщо б ви могли надіслати мені електронний лист із тим, що ви тут пояснили, я трохи заплутався, і мені потрібно порівняти те, що я маю, з тим, що ви пояснюєте, можливо, мені не зрозуміло, створення grub. cfg робиться в терміналі gcc чи де саме? велике спасибі друже!

    1.    AdrianArroyoStreet - сказав він

      Ви створюєте файл grub.cfg за допомогою будь-якого текстового редактора, і ви повинні зберегти його у PROJECT_FOLDER / boot / grub / grub.cfg

  45.   Джуазано - сказав він

    Привіт Адріане, перш за все вітаю вас і дякую за ваш внесок.

    Ви знаєте, що я роблю це для практики, і я почав складати це разом із вашими репетиторами, проте після початку я виявив першу помилку

    $ як -o kernel.o -c kernel.asm
    bash: as: команду не знайдено ...
    Подібні команди:
    "sa"
    'змінний струм'

    Я працюю над Fedora 20, і я не можу знайти рішення з цього приводу, я був би вдячний вашим вказівкам щодо того, чи варто мені щось змінювати в ГКП чи на газі

    заздалегідь спасибі

    1.    AdrianArroyoStreet - сказав він

      Ви повинні встановити GAS, щоб я міг побачити код помилки. У мене немає Fedora під рукою, але теоретично, якщо ви все-таки встановите gcc-c ++, ви встановите весь пакет GCC та GNU, як зазвичай це поставляється з ним.

  46.   Гастон Рамірес - сказав він

    Я з вами, я знаю щось про C ++, C # (хоча цей останній не надто корисний у цьому питанні) погана річ у тому, що мені все ще бракує досвіду, я ніколи не маю мови на мові C, ваша публікація чудова, я не маю багато чого сказати, якщо встигну побачити. Дякую.

  47.   Тересіта дель Ісус нах Санчес - сказав він

    Щиро дякую за велику допомогу….

  48.   жартівливий - сказав він

    Я люблю Linux, це найкращий район, який існує, правда для мого Windows - це сміття, тому що я знаю, що творець Linux - це творець Windows

  49.   Їхав - сказав він

    Привіт, я отримую повідомлення про помилку в grub
    помилка: file /next/START.ELF Не знайдено
    помилка: спочатку потрібно завантажити ядро

    Не могли б ви допомогти мені і погуглили, але я не можу знайти

  50.   Енріке Авіла - сказав він

    Будь ласка, як я можу змусити його відображати повідомлення ПРИВІТИ СВІТ? Я новачок і досі недостатньо знаю

  51.   КАРЛОС ГЮРРЕРО АЛЬВАРЕЗ - сказав він

    У мене трапляється таке:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -freestanding -lgcc
    / usr / bin / ld: kernel.o: переміщення R_X86_64_32 проти символу `стек 'не може використовуватися при створенні об'єкта PIE; перекомпілювати з -fPIE
    / usr / bin / ld: остаточне посилання не вдалося: непредставлений розділ на виході
    collect2: помилка: ld повернув 1 статус виходу