Mô phỏng Linus Torvalds: Tạo hệ điều hành của riêng bạn từ đầu (I)

Trước hết, hãy bình luận rằng đây là bài viết đầu tiên của tôi và tôi hy vọng tất cả các bạn thích nó.

Linus Torvals hạnh phúc

Trong loạt bài này, chúng tôi sẽ mô phỏng Linus Torvalds, chúng ta sẽ tạo hệ điều hành của mình từ 0. Trong tập đầu tiên này, chúng ta sẽ xem phần khởi động và chúng ta sẽ đặt một văn bản trên màn hình từ kernel của chúng ta.

Trong trường hợp của tôi, hệ điều hành được gọi là Tiếp theoLặn. Quyết định đầu tiên chúng ta phải đưa ra ngay khi xem xét hệ điều hành là bộ nạp khởi động sẽ là gì?

Ở đây có nhiều biến thể, và chúng tôi thậm chí có thể tự tạo một biến thể; tuy nhiên trong hướng dẫn này tôi sẽ sử dụng GRUB, bởi vì hầu hết đều biết ít nhiều điều gì đó về anh ta. Chúng tôi tạo một thư mục sẽ là thư mục gốc của hệ điều hành của chúng tôi và ở đó chúng tôi tạo thư mục / boot / grub

mkdir nextroot && cd nextroot

mkdir -p boot/grub

Ở đó, chúng tôi tạo tệp grub.cfg như sau:

menuentry "NextDivel" {
echo "Booting NextDivel"
multiboot /next/START.ELF
boot
}

Trong tệp này, chúng tôi đã thấy cách GRUB sẽ tải hạt nhân của chúng ta, trong trường hợp này, trong /next/START.ELF. Bây giờ chúng ta phải tạo hạt nhân của mình.

Đối với điều này, chúng tôi sẽ cần GCC y GAS (người lắp ráp dự án GNU, thường đi kèm với gcc). Vì vậy, chúng ta sẽ tạo hạt nhân.

Đầu tiên chúng ta tạo một tệp có tên kernel.asm. Tệp này sẽ chứa điểm bắt đầu của hạt nhân của chúng ta và cũng sẽ xác định multiboot (một tính năng của một số bộ nạp khởi động như GRUB). Nội dung của kernel.asm sẽ là:

.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

Mọi thứ liên quan đến multiboot chỉ đơn giản là tuân theo các thông số kỹ thuật không có gì khác. Mọi thứ sẽ bắt đầu từ đầu, nó sẽ gọi multiboot_entry, chúng tôi sẽ xác định tiêu đề multiboot trong 4k đầu tiên và chúng tôi sẽ đặt nó (với movl).

Sau đó, chúng tôi gọi NextKernel_Main là hàm C trong hạt nhân của chúng tôi. Trong vòng lặp, chúng tôi thực hiện tạm dừng để dừng máy tính. Điều này biên dịch với:

as -o kernel.o -c kernel.asm

Bây giờ chúng ta sẽ nhập môn lập trình bằng C. Bạn sẽ nghĩ rằng bây giờ mọi thứ đều là một miếng bánh, chúng ta đặt một printf en chính và đó là nó, chúng tôi đã làm nó.

Vâng không, kể từ khi printf y chính chúng là các chức năng được xác định bởi hệ điều hành, nhưng chúng tôi đang tạo ra chúng! Chúng tôi chỉ có thể sử dụng các chức năng mà chúng tôi tự xác định.

Trong các chương sau, tôi sẽ nói về cách đặt thư viện C của riêng chúng ta (glibc, bionic, newlibc) nhưng theo thời gian. Chúng tôi đã thảo luận rằng chúng tôi muốn đưa văn bản lên màn hình, chúng tôi sẽ xem cách chúng tôi thực hiện.

Có hai tùy chọn, một là gọi BIOS và một cách khác là quản lý bộ nhớ màn hình trực tiếp. Chúng tôi sẽ làm điều sau vì nó rõ ràng hơn từ C và nó cũng sẽ cho phép chúng tôi làm điều đó khi chúng tôi vào chế độ được bảo vệ.

Chúng tôi tạo một tệp có tên NextKernel_Main.c với nội dung sau:

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;
}

Với điều này, chúng tôi trực tiếp thao tác bộ nhớ VGA và từng ký tự mà chúng tôi đang viết nó. Chúng tôi biên dịch bằng cách tắt stdlib:
gcc -o NextKernel_Main.o -c NextKernel_Main.c -nostdlib -fPIC -ffreestanding

Nếu bạn đã làm được điều này đến nay, bạn sẽ muốn thử hệ điều hành hoàn toàn mới của mình ngay bây giờ, nhưng chúng tôi vẫn chưa hoàn thành. Chúng tôi cần một tệp nhỏ cho trình biên dịch biết vị trí của mỗi phần trong tệp. Điều này được thực hiện với một tập lệnh trình liên kết. Chúng tôi tạo 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 = .;
}

Với điều này, chúng tôi xác định vị trí của từng phần và điểm vào, bắt đầu, mà chúng tôi đã xác định trong kernel.asm. Bây giờ chúng ta có thể hợp nhất tất cả sự pha chế này:

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

Bây giờ chúng ta sao chép START.ELF vào / next bên trong thư mục mô phỏng thư mục gốc của hệ điều hành của chúng ta. Chúng tôi đi tới thư mục gốc của hệ điều hành mới bằng bảng điều khiển và xác minh rằng có hai tệp: một /boot/grub/grub.cfg và một /next/START.ELF khác.

Chúng tôi đi đến thư mục trên và gọi một tiện ích tạo ISO với GRUB được gọi là grub-mkrescue

grub-mkrescue -o nextdivel.iso nextroot

Khi chúng tôi đã làm điều này, chúng tôi sẽ có một ISO. ISO này có thể được mở trên máy tính x86 (Cả 64 bit) và máy ảo. Để kiểm tra nó, tôi sẽ sử dụng QEMU. Chúng tôi gọi QEMU từ dòng lệnh:

qemu-system-i386 nextdivel.iso

Sẽ bắt đầu biểnBIOS và sau này chúng ta sẽ có GRUB. Sau này nếu mọi thứ đều chính xác chúng ta sẽ thấy cụm từ của chúng ta.
Bạn sẽ nghĩ rằng điều này là khó khăn, tôi trả lời là có.

Thực sự việc tạo ra một hệ điều hành rất khó và cái này ở đây không làm được gì hữu ích. Trong các chương tiếp theo, chúng ta sẽ xem cách xử lý màu sắc trên màn hình, dự trữ bộ nhớ và nếu tôi có thể, cách lấy dữ liệu từ bàn phím.

Nếu ai đó không muốn sao chép mọi thứ ở đây, tôi có một kho lưu trữ tại GitHub (phức tạp hơn) với hệ điều hành Tiếp theoLặn. Nếu bạn muốn biên dịch Tiếp theoLặn bạn chỉ cần có git và 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

Tôi khuyến khích bạn cộng tác trên NextDivel nếu bạn có thời gian và mong muốn tạo một hệ điều hành. Có lẽ thậm chí còn vượt trội hơn Linux ... thời gian sẽ trả lời.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   sống động dijo

    :O

    1.    marianogaudix dijo

      Torvalds đã đưa hệ điều hành Minix (bắt nguồn từ UNIX) cho Andrew S. Tanenbaum và cải tiến nó.

      Tanenbaum đã đánh nhau với Linus, họ xúc phạm lẫn nhau. Tanenbaum nói rằng Microkernel là tương lai (HURD, Minix hình nón mới Microkernel).

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

  2.   eliotime3000 dijo

    Đây là bài viết hay nhất mà tôi thấy cho đến nay trên blog này. Tôi đã muốn biết những gì khác phải làm.

  3.   Carlos Gude dijo

    Được ấn tượng

  4.   trục dijo

    Thực sự ấn tượng!!

  5.   rhoconlinux dijo

    FUUUUUUA!
    đó là bài viết vui nhộn nhất mà tôi từng thấy hehe. Xin chúc mừng Adrián, một bài báo của con điếm! siêu thú vị !!! 🙂

    1.    Joaquin dijo

      Tôi đồng tình. Tôi tưởng tượng tình huống này:
      GNU / Linux Power User (với vẻ mặt vui vẻ):
      "Tôi đã biết cách biên dịch Gentoo của mình"

      Nerd (khinh thường): «pff, tôi đã tạo bản phân phối của riêng mình ...»

      1.    người giải mã dijo

        Có, tôi có thể tạo bản phân phối linux của riêng mình. Trên thực tế, tôi đang phát triển một initramfs và một hạt nhân cho Linux nhúng. Tạo hệ điều hành không giống với bản phân phối linux. Đầu tiên là khó hơn nhiều, gần như không thể, thứ hai, như bạn đã nói, có thể là bất cứ điều gì, ngay cả Ubuntu với logo xD đã thay đổi. Vì vậy, tôi sẽ để nó như thế này:

        GNU / Linux Power User (với vẻ mặt vui vẻ)
        - Tôi đã biết cách biên dịch Gentoo của mình

        Semi Nerd
        - Pff, tôi đã theo dõi Linux từ đầu và tôi đã tạo bản phân phối của riêng mình

        Nerd (với thái độ khinh thường)
        - pff, vì tôi đã lập trình hạt nhân trong trình hợp dịch và trong C

        Saludos!

  6.   Cronos dijo

    Điều này thú vị với tôi, đang chờ các chương tiếp theo.

  7.   abimaelmartell dijo

    Tôi đã xem hướng dẫn này cách đây một thời gian, nó dành cho C ++
    https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

    1.    AdrianArroyoStreet dijo

      Cảm ơn vì liên kết, tôi sẽ xem qua.

  8.   Jose Jácome dijo

    Tôi muốn một Hệ điều hành tương thích 100% với đồ họa AMD: /

    1.    Ivanlinux dijo

      Windows

      1.    Jose Jácome dijo

        hahaha trong Windows Catalyst không hỗ trợ OpenGL, mặc dù trong Linux, tôi không thể sử dụng hết sức mạnh đồ họa, tôi sẽ tiếp tục chờ xem điều gì sẽ xảy ra!

        1.    beny_hm dijo

          chỉ cần chờ van để quét sạch thị trường

  9.   KZKG ^ Gaara dijo

    Tuyệt vời, hoàn hảo, đóng góp xuất sắc, có vẻ như một loạt bài đăng tuyệt vời 🙂

  10.   O_Pixote_O dijo

    Buah Tôi muốn biết cách lập trình để giúp bạn, chỉ đơn giản là một cách thực hành với kiến ​​thức mà bạn đang học và giúp đỡ một người. Bây giờ tôi để lại cho bạn phương châm thu hút sự chú ý đến dự án sau khi bạn hoàn thành nó "Sử dụng NextDivel, phim khiêu dâm trông giống nhau (hoặc tốt hơn).", Bạn sẽ quét xD.

  11.   tên này là sai dijo

    Mooooooolaaa !!!!

  12.   nordi dijo

    Bài viết rất hay, nhưng bạn chỉ tò mò tại sao bạn chưa theo dõi dự án Linux From Scratch?

    Liên quan

    1.    AdrianArroyoStreet dijo

      Chà, Linux từ Scratch là tốt, và bạn có thể nói đó là của bạn, nhưng nó thực sự rất máy móc:
      -Tải xuống phông chữ
      -Patch chúng
      - Biên dịch
      -Tải về
      -Tiếp theo
      Ở đây, ngay cả khi kết quả cuối cùng tệ hơn, bạn có thể nói rằng bạn đã xem xét tất cả các tệp.

    2.    người giải mã dijo

      Như đã rõ từ nhận xét trước đây của tôi, bởi vì nó không có cùng mức độ phức tạp. Hơn nữa, linux từ đầu không thực sự, trái với tên gọi của nó, tạo ra một hệ thống từ đầu. Tạo một hệ thống từ đầu là tự lập trình nó, viết nhân của riêng bạn, không phải nhân linux, nếu có thể, thậm chí là bootloader của riêng bạn thay vì grub, lilo, syslinux, v.v. Mặc dù một LFS không phải là một kỳ công nhỏ và khá phức tạp, nhưng nó thậm chí không tiến gần đến việc lập trình hạt nhân của riêng bạn ...

      Ngoài ra, tôi đồng ý với AdrianArroyo Calle rằng nó quá máy móc, tôi đã đọc nó đôi khi và bạn bỏ cuộc ở trang thứ sáu, họ cũng bảo bạn sử dụng phiên bản gói nào vì nếu không thì hướng dẫn sẽ không hoạt động (đó cho thấy sự thiếu linh hoạt, Theo tôi). Tôi nghĩ tốt hơn là bạn nên có một cái gì đó theo ý tưởng của riêng bạn, biên dịch các gói mà bạn muốn, thậm chí lập trình một số, biên dịch hạt nhân linux và trong hòa bình.

      Saludos!

  13.   Cookie dijo

    uuuoooohh !! Tôi chưa bao giờ chụp được một bài viết nhiều như bài viết này.
    Hãy tiếp tục 😀

  14.   linux_user dijo

    Tôi không biết có chuyện gì:

    lỗi: không tìm thấy tiêu đề multiboot.
    lỗi bạn cần tải hạt nhân trước

    1.    AdrianArroyoStreet dijo

      Nếu đó là bất kỳ sự an ủi nào, tôi đã phạm phải sai lầm tương tự. Hãy thử sử dụng các nguồn có trong GitHub, lỗi đã được giải quyết. Dù sao thì tôi nghĩ nếu bạn thay đổi dòng grub.cfg từ "multiboot /next/START.ELF" thành "kernel /next/START.ELF" thì nó có thể hoạt động. Tôi không biết chính xác.

      1.    mcbanana dijo

        Trước hết, lối vào tráng lệ 🙂
        Tôi đang gặp vấn đề tương tự khi tải hạt nhân từ grub. Ngay cả khi sử dụng các nguồn GitHub hoặc thay đổi multiboot cho kernel ...

        lỗi: không tìm thấy tiêu đề multiboot.
        lỗi: không có hạt nhân được tải

        1.    AdrianArroyoStreet dijo

          Bạn có đang sử dụng clang làm trình biên dịch không? Thay đổi nó cho gcc
          Bạn đã nhớ sử dụng tập lệnh trình liên kết chưa? Nó là cần thiết để trình liên kết (ld trong trường hợp của chúng tôi) biết vị trí trong tệp mà nó sẽ đặt mỗi thứ. Trong trường hợp này, tiêu đề multiboot phải ở đầu.
          Bạn đang sử dụng hệ thống CMake? Nếu bạn sử dụng nó, tôi nghĩ rằng nó không thất bại.
          Nếu nó không hiệu quả với bạn, tôi sẽ cố gắng tìm một giải pháp khác.

  15.   khourt dijo

    [+100]
    Chỉ tuyệt vời !!!

  16.   invisible15 dijo

    Nó thực sự tuyệt vời 🙂

  17.   tanrax dijo

    Tôi bỏ mũ ra. Bài ấn tượng. Xin chúc mừng.

  18.   người đàn ông dijo

    ồ!
    Sẽ thật tuyệt nếu bạn có thể mở các ứng dụng được tạo bằng HTML5 và Javascript mà không cần phải sử dụng trình duyệt, điều đó có khả thi không?
    Tôi đang nói về việc chúng giống như các ứng dụng gốc.
    Vì vậy, sẽ dễ dàng lập trình cho hệ điều hành này 😀

    1.    AdrianArroyoStreet dijo

      Trong trường hợp này, tôi sẽ không làm điều đó vì phải làm nhiều việc hơn đằng sau nó nhưng có một hệ điều hành được gọi là "là" thực hiện những gì bạn nói. Trên thực tế, dòng lệnh là JavaScript và các cửa sổ được vẽ bằng các hàm JavaScript Canvas. Các kỹ sư của Nintendo đã làm điều đó và bây giờ nó là mã nguồn mở.

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

      1.    người đàn ông dijo

        Valla, cảm ơn vì thông tin 😀
        Tôi sẽ xem qua một chút

  19.   patodx dijo

    Bất cứ ai có thể tạo ra hệ điều hành của riêng mình có thể chết một cách yên bình, vì trình độ trí tuệ mà anh ta phải đạt được với nó; Nó khiến bạn phân biệt thiên đường hay địa ngục.
    Mẩu tin đăng.

    1.    Miguel dijo

      Cho đến nay không ai được biết là chỉ tạo ra một thứ có thể nói là một hệ điều hành tốt được làm từ đầu, thậm chí không phải là Linux Torvalds như bạn nói lúc đầu, vì điều này bắt đầu từ các nguồn Unix và mọi thứ khác đều được tác giả chung cho nhiều hơn một người, cuộc đời là rất ngắn và việc bắt đầu lại từ đầu là điều không tưởng đối với bất kỳ ai, ngay cả khi điều ngược lại được mong muốn, nó có thể được chứng minh trong nhiều sai lầm trong việc sao chép và dán bởi Linux Torvalds

      1.    skamiglione dijo

        Các nguồn unix bị đóng cửa, việc sử dụng minix ... là những thứ khác.

      2.    Philip Robaina dijo

        và những người đã tạo ra QDOS những gì?
        dựa trên cái gì?

  20.   Tesla dijo

    Theo những gì tôi thấy, những người không có hệ điều hành của riêng họ là bởi vì họ không muốn, hahahaha.

    Bây giờ nghiêm túc, rất thú vị! Phần lớn vượt quá kiến ​​thức lập trình hạn chế của tôi, nhưng tôi sẽ đọc các phần khác của loạt bài này với sự mong đợi.

    Cảm ơn vì bài đăng!

  21.   Manuel R. dijo

    Bạn để lại cho tôi một khuôn mặt O_O ... không có ý đánh giá thấp sự đóng góp của bất kỳ ai, đó là "pro" nhất mà tôi thấy gần đây. Trân trọng.

  22.   aitor_cz dijo

    Bài viết rất hay, Adrián. Xin vui lòng tiếp tục…

  23.   mj dijo

    Bạn đang đùa vào ngày Cá tháng Tư ?, Đừng có ý "Mô phỏng Linus Torvalds: Tạo hệ điều hành của riêng bạn từ đầu." Tôi không nghĩ rằng đó là khó khăn cho những người đang theo đuổi sự nghiệp trong một số viện công nghệ hoặc trường đại học; nhưng đối với tôi, tôi là một cung thủ mới vào nghề (có những người gọi chúng tôi là "Noob" nhưng tôi tự nhận mình là Newbie hơi lười biếng hơn) nghe như không bước trên đất liền. Dù sao BÀI VIẾT NÀY TẠO ĐƯỢC RẤT NHIỀU SỰ CỐ GẮNG VÀ KHÔNG CÓ SỰ CỐ GẮNG VÀ TÔN TRỌNG CHO NGƯỜI BIÊN TẬP CỦA NÓ, CHÚC MỪNG BẠN; Điều đầu tiên tôi sẽ làm là cố gắng hiểu ít nhất một chút tài liệu quý giá này.
    CẢM ƠN Adrian Arroyo Calle, công việc xuất sắc và sự truyền đạt kiến ​​thức cao quý.

  24.   Blaire pascal dijo

    LEL Bài viết xuất sắc, hãy duy trì nó.

  25.   f3niX dijo

    Thật là một bài viết tuyệt vời, đây là những gì tôi đã bỏ lỡ desde linux. Tuyệt vời.

  26.   hồng ngọc dijo

    Bài viết tuyệt vời, cảm ơn bạn rất nhiều.
    Tôi không hiểu tệp link.ld làm gì, ai đó có thể giải thích cho tôi được không?

    1.    AdrianArroyoStreet dijo

      Tệp link.ld cho trình liên kết biết (trong trường hợp này là ld) ở vị trí nào trong tệp kết quả mỗi phần của mã. Chúng tôi cũng xác định điểm nhập vì chúng tôi không có hệ điều hành, chúng tôi không thể sử dụng main như một chương trình bình thường, trong trường hợp này chúng tôi chọn hàm start.

  27.   maxi dijo

    Tuyệt vời tất cả bài viết của bạn! Chờ đợi 7! Điều gì sẽ xảy ra nếu tôi nghi ngờ, ví dụ, nếu tôi chỉ muốn chạy một thuật toán, không có hệ điều hành, làm thế nào để biết tôi có thể sử dụng cái gì và cái gì không phải C?

    1.    AdrianArroyoStreet dijo

      Nếu bạn sử dụng nó như vậy, bạn sẽ không thể sử dụng bất kỳ thứ gì từ stdlib, đây là thứ thực tế mà mọi người sử dụng (không có malloc, miễn phí, printf, scanf, strcmp, v.v.). Mọi thứ phải được triển khai trực tiếp từ bộ nhớ hoặc ASM. Có thể trong chương cao hơn, tôi sẽ chỉ cho bạn cách cài đặt thư viện C cho hệ điều hành. Nếu bạn sử dụng C ++, bạn không thể sử dụng các ngoại lệ và các toán tử mới và xóa (và chắc chắn hơn thế nữa).

    2.    người chuyển mạch dijo

      tôi nghĩ cái này nó có thể cung cấp cho bạn ý tưởng tốt hơn về cách thực hiện.

  28.   Esteban dijo

    Xin chào, khoảng 5 năm trước, tôi đã theo dõi một ấn phẩm tương tự và phát triển một kênh nhỏ bắt đầu theo cách tương tự, nó có một số khía cạnh cần cải thiện, nhưng nó có thể khiến bạn quan tâm, nó chạy ở chế độ được bảo vệ, thực hiện đa nhiệm và thực hiện ảo hóa bộ nhớ, gần đây tôi đã làm việc trên nó trình điều khiển đĩa và ổ đĩa cd để làm cho nó có thể cài đặt và không chỉ chạy trên cd trực tiếp ... Xin chào.

  29.   Johan dijo

    Kính gửi, tôi gặp lỗi khi thực hiện lệnh:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc

    link.ld: lỗi cú pháp 5
    Collect2: error: ld trả về 1 trạng thái thoát

    liên kết.ld
    . = 0x00100000;
    .multiboot_header: {
    * (. multiboot_header)
    }

    Ở dòng 5 tôi không thấy lỗi, có ai giống không?

    Tôi đang làm việc với một wheezy debian ảo hóa trong virtualbox

    1.    Hình ảnh trình giữ chỗ Julian Reyes Escrigas dijo

      thêm dấu ";" ở cuối * (. multiboot_header)

  30.   Eric Orellana Romero dijo

    Sáng kiến ​​xuất sắc, tôi chắc chắn sẽ theo dõi các chương của bài này, dự định sẽ học hỏi được nhiều điều từ nó. Cảm ơn bạn rất nhiều vì đã dành thời gian để dạy chúng tôi. Một chi tiết duy nhất về vấn đề này, cần lưu ý rằng Linus Torvalds không phải là người tạo ra bất kỳ hệ điều hành nào, anh ấy đã tạo ra Nhân của hệ thống GNU / Linux (nhân đã được sử dụng trong hệ điều hành khác), điều này vẫn đáng giá, nhưng điều quan trọng là phải ghi công Richard Stallman vì đã tạo ra hầu hết các hệ điều hành.

    Cảm ơn bạn rất nhiều cho ý kiến ​​đóng góp và tôi hy vọng bạn xem xét quan sát của tôi.

  31.   Hình ảnh trình giữ chỗ Julian Reyes Escrigas dijo

    Tôi đã lộn xộn với chủ đề này trong một thời gian, tôi bắt đầu quan tâm ngay khi tôi đọc tiêu đề. nhưng tin nhắn vẫn nhận được

    lỗi: không tìm thấy tiêu đề multiboot.
    lỗi bạn cần tải hạt nhân trước

    Tôi đã tải những gì tôi chụp lên một repo trên github https://github.com/rkmax/GenyOS

    1.    martin biệt thự dijo

      Điều tương tự cũng xảy ra với tôi. Bạn đã tìm ra giải pháp chưa?

  32.   Carlos dijo

    một câu hỏi tôi bắt đầu giới thiệu cú pháp và dòng menu cho tôi biết lệnh không tìm thấy ai có thể cho tôi biết tại sao
    đây là những gì tôi làm

    BLACK @ BLACK-pc: ~ / blackroot $ menuentry «NextDivel» {
    menuentry: không tìm thấy lệnh

    1.    AdrianArroyoStreet dijo

      Nội dung của nội dung này không được nhập vào dòng lệnh, mà là trong tệp bạn tạo có tên grub.cfg

  33.   Nodetin dijo

    Bài viết xuất sắc, cảm ơn bạn!

  34.   David dijo

    Đẹp mắt…!! nó giống như liên kết bị thiếu.

  35.   r.garciag dijo

    Tôi thích các hướng dẫn về LInus Torvalds giả lập của bạn, nhưng có một bước tôi không hiểu, như sau:
    Bây giờ chúng ta sao chép START.ELF vào / next bên trong thư mục mô phỏng thư mục gốc của hệ điều hành của chúng ta. Chúng tôi đi tới thư mục gốc của hệ điều hành mới bằng bảng điều khiển và xác minh rằng có hai tệp: một /boot/grub/grub.cfg và một /next/START.ELF khác.

    Chúng ta vào thư mục trên và gọi một tiện ích tạo ISO với GRUB có tên là grub-mkrescue

    Ai đó có thể giải thích nó cho tôi không: p

    1.    AdrianArroyoStreet dijo

      Đơn giản để tạo ISO tối thiểu mà GRUB có thể tải, chúng tôi sao chép hạt nhân vào (/ của ISO, bất kỳ thư mục nào) /next/START.ELF và tệp cấu hình GRUB vào (/ của ISO, bất kỳ thư mục nào) / boot / grub / grub.cfg. Sau khi hoàn tất, chúng tôi vẫn chưa cài đặt GRUB trên ISO và có một tiện ích tạo ISO từ một thư mục và cài đặt GRUB có tên là grub-mkrescue. Sau đó, cuối cùng chúng tôi sẽ kết thúc với một ISO khởi động đã được cài đặt GRUB, có thể đọc cấu hình để sau này thực thi chính xác START.ELF. Tôi không biết mình đã giải thích chưa, nhưng những gì chúng tôi làm là một loại hệ thống tệp sai mà chúng tôi tạo ISO.

  36.   sự chú ý của miguel jose guevara dijo

    Tuyệt quá

  37.   Michael Moreno dijo

    Chà, thực sự nhìn vào một hệ thống mới không quá nhiều nhưng nếu bạn cải tiến linux, chẳng hạn như tạo một hạt nhân linux với thành phần máy chủ hoạt động như một vi hạt nhân nếu bạn muốn, tức là một cấu trúc exo với hành vi vi hạt nhân sẽ là siêu và linux.

    Điều khác là tôi không phải là một chuyên gia về lập trình, chỉ cần một vài c ++ và một số java, nó sẽ đủ để tôi cung cấp cho chương trình hạt nhân linux một mô-đun, rút ​​ruột nó, sửa đổi nó, v.v.

  38.   Mùa ĐôngNgười Lính53 dijo

    Không nghi ngờ gì nữa, tôi đã phải làm trong kỳ nghỉ.

  39.   Fermín dijo

    Cái hay này và bạn thiết kế và viết mã nó trong chương trình nào
    làm ơn cho tôi câu trả lời đó

  40.   Đầu óc tối tăm dijo

    Khi biên dịch từ git của bạn, tôi nhận được:

    [jmponce @ jar build] $ cmake ..
    - Tạo thư mục NextRoot
    - Tạo tập lệnh ISO
    làm cho DESTDIR = cài đặt tiếp theo
    ./iso.sh
    - Tìm thấy Doxygen: / usr / bin / doxygen (tìm thấy phiên bản "1.8.9")
    - Cấu hình xong
    - Tạo xong
    - Các tệp xây dựng đã được ghi vào: / home / jmponce / next-divel / build
    [jmponce @ jar build] $ make
    Quét các phần phụ thuộc của mục tiêu START.ELF
    [7%] Xây dựng đối tượng ASM-ATT src / CMakeFiles / START.ELF.dir / start / boot.asm.o
    [14%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / NextShellLite.cpp.o
    [21%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_Screen.cpp.o
    [28%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / NextKernel_Main.cpp.o
    [35%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_Panic.cpp.o
    [42%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_Timer.cpp.o
    [50%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_Memory.cpp.o
    [57%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_Ports.cpp.o
    [64%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_GDT.cpp.o
    [71%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_ISR.cpp.o
    [78%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_String.cpp.o
    [85%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_IRQ.cpp.o
    [92%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_IDT.cpp.o
    [100%] Xây dựng đối tượng CXX src / CMakeFiles / START.ELF.dir / start / ND_Keyboard.cpp.o
    Liên kết CXX có thể thực thi START.ELF
    / usr / bin / ld: Không tương thích /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/libgcc.a bị bỏ qua khi tìm -lgcc
    / usr / bin / ld: không tìm thấy -lgcc
    Collect2: error: ld trả về trạng thái thoát 1
    src / CMakeFiles / START.ELF.dir / build.make: 402: Không thành công hướng dẫn cho mục tiêu 'src / START.ELF'
    make [2]: *** [src / START.ELF] Lỗi 1
    CMakeFiles / Makefile2: 106: Lỗi hướng dẫn cho đích 'src / CMakeFiles / START.ELF.dir / all'
    make [1]: *** [src / CMakeFiles / START.ELF.dir / all] Lỗi 2
    Makefile: 117: Không thành công trong hướng dẫn cho mục tiêu 'tất cả'
    thực hiện: *** [tất cả] Lỗi 2

    1.    AdrianArroyoStreet dijo

      Lỗi dường như là nó không thể tìm thấy llibgcc vì bạn có phiên bản 64-bit và hiện tại hệ thống xây dựng buộc phải sử dụng 32-bit. Bạn nên cài đặt gói tương thích trên bản phân phối của mình hoặc tốt hơn, sử dụng hệ thống 32 bit.

      1.    Ronaldo Rodríguez dijo

        Tôi có 32 bit và tôi gặp lỗi tương tự, ý bạn là hệ điều hành hay kiến ​​trúc? của tôi là 64 Bit, nhưng tôi đang sử dụng Ubuntu 32 bit, đừng hỏi, vấn đề tài chính, với điều đó tôi nói tất cả.

  41.   Jorge dijo

    Chủ đề xuất sắc, đang chờ phạm vi lớn hơn. Chúc mừng

  42.   Jhon dijo

    Tuyệt vời, tôi hy vọng nhiều hơn nữa

  43.   Soid perez dijo

    Xin chào, tôi là một đại sứ trẻ, người muốn tạo ra một hệ điều hành hỗ trợ tất cả các chương trình và nền tảng để các nhà phát triển không cần phải có máy hoặc ứng dụng hoặc chương trình mạnh trên máy tính.
    Đó là lý do tại sao tôi quan tâm đến bài đăng này nhưng khi tôi tải xuống git của bạn hoặc cố gắng tạo nó, mọi thứ đều hoạt động cho đến khi tôi thực thi lệnh ./iso.sh hoặc grub-mkrescue -o nextdivel.iso nextroot, bạn gặp lỗi này

    "Grub-mkrescue: cảnh báo: xorriso của bạn không hỗ trợ" –grub2-boot-info ". Một số tính năng đã bị vô hiệu hóa. Sử dụng xorriso 1.2.9 trở lên ..
    grub-mkrescue: cảnh báo: xorriso của bạn không hỗ trợ "–grub2-boot-info". Hình ảnh hạt nhân của bạn quá lớn. Khởi động đĩa đã bị vô hiệu hóa. Sử dụng xorriso 1.2.9 trở lên .. »
    Tôi thực sự không biết gì vì tôi biết rất nhiều về ứng dụng và web nhưng tôi không biết gì về grub

    1.    AdrianArroyoStreet dijo

      Bạn có thể cần cập nhật chương trình xorriso trên bản phân phối của mình. Bạn sử dụng bản phân phối và phiên bản nào?

      1.    Soid perez dijo

        Tôi sử dụng xubuntu 14.04fter và cố gắng chạy xorriso nhưng shell nói với tôi rằng nó không thể tìm thấy nó và tôi nhận được apt-get install xorriso mặc dù tôi thực sự mong đợi một số phản hồi vì tôi đã gặp phải một trải nghiệm tồi tệ khi cài đặt những thứ mà tôi không biết trong linux hehe . Tôi sẽ cập nhật nó ngay bây giờ và cho bạn biết điều gì đã xảy ra

      2.    AdrianArroyoStreet dijo

        Sau đó cài đặt xorriso từ trung tâm phần mềm hoặc đơn giản từ thiết bị đầu cuối làm "sudo apt-get install xorriso"

      3.    Soid perez dijo

        Tôi đã làm mọi thứ bạn nói với tôi và với cả git và của tôi, tôi nhận được xorriso 1.3.2: Trình thao tác hệ thống tệp RockRidge, dự án libburnia.

        Ổ đĩa hiện tại: -outdev 'stdio: nextdivel.iso'
        Phương tiện hiện tại: tệp stdio, có thể ghi đè
        Trạng thái phương tiện: trống
        Tóm tắt phương tiện: 0 phiên, 0 khối dữ liệu, 0 dữ liệu, 1901 triệu miễn phí
        Đã thêm vào hình ảnh ISO: thư mục '/'='/tmp/grub.OEqSzV'
        xorriso: CẬP NHẬT: 546 tệp được thêm vào trong 1 giây
        xorriso: FAILURE: Không thể xác định các thuộc tính của tệp nguồn '/ media / gaia / Jupiter1 / ShellSystem / nextroot / nextroot': Không có tệp hoặc thư mục nào như vậy
        xorriso: CẬP NHẬT: 546 tệp được thêm vào trong 1 giây
        xorriso: aborting: -abort_on 'FAILURE' gặp phải 'FAILURE'
        và tôi không hiểu cấu trúc của tôi là /nextroot/boot/grub/grub.cfg và nextroot / next / START.ELF

      4.    Soid perez dijo

        Cảm ơn, tôi đã sẵn sàng tiến lên phía trước, một người bạn đã giúp tôi và cho tôi biết điều tôi đã làm sai là tổ chức thư mục, vì vậy tôi đã giải quyết và thế là xong

      5.    erik dijo

        Xin lỗi, bạn có thể cho tôi biết bạn đã thực hiện quy trình nào vì tôi không gặp lỗi gì khi khởi động: không có tệp hoặc thư mục đó

        không có thiết bị khởi động.

  44.   jose dijo

    Chúc mừng! Tôi đã định nhờ bạn giúp đỡ nếu bạn có thể gửi cho tôi một email với những gì bạn giải thích ở đây, tôi đã hơi bối rối và tôi cần phải so sánh những gì tôi có với những gì bạn giải thích, có lẽ điều tôi không rõ là liệu. việc tạo grub. cfg được thực hiện trong thiết bị đầu cuối gcc hay chính xác là ở đâu? cảm ơn bạn nhiêu lăm!

    1.    AdrianArroyoStreet dijo

      Bạn tạo tệp grub.cfg bằng bất kỳ trình soạn thảo văn bản nào và bạn phải lưu tệp đó trong PROJECT_FOLDER / boot / grub / grub.cfg

  45.   jhuazano dijo

    Xin chào Adrian, đầu tiên xin chúc mừng bạn và cảm ơn bạn đã đóng góp.

    Bạn biết rằng tôi đang làm điều này để thực hành và tôi bắt đầu tập hợp nó lại với nhau sau khi bạn dạy kèm, tuy nhiên sau khi bắt đầu, tôi phát hiện ra lỗi đầu tiên

    $ dưới dạng -o kernel.o -c kernel.asm
    bash: as: lệnh không tìm thấy ...
    Các lệnh tương tự là:
    'sa'
    'AC'

    Tôi đang làm việc trên fedora 20 và tôi không thể tìm ra giải pháp về vấn đề này, tôi đánh giá cao sự hướng dẫn của bạn về việc tôi nên thay đổi thứ gì đó bằng gcc hay gas

    cảm ơn trước

    1.    AdrianArroyoStreet dijo

      Bạn phải cài đặt GAS để tôi có thể xem mã lỗi. Tôi không có Fedora trong tay nhưng về lý thuyết nếu bạn cài đặt gcc-c ++, bạn sẽ cài đặt toàn bộ bộ GCC và nó thường đi kèm với GNU As.

  46.   Gaston Ramirez dijo

    Tôi với bạn, tôi biết một số điều về C ++, C # (mặc dù cái cuối cùng này không hữu ích lắm trong vấn đề này) điều tồi tệ là tôi vẫn còn thiếu kinh nghiệm, tôi không bao giờ xử lý ngôn ngữ C, ấn phẩm của bạn rất tuyệt Tôi không có nhiều điều để nói, nếu có thời gian tôi xem. Cảm ơn bạn.

  47.   Teresita của Jesus Nah Sanchez dijo

    Cảm ơn bạn rất nhiều vì sự giúp đỡ tuyệt vời….

  48.   vui vẻ dijo

    Tôi yêu linux, đó là khu vực tốt nhất ở đó, sự thật đối với cửa sổ của tôi là rác mà tôi biết rằng người tạo ra linux là người tạo ra windows

  49.   Cưỡi dijo

    Xin chào, tôi gặp lỗi trong grub nói
    error: file /next/START.ELF Không tìm thấy
    lỗi: bạn cần tải hạt nhân trước

    Bạn có thể giúp tôi và googled nhưng tôi không thể tìm thấy

  50.   Henry Avila dijo

    Làm ơn, làm cách nào để tôi có thể hiển thị thông báo HELLO WORLD? Tôi là người mới bắt đầu và tôi vẫn chưa biết đầy đủ

  51.   CARLOS GUERRERO ALVAREZ dijo

    Điều sau xảy ra với tôi:
    gcc -o START.ELF kernel.o NextKernel_Main.o -Tlink.ld -nostdlib -fPIC -ffreestanding -lgcc
    / usr / bin / ld: kernel.o: tái định cư R_X86_64_32 chống lại ký hiệu `ngăn xếp 'không thể được sử dụng khi tạo một đối tượng PIE; biên dịch lại với -fPIE
    / usr / bin / ld: liên kết cuối cùng không thành công: phần không thể trình bày trên đầu ra
    Collect2: error: ld trả về 1 trạng thái thoát