一。android
是一款基於linux核心的開源手機作業系統的名稱,改系統由linux核心,dvm(dalivk 虛擬機器),使用者介面和應用軟體組成,號稱為首個為移動終端打造的真正開放和完整的移動軟體。
二。系統開發
系統架構,
1.作業系統(os);
2.各種支援庫(library)和執行時環境(runtime);
系統開發,主要包括驅動開發和linux核心移植
2023年
linus torvalds編寫出了與unix相容的
linux作業系統核心並在gpl條款下發布。linux之後在網上廣泛流傳,許多程式設計師參與了開發與修改。2023年linux與其他gnu軟體結合,完全自由的作業系統正式誕生。該作業系統往往被稱為「gnu/linux」或簡稱linux。(儘管如此gnu計畫自己的核心hurd依然在開發中,已經發布
beta版本。)
android 核心是由標準的linux 核心修改而來,所以很大程度上繼承了linux 核心的 優點,並保留了linux核心的主題架構,按照移動裝置的需求,對檔案系統,記憶體管理,程序間通訊和電源管理進行了修改。
從最初的 2.6 到 3.10 核心部分不包括驅動程式,但是android的核心開闢了 userspace 將驅動程式放入其中
在一些底層功能上,比如執行緒和低記憶體管理方面,android是依賴於linux 核心的
綜上所述,android 是執行在 linux 之上的作業系統,但他本身不能算是linux的乙個版本。
二 android與linux的區別
1.android binder 是基於open binder框架的乙個驅動,負責android程序間通訊
2.android 電源管理,是基於標準linux電源管理的輕量級電源管理驅動
3.低記憶體管理器(low memory killer)
4.匿名共享記憶體(ashmem) 為程序間提供大塊的共享記憶體,並未核心提供**和管理這個記憶體的機制
5.android pmem(physical)用於向使用者空間提供連續的物理記憶體區域
6.android logger 乙個輕量級的日誌驅動
7.android alarm 提供了乙個定時器用於吧裝置從睡眠狀態喚醒,同時他也提供了乙個即使裝置在睡眠時也會執行的時間基準
8.usb gadget driver
9.android ram console 為了提供除錯功能,android 允許將除錯資訊記錄在 ram console
10.android timed device 提供定時控制裝置的功能
11.yaffs2 檔案管理系統 作為mtd nand flash 的檔案系統,yaffs2 是乙個快速穩定的應用於 nand 和 nor flash 的跨平台嵌入式裝置檔案系統
linux核心相當於硬體層和系統其它層之間的乙個抽象 介面層
核心分成體系相關部分和體系無關部分
這樣,核心向新的體系結構移植就變成了確認這些介面特性和並加以實現這些介面的過程
虛擬檔案系統vfs是為對真實檔案系統的抽象,在vfs層下是 具體的檔案系統的實現,比如yaffs2
網路子系統,socket層是網路子系統的標準api,類似的可以理解為網路子系統的抽象
2.3.2 與android 相關的linux 知識
1.安全
使用者許可權和目錄許可權
2.記憶體管理
3.程序管理
包括三類程序,互動程序(前後臺互動),批處理程序(乙個程序序列),守護程序(後台程序,系統啟動即執行)
linux下的程序命令 :
ps (process status),顯示當前的程序狀態
pstree
4.裝置驅動 everything is a file (unix)
字元裝置,提供連續的資料流,應用程式可以連續的讀取,但是不能隨機讀取。支援按字元或者位元組來讀取裝置
塊裝置,可以隨機訪問塊裝置,應用程式可以自行確定讀取資料的位置,例如磁碟,資料的讀取只能以塊的倍數進行(512b),
網路裝置,網路比較特殊
5.網路
linux 是按bsd套接字的的抽象。
2.4.4 linux 核心的顯著特性
一。gcc特性
1.基本功能
gcc編譯器的特性
gcc允許通過變數的引用識別型別 typeof(x) _min = (x);
gcc支援範圍 例如 : case 1 ... 8:
2.屬性
gcc編譯器支援使用者定義函式,變數和型別的特殊屬性,以便指示編譯器進行特定方面的優化和更仔細的**檢查
__attributr(noreturn)
__attribute(aligned(16))
__attribute(packed) 使用最小可能的記憶體或對其方式
3.內建函式
二。鍊錶的重要性
三。kconfig 和 makefile
kconfig
makefile
2.4.5 學校linux 核心的過程
1.分析usb子系統的**
core host gadget
2.分析usb系統的初始化**
subsys_initcall(usb_init);//usb子系統初始化函式 可以理解為moudle_init
module_exit(usb_exit);//usb子系統結束時的清理函式
3.分析 usb_init usb_exit
static int __init usb_init(void)
#define __init __section(.init.text)__cold notrace // ./inlucde/linux/init.h
__init 修飾的 **會被放到 .init.text 區,當初始化結束後就可以釋放這部分記憶體
#define __define_initcall(fn, id) \
static initcall_t __initcall_##fn##id __used \
__attribute__((__section__(".initcall" #id ".init"))) = fn; \
lto_reference_initcall(__initcall_##fn##id)
#define subsys_initcall(fn)__define_initcall(fn, 4)
指定 fn 放到 .initcall#id.init 區域
核心可執行檔案結構 bin
物件檔案有許多節,通過聯結器指令碼檔案吧指定.init .bss .data .code 等節統一鏈結並裝載在一起
Android元件化筆記 1
自己在android開發專案的時候,發現專案在復用性方面表現非常差,經常複製乙個module到乙個新專案的時候,需要修改非常多的 所以需要使用元件化。知識要點 1 eventbus 2 gradle 重點的配置 3 元件化分發 4 aapt打包 5 元件路由 arouter 6 androidman...
Android系統工具類筆記
獲取手機串號 imei param context return public static string getimei context context else 獲取使用者識別碼 imsi param context return public static string getsubscrib...
問答系統筆記1
1.聊天資料中詞語在不同位置的概率分布具有非常明顯的長尾特性。詞語概率分布上的模式會優先被decoder的語言模型學到,並在生成過程中嚴重抑制query和response之間詞語關聯模式的作用,即便有了query的語義向量作為條件,decoder仍然會挑選概率最大的 我 作為response的第乙個...