2012-10-25 29 views
30

Tôi nhớ đã nghe về một hệ điều hành nhúng có thể chỉ là libc (có thể nó đã hỗ trợ cho C++). Nó không có hạt nhân, đường ống hay bất kỳ thứ gì khác mà bạn mong đợi từ một hệ điều hành. Tôi đã thử tìm kiếm nó in wikipedia nhưng tôi không thấy nó được liệt kê.Hệ điều hành LibC có tồn tại không?

Hệ điều hành này có tồn tại không? Có một hệ điều hành hỗ trợ hoặc một thiết bị đầu cuối chỉ hoặc C/C++ + (tcp) ổ cắm để giao tiếp bên ngoài của một máy ảo? Điều đó sẽ hữu ích với tôi như một món đồ chơi.

+0

Tôi không hoàn toàn chắc chắn ý bạn là gì. Bạn đang cố gắng tìm một hệ điều hành nào? Tôi biết [uC/OS] (http://en.wikipedia.org/wiki/MicroC/OS-II) được viết bằng C và chạy trên vi điều khiển, nhưng mặc dù vậy, các tính năng của nó khá tốt. – ppeterka

+0

Nếu bạn chỉ tìm kiếm thứ gì đó có dấu chân nhỏ, Linux có thể dễ dàng phù hợp với hóa đơn mà không có bất kỳ chương trình không gian người dùng nào ngoại trừ cho bạn và libc. Mặc dù glibc mặc định có một dấu chân lớn, có rất nhiều dự án libc dấu chân nhỏ. – Linuxios

Trả lời

37

Lý do bạn không tìm thấy tên cho điều này là nó không phải là hệ điều hành - đó là sự vắng mặt của một hệ điều hành. Thường thì điều này được gọi là một chương trình "trần kim loại". Ý tưởng chung về lập trình trần kim loại là có một chút mã có mục đích chung - một "bootloader" - thiết lập bộ điều khiển bộ nhớ và các thứ phần cứng khác trên bảng, sau đó chuyển điều khiển đến chương trình của bạn. (Hệ điều hành cũng có bộ nạp khởi động, do đó, chương trình của bạn là thay thế hệ điều hành.) Uboot là bộ tải khởi động nguồn mở khá phổ biến, do đó có thể là nơi tốt để bắt đầu tìm kiếm thông tin.

Một trong những điều khó hiểu về lập trình kim loại trần là, vì không có hệ điều hành để xử lý bất kỳ giao tiếp phần cứng nào, bạn phải suy nghĩ về "printf thực sự có ý nghĩa như thế nào những gì dữ liệu đi đến những gì ngoại vi? " và "làm cách nào để tôi đến đó?" Một lần nữa, một số bộ nạp khởi động cung cấp hỗ trợ cho loại điều này, mặc dù nó không phải luôn luôn tầm thường để kết nối tất cả lên. Một lần nữa, Uboot là một ví dụ điển hình.

Trong khi đó, bản thân thư viện C thực sự sẽ được trình biên dịch của bạn cung cấp, chứ không phải trình khởi động.

(Tôi cũng nên thêm, như là một lưu ý tên: Công ty tôi làm việc để tạo một loạt các trình biên dịch kim loại thô và Linux, được gọi là Sourcery CodeBench.Đối với CodeBench, các phiên bản kim loại thường được đặt tên theo đặc tả ABI mà chúng sử dụng để liên kết các chương trình, vì vậy các phiên bản "ELF" hoặc "EABI" là tất cả các trình biên dịch thô, và tôi nghĩ đó là một cách khá phổ biến để đề cập đến điều này sắp xếp mọi thứ, vì vậy bạn cũng sẽ thấy loại tên đó xung quanh.)

+1

Bài đăng tuyệt vời. [Ở đây] (http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html) là minh họa cho đoạn thứ ba của bạn. Cuộn xuống trang, có một mẫu mã, thể hiện ràng buộc một hàm uart io tùy chỉnh với stdin, stdout và stderr. Từ nay, printf() và scanf() có ý nghĩa. – Vorac

6

Tôi nghĩ rằng có một vấn đề với một số giả định của bạn. Bạn đúng khi nói rằng bạn không cần một hạt nhân cho một hệ điều hành, nhưng bất cứ điều gì có thể chạy các ứng dụng có thể biên dịch tĩnh trong libc.

Xem: http://www.superfrink.net/athenaeum/OS-FAQ/os-faq-libc.html

Ví dụ, nó có thể sử dụng printf miễn là bạn biên dịch rằng chức năng cho os của bạn. Vì vậy, bạn có thể sử dụng MenuetOS miễn là bạn xây dựng libc cho nó.

Hiện tại, có một phiên bản nhỏ của libc tại http://pdclib.rootdirectory.de/ mà một số hệ thống nhúng có thể sử dụng.

Bằng cách này, mọi hệ điều hành nhỏ có thể được coi là một hệ điều hành để chạy libc.

6

Về cơ bản một hạt nhân là không cần thiết, nhưng nếu bạn đang tìm kiếm một os tối thiểu http://wiki.osdev.org/Projects có thể là một điểm để bắt đầu. có rất nhiều sở thích và bán các dự án chuyên nghiệp ra rằng những điều cơ bản hỗ trợ của họ và có một dấu chân nhỏ. Ngoài ra có một số hướng dẫn tốt để viết nó cho mình. Bạn cũng cần phải xem xét rằng trình điều khiển vv là cần cho những thứ đơn giản như mạng hoặc nối tiếp I/O.

Cũng Các hạt nhân Linux luôn luôn là một sự khởi đầu tốt (một số thời gian trước đây đã có một distro linux đó chỉ là khoảng 20MB)

3

Libcc không phải là một hệ điều hành. Mặc dù định nghĩa của hệ điều hành có phần mờ, nhưng nó bao gồm nhiều hơn một API. Nó đòi hỏi quản lý bộ nhớ, lập kế hoạch quá trình, vv.

5

Có rất nhiều thứ.

Hầu hết các hệ điều hành thời gian thực chuyên nghiệp (RTOS) đi kèm với việc thực hiện đầy đủ hoặc ít hơn thư viện C, và thường cho cả C++ (ví dụ: Keil MDK, µItron). Mặc dù trong thực tế bạn thường có xu hướng tránh nó, bởi vì nó sử dụng quá nhiều nguồn lực sẵn có.

RTOS thường có hạt nhân rất nhỏ, không hỗ trợ tệp hoặc đường ống. Thay vào đó, họ có xu hướng hỗ trợ các nhiệm vụ, giờ, hàng đợi và cờ sự kiện, với rất ít chi phí.

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