#059
#060 get_hardware_name();
這段代碼是擷取當前android系統啟動並執行硬體資訊,比如硬體的CPU名稱。主要從/proc/cpuinfo裡讀到相關的資訊。
#061 snprintf(tmp, sizeof(tmp), "/init.%s.rc", hardware);
#062 parse_config_file(tmp);
這段代碼是從前面擷取到的硬體名稱,然後以硬體的名稱(/init.硬體名稱.rc)來擷取相應硬體的設定檔,並且把設定檔參數載入到鏈表裡。
#063
#064 action_for_each_trigger("early-init", action_add_queue_tail);
#065 drain_action_queue();
這段代碼是先把有early-init標識的命令提前添加到一個命令隊列,以便函數drain_action_queue一個一個命令地執行設定檔裡的函數,這樣可以在不同的設定檔裡,只要標明是最先執行的函數,就可以優先地運行。
#066
#067 INFO("device init");
#068 device_fd = device_init();
這段代碼是遍曆為/sys,添加裝置事件響應,建立裝置節點。
#069
#070 property_init();
這段代碼是進行屬性初始化。每個屬性都有一個名稱和值,它們都是字串格式。屬性被大量使用在Android系統中,用來記錄系統設定或進程之間的資訊交換。屬性是在整個系統中全域可見的。每個進程可以get/set屬性。在系統初始化時,Android將分配一個共用記憶體區來儲存的屬性,這裡主要是從/default.prop屬性檔案讀取屬性。這個有點像Windows下的註冊表的作用。
#071
#072 // only listen for keychords if ro.debuggable is true
#073 debuggable = property_get("ro.debuggable");
#074 if (debuggable && !strcmp(debuggable, "1")) {
#075 keychord_fd = open_keychord();
#076 }
這段代碼是從屬性裡擷取調試標誌,如果是可以調試,就開啟組合按鍵輸入驅動程式。
#077
#078 if (console[0]) {
#079 snprintf(tmp, sizeof(tmp), "/dev/%s", console);
#080 console_name = strdup(tmp);
#081 }
#082
#083 fd = open(console_name, O_RDWR);
#084 if (fd >= 0)
#085 have_console = 1;
#086 close(fd);
這段代碼是判斷是否有控制台,如果沒有,就嘗試是否是可以打預設的控制台。
#087
#088 if( load_565rle_image(INIT_IMAGE_FILE) ) {
#089 fd = open("/dev/tty0", O_WRONLY);
#090 if (fd >= 0) {
#091 const char *msg;
#092 msg = ""
#093 ""
#094 ""
#095 ""
#096 ""
#097 ""
#098 "" // console is 40 cols x 30 lines
#099 ""
#100 ""
#101 ""
#102 ""
#103 ""
#104 ""
#105 ""
#106 " A N D R O I D ";
#107 write(fd, msg, strlen(msg));
#108 close(fd);
#109 }
#110 }
這段代碼是先調用load_565rle_image函數來嘗試載入定製的顯示的LOGO圖片,如果不成功,就直接在螢幕上顯示字串android。通過這裡可以定製不同廠家的LOGO圖片顯示,以便在系統初始化時,進行更人性化的等待,更加漂亮個性