提到Linux內核的時候,應該把它從概念上和“Linux操作系統”分割看來,內核只包括最基本的抽象,內存模型、進程調度、中斷處理等等。而操作系統是壹個更廣的概念,不光包括內核,還包括了設備驅動、應用程序框架以及壹些關鍵的能夠讓這個操作系統能為人所用的軟件。所以Ubuntu, Fedora等等這些桌面發行版可以看做是包裝了Linux內核的、不同的Linux操作系統。
Android 開發之初fork了Linux kernel,在其基礎上進行了以下改進:
1. 添加新的的設備驅動
2. 重寫了c lib(Bionic)
3. 實現了基於Java的應用程序框架
4. 對內核的小修改
大部分的修改都是在內核之上的,也就是說android內核和其他桌面Linux內核是非常接近的(在Linux kernel 3.3 之後,Android分支的內核代碼開始merge回原Linux內核repo),內核所完成的抽象,如內存模型、進程調度等,是壹致的。
Android不是Linux
看到這個標題大家可能會有些迷惑,前面不是壹直說Android是基於Linux內核的嗎,怎麽現在又不是Linux了?迷惑也是正常的,請先看下面幾個要點,然後我們將對每壹個要點進行分析,看完後妳就會覺得Android不是Linux了。
1.它沒有本地窗口系統
什麽是本地窗口系統呢?本地窗口系統是指GNU/Linux上的X窗口系統,或者Mac OX X的Quartz等。不同的操作系統的窗口系統可能不壹樣,Android並沒有使用(也不需要使用)Linux的X窗口系統,這是Android不是Linux的壹個基本原因。
2.它沒有glibc支持
由於Android最初用於壹些便攜的移動設備上,所以,可能出於效率等方面的考慮,Android並沒有采用glibc作為C庫,而是Google自己開發了壹套Bionic Libc來代替glibc。
3.它並不包括壹整套標準的Linux使用程序
Android並沒有完全照搬Liunx系統的內核,除了修正部分Liunx的Bug之外,還增加了不少內容,比如:它基於ARM構架增加的Gold-Fish平臺,以及yaffs2 FLASH文件系統等。
4.Android專有的驅動程序
除了上面這些不同點之外,Android還對Linux設備驅動進行了增強。
上面這些要點足以說明Android不是Linux。本書的主要內容將圍繞Android的這些特有的部分展開,我們的講解會盡量通俗易懂,但還是建議大家先復習壹下Linux內核的基本知識。在具體學習之前,我們還是先來總體瀏覽壹下Android對Linux內核進行了哪些改動,在移植時就需要對這些改動加以調整。