2009-03-20 29 views
6

Tôi muốn xây dựng một hạt nhân nhúng cho một máy x86 bằng cách sử dụng Visual C++. Tôi có một số tệp mã C và lắp ráp để biên dịch và tôi muốn liên kết tất cả chúng lại với nhau theo cách tương thích với bộ nạp khởi động Multiboot như GRUB.Làm cách nào để tạo hình ảnh hạt nhân bằng Visual Studio?

+0

Bạn có chắc chắn muốn đi xuống đường dẫn MSVC không? Đó là một trình biên dịch tuyệt vời nhưng tôi nghĩ rằng điều này sẽ dễ dàng hơn nhiều với GCC/MingW –

+0

Tôi nghĩ GCC/MinGW cũng sẽ tạo ra các tệp thi hành PE. Tôi sẽ phải thực hiện những thay đổi cần thiết cho ELF cho PE trong cả hai môi trường. VS chỉ là một niềm vui để sử dụng, tôi nghĩ tôi thích nó hơn. –

Trả lời

6

OSDev có wiki entry on Visual Studio, có thể cung cấp một số cái nhìn sâu sắc, đặc biệt là với các liên kết đến Kaushik Srenevasan của blogentries về vấn đề hạt nhân PE được thiết kế để được nạp bởi Bootloader multiboot-based (như GRUB).

Một vài lớn, rộng đột quỵ điều bạn nên biết:

  • Trong header multiboot, bạn cần phải sử dụng kludge août.
  • Bạn cần chỉ định đối số/BASE: 0x100000 cho trình liên kết, vì vậy mã nhị phân cuối cùng dựa vào nơi bộ nạp khởi động sẽ đặt nó.
  • Điểm nhập hạt nhân của bạn (thường được gọi là 'kmain') cần có __declspec(noreturn) trên đó và bạn sẽ cần phải thực hiện __asm { hlt } thay vì trả lại.
+0

Sao chép và dán không hoạt động ở đây, một trong hai, nhưng chỉ vào lỗi: có vẻ như "... hạt nhân sử dụng% 5F03.html", nhưng phải là "... kernel-using_03.html". –

+0

Tôi không biết tại sao, nhưng tôi sao chép và dán nó từ thanh địa chỉ vào đây, và nó có chữ '_' khi tôi chỉnh sửa - SO dường như thay thế nó vì bất kỳ lý do gì. –

+0

Ok, tôi đã gửi email đến Nhóm SO và họ đã chỉ ra rằng có nhiều cách khác để tạo liên kết, vì vậy tôi đã chuyển nó sang một liên kết hoạt động. –

Các vấn đề liên quan