Linus Torvalds 에뮬레이션 : 처음부터 자신 만의 운영 체제 만들기 (I)

우선, 이것이 나의 첫 번째 기사이며 여러분 모두가 그것을 좋아하기를 바랍니다.

Linus Torvals 행복

이 시리즈에서 우리는 리누스 토발즈 (Linus Torvalds), 우리는 0에서 운영 체제를 만들 것입니다.이 첫 번째 에피소드에서 우리는 부팅을 볼 것이고 커널에서 화면에 텍스트를 넣을 것입니다.

제 경우에는 운영 체제가 다음다이벌. 운영 체제를 고려하자마자 우리가해야 할 첫 번째 결정은 부트 로더가 무엇일까요?

여기에는 여러 변형이 있으며 우리가 직접 만들 수도 있습니다. 그러나이 튜토리얼에서는 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을 사용하여) 넣을 것입니다.

나중에 커널 C 함수 인 NextKernel_Main을 호출합니다. 루프에서 우리는 컴퓨터를 중지하기 위해 중지합니다. 이것은 다음과 같이 컴파일됩니다.

as -o kernel.o -c kernel.asm

이제 C로 프로그래밍을 시작하겠습니다. 이제 모든 것이 케이크 조각이라고 생각할 것입니다. printf en 본관 그게 다입니다. 우리는 해냈습니다.

아니, 이후 printf y 본관 그것들은 운영 체제에 의해 정의 된 기능이지만 우리는 그것들을 만들고 있습니다! 우리는 자신이 정의한 기능 만 사용할 수 있습니다.

이후 장에서는 우리 자신의 C 라이브러리 (glibc, bionic, newlibc)를 배치하는 방법에 대해 이야기 할 것입니다. 우리는 화면에 텍스트를 넣고 싶다는 것에 대해 논의했습니다. 우리가 어떻게 하는지를 잘 볼 것입니다.

두 가지 옵션이 있습니다. 하나는 바이오스 다른 하나는 화면 메모리를 직접 관리하는 것입니다. 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에서 정의한 각 섹션의 위치와 진입 점 인 start를 정의합니다. 이제 우리는이 모든 조합을 통합 할 수 있습니다.

gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

이제 START.ELF를 운영 체제의 루트를 시뮬레이트하는 폴더 내 / 다음으로 복사합니다. 콘솔이있는 새 운영 체제의 루트 폴더로 이동하여 /boot/grub/grub.cfg 및 /next/START.ELF의 두 파일이 있는지 확인합니다.

상위 디렉토리로 이동하여 GRUB를 사용하여 ISO 생성 유틸리티를 호출합니다. 그럽-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

이 작업을 마치면 ISO. 이 ISO는 컴퓨터에서 열 수 있습니다. x86 (64 비트도) 및 가상 머신. 그것을 테스트하기 위해 나는 QEMU. 우리는 부른다 QEMU 명령 줄에서 :

qemu-system-i386 nextdivel.iso

시작할 것이다 씨바이오스 나중에 우리는 GRUB. 나중에 모든 것이 정확하다면 우리의 문구를 보게 될 것입니다.
이것이 어렵다고 생각할 것입니다. 그렇습니다.

실제로 운영 체제를 만드는 것은 어렵고 여기에있는이 운영 체제는 유용하지 않습니다. 이후 장에서는 화면의 색상을 처리하고 메모리를 예약하는 방법과 가능한 경우 키보드에서 데이터를 가져 오는 방법을 살펴볼 것입니다.

누군가 여기에 모든 것을 복사하고 싶지 않다면 저장소가 있습니다. GitHub의 (더 정교하게) 운영 체제 다음다이벌. 컴파일하려면 다음다이벌 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. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   엘라 브

    :O

    1.    Marianogaudix

      Torvalds는 UNIX에서 파생 된 Minix 운영 체제를 Andrew S. Tanenbaum으로 가져와 개선했습니다.

      Tanenbaum은 Linus와 싸웠고 서로를 모욕했습니다. Tanenbaum은 Microkernel이 미래라고 말합니다 (HURD, Minix 새로운 cone Microkernel).

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

  2.   엘리오타임3000

    이것은 내가 지금까지이 블로그에서 본 최고의 게시물이었습니다. 나는 이미 무엇을해야할지 알고 싶습니다.

  3.   카를로스 구데

    감동 받다

  4.   AXL

    정말 인상적 !!

  5.   로콘 리눅스

    ㅋㅋㅋㅋㅋㅋ
    내가 본 것 중 가장 괴상한 게시물입니다. 창녀 기사 인 Adrián을 축하합니다! 하이퍼 흥미로운 !!! 🙂

    1.    호아킨

      동의합니다. 나는이 상황을 상상한다 :
      GNU / Linux Power User (행복한 얼굴) :
      "나는 이미 Gentoo를 컴파일하는 방법을 알고 있습니다."

      Nerd (경멸적인 태도) :«pff, 나만의 배포판을 만들었습니다 ...»

      1.    Desikoder

        예, 나만의 Linux 배포판을 만들 수 있습니다. 사실 나는 initramfs와 임베디드 리눅스 용 커널을 개발하고 있습니다. Linux 배포판과 운영 체제를 만드는 것은 동일하지 않습니다. 첫 번째는 훨씬 더 어렵고 거의 불가능하며 두 번째는 말했듯이 xD 로고가 변경된 우분투도 가능합니다. 그래서 다음과 같이 남겨 둘 것입니다.

        GNU / Linux Power User (행복한 얼굴)
        -Gentoo를 컴파일하는 방법을 이미 알고 있습니다.

        세미 너드
        -Pff, 나는 처음부터 리눅스를 따랐고 나만의 배포판을 만들었다.

        얼간이 (경멸적인 태도)
        -pff, 어셈블러와 C에서 커널을 프로그래밍했기 때문입니다.

        안녕 하쇼!

  6.   크로노스

    이것은 다음 장을 기다리면서 나에게 흥미 롭다.

  7.   Abimaelmartell

    오래전에이 튜토리얼을 봤는데 C ++ 용입니다
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet

      링크 주셔서 감사합니다. 살펴 보겠습니다.

  8.   호세 자컴

    AMD 그래픽과 100 % 호환되는 운영 체제를 원합니다 : /

    1.    아이반리눅스

      Windows

      1.    호세 자컴

        Windows Catalyst의 hahaha는 OpenGL을 지원하지 않지만 Linux에서는 모든 그래픽 성능을 사용할 수 없지만 어떻게되는지 계속 기다리겠습니다!

        1.    베니_흠

          밸브가 시장을 휩쓸 때까지 기다리십시오.

  9.   KZKG ^ 가아라

    마법적이고 완벽하며 훌륭한 기여, 그것은 훌륭한 일련의 게시물처럼 보입니다 🙂

  10.   O_피소테_O

    부아, 나는 당신이 배우고있는 지식을 가지고 연습하는 방법으로 당신을 돕기 위해 프로그램하는 방법을 알고 싶습니다. 지금은 프로젝트를 마치면 "NextDivel을 사용하면 포르노가 같거나 더 좋아 보입니다."라는 모토를 남겨두고 xD를 쓸 것입니다.

  11.   이 이름은 거짓

    Mooooooolaaa !!!!

  12.   노르 드리

    아주 좋은 기사이지만 왜 Linux From Scratch 프로젝트를 따르지 않았는지 궁금하십니까?

    안부

    1.    AdrianArroyoStreet

      글쎄요, 스크래치의 리눅스는 괜찮습니다. 그리고 여러분의 것임을 알 수 있습니다.하지만 정말 기계적인 것입니다.
      -글꼴 다운로드
      -패치
      -엮다
      -설치
      -수행원
      여기에서는 결과가 결국 더 나빠지지만 모든 파일을 검토했다고 말할 수 있습니다.

    2.    Desikoder

      이전 의견에서 분명히 알 수 있듯이 동일한 수준의 복잡성이 없기 때문입니다. 게다가 처음부터 리눅스는 이름과는 달리 처음부터 시스템을 만드는 것이 아닙니다. 처음부터 시스템을 만드는 것은 리눅스 커널이 아니라 직접 프로그래밍하는 것을 의미합니다. lilo, syslinux 등 LFS는 사소한 일이 아니며 매우 복잡하지만 자신의 커널을 프로그래밍하는 데는 근접하지 않습니다 ...

      또한 AdrianArroyo Calle이 너무 기계적이라는 데 동의합니다. 언젠가 읽었고 XNUMX 페이지에서 포기하게되며, 그렇지 않으면 지침이 작동하지 않기 때문에 패키지의 어떤 버전을 사용하라고 말합니다. 유연성 부족을 보여줍니다. 내 의견으로는). 나는 자신의 아이디어를 가지고 원하는 패키지를 컴파일하고 일부를 프로그래밍하고 Linux 커널을 컴파일하고 평화롭게 컴파일하는 것이 더 낫다고 생각합니다.

      안녕 하쇼!

  13.   쿠키

    으 아아아 !! 나는 이것만큼 게시물을 캡처 한 적이 없습니다.
    계속 해주세요 😀

  14.   linux_user

    나는 무엇이 잘못되었는지 모른다.

    오류 : 멀티 부팅 헤더가 없습니다.
    커널을 먼저로드해야하는 오류

    1.    AdrianArroyoStreet

      위로라면 저도 같은 실수를했습니다. GitHub에있는 소스를 사용해보십시오. 오류가 이미 해결되었습니다. 어쨌든 grub.cfg의 줄을 "multiboot /next/START.ELF"에서 "kernel /next/START.ELF"로 변경하면 작동 할 것이라고 생각합니다. 나는 정확하게 몰라.

      1.    Mcplatano

        우선, 웅장한 입구 🙂
        grub에서 커널을로드하는 데 동일한 문제가 있습니다. GitHub 소스를 사용하거나 커널의 멀티 부팅을 변경하더라도 ...

        오류 : 멀티 부팅 헤더가 없습니다.
        오류 :로드 된 커널 없음

        1.    AdrianArroyoStreet

          clang을 컴파일러로 사용하고 있습니까? gcc로 변경
          링커 스크립트를 사용한 것을 기억하십니까? 링커 (우리의 경우 ld)가 파일에서 각 항목을 넣을 위치를 알고 있어야합니다. 이 경우 멀티 부트 헤더는 시작 부분에 있어야합니다.
          CMake 시스템을 사용하고 있습니까? 그것을 사용하면 실패하지 않을 것이라고 생각합니다.
          작동하지 않으면 다른 해결책을 찾아 보겠습니다.

  15.   쿠르트

    [+100]
    대단해 !!!

  16.   보이지 않는

    정말 멋지다 🙂

  17.   탄락스

    나는 내 모자를 벗는다. 인상적인 게시물. 축하합니다.

  18.   사람

    와!
    브라우저를 사용하지 않고도 HTML5와 자바 스크립트로 만든 애플리케이션을 열 수 있다면 좋을 것입니다. 가능할까요?
    나는 그것들이 네이티브 애플리케이션과 같다고 말하는 것입니다.
    따라서이 운영 체제를위한 프로그래밍은 쉬울 것입니다 😀

    1.    AdrianArroyoStreet

      이 경우에는 더 많은 작업이 필요하기 때문에 그렇게하지 않을 것입니다. 그러나 "is"라는 운영 체제가 있습니다. 실제로 명령 줄은 JavaScript이고 창은 JavaScript Canvas 함수를 사용하여 그려집니다. Nintendo 엔지니어가 해냈고 이제는 오픈 소스입니다.

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

      1.    사람

        Valla, 정보 감사합니다 😀
        내가 살펴볼 게

  19.   Patodx

    자신의 OS를 만들 수있는 사람은 누구든지 평화롭게 죽을 수 있습니다. 그것은 당신이 천국이나 지옥을 없애 게 만듭니다.
    게시 조각.

    1.    미겔

      지금까지 처음부터 만든 괜찮은 운영 체제라고 할 수있는 것을 만든 사람은 아무도 없었습니다. 처음에 말씀 하셨듯이 Linux Torvalds도 아닙니다. 이것은 Unix 소스에서 시작되었고 다른 모든 것은 더 많은 사람들과 공통으로 작성되었습니다. 한 사람보다 인생은 매우 짧고 처음부터 시작하는 것은 누구에게도 상상할 수 없습니다. 반대가 원하더라도 Linux Torvalds가 복사하고 붙여 넣을 때 많은 실수를 저지르고 있습니다.

      1.    Skarmiglione

        유닉스 소스는 닫히고 미닉스의 사용은 다른 것입니다.

      2.    펠리페 로바이나

        그리고 QDOS를 만든 사람들은 무엇입니까?
        뭔가를 기반으로 했나요?

  20.   테슬라

    내가보기에, 자신의 운영 체제가없는 사람은 그들이 원하지 않기 때문입니다. 하 하하하.

    이제 진지하게, 매우 흥미 롭습니다! 제한된 프로그래밍 지식을 넘어서는 것이 많지만이 시리즈의 다른 부분을 열심히 읽어 보겠습니다.

    게시물 주셔서 감사합니다!

  21.   마누엘 R

    누구의 공헌도 과소 평가하지 않고 O_O 얼굴을 남겼습니다. 최근 본 것 중 가장 "프로"입니다. 문안 인사.

  22.   aitor_cz

    아주 좋은 기사, Adrián. 계속 해주십시오…

  23.   mj

    만우절에 농담하고 계십니까? "Linus Torvalds 에뮬레이션 : 처음부터 자신 만의 운영 체제를 만드십시오"라는 의미가 아닙니다. 나는 어떤 공과 대학이나 대학에서 직업을 추구하는 사람들에게 어렵지 않다고 생각합니다. 하지만 저에게 저는 초보 궁수입니다 ( "Noob"이라고 말하는 사람들이 있지만 저는 제 자신을 좀 더 게으르다 고 생각합니다) 땅을 밟지 않는 것처럼 들립니다. 어쨌든,이 기사는 편집자에 대한 의심과 존경없이 많은 호기심을 불러 일으 킵니다. 축하합니다. 가장 먼저 할 일은이 귀중한 자료를 조금이라도 이해하려고 노력하는 것입니다.
    감사합니다 Adrian Arroyo Calle, 훌륭한 작품과 고귀한 지식 전달.

  24.   블레어 파스칼

    LEL 우수한 게시물, 계속 유지하십시오.

  25.   f3niX

    정말 좋은 글이네요 제가 놓친 부분이 바로 이것입니다 desde linux. 아주 멋진.

  26.   루비

    그레이트 포스트, 대단히 감사합니다.
    link.ld 파일의 기능을 이해하지 못했습니다. 누군가가 설명해 줄 수 있습니까?

    1.    AdrianArroyoStreet

      link.ld 파일은 링커 (이 경우 ld)에게 코드의 각 부분이 결과 파일에 있어야하는 위치를 알려줍니다. 운영 체제가 없기 때문에 main을 일반 프로그램으로 사용할 수 없기 때문에 진입 점을 정의합니다.이 경우에는 시작 기능을 선택합니다.

  27.   맥시

    모든 게시물을 멋지게! 7을 기다리고 있습니다! 예를 들어 OS없이 알고리즘 만 실행하려는 경우와 같이 의문이 생기면 내가 사용할 수있는 것과 C가 아닌 것을 어떻게 알 수 있습니까?

    1.    AdrianArroyoStreet

      이렇게 사용하면 stdlib에서 아무것도 사용할 수 없습니다. 실제로 모든 사람이 사용하는 것입니다 (malloc, free, printf, scanf, strcmp 등). 모든 것은 메모리 또는 ASM에서 직접 구현되어야합니다. 아마도 상위 장에서 운영 체제 용 C 라이브러리를 설치하는 방법을 보여줄 것입니다. C ++를 사용하는 경우 예외와 new 및 delete 연산자를 사용할 수 없습니다.

    2.    스위처

      나는 생각한다 그것을 수행하는 방법에 대한 더 나은 아이디어를 줄 수 있습니다.

  28.   에스테반

    안녕하세요, 약 5 년 전에 비슷한 출판물을 따라 동일한 방식으로 시작하는 마이크로 커널을 개발했습니다. 개선해야 할 측면이 몇 가지 있지만 흥미로울 수 있습니다. 보호 모드에서 실행되고 멀티 태스킹을 실행하고 메모리 가상화를 수행합니다. 디스크 드라이버와 CD 드라이브를 사용하여 설치 가능하게 만들고 라이브 CD에서 실행하는 것이 아닙니다. 인사말.

  29.   요한

    친애하는, 명령을 실행할 때 오류가 발생했습니다.
    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 행에서 오류가 보이지 않습니다. 누군가 그에게 같은 일이 발생합니까?

    나는 virtualbox에서 가상화 된 debian wheezy로 작업하고 있습니다.

    1.    줄리안 레예스 에스 크리 가스

      ";"추가 * 끝에 (. multiboot_header)

  30.   에릭 오렐라나 로메로

    훌륭한 이니셔티브, 나는 확실히이 게시물의 장을 따라 가면서 많은 것을 배울 것입니다. 시간을내어 가르쳐 주셔서 감사합니다. 이와 관련하여 한 가지 세부 사항은 Linus Torvalds는 어떤 운영 체제도 만든 것이 아니라 GNU / Linux 시스템 (다른 OS에서 사용 된 커널)의 커널을 만들었습니다. 이는 여전히 가치가 있습니다. 그러나 대부분의 OS를 만드는 데 필요한 크레딧을 Richard Stallman에게 제공하는 것이 중요합니다.

    의견을 보내 주셔서 감사 드리며 제 관찰을 고려해 주시기 바랍니다.

  31.   줄리안 레예스 에스 크리 가스

    나는 한동안 주제를 엉망으로 만들었고 헤드 라인을 읽으 자마자 관심이 생겼다. 하지만 메시지는 계속해서

    오류 : 멀티 부팅 헤더가 없습니다.
    커널을 먼저로드해야하는 오류

    내가 가져간 것을 github의 저장소에 업로드했습니다. https://github.com/rkmax/GenyOS

    1.    마틴 빌라바

      나에게도 똑같은 일이 발생합니다 해결책을 찾았습니까?

  32.   카를로스

    구문을 소개하기 시작한 질문과 메뉴 항목 줄이 나에게 명령을 알려줍니다.
    이것이 제가하는 것입니다

    BLACK @ BLACK-pc : ~ / blackroot $ menuentry«NextDivel»{
    menuentry : 명령을 찾을 수 없습니다.

    1.    AdrianArroyoStreet

      이 콘텐츠의 내용은 명령 줄에 입력하지 않고 사용자가 만든 grub.cfg라는 파일에 입력합니다.

  33.   노드티노

    훌륭한 기사, 감사합니다!

  34.   데이비드

    멋진… !! 누락 된 링크와 같습니다.

  35.   가르시아그

    나는 당신의 Emulating LInus Torvalds 튜토리얼을 좋아하지만 이해하지 못하는 한 단계가 있습니다.
    이제 START.ELF를 운영 체제의 루트를 시뮬레이트하는 폴더 내 / 다음으로 복사합니다. 콘솔이있는 새 운영 체제의 루트 폴더로 이동하여 /boot/grub/grub.cfg 및 /next/START.ELF의 두 파일이 있는지 확인합니다.

    상위 디렉토리로 이동하여 grub-mkrescue라는 GRUB로 ISO를 생성하는 유틸리티를 호출합니다.

    누군가 나에게 그것을 설명 할 수 있습니까?

    1.    AdrianArroyoStreet

      GRUB가로드 할 수있는 최소 ISO를 생성하기 위해 커널을 (ISO의 /, 임의의 폴더) /next/START.ELF에 복사하고 GRUB 구성 파일을 (ISO의 /, 임의의 폴더) / boot /에 복사합니다. grub / grub.cfg. 이 작업이 완료되면 아직 ISO에 GRUB를 설치하지 않았으며 폴더에서 ISO를 생성하고 grub-mkrescue라는 GRUB를 설치하는 유틸리티가 있습니다. 그런 다음 마지막으로 GRUB가 설치된 부팅 가능한 ISO로 끝납니다.이 ISO는 나중에 START.ELF를 올바르게 실행하기 위해 구성을 읽을 수 있습니다. 내가 직접 설명했는지는 모르겠지만 우리가하는 일은 ISO를 생성하는 일종의 잘못된 파일 시스템입니다.

  36.   미구엘 호세 게바라 아텐시오

    멋진 친구

  37.   마이클 모레노

    정말 새로운 시스템은별로 보이지 않지만, 예를 들어 원한다면 마이크로 커널 역할을하는 서버 구성 요소로 리눅스 외핵을 만드는 것과 같이 리눅스를 개선한다면, 그것은 슈퍼와 리눅스가 될 소핵 행동을 가진 엑소 구조를 말하는 것입니다.

    다른 한 가지는 제가 프로그래밍 전문가가 아니라는 것입니다. 몇 가지 치즈 맛이 나는 C ++와 자바 만 있으면 리눅스 커널 프로그램에 모듈을 제공하고, 모듈을 만들고, 수정하는 등의 작업으로 충분할 것입니다.

  38.   겨울 군인 53

    의심 할 여지없이 나는 이미 휴가를해야합니다.

  39.   페르 민

    이것은 훌륭하며 어떤 프로그램에서 그것을 설계하고 코딩합니까?
    대답 해주세요

  40.   다크마인드

    git에서 컴파일하면 다음과 같은 결과가 나타납니다.

    [jmponce @ jar 빌드] $ cmake ..
    -NextRoot 디렉토리 생성
    -ISO 스크립트 생성
    make DESTDIR = 다음 설치
    ./iso.sh
    -발견 된 Doxygen : / usr / bin / doxygen (발견 된 버전 "1.8.9")
    -구성 완료
    -생성 완료
    -빌드 파일은 / home / jmponce / next-divel / build에 작성되었습니다.
    [jmponce @ jar 빌드] $ 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 : -lgcc를 찾는 동안 호환되지 않는 /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a를 건너 뜁니다.
    / 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 : 대상 'all'에 대한 지침 실패
    make : *** [all] 오류 2

    1.    AdrianArroyoStreet

      오류는 64 비트 버전이 있고 현재 빌드 시스템이 32 비트를 사용하도록 강제되어 있기 때문에 llibgcc를 찾을 수 없다는 것 같습니다. 배포판 이상에 호환성 팩을 설치해야하며 32 비트 시스템을 사용해야합니다.

      1.    호날두 로드리게스

        32 비트가 있는데 동일한 오류가 나타납니다. 운영 체제 또는 아키텍처를 의미합니까? 내 것은 64 비트이지만 32 비트 우분투를 사용하고 있습니다. 재정적 인 문제는 모두 다 말합니다.

  41.   호르헤

    더 큰 범위를 기다리고있는 훌륭한 주제. 건배

  42.   Jhon

    나는 더 많은 것을 희망한다

  43.   소 이드 페레즈

    안녕하세요, 저는 모든 프로그램과 플랫폼을 지원하는 운영 체제를 만들어 개발자가 PC에 강력한 컴퓨터 나 응용 프로그램 또는 프로그램을 가질 필요가 없도록하고 싶은 젊은 대사입니다.
    그렇기 때문에이 게시물에 관심이 있지만 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를 얻습니다. . 지금 바로 업데이트하고 무슨 일이 있었는지 알려 드릴게요

      2.    AdrianArroyoStreet

        그런 다음 소프트웨어 센터에서 xorriso를 설치하거나 터미널에서 "sudo apt-get install xorriso"를 수행하십시오.

      3.    소 이드 페레즈

        나는 이미 당신이 나에게 말한 모든 것을했고 git과 나의 둘 다이 xorriso 1.3.2 : RockRidge 파일 시스템 조작기, libburnia 프로젝트를 얻었습니다.

        구동 전류 : -outdev 'stdio : nextdivel.iso'
        현재 미디어 : stdio 파일, 덮어 쓰기 가능
        미디어 상태 : 비어 있음
        미디어 요약 : 세션 0 개, 데이터 블록 0 개, 데이터 0 개, 무료 1901m
        ISO 이미지에 추가 : 디렉토리 '/'='/tmp/grub.OEqSzV'
        xorriso : 업데이트 : 546 초 안에 1 개 파일 추가
        xorriso : FAILURE : 소스 파일 '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot'의 속성을 확인할 수 없습니다 : 해당 파일 또는 디렉토리가 없습니다.
        xorriso : 업데이트 : 546 초 안에 1 개 파일 추가
        xorriso : 중단 : -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.   주아자노

    안녕 Adrian, 우선 당신을 축하하고 당신의 기여에 감사드립니다.

    내가 연습을 위해 이것을하고 있다는 것을 알고 있고, 당신의 튜터링 후에 그것을 모으기 시작했지만 시작 후 첫 번째 오류를 발견했습니다.

    $ -o kernel.o -c kernel.asm으로
    bash : as : 명령을 찾을 수 없음 ...
    유사한 명령은 다음과 같습니다.
    'sa'
    'ac'

    저는 fedora 20을 작업 중이며 이와 관련하여 해결책을 찾을 수 없습니다. gcc 또는 가스를 변경해야하는지에 대한 안내에 감사드립니다.

    사전에 감사합니다

    1.    AdrianArroyoStreet

      오류 코드를 볼 수 있도록 GAS를 설치해야합니다. 나는 Fedora를 가지고 있지 않지만 이론적으로 yum install gcc-c ++를 수행하면 일반적으로 함께 제공되는 전체 GCC 제품군과 GNU를 설치합니다.

  46.   가스통 라미레즈

    저는 여러분과 함께 있습니다. C ++, C #에 대해 알고 있습니다 (마지막 항목은이 문제에서 그다지 유용하지는 않지만). 나쁜 점은 아직 경험이 부족하고 C 언어를 전혀 다루지 않습니다. 당신의 출판물은 훌륭합니다. 시간이 있으면 할 말이 많지 않습니다. 감사합니다.

  47.   Teresita del Jesus nah Sanchez

    큰 도움을 주셔서 대단히 감사합니다….

  48.   JKY

    나는 리눅스를 사랑한다 그것은 최고의 지역이다. 내 창문에 대한 진실은 내가 리눅스의 창조자가 윈도우의 창조자라는 것을 알고있는 쓰레기이다.

  49.   로드

    안녕하세요 저는 grub에서 오류가 발생합니다.
    오류 : /next/START.ELF 파일을 찾을 수 없음
    오류 : 먼저 커널을로드해야합니다.

    도와 주시고 구글 검색을 해주실 수 있나요?

  50.   엔리케 아빌라

    HELLO WORLD라는 메시지를 어떻게 보여줄 수 있나요? 저는 초보자인데 아직 잘 모르겠습니다.

  51.   카를로스 게레로 알바레즈

    다음과 같은 일이 발생합니다.
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld : kernel.o : 'stack'심볼에 대한 재배치 R_X86_64_32는 PIE 객체를 만들 때 사용할 수 없습니다. -fPIE로 재 컴파일
    / usr / bin / ld : 최종 링크 실패 : 출력에 표시 할 수없는 섹션
    collect2 : 오류 : ld가 1 종료 상태를 리턴했습니다.