1.overview
圖1-1 嵌入式框架圖
嵌入式系統分爲硬件以及軟件兩大部分,大多數人蔘與的是嵌入式軟件設計,更多的是接觸的是上層軟件系統部分,可以分爲兩大類型嵌入式軟件應用工程師以及嵌入式驅動工程師。
前者主要負責 linux APP 設計,負責應用層業務開發,主要具備如下幾個專業技能:
1.熟悉網絡編程、TCP/IP協議、IIC、SPI協議
2.熟悉多線程管理、進程間通信、文件IO操作
3.瞭解基本的shell編程
4.熟悉數據庫操作
5.瞭解QT或者Android
後者負責驅動開發,更加涉及底層。
1.熟悉uboot和Linux內核,完成Linux內核裁剪定製以及系統的固件更新
2.熟悉Linux驅動模型
3.熟悉ARM架構
4.熟悉基本的電路原理
歪了歪了,只是做一些基本介紹,明白嵌入式到底幹啥,才能更好的去了解嵌入式系統。
2.Uboot
Uboot(universal bootloader(通用的啓動代碼)),Uboot屬於一段裸機程序,最終的目的是啓動內核。歷史的發展Uboot的功能也越來越強大。如今的Uboot主要具備如下主要功能:
1.初始化硬件平臺,初始化處理器核心接口:時鐘、內存、中斷、串口...,初始化板級接口:網卡、USB、LCD...(不是說啓動內核嗎?爲什麼要初始化硬件呢?後面會說。)
2.提供命令行操作以及一些小工具
爲什麼需要有命令行操作,因爲內核啓動可以傳遞一些參數,設計者可以在命令行中進行相關操作,同時Uboot還提供tftp、fastboot等小工具,tftp在我們下載文件時會用到,fastboot在刷機時可以用到。而這些小工具都需要硬件支持,所以Uboot中會具有硬件的驅動代碼。
3.啓動內核。
Uboot官網 <---
3.linux APP
linux APP主要是處於操作系統上層的應用層,通過各種系統調用實現業務要求。比如linux系統中的各種應用(瀏覽器、播放器、編輯器)都屬於linux APP
4.roofs
圖4-1 文件系統在系統中的層次關係
文件系統在嵌入式系統中非常重要,玩過STM32操作FLASH的同學就知道了,直接操作FLASH需要注意起始位置,長度,是否換頁,加入文件系統之後,我們就有了一種文件路徑的概念,更加形象方便。
應用程通過系統調用(SCI)操作虛擬文件系統(VFS),爲什麼需要VFS,因爲linux支持多種文件系統類型,接口個不一定兼容,VFS就是將這些接口進行又一層的封裝,消除差異。
說這麼多,roofs難道就是一個文件系統?當然不是,roofs稱爲根文件系統,既然能稱爲“根”,重要性不言而喻,根文件系統是內核加載後第一個掛載得稱爲根文件系統,其他文件系統只能掛在在這個文件系統得某個目錄(例如插入一個U盤,就會掛載到 /mnt/udisk/ 下)。根文件系統除了存儲文件之外,爲了系統更好得運行,還會包括一些shell命令工具、應用程序運行所需要的動態庫、系統環境變量配置信息以及系統工作信息等。
5.linux kernel
linux kernel(內核)是嵌入式的軟件大腦,地位十分重要,主要提供如下幾個功能:
1.內存管理
內存管理主要完成的是如何合理有效地管理整個系統的物理內存,同時快速響應內核各個子系統對內存的請求。linux內存管理支持虛擬內存,虛擬內存有助於實現進程內存的獨立性和安全性、有助於系統數據共享以及內存的“擴充”(通過SWAP分區實現)
2.進程管理
進程管理主要是進程調度,所謂的進程調度,就是在多任務領域,操作系統合理分配單一的CPU資源的過程。進程管理決定了某個進程什麼時候等待CPU資源、利用CPU資源以及釋放CPU資源。(這些話語只是爲了更加明瞭表達,深入學習進程管理會遇到 單核以及多核處理器、時間片、進程狀態轉換等概念)
3.進程間通信
由於需要保證單個進程的獨立性和安全性,每個進程的內存在虛擬內存中的隔開的,但是由於進程之間的相互協作是不可缺少的(例如微信訪問相冊),相互協作的基礎是信息交流,linux設計基於這種需求,引入內核作爲中間交換信息的橋樑,內核提供多種接口提供給進程間通信。
1.無名管道、有名管道
2.消息隊列
3.信號量、共享內存
4.信號
5.套接字
4.虛擬文件系統(VFS)
linux支持多種文件系統(ext2、ext3、ext4、xfs、btsfs),各個文件系統的驅動程序各不相同,甚至向上開放給應用程序的接口也不相同,VFS就是爲了消除底層差異,將文件系統接口做了層封裝,抽象稱爲虛擬文件系統。
5.網絡接口
網絡知識深如海,但是卻不可或缺,linux內核提供各種常用的網絡接口,例如常見的TCP/IP,網絡接口提供了各種網絡通訊協議和網絡驅動設備,進而形成各種網絡通訊工具提供給應用層。