Android培訓班(19) – Android移動開發技術文章_手機開發 Android移動開發教學課程

在init初始化進程裡,設備初始化是怎麼進行的呢?如果要瞭解這方面,就需要仔細分析下面的代碼,如下:


#001  int device_init(void)


#002  {


#003      suseconds_t t0, t1;


#004      int fd;


#005 


#006      fd = open_uevent_socket();


#007      if(fd < 0)


#008          return -1;


這段代碼是調用函數open_uevent_socket來創建一個用戶事件空間的socket。


 


#009 


#010      fcntl(fd, F_SETFD, FD_CLOEXEC);


#011      fcntl(fd, F_SETFL, O_NONBLOCK);


這段代碼是設置socket的屬性,FD_CLOEXEC用來設置文件的close-on-exec狀態標準。在exec()調用後,close-on-exec標志為0的情況,此文件不被關閉。非零則在exec()後被關閉。默認close-on-exec狀態為0,需要通過FD_CLOEXEC設置。O_NONBLOCK設置這個socket是異步的通訊方式。


 


#012 


#013      t0 = get_usecs();


這行代碼是用來獲取當前用戶的時間。


 


#014      coldboot(fd, “/sys/class”);


#015      coldboot(fd, “/sys/block”);


#016      coldboot(fd, “/sys/devices”);


這段代碼是用來遍歷所有在init進程前已經創建的設備,並找到設備的事件文件發送事件通知。


 


#017      t1 = get_usecs();


這行代碼是用來獲取當前用戶的時間。


 


#018 


#019      log_event_print(“coldboot %ld uS
“, ((long) (t1 – t0)));


這行代碼是用來打印輸出冷啟動的時間是多少秒。


 


#020 


#021      return fd;


#022  }


#023 

發佈留言