android updater-script解析

從網上查到了一個英文文檔:

http://www.freeyourandroid.com/guide/introdution_to_edify

結合自己的測試,在此記錄下腳本執行函數的大概使用方法。

1 ,我自己的updater-script腳本,格式化kernel fs userdata分區

format("yaffs2","MTD", "kernel");
package_extract_file("uImage", "/tmp/uImage");
write_raw_image("/tmp/uImage", "kernel");
show_progress(0.05,5);
format("yaffs2","MTD", "fs");
mount("yaffs2","MTD", "fs", "/wuxyfs");
show_progress(0.8,20);
package_extract_dir("fs", "/wuxyfs");
unmount(/wuxyfs);
show_progress(1.0,8);
format("yaffs2","MTD", "userdata");
mount("yaffs2","MTD", "userdata", "/wuxydata");
package_extract_dir("data", "/wuxydata");
ui_print("update system...");
ui_print("update test just mount........ok.");

2 下面介紹下基本函數的使用方法

函數名稱: mount

函數語法: mount(fs_type, partition_type, location, mount_point)

參數詳解: fs_type-----------------"yaffs2"  "ext4"

partition_type----------"MTD"  "EMMC"

location-----------------分區(partition)  驅動器(device)

mount_poin------------掛載文件系統的目標文件夾(target folder to mount FS)

作用解釋掛載一個文件系統到指定的掛載點,掛載點不存在會自動創建。

掛載成功則返回掛載點,失敗返回null

函數示例: mount("MTD", "system", "/system");掛載system分區,設置返回指針"/system”

mount("vfat", "/dev/block/mmcblk1p2", "/system"); 掛載/dev/block/mmcblk1p2,返回指針"/system”


函數名稱: is_mounted

函數語法: is_mounted(mount_point)

參數詳解: mount_point-----------字符串,檢查是否已經掛載的掛載點

作用解釋檢查文件系統是否掛載

掛載成功則返回掛載點,失敗返回null

函數示例:


函數名稱: unmount

函數語法: unmount(mount_point)

參數詳解: mount_point-----------字符串,要解除掛載的掛載點

作用解釋解除文件系統掛載

解除掛載成功則返回掛載點,失敗返回null

函數示例unmount("/system"); 卸載/system分區


函數名稱: format

函數語法: format(fs_type, partition_type, location)

參數詳解: fs_type-----------------字符串,數據爲"yaffs2"  "ext4"

partition_type----------字符串, "MTD"  "EMMC"

location-----------------字符串分區(partition)  驅動器(device)

作用解釋格式化爲指定的文件系統

函數示例format("MTD", "system");格式化system分區


函數名稱: delete

函數語法: delete(file1, file2, ..., fileN)

參數詳解字符串,要刪除的文件

作用解釋刪除一個文件。最少指定一個文件;多個文件可以做爲多個參數指定

函數示例delete("/data/zipalign.log");刪除文件/data/zipalign.log


函數名稱: delete_recursive

函數語法: delete_recursive(dir1, dir2,...,dirN)

參數詳解字符串,要遞歸刪除的目錄

作用解釋刪除文件夾及其包含的所有內容。最少指定1個目錄;多個目錄可以做爲多個參數指定

函數示例delete_recursive("/data/dalvik-cache");刪除文件夾/data/dalvik-cache


函數名稱: show_progress

函數語法: show_progress(frac, sec)

參數詳解: frac----------------------進度完成數值

Sec----------------------總秒數

作用解釋顯示在Recovery系統中進度

函數示例show_progress(0.1, 10);show_progress下面的操作可能進行10s,完成後進度條前進0.1(也就是10%)


函數名稱: set_progress

函數語法: set_prograss(frac)

參數詳解: frac---------------------進度數值

函數示例:


函數名稱: package_extract_dir

函數語法: package_extract_dir(package_path, destination_path)

參數詳解: package_path----------字符串,升級包內要提取的目錄

destination_path--------字符串,提取文件的目標目錄

作用解釋提取升級包內目錄中的所有文件到指定的目標目錄

函數示例package_extract_dir("system", "/system");釋放ROM包裏system文件夾下所有文件和子文件夾至/system


函數名稱: package_extract_file

函數語法: package_extract_file(package_path)  package_extract_file(package_path, destination_path)

參數詳解: package_path----------字符串,升級包內要提取的文件

destination_path-------字符串,提取文件的目標目錄

作用解釋提取升級包內的單個文件到指定的目標目錄

函數示例package_extract_file("my.zip", "/system");解壓ROM包裏的my.zip文件至/system


函數名稱: file_getprop

函數語法: file_getprop(file, key)

參數詳解: file----------------------字符串,要檢查的文件名

Key----------------------字符串,返回數據中的文件的鍵名字

作用解釋在格式"key"="value"的文件中取得文件屬性值

函數示例:


函數名稱: symlink

函數語法: symlink(target, src1, src2, ..., srcN)

參數詳解: target-------------------字符串,符號鏈接的目標

srcX       ---------------------字符串,要創建的符號鏈接的目標點

作用解釋在創建新的符號鏈接之前,要斷開已經存在的符號鏈接

函數示例symlink("toolbox", "/system/bin/ps");建立指向toolbox的符號鏈接/system/bin/ps


函數名稱: set_perm

函數語法: set_perm(uid, gid, mode, file1, file2, ..., fileN)

參數詳解: uid----------------------用戶ID(user id)

Gid----------------------用戶組ID(group id)

Mode--------------------權限模式(permission mode)

fileX---------------------要設置許可的文件(file to set permission on)

作用解釋設置單個文件或一系列文件的權限,最少指定1個文件,前4個參數是必須的

函數示例: set_perm(0,2000,0550, "system/etc/init.goldfish.sh");設置手機system中的etc/init.goldfish.sh的用戶爲root,用戶組爲shell,所有者以及所屬用戶組成員可以進行讀取和執行操作,其他用戶無操作權限)

這裏0代表用戶爲root
2000代表用戶組爲shell
我們來說明0550這組數據,這組數據的最後三位550,分別代表“所有者\組用戶\其他用戶”的權限,也就是我們在RE管理中“用戶\羣組\其他”三行。 我們以XXX來表示這三組權限,其中:
×=4 讀的權限
×=2 寫的權限
×=1 執行的權限
我們必須首先了解用數字表示的屬性的含義:0表示沒有權限,1表示可執行權限,2表示可寫權限,4表示可讀權限,然後將其相加。所以數字屬性的格式應爲3個從07的八進制數。
例如,如果想讓某個文件的屬主有"/"二種權限,需要把4(可讀)+2(可寫)6(/)。若要rwx屬性則4+2+1=7;若要rw-屬性則4+2=6;若要r-x屬性則4+1=5
常用修改權限的命令:
Set_perm 0 0 0600 ××× (只有所有者有讀和寫的權限)
Set_perm 0 0 0644 ××× (所有者有讀和寫的權限,組用戶只有讀的權限)
Set_perm 0 0 0700 ××× (只有所有者有讀和寫以及執行的權限)
Set_perm 0 0 0666 ××× (每個人都有讀和寫的權限)
Set_perm 0 0 0777 ××× (每個人都有讀和寫以及執行的權限)

函數名稱: set_perm_recursive

函數語法: set_perm_recursive(uid, gid, dirmode, filemode, dir1, dir2, ...dirN)

參數詳解: uid----------------------用戶ID(user id)

Gid----------------------用戶組ID(group id)

Dirmode----------------指定目錄內的目錄的權限

Filemode---------------指定目錄內的文件的權限

dirX---------------------要設置權限的目標

作用解釋設置單個目錄或一系列目錄的裏面的所有文件的權限,最少指定1個目錄,5個參數都是必須的

函數示例: set_perm_recursive 0 0 0755 0644 SYSTEM:app;設置手機system/app文件夾及其中文件的用戶爲root,用戶組爲rootapp文件夾權限爲所有者可以進行讀、寫、執行操作,其他用戶可以進行讀取和執行操作,其中的文件的權限爲所有者可以進行讀寫操作,其他用戶可以進行讀取操作


函數名稱: getprop

函數語法: getprop(key)

參數詳解: key---------------------字符串,想要系統返回的屬性

作用解釋這個函數是用來返指定的屬性的值。它是用來從build.props文件中查詢手機的信息的。

函數示例:


函數名稱: write_raw_image

函數語法: write_raw_image(file, partition)

參數詳解: file----------------------字符串,要讀取的Img源文件

Partition-----------------字符串,要寫入Img文件的目標分區

作用解釋這個函數是用來寫Img文件到分區

函數示例write_raw_image("/tmp/boot.img", "boot")將yaffs2格式的boot包直接寫入boot分區


函數名稱: apply_patch

函數語法: apply_patch(srcfile, tgtfile, tgtsha1, tgtsize, sha1_1, patch_1, ..., sha1_x, patch1_x)

參數詳解: srcfile-------------------字符串,要打補丁的源文件(要讀入的文件)

Tgtfile-------------------字符串,補丁文件要寫入的目標文件

tgtsha1-----------------字符串,寫入補丁文件的目標文件的sha1哈希值

sha1_x------------------字符串,要寫入目標文件的補丁數據的sha1哈希值

patch1_x----------------字符串,實際上應用到目標文件的補丁

作用解釋這個函數是用來打補丁到文件。

函數示例:


函數名稱: apply_patch_check

函數語法: apply_patch_check(file, sha1_1, ..., sha1_x)

參數詳解: file----------------------字符串,要檢查的文件

sha1_x------------------要檢查的哈希值

作用解釋檢查文件是否已經被打補丁,或者能不能被打補丁。需要檢查“applypatch_check ”函數調用的源代碼。

函數示例:


函數名稱: apply_patch_space

函數語法: apply_patch_space(bytes)

參數詳解: bytes-------------------檢查的字節的數字

作用解釋檢查緩存來確定是否有足夠的空間來寫入補丁文件並返回一些數據。

函數示例:


函數名稱: read_file

函數語法: read_file(filename)

參數詳解: filename----------------字符串,要讀取內容的文件名

作用解釋這個函數返回文件的內容

函數示例:


函數名稱: sha1_check

函數語法: sha1_check(data)  sha1_check(data, sha1_hex, ..., sha1_hexN)

參數詳解: data---------------------要計算sha1哈希值的文件的內容-必須是隻讀文件格式

sha1_hexN--------------文件數據要匹配的特定的十六進制sha1_hex哈希值字符串

作用解釋如果只指定data參數,這個函數返回data參數的十六進制sha1_hex哈希值字符串。其他參數用來確認你檢查的文件是不是列表中的哈希值的一個。 它返回匹配的哈希值,或者在沒有匹配任何哈希值時返回空。

函數示例:


函數名稱: ui_print

函數語法: ui_print(msg1, ..., msgN)

參數詳解: msg----------------------字符串,要處理過程中輸出給用戶的信息

作用解釋在腳本運行的時候,在控制檯顯示的信息。最少要指定1個參數,你可以指定額外的msg參數,並且它們會連接起來輸了

函數示例: ui_print("It's ready!");屏幕打印It's ready!


函數名稱: run_program

函數語法: run_program(prog, arg1, .., argN)

參數詳解: prog--------------------字符串,要執行的程序

argN--------------------字符串,要執行的程序的運行參數

作用解釋以指定的參執行程序

函數示例run_program("/system/xbin/installbusybox.sh");運行installbusybox.sh腳本文件


發佈了37 篇原創文章 · 獲贊 1 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章