日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Android与Linux以及GNU的关系

發(fā)布時間:2024/8/23 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android与Linux以及GNU的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉帖自?http://www.eefocus.com/Kevin/blog/09-11/179409_1dc9a.html?作者:?Kevin

本文轉貼自?http://mmdays.com/2008/10/11/android-淺探二:系統(tǒng)架構/, Kevin修改了部分臺灣習慣用法為大陸習慣用法,并針對含混的地方略作了修改。?

?本篇目的在盡量不觸及技術細節(jié)的情況下簡介 Android 架構,并探討其設計的特殊處,以及在版權上的意義。主要資料來源為?Anatomy & Physiology of an Android,有興趣深入研究的讀者可參考。


首先來一張現(xiàn)在大概已經(jīng)很有名的圖片:

由下到上,可以看到紅色的 kernel 層,綠色的系統(tǒng)庫,黃色的虛擬機,以及藍色的 Java 代碼。以下將一一介紹。

Linux kernel

必也正名乎:一般所稱 Linux,其實是統(tǒng)稱,指根基在?Linux kernel?以及其他許多跟 kernel 不見得有關的軟件所組成的操作系統(tǒng)。最早,Linux 一詞其實是專指 kernel,它提供了系統(tǒng)底層與硬體間的基本平臺,讓其他程序可以在上頭執(zhí)行。其最早作者是Linus Torvalds,他用自己的名字,加上採用了與 Unix 系統(tǒng)相容的介面,將自己的作品命名為 Linux。

如前所述,在 Linux kernel 上頭執(zhí)行的程式,跟 kernel 本身不見得有關系。可以是自由軟件,也可以完全不是。把它加上一些自由軟件,例如基本的函式庫、工具、圖形介面,應用程式等等,所組成的一套完整操作系統(tǒng),才是一般所稱的 Linux。為了避免誤解,而且也為了正確傳達自身的貢獻,自由軟體基金會建議大家稱這樣的一套操作系統(tǒng)為 GNU/Linux。其中的原因是,kernel 提供底層機制,但系統(tǒng)中重要的元件幾乎都是來自于 GNU,也就是自由軟體基金會。

希望大家還沒被這些名詞搞混。要弄清這些不同的原因是,Android 是在 Linux kernel 上頭運作的,但他并不是 GNU/Linux。因為在一般 GNU/Linux 里面會有的東西,Android 很多都沒有。

Linux kernel 的版權是?GNU General Public License version 2 (GPLv2),這又是什么玩意呢?GPLv2 是所謂的?Copyleft?版權,簡單來說,就是為了確保知識產(chǎn)權能夠繼續(xù)公開流傳,所以任何基于此創(chuàng)作的延伸創(chuàng)作,都自動採用了相同版權。GPL本身還有個特色,就是「共同運作」也算是延伸的一部分,意思是說你的程序沒直接改GPL的代碼,但是鏈接了GPL的庫跟你的程式共同運行,那你的程式也必須採用GPL版權。

舉例來講,假定今天某公司覺得某GPL軟體不錯,拿來改了改,放在自己的產(chǎn)品里頭拿出去賣,那某公司就一定要明確的一起散佈修改后的源代碼。如果沒有,那就是觸犯版權了。有個組織叫?GPL Violations,專門抓這種案例,公司如 D-Link 以及 ASUS 都上過榜。這下問題來了:如果你是硬件廠商,希望你的硬件能在 Linux kernel 下運作,那么就必須要有驅動程序。驅動程序就是按照硬件的規(guī)格寫的程式,用來告訴 kernel 怎么操作這個硬件。如果驅動程序的代碼公開,等于硬體規(guī)格也公開的差不多了。許多廠商不愿意這么做,所以就提供編好的驅動程序,但不提供源碼。版權所有者,也就是 Linus Torvalds 以及其他許許多多的 kernel 作者們,為了支援盡可能多的硬件,對這種行為是採取睜一只眼閉一只眼的態(tài)度,也就是目前這種編譯好的驅動程式,算是處在灰色地帶。

既然 Android 採用了 Linux kernel,當然得照游戲規(guī)矩來。但我們從前文可知,Android 的重點就是商業(yè)應用,他們可不愿意系統(tǒng)里有什么「灰色地帶」,于是採用了一些手法來繞過這問題。他們把驅動程式移到 “userspace”,也就是說,把驅動程式變成在 Linux kernel 之上的用戶空間跑,而不是和Kernel一起跑,這樣就可以避過GPL。然后,在 kernel 這邊開個小門,讓本來不能直接控制到硬體的 “userspace” 用戶空間程序也可以碰得到,這樣只要把「開個小門」的程式碼公佈就行啦。事實上,目前因為 Android 已經(jīng)發(fā)行,所以依法他們已經(jīng)公開了對 kernel 的修改,其源碼在http://git.android.com/。

走筆至此,可以看出 Google 的原則之一 “Do no evil” 是很有意思的。他們自己的確承諾,而且也愿意公開 Android 的源碼,但是他們給了其他人 “Do evil” 的選擇,也就是,在這個小門的基礎上,開發(fā)非開放源碼的userspace系統(tǒng),這樣還算不算是 Do no evil 呢?當作哲學問題吧。

關于 Android 對 kernel 的修改,Google 的簡報還提供了兩個重點:

  • Binder (IPC):提供有效率的進程間通信手段(Inter-Process Communication)。Android 系統(tǒng)中有很多服務,而上層的應用程式經(jīng)常要取用這些服務,一般的 Linux 系統(tǒng)已經(jīng)提供了不少 IPC 的方式,不過 Android 還是搞了套自己的。雖說文件中解釋原因為「一般 IPC 會造成額外資源花費,以及安全問題」,但其實這些都是可以基于原有架構在 kernel 外頭解決的,為何要改在 kernel 里頭,筆者對此存疑,也只能等找時間去研究源代碼才知了。
  • Power Management:與桌上型電腦或筆記型電腦不同,手持裝置的電源一向相當有限,必須無所不用其極的去想辦法省電,但又不損及順暢的使用經(jīng)驗。Android 在此採取了頗為積極的作法:「沒有人說要用,就關掉」。例如某程式在放 MP3 音樂,于是此程式會需要 CPU 的計算能力,那就得開口要。如果與此同時沒其他程式在執(zhí)行,那么 LCD 顯示器就可能被關掉,藉以省電。另一特別處,是在于 Linux kernel 一般考慮的都是在電腦上的作法,所以多半只有進入暫停、休眠等等的選擇,而不會如此細緻的去控制到各個小裝置的電源供應。
  • 系統(tǒng)庫

    這里說的系統(tǒng)庫是指 “native libraries”,是跑在系統(tǒng)里頭的函式庫,採用的語言不是 Java,提供一些基礎建設。里頭有幾個值得一提的元件:

  • Bionic:這是 Android 版的 libc。libc 是 GNU/Linux 以及其他類似 Unix 系統(tǒng)上最基礎的函式庫,一般最常用的是 glibc,就是 GNU 做的 libc。不然在比較小型的裝置上也可以用 uclibc。不論是 glibc or uclibc,版權都是LGPL?(GPL 的略為弱化版)。看到這大概可以猜到了吧,又是 Copyleft 問題。官方的說法是,除了版權問題以外,還考慮必須輕量以及快速,所以才做了自己的 libc。不過輕量、快速,本來就是小型裝置用的 uclibc 一開始的目標,因此,最主要的恐怕還是版權問題。 當然, 不用glibc或uclibc并不表示Bionic不開源,相反,Google給出了一個更慷慨的選擇,BSD license,這意味著你可以將Bionic用于商用并且不回饋修改。
  • Webkit:鼎鼎大名的 Apple Safari 瀏覽器背后的引擎就是 Webkit,Android 也包含進去了。離線使用的 html 配上 html 5 的一些新發(fā)展,產(chǎn)生了各種有趣的可能,這部分值得另文介紹,這里就不再贅述。
  • Surface Flinger:提供把各種”surface”組合在一起的能力。在這里 surface 解釋為程式想要顯示在螢幕的東西,可能同一螢幕上有來自不同程式的內(nèi)容,而這些內(nèi)容有可能是 2D 顯示或是 3D 顯示等等之類。Surface flinger 就是把這些東西結合起來,一起送到螢幕上。目前程式碼還沒公布,不過 2D 跟 3D 的混合顯示一直都是問題,根本原因是我們通常告訴 3D 顯示卡的東西都是一些「我要在哪里哪里畫上什么形狀,貼上某某材質(zhì)然后旋轉多少度」之類的事情,也就是說,我們并不知道最后顯示出來會長什么樣子,那是顯示卡上頭的 GPU 去算出來的。一般這些東西是顯示在一個有裝飾的視窗里頭,這裝飾通常是 2D 效果。接下來假定我們想要旋轉這整個視窗,而且里頭的東西還要繼續(xù)動,那等于要隨時把握 3D 視窗里的東西長什么樣子,然后把它跟 2D 的視窗框框結合,然后再開始轉動。目前在一般 GNU/Linux 上這件事情還沒有處理的非常好,Android 怎么做,值得在程式碼公布之后注意。
  • 硬體抽象層 (Hardware Abstraction Libraries):這就是前文所述的 userspace 驅動程式,如果想要將 Android 在某硬體平臺上執(zhí)行,基本上完成這些驅動程式就行了。其內(nèi)定義了 Android 對各硬體裝置例如顯示晶片、聲音、數(shù)位相機、GPS、GSM 等等的需求。這樣,用戶就不需要寫linux設備驅動程序,而是只需要在Andriod基礎上寫用戶控件的驅動就可以了。
  • 轉載于:https://www.cnblogs.com/luoyanli/p/3167197.html

    總結

    以上是生活随笔為你收集整理的Android与Linux以及GNU的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。