2009-03-16 18 views
8

Tôi thích những thách thức về lập trình và viết hạt nhân có vẻ là một thách thức về lập trình.Phát triển hạt nhân và thử nghiệm chúng trong các máy ảo

Thật không may, hạt nhân đặc biệt khó kiểm tra vì chúng cơ bản là lõi của hệ điều hành và do đó chúng không thể dễ dàng chạy trên hệ điều hành.

Tuy nhiên, tôi biết về các ứng dụng được gọi là Máy ảo có thể mô phỏng phần cứng máy tính.

Cách dễ nhất/tốt nhất để phát triển và thử nghiệm hạt nhân (C + Assembly) bằng cách sử dụng Máy ảo là gì?

Trả lời

11

Trong khi BOCHS có vẻ tốt hơn khi cho bạn biết khi có sự cố gì đó nghiêm trọng với hệ điều hành thú cưng của bạn ... điều đó thật là tuyệt! Tôi sử dụng VirtualPC cho thử nghiệm mục đích chung và BOCHS khi mọi thứ trở nên u ám.

Ngoài ra, bạn sẽ có nhiều khả năng khởi động hệ điều hành sau mỗi 2 phút, do đó, nó giúp có một số cách tự động để xây dựng hình ảnh khởi động & kích hoạt PC ảo.

Tôi đã xây dựng một ảnh đĩa mềm khởi động GRUB với tất cả các công cụ cần thiết để khởi động Kernel.Bin từ gốc. Tôi sử dụng một tập tin thực thi để sao chép tệp này vào thư mục dự án ảo, sử dụng FAT Image Generator để sao chép hạt nhân của tôi vào hình ảnh. Sau đó, chỉ cần khởi chạy dự án VirtualPC. Vola!

Trích từ tập tin thực thi của tôi:

COPY Images\Base.vfd Images\Boot.vfd /Y 
fat_imgen.exe modify Images\Boot.vfd -f Source\Bin\KERNEL.BIN 
COPY Images\Boot.vfd Emulators\VirtualPC\ /Y 
START Emulators\VirtualPC\MyOS.vmc 

Một gợi ý cuối cùng: Thiết lập quá trình ưu tiên VirtualPC thấp - tôi tin tưởng vào thế này! Tôi rất sẵn lòng trao đổi một số mã!

Công cụ: DGJPP, NASM, GRUB.
Code: osdev.org, osdever.net

+0

Tôi không có đầu đọc đĩa mềm trong máy tính của mình, nhưng tôi đoán tôi không cần đĩa mềm cho ảnh đĩa mềm. Hướng dẫn của bạn có vẻ chính xác ngoại trừ việc tôi sử dụng Linux ... bất kỳ điều gì đặc biệt cho hệ điều hành đó? – luiscubal

+0

Vâng, ở đây tôi thiếu - Trải nghiệm Linux của tôi rất hạn chế. Từ những gì tôi hiểu: Tạo một hình ảnh đĩa mềm và sao chép các tập tin vào nó đơn giản hơn nhiều so với trong các cửa sổ, nhưng bất kỳ câu trả lời nào từ tôi trong đấu trường đó có thể chỉ là sai hướng. Tuy nhiên, nhìn vào VMWare cho Linux. Đó là thứ tốt! – NTDLS

+0

Linux: trình biên dịch rõ ràng là gcc, không phải djgpp (mà chính nó là một cổng của gcc). –

0

Có lẽ chỉ cần thiết lập máy (x86, tôi đoán) và sau đó điều tra chính xác cách hoạt động của máy trong khi khởi động. Nên có một hoặc nhiều tệp trong hệ thống tệp của máy chủ hoạt động như hệ thống tệp của máy ảo và sau đó bạn cần đặt một số thông tin về ngành khởi động ở đó làm cho hạt nhân đang phát triển của bạn khởi động.

Điều đó tất nhiên có nghĩa là hệ thống xây dựng trên máy chủ có cách viết hạt nhân vào hệ thống tệp của máy ảo, điều này có thể khác nhau về độ khó.

Chọn ngẫu nhiên một, bochs dường như support chỉnh sửa phương tiện truyền thông khởi động từ bên ngoài bằng cách sử dụng các công cụ tiêu chuẩn như dd, vv

0

Đó là đơn giản. Thiết lập một máy ảo, viết kernel của bạn, sao chép nó vào máy ảo, khởi động máy ảo.

Bạn sẽ cần cụ thể hơn nếu bạn muốn được tư vấn cụ thể hơn.

1

Bạn có thể quan tâm nhìn vào HelenOS. Nó từ một microkernel đầu đã được chuyển sang nhiều kiến ​​trúc (khởi động tốt trên kim loại trần) được phát triển bằng cách sử dụng các bộ mô phỏng như Simics và QEMU.

Chúng tôi sử dụng một grub tĩnh được sao chép vào ISO cuối cùng trong quá trình xây dựng.Một số điều chỉ cần được như vậy cho đến khi hệ điều hành trở thành tự lưu trữ. Tôi khuyên bạn KHÔNG nên triển khai thư viện C không gian người dùng của riêng bạn trừ khi bạn thực sự muốn làm mọi thứ từ đầu .. bạn sẽ trở nên tự lưu trữ sớm hơn nhiều :)

Mặc dù Simics không miễn phí, tôi khuyên bạn nên sử dụng nó (và được xây dựng trong các công cụ gỡ lỗi/lược tả) trong khi tạo hạt nhân của bạn. Một khi bạn có một số loại giao diện điều khiển nhân và logger tại chỗ, QEMU thực hiện một công việc rất tốt đẹp.

0

Câu hỏi đầu tiên bạn cần tự hỏi mình là kiến ​​trúc phần cứng nào bạn đang nhắm mục tiêu? Tôi sẽ giả sử vì lợi ích của cuộc thảo luận này rằng bạn đang nhắm mục tiêu kiến ​​trúc IA_32, mà có lẽ sẽ là một lựa chọn khôn ngoan vì có rất nhiều tài liệu sẵn có sẵn trên bộ xử lý đó.

Nếu bạn thực sự nghiêm túc về cam kết này, thì bạn chắc chắn sẽ muốn chạy chu trình gỡ lỗi/mã/xây dựng/triển khai của bạn dựa trên trình mô phỏng hoặc máy ảo. Ai đó đã đề cập đến BOCHS, rất phổ biến. Nếu tốc độ mô phỏng là điều của bạn, cũng có một trình mô phỏng được gọi là Qemu nhanh hơn BOCHS.

Tôi muốn đề xuất rằng môi trường phát triển của bạn chạy dưới Linux hoặc Windows, một lần nữa có thể là lựa chọn khôn ngoan do tài liệu sẵn có cho các môi trường dev đó.

Làm là bạn của bạn. Sử dụng nó để tự động hóa quá trình xây dựng/thực hiện. Tôi khuyên bạn nên chọn các bộ công cụ/trình biên dịch của bạn ở phía trước và dành thời gian học tập tốt. Nó sẽ giúp bạn tiết kiệm trong thời gian dài.

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