2012-10-16 47 views
14

Tôi đã không được mã hóa nhiều thời gian gần đây do trường học nhưng tôi đã quyết định tôi muốn bắt đầu làm việc trên phát triển hệ điều hành một lần nữa. Gần đây tuy nhiên tôi đã nghe những thứ về EFI như là sự thay thế cho BIOS. Tôi muốn phát triển một hệ điều hành cho một nền tảng sử dụng EFI chứ không phải là BIOS. Tôi đang gặp khó khăn trong việc tìm ra nơi để bắt đầu mặc dù. ai đó có thể chỉ cho tôi phương hướng đúng không? Có lẽ giải thích những gì EFI có nghĩa là để phát triển hệ điều hành và có thể cho tôi biết môi trường thử nghiệm (tốt nhất là ảo) tôi có thể sử dụng. Hoàn toàn thẳng thắn, tôi không thực sự chắc chắn chính xác EFI là gì. Tôi cũng nên đầu tư thời gian vào lắp ráp ARM? Tôi biết x86 hội nhưng tôi cảm thấy như đó là trở nên lỗi thời là tốt. Tôi thực sự bị mất và tôi rất thích nghe ý kiến ​​của bạn.Viết một hệ điều hành với UEFI

Cảm ơn

Trả lời

22

EFI là tiền thân của UEFI, đó là những gì mọi người thực sự sử dụng, mặc dù họ vẫn thỉnh thoảng tham khảo các điều như EFI. Bạn có thể nhận được thông số kỹ thuật có liên quan tại uefi.org.

Đặc tả UEFI xác định mọi thứ bộ tải khởi động có thể cần phải biết. Thông số PI xác định giao diện cho các nhà cung cấp silicon để sử dụng cho tính di động của mã của họ trong ngành. Vì vậy, bạn sẽ nghe về một hệ điều hành, như Win8, yêu cầu tuân thủ một phiên bản nhất định của Đặc tả UEFI, như 2.3.1c, đối với một số tính năng hoạt động, như khởi động an toàn. Tất cả điều này nói rằng EFI không thay thế BIOS nhiều như trở thành một tiêu chuẩn mà BIOS phải tuân thủ để hỗ trợ một số hệ điều hành.

Địa điểm để bắt đầu (sau khi bạn nhận được bản sao thông số kỹ thuật) là the TianoCore project on SourceForge. Một trong những dự án có OVMF, là mục tiêu máy ảo cho UEFI. Bạn cũng có thể muốn xem mục tiêu NT32 để chạy một dấu kiểm nhắc lệnh trong các cửa sổ. Đây là những công cụ thực sự tuyệt vời để sử dụng khi bạn muốn thiết kế một ứng dụng, như bộ nạp khởi động, nằm trên đầu các giao diện UEFI.

Theo như hội đồng học tập, tôi không khuyên bạn nên bắt đầu ở đó. Có rất nhiều điều cần biết và một phần lý do chúng tôi tạo ra UEFI là để các lập trình viên mới có thể làm việc trong C thay vì ASM. Có một vài nơi trong UEFI nơi chúng tôi sử dụng ASM, nhưng hệ thống xây dựng xử lý các chi tiết cho phép nối vào và bạn thường không cần kiểm soát khéo léo trạng thái của bộ xử lý hoặc hiệu suất bạn sẽ nhận được từ việc viết ASM. Lý do duy nhất khác bạn làm là kích thước, và vì phần còn lại của BIOS sẽ ở trong C, nó sẽ đánh bại mục đích trừ khi bạn viết lại toàn bộ thứ trong ASM, mà không ai sẽ làm. Tập trung vào việc tìm hiểu các thông số kỹ thuật và cách sử dụng chúng để viết các ứng dụng UEFI của riêng bạn.

6

Một câu trả lời cuối cho câu hỏi này, nhưng tôi có thể thêm những điểm sau đây nếu bạn chưa phát hiện ra chúng trong thời gian trung bình:

Có lẽ giải thích những gì EFI có nghĩa là để phát triển hệ điều hành

Thực ra, không nhiều lắm. Vâng có lẽ một chút. Được rồi, chúng ta hãy giải thích. UEFI cung cấp môi trường phần mềm cho giai đoạn tiền khởi động. Nó cũng cung cấp một số dịch vụ thời gian chạy cho hệ điều hành, tuy nhiên, hệ điều hành không phải là phần mềm UEFI, cuối cùng sẽ thúc đẩy hệ thống - các dịch vụ này cho phép bạn thực hiện các hoạt động liên quan đến cấu hình khởi động khác nhau - example. Mặt khác là nếu bạn chuẩn bị sử dụng bộ nạp khởi động phù hợp để nói multiboot 2 bạn không thực sự cần biết bất cứ điều gì về UEFI - bộ tải khởi động sẽ tải bạn theo thông số kỹ thuật multiboot, sau đó gọi ExitBootServices() trong đó Các thuật ngữ UEFI phá hủy môi trường phần vững.

Có thể tạo hạt nhân Linux có nhánh EFI và do đó khởi động "không có" trình tải khởi động - this blog shows you how. Bạn có thể làm điều này cho hạt nhân của bạn - bạn chỉ cần tạo ra một hạt nhân PE/COFF khớp với bit phần vững.

và có thể cho tôi biết những gì thử nghiệm môi trường (tốt nhất là ảo) Tôi có thể chúng tôi

Nếu bạn có thể đủ khả năng VMWare Workstation, điều này sẽ giúp bạn ồ ạt. Cũng như có chứa một cuống gdb như vậy mà bạn có thể gỡ lỗi bất cứ phần nào của bất cứ điều gì, bạn cũng có thể chỉnh sửa các tập tin định nghĩa máy ảo (* .VMX) để chứa

firmware="efi" 

và voila, VMWare sẽ khởi động một UEFI làm việc đầy đủ môi trường. Làm việc với Linux và Windows.

Bài đăng khác nhau trên internet đề cập đến các thiết lập QEMU và tất nhiên là VirtualBox. Tôi đã không bao giờ cá nhân thành công khởi động bất kỳ hệ thống hiện có trên nền tảng VirtualBox EFI, và tôi đã không cố gắng QEMU, mặc dù tôi tin rằng nó và giả lập khác nhau ra có lẽ làm việc.

Tôi cũng nên đầu tư thời gian vào lắp ráp ARM?

Điều đó tùy thuộc vào mục tiêu của bạn. Về vấn đề lắp ráp, tôi nghĩ bạn nên biết nó để viết một hệ điều hành. Tôi không nghĩ rằng nó quan trọng đối với nền tảng nào bạn viết - trên thực tế, tôi nghĩ viết cho nhiều người sẽ làm cho bạn đánh giá cao hơn về sự khác biệt giữa các máy.

Nói chung, tuy nhiên, tôi sẽ không cố gắng viết toàn bộ hệ điều hành trong hội đồng. Lý do nguyên tắc cho việc này là thời gian - tôi cho rằng đây là một dự án sở thích, vì vậy hãy nhận một số phần thưởng cho nỗ lực mở rộng của bạn sẽ vui hơn nhiều so với việc gỡ lỗi lắp ráp, đặc biệt là phần mềm mà bạn không quen thuộc. Bạn luôn có thể, khi bạn trở nên thông thạo hơn, hãy thay thế các bit lựa chọn bằng bộ lắp ráp, đặc biệt khi bạn có đủ phần còn lại của mã để kiểm tra nó.

0

Bạn có thể sử dụng qemu để thực hiện một số phát triển/thử nghiệm ứng dụng uefi. Xem this để biết thêm thông tin

Ngoài ra, tôi khuyên bạn nên làm quen với uefi và cố gắng phát triển trình điều khiển/ứng dụng trong mô hình uefi. Bạn có thể thử những thứ như chạy ngăn xếp mạng từ bộ nạp, cơ sở hạ tầng netbooting, có thể thiết lập GUI giao diện người dùng trước hệ điều hành. Điều này sẽ không chỉ làm cho bạn tốt tại uefi nhưng sẽ giúp bạn hiểu chi tiết specifc nền tảng.

Thats nói của tôi, nhưng các ý kiến ​​ở trên là tốt để ghi nhớ.