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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android 创世纪 第二天

發(fā)布時(shí)間:2025/3/8 Android 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android 创世纪 第二天 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第二天,google說,荒蕪要被開墾,系統(tǒng)便運(yùn)作了,它是linux。

?????????????? --xxx

???? 荒蠻大地就要變得肥沃,linux已經(jīng)運(yùn)行起來了。。。。

?

???? linux就不多講了,這里只講講被google大刀闊斧改了內(nèi)核后的linux。

?

???? 第一天最后,內(nèi)核init已經(jīng)干完了自己的事,把控制權(quán)交給了第一個(gè)用戶級進(jìn)程,也叫做init。

?

???? 想知道這個(gè)init干了什么事,我們只能看看源碼,不貼代碼,這里只說說它干了什么。

???? (system/core/init/init.c -->main)

?

一、清空umask

???? 也就是設(shè)置缺省權(quán)限,這里設(shè)置為0,umask為0000的話,就相當(dāng)于chmod中的0777,經(jīng)常使用linux對于chmod 777應(yīng)該很熟悉,就是賦予某個(gè)文件的權(quán)限為,所有組、所有用戶可讀可寫可運(yùn)行,也就是最寬松的權(quán)限。

?

二、創(chuàng)建并掛載一些基本的目錄

????? 創(chuàng)建目錄并掛載相應(yīng)系統(tǒng):

??????? /dev?? 設(shè)備目錄,所有的外圍設(shè)備都在這里了,包括真實(shí)的設(shè)備如sim卡,也包括虛擬的設(shè)備如必不可少的null設(shè)備。掛載關(guān)系是 /dev -> tmpfs,tmpfs顧名思義就是臨時(shí)文件系統(tǒng),這個(gè)系統(tǒng)只占用內(nèi)存空間。

?????? /proc? 系統(tǒng)信息目錄,包含了當(dāng)前系統(tǒng)的所有信息,比如進(jìn)程、時(shí)鐘等等動態(tài)的信息。掛載關(guān)系是 /proc -> proc

??????? /sys? 這里存儲的東西,都是硬件設(shè)備在linux上映射的對象,比如pci設(shè)備。掛載關(guān)系是 /sys -> sysfs

??????? /dev/pts? 這個(gè)是遠(yuǎn)程終端控制臺設(shè)備,字符終端啦,如果木有這個(gè)的話,就不可能adb shell調(diào)試android。掛載關(guān)系是 /dev/pts -> devpts

??????? /dev/socket? 服務(wù)于android的,socket是linux中進(jìn)程通信的一種方式,/dev/socket下面就是已經(jīng)被系統(tǒng)分配的soket資源,這里基本上是一些本地服務(wù),比如ridl,有興趣可以adb shell查看一下。

?

三、初始化NULL設(shè)備,重定向標(biāo)準(zhǔn)輸入輸出,初始化kmsg系統(tǒng),并且解析init.rc文件

????? null是Linux的一個(gè)標(biāo)準(zhǔn)設(shè)備,也就是所謂的黑洞,至于為什么有它,就得從輸入輸出重定向說起,比如linux控制臺下運(yùn)行一個(gè)程序,有時(shí)會輸出一大堆東西,這是它向標(biāo)準(zhǔn)輸出寫的,我們不想讓它顯示出來,就是用 > NULL給它的輸出重定向到了這個(gè)黑洞設(shè)備,系統(tǒng)呢會給這個(gè)程序返回一個(gè)寫入成功的操作,實(shí)質(zhì)上,系統(tǒng)什么都木有干。

????? kmsg是linux下的一個(gè)內(nèi)核級的日志系統(tǒng),kernel message。就好比anroid提供的Log系統(tǒng)一樣,只是針對內(nèi)核級別的。

????? 對于init.rc文件,這里只進(jìn)行了解析,并沒有執(zhí)行里面的一些命令。

?

四、獲得內(nèi)核命令參數(shù)并且解析特定機(jī)型的init.*.rc文件

????? 獲得內(nèi)核命令參數(shù),也就是顯式說明的一些參數(shù),如果配置過grub或者Loli的話,就可能與這個(gè)打過交道。

?????

????? 每個(gè)手機(jī)硬件平臺都不一樣,adb shell一下,會發(fā)現(xiàn)有兩個(gè)rc文件,其中一個(gè)就是與特定平臺有關(guān)的rc配置文件,比如我的defy就是init.mapphone_umts.rc,為什么叫這個(gè)?中間就是手機(jī)硬件平臺的名字,可以 cat /proc/cpuinfo來獲得Hardware信息,我的如下:

# cat cpuinfo cat cpuinfo Processor : ARMv7 Processor rev 2 (v7l) BogoMIPS : 299.11 Features : swp half thumb fastmult vfp edsp neon vfpv3 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x3 CPU part : 0xc08 CPU revision : 2Hardware : mapphone_UMTS Revision : 0000 Serial : 0000000000000000 CPU Tier : 10

?

可以看到Hardware的值就是rc的副名稱。

?????? init首先會獲得/porc/cpuinfo中的這個(gè)屬性值,然后根據(jù)這個(gè)字符串查找特定的rc文件,最后根據(jù)rc中的配置內(nèi)容,解析它。

?

五、執(zhí)行rc文件中的命令

????? 上一步,init已經(jīng)解析了那兩個(gè)rc文件,這里,會根據(jù)rc文件中的具體內(nèi)容,來分別執(zhí)行對應(yīng)的動作,后面會獨(dú)立分析rc文件的格式內(nèi)容,以及執(zhí)行方法。

?

六、變?yōu)槭刈o(hù)神

??????? 到這里,init就進(jìn)入了死循環(huán)了for(;;){}。那么它都守護(hù)了些什么?

???

??? 1、porpety service? 啟動并守護(hù)屬性服務(wù)

??????? android下特有的。就好比windows下面的注冊表,記錄了各種信息。大到系統(tǒng)是否成功運(yùn)行的標(biāo)志,小到短信聲音。用戶在設(shè)置一些手機(jī)設(shè)置的時(shí)候,在底層,實(shí)際就是和propety service打交道。

? ? ? ??

屬性前綴

描述

示例(shell下操作)

ro.只讀屬性setprop ro.media.capture.maxres 5m
攝像頭的最大像素

persist.

額外存儲到/data/property目錄下setprop persist.sys.country CN
不解釋。注意,每個(gè)屬性都存儲為單獨(dú)的一個(gè)文件
net.聯(lián)網(wǎng)相關(guān),比如gprs、藍(lán)牙…

setprop net.bt.name CAPF

藍(lán)牙的網(wǎng)絡(luò)名稱為CAPF

net.change的值為最后一次更改net.*屬性的屬性名,例如:

net.change=net.gprs.local-ip

ctrl.start

控制命令

啟動init.rc中標(biāo)注為service的服務(wù)

setprop ctl.start bootanim

啟動boot動態(tài)圖像(第二屏啟動畫面)

一個(gè)服務(wù)設(shè)置后,其結(jié)果會以下面的屬性返回,例如

init.svc.bootanim=running

ctrl.stop

停止init.rc中標(biāo)注為service的服務(wù)

setprop ctl.stop bootanim

停止boot動態(tài)圖像(第二屏啟動畫面)

一個(gè)服務(wù)設(shè)置后,其結(jié)果會以下面的屬性返回,例如

init.svc.bootanim=stoped

??????? 想要查看并設(shè)置屬性,可以通過以下三種途徑:

??? shell瀏覽文件:

?????????? /default.prop

?????????? /system/build.prop

?????????? /data/property/*

??? java:

?????????? System.getProperty(“xxxx”);

?????????? System.setProperty(“xxxx”);

?? ? c/c++:

?????????? demo.c:

#include <cutils/properties.h> #include <stdio.h> void print_prop(const char* key,const char* value,void* cookie) {printf("key=%s,value=%s/n",key,value); }int main() {property_list(print_prop,NULL); }

?

?????????? Android.mk:

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= /list_property.cpp /LOCAL_SHARED_LIBRARIES := /libcutils /libutils /LOCAL_MODULE:= list_propinclude $(BUILD_EXECUTABLE)include $(call all-makefiles-under,$(LOCAL_PATH))

?

??? 2、動態(tài)生成設(shè)備節(jié)點(diǎn)

?????? android的linux下面是沒有udev的,udev可以說是一個(gè)根據(jù)內(nèi)核的硬件消息來自動發(fā)現(xiàn)設(shè)備的一個(gè)程序,android下面根據(jù)硬件相應(yīng)的,也就是鍵盤與內(nèi)存卡,在平板上面的話就更多了,比如鼠標(biāo)、鍵盤等等。沒有udev的話,android是如何實(shí)現(xiàn)硬件的熱插拔呢?

?????? 和udev一樣,init守護(hù)神同樣監(jiān)聽了uevent事件,自己根據(jù)uevent的內(nèi)容來做相應(yīng)的事情,與udev做了異曲同工之事。

?????? 看一下大致流程。首先設(shè)備狀態(tài)更改,內(nèi)核會檢測到,并發(fā)出uevent消息(字符串),init檢測到消息,交給相應(yīng)函數(shù)處理,這個(gè)函數(shù)根據(jù)uevent的內(nèi)容,再做進(jìn)一步處理。除了插拔內(nèi)存卡等(android有專門的外存管理機(jī)制,就是vold),其它(比如數(shù)據(jù)線插入、鼠標(biāo)插入)都會處理。

?

??? 3、監(jiān)聽keychord事件

?????? keychord是組合按鍵,從源碼的行為來看,應(yīng)該是考慮到組合鍵盤這種外設(shè),大部分情況不會用到手機(jī)上,而多用在智能設(shè)備上,也就是沒有觸屏以及按鍵很少的android設(shè)備,比如運(yùn)行android的手表神馬的,通過不同的按鍵組合,來代表一個(gè)標(biāo)準(zhǔn)鍵盤的輸入。

?????? 這個(gè)東東估計(jì)用的不多。

?

??? 4、殺死僵尸進(jìn)程

?????? 什么是僵尸進(jìn)程?

?????? linux的進(jìn)程有個(gè)特點(diǎn),一個(gè)主進(jìn)程可以分裂(fork)子進(jìn)程(android的受精卵zygote完美的發(fā)揚(yáng)了這種精神),在桌面版的一些linux中,查看系統(tǒng)監(jiān)視器,仔細(xì)看看進(jìn)程信息,會發(fā)現(xiàn)很多進(jìn)程會是樹狀結(jié)構(gòu),點(diǎn)擊一個(gè)進(jìn)程后面又展開了好幾個(gè)進(jìn)程,而且是個(gè)多級樹。這都是一個(gè)進(jìn)程有fork了好幾個(gè)子進(jìn)程的結(jié)果。

?????? 如果主進(jìn)程被kill的話,那么它的子進(jìn)程就有可能成為僵尸進(jìn)程,所謂僵尸就是不干活但占用空間的程序死尸,這時(shí),init守護(hù)神就負(fù)責(zé)回收這些無辜的靈魂,來釋放本來就稀缺的內(nèi)存資源。

?

???? 5、守護(hù)重要服務(wù)

? ? ? ? 這些服務(wù)是native層面的服務(wù),比如servicemanager、vold。例如重要的zygote,有時(shí)候(不經(jīng)常)碰到的感覺和突然重啟一樣,這八成就是zygote崩潰并重啟了,要知道java世界可是zygote孵化出來的。

???????

?

?

解讀init.rc

? ? ? ?android的init.rc語法是獨(dú)有的,可以說是一種語言吧。

? ? ? ?init.rc的語法分為行為(Actions),、命令(Commands)?、服務(wù)(Services)、選項(xiàng)(Options)。

類別

名稱

描述

SECTIONon觸發(fā)條件
同上..service解析service
COMMANDchdir更改當(dāng)前工作目錄
同上..chroot更改參考的根目錄位置
..class_start啟動某個(gè)設(shè)置了class名稱的服務(wù)
..class_stop停止某個(gè)設(shè)置了class名稱的服務(wù)
..domainname域名
..exec調(diào)用程序并轉(zhuǎn)移進(jìn)程
..export提交變量
..hostname主機(jī)名
..ifup激活網(wǎng)卡
..insmod掛載模塊
..import引入配置,比如etc下的一些rc文件,和java中的import差不多
..mkdir建立目錄
..mount掛載文件系統(tǒng)
..setkey從源碼看,應(yīng)該是設(shè)置一個(gè)命令的關(guān)鍵字縮寫,比如可以將domainname映射為dn
..setprop設(shè)置一個(gè)屬性
..setrlimit

設(shè)置當(dāng)前程序可以打開的最大文件數(shù)到系統(tǒng)規(guī)定程序可以打開的最大文件數(shù)

..start啟動服務(wù)
..stop停止服務(wù)
..trigger不清楚,難道是自定義觸發(fā)器?
..symlink建立符號鏈接
..sysclktz

設(shè)置基準(zhǔn)時(shí)間

..wait等待文件準(zhǔn)備好?Linux中這是進(jìn)程調(diào)度的函數(shù)
..write向文件、設(shè)備寫個(gè)什么東西??隙ú皇莻飨⒌哪莻€(gè)wirte
..copy不解釋
..chown更改所有者
..chmod更改權(quán)限
..loglevelLog輸出級別,低于這個(gè)級別的就輸出
..restart重啟服務(wù)
OPTIONcapability能力,也就是系統(tǒng)對進(jìn)程的一種權(quán)限控制。
同上..class設(shè)置class name
..console啟用控制臺
..critical是否關(guān)鍵,也就是4分鐘之內(nèi)重啟超過4次的話,重啟之后就進(jìn)入recovery模式
..disabled不隨class自動啟動
..group組歸屬
..keycodes不明白。。。。。
..oneshot只啟動一次,意外退出后不必重啟
..onrestart重啟時(shí)
..setenv增加環(huán)境變量
..socket申請socket資源
..user用戶歸屬
..ioprioio調(diào)度優(yōu)先級

(很多屬性與命令用法都與linux中同名命令差球不多)

? ? ? ?init是分段(section)解析init.rc的,在keywords.h中可以查看關(guān)鍵字的定義。init是以什么標(biāo)志來分段解析init.rc呢?結(jié)合init.rc的內(nèi)容,可以看出,分段標(biāo)記是以on 和 service來標(biāo)記的。下面詳細(xì)說明。

? ? on ? 啥時(shí)候干什么

? ? ? ? on屬于行為。

? ? ??on early-init? ?

? ? ? ? ? ? ?init之前、加載完所有rc文件后即執(zhí)行,在miui的rom中,init.rc在early-init執(zhí)行的是start ueventd,根據(jù)keywords.h的定義,start是個(gè)命令(COMMAND)。

? ? ? ? ? ? ?這里順便說下ueventd,android中底層(一般指驅(qū)動)通知上層的事件,用的是uevent,java層通過觀察者模式實(shí)現(xiàn),用到的類為?UEventObserver,使用intent來傳遞;native層用的是android_os_UEventObserver.cpp,使用uevent.c通過socket傳遞。當(dāng)然,這是framework及以下的層面,一般開發(fā)不經(jīng)常用到,更何況這幾個(gè)類都沒有被暴露出來。

? ? ? on init

? ? ? ? ? ? ?加載propety各項(xiàng)屬性文件之前執(zhí)行,在init變?yōu)閜ropety service之前都屬于init階段。? ? ? ? ? ??

? ? ? on early-boot

? ? ? ? ? ? ?啟動屬性服務(wù)后即執(zhí)行。

? ? ? on boot

? ? ? ? ? ? ?boot的時(shí)候執(zhí)行。

? ? ? on property:xxxxx=x

? ? ? ? ? ? ?當(dāng)某個(gè)屬性設(shè)置為預(yù)期值時(shí)執(zhí)行。?

? ? ?關(guān)于init.rc,其實(shí)結(jié)合/src/system/core/init/* 源碼和init.rc文件來看,會明白許多。

水平有限,錯(cuò)誤之處請指正,多謝!? ?

  創(chuàng)世紀(jì):第一天連接:http://www.cnblogs.com/hangxin1940/archive/2011/10/01/2196964.html

  創(chuàng)世紀(jì):第三天連接:http://www.cnblogs.com/hangxin1940/archive/2011/10/22/2221451.html

原創(chuàng)文章,轉(zhuǎn)載請說明出處:

http://www.cnblogs.com/hangxin1940/archive/2011/10/01/2196964.html

總結(jié)

以上是生活随笔為你收集整理的Android 创世纪 第二天的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 亚洲资源在线播放 | 91视频在线视频 | 少妇精品无码一区二区免费视频 | 国产精品系列在线播放 | 国产亚洲欧美一区二区三区 | 麻豆成人久久精品一区二区三区 | a级片在线视频 | 中文字幕激情小说 | 深夜福利网站 | 性欧美xxxx | 国产麻豆91 | 碰超在线| 嫩草视频国产 | 高清无码视频直接看 | 久久久久久一级片 | 色猫咪av | 午夜在线观看影院 | 日韩精品――中文字幕 | 欧美日韩性视频 | 中文字幕av一区 | 亚洲高清在线视频 | 色哟哟免费观看 | 91麻豆国产福利精品 | 粗大黑人巨茎大战欧美成人免费看 | 污视频网址在线观看 | 极品美女被c | www日韩在线 | 日韩黄色视屏 | 中文字幕乱码一二三区 | 色视频网 | 天堂新版8中文在线8 | a在线播放| 91九色丨porny丨国产jk | 强迫凌虐淫辱の牝奴在线观看 | 久久亚洲精品无码va白人极品 | www.haoav| 日韩中文字幕在线观看 | 欧美资源在线观看 | www色com| 能免费看18视频网站 | 五月天最新网址 | 高跟鞋丝袜猛烈xxxx | 午夜精品一区二区三区三上悠亚 | 国产精品久久在线 | 婷婷超碰 | 色噜噜狠狠一区二区 | 国产精品久久久久三级 | 奴性女会所调教 | 91大神在线免费观看 | 国产激情成人 | 亚洲欧美日韩精品一区 | 精品国产AV色欲天媒传媒 | 亚州av片 | 国产视频在线观看视频 | 亚洲欧美婷婷 | 国产av人人夜夜澡人人爽麻豆 | 三级黄片毛片 | 午夜神马福利 | 中文字幕成人在线观看 | 污片视频在线观看 | 午夜xx| 成人免费看片在线观看 | 欧美日韩精品一区二区三区四区 | 在线观看日本 | 成人三级晚上看 | 男人女人拔萝卜视频 | 日本十八禁视频无遮挡 | 好吊妞视频在线观看 | 欧美又大又硬又粗bbbbb | 黄色片小视频 | 九一国产视频 | 韩日av | 欧美脚交视频 | 情欲少妇人妻100篇 黄色一级片欧美 | 加勒比成人av| 中文字幕乱码亚洲无线三区 | 在线观看视频福利 | 亚洲一区二区三区在线免费观看 | 亚洲区小说 | 日日爽爽 | 婷婷在线观看视频 | 中文精品在线观看 | 小h片在线观看 | 91大奶 | 都市激情自拍 | 伊人黄色网 | 少妇视频在线 | 亚洲性免费 | 国产精品久久久久高潮 | 亚洲精品少妇久久久久久 | 精品久久久久久无码中文野结衣 | www.超碰在线.com | 精品成人在线视频 | 国产欧美精品一区二区三区app | 日韩精品高清在线观看 | 美美女高清毛片视频免费观看 | 亚洲精品视频网 | 国产老女人乱淫免费 | 国产91精品一区二区麻豆亚洲 |