1. 程式人生 > >RK3128系統&驅動開發分享——(三)、系統啟動

RK3128系統&驅動開發分享——(三)、系統啟動

RK3128系統啟動大致流程分三個階段

1、boot啟動,即rk3128MiniLoaderAll(L)_V2.31.bin和uboot.img啟動

2、linux核心啟動,即kernel.img的啟動

3、android系統的啟動,即ramdisk.img、system.img的啟動。

這裡講解第三步。

android系統啟動過程是從init程序開始的。(原始碼在/system/core/init/init.c,linux核心啟動完成最後就會跳轉到這個檔案的main函式裡)

Android的init程序主要功能:
1)、分析init.rc啟動指令碼檔案,根據檔案內容執行相應的功能;

init會 根據啟動指令碼中的配置啟動各個service程序(入下圖)。
2)、當一些關鍵程序死亡時,重啟該程序;


3)、提供Android系統的屬性服務;


init.rc指令碼是一個初始化的配置檔案,非常關鍵。

因為android採用ramdisk的方式掛載根檔案系統,而init.rc檔案就放在ramdisk裡,所以系統啟動後修改init.rc檔案是無法儲存住的。

可以採用兩種方法修改:

(1)   有android原始碼的話從原始碼裡直接修改,然後重新編譯即可,直接修改/system/core/rootdir/init.rc

下面詳細說明第二種方法的步驟:

(1)       將ramdisk.img拷貝到某個目錄下,如tmpdir。

(2)       進入tmpdir將ramdisk.img重新命名為ramdisk.img.gz

命令:mv ramdisk.img ramdisk.img.gz

(3)       使用gunzip 解壓ramdisk.img.gz

命令:gunzip  ramdisk.img.gz

(4)       在tmpdir目錄下建立新目錄,如ramdisk

命令:mkdir ramdisk

(5)       進入ramdisk目錄

命令:cd ramdisk

(6)       解包

命令:cpio -i -F ../ramdisk.img

(7)       修改init.rc檔案,並儲存

(8)       打包

命令:cpio -i -t -F ../ramdisk.img > list

命令:cpio -o -H newc -O ../new.img < list

命令:gzip new.img

(9)       重新命名new.img

命令:mv new.img ramdisk.img