--嵌入式的完整系統通常具有:操作系統、中間件、應用程序層這幾個層次。
嵌入式操作系統(A)核心部分的內容與通用操作系統類似,包含了進程調度、進程通信、內存管理、設備管理。
A 通常包括移植層和驅動程序——作爲A適配不同硬件的接口。
A擴展模塊中通常含有文件系統、網絡協議、GUI系統、數據庫系統等。
不同A包含的內容不一定相同。如果A不具有這些模塊但需要,則可以作爲中間件實現。
--中間件提供軟件層的API,是整個系統中承上啓下的重要軟件層
基於Linux構建一個完整的系統,技術上需要具有以下內容:
Linux的內核及其硬件相關的移植
各種設備的驅動程序
用戶空間C庫、shell
用戶空間的各種中間件
用戶空間的應用程序
在特定的開發環境中,將內核空間和用戶空間各部分整合之後,經過優化才能完成基於Linux的完整系統。
嵌入式Linux系統內核空間和用戶空間的接口包括以下幾部分:
- 系統調用:POSIX標準的系統調用
- 基於設備節點:字符設備和塊設備,作爲硬件相關的特殊接口
- 基於Socket的網絡
- 基於proc或sys文件系統
C 語言庫
簡稱 C 庫,是C語言程序的運行基礎。C庫建立於操作系統的調用之上,提供C語言的函數接口(API)。Linux中,用戶空間編程的基礎也是C語言庫。
C庫本身基於系統調用實現,其對上層(應用層)提供庫接口(函數接口),比如字符處理函數strcpy(),strcmp()等。C庫中的一些函數需要調用操作系統的系統調用來實現,比如:標準輸出printf()函數需要向標準輸出設備(屏幕)輸出字符,顯然需要硬件的支持。由於C庫不需要知道系統的硬件情況,只要調用write()這個系統調用即可。
關於系統調用和函數調用的概念和區別,可以看一下該鏈接文章