日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android recovery模式及ROM制作

發布時間:2024/1/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android recovery模式及ROM制作 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載時請注明出處和作者

文章出處:http://www.cnblogs.com/xl19862005作者:Xandy


1 ? ? ? 總述

為了方便客戶日后的固件升級,本周研究了一下android的recovery模式。網上有不少這類的資料,但都比較繁雜,沒有一個系統的介紹與認識,在這里將網上所找到的和自己通過查閱代碼所掌握的東西整理出來,給大家一個參考!

2 ? ? ? Android啟動過程

在這里有必要理一下android的啟動過程:


圖1 android啟動過程

系統上電之后,首先是完成一系列的初始化過程,如cpu、串口、中斷、timer、DDR等等硬件設備,然后接著加載boot default environmet,為后面內核的加載作好準備。在一些系統啟動必要的初始完成之后,將判斷是否要進入recovery模式,從圖1中可以看出,進入recovery模式有兩種情況。一種是檢測到有組合按鍵按下時;另一種是檢測到cache/recovery目錄下有command這個文件,這個文件有內容有它特定的格式,將在后面講到。

3 ? ? ? Uboot啟動

下面來看看uboot中lib_arm/board.c這個文件中的start_armboot這個函數,這個函數在start.s這個匯編文件中完成堆棧等一些基礎動作之后被調用,進入到c的代碼中,start_armboot部分代碼如下:

void start_armboot (void)
{
.
.
.
for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) {
hang ();
}
#ifdef CONFIG_ANDROID_RECOVERY
check_recovery_mode();
#endif
/* main_loop() can return to retry autoboot, if so just run it again. */
for (;;) {
main_loop ();
}
}

? ? ? init_sequence是一個函數結構體指針,里面存放的是一些必備的初始化函數,其代碼如下:

init_fnc_t *init_sequence[] = {
#if defined(CONFIG_ARCH_CPU_INIT)
arch_cpu_init, /* basic arch cpu dependent setup */
#endif
board_init, /* basic board dependent setup */
#if defined(CONFIG_USE_IRQ)
interrupt_init, /* set up exceptions */
#endif
timer_init, /* initialize timer */
env_init, /* initialize environment */
init_baudrate, /* initialze baudrate settings */
serial_init, /* serial communications setup */
console_init_f, /* stage 1 init of console */
display_banner, /* say that we are here */
#if defined(CONFIG_DISPLAY_CPUINFO)
print_cpuinfo, /* display cpu info (and speed) */
#endif
#if defined(CONFIG_DISPLAY_BOARDINFO)
checkboard, /* display board info */
#endif
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
init_func_i2c,
#endif
dram_init, /* configure available RAM banks */
#if defined(CONFIG_CMD_PCI) || defined (CONFIG_PCI)
arm_pci_init,
#endif
display_dram_config,
NULL,
};

? ? ? 我們來看看env_init這個函數,其代碼如下:

int env_init(void)
{
/* use default */
gd->env_addr = (ulong)&default_environment[0];
gd->env_valid = 1;
#ifdef CONFIG_DYNAMIC_MMC_DEVNO
externint get_mmc_env_devno(void);
mmc_env_devno = get_mmc_env_devno();
#else
mmc_env_devno = CONFIG_SYS_MMC_ENV_DEV;
#endif
return0;
}

? ? ? 可以看出在這里將default_environment加載進入系統,default_environment對應的部分代碼如下:

uchar default_environment[] = {
.
.
.
#ifdef CONFIG_EXTRA_ENV_SETTINGS
CONFIG_EXTRA_ENV_SETTINGS
#endif
"\0"
};

? ? ? 而CONFIG_EXTRA_ENV_SETTINGS則是在我們對應的BSP的頭文件中定義了,如下:

#define CONFIG_EXTRA_ENV_SETTINGS \
"netdev=eth0\0" \
"ethprime=FEC0\0" \
"bootfile=uImage\0" \
"loadaddr=0x70800000\0" \
"rd_loadaddr=0x70D00000\0" \
"bootargs=console=ttymxc0 init=/init " \
"androidboot.console=ttymxc0 video=mxcdi1fb:RGB666,XGA " \
"ldb=di1 di1_primary pmem=32M,64M fbmem=5M gpu_memory=64M\0" \
"bootcmd_SD=mmc read 0 ${loadaddr} 0x800 0x2000;" \
"mmc read 0 ${rd_loadaddr} 0x3000 0x300\0" \
"bootcmd=run bootcmd_SD; bootm ${loadaddr} ${rd_loadaddr}\0" \

? ? ? 再來看看check_recovery_mode這個函數中的代碼,具體代碼如下:

/* export to lib_arm/board.c */
void check_recovery_mode(void)
{
if (check_key_pressing())
setup_recovery_env();
elseif (check_recovery_cmd_file()) {
puts("Recovery command file founded!\n");
setup_recovery_env();
}
}

? ? ? 可以看到在這里通過check_key_pressing這個函數來檢測組合按鍵,當有對應的組合按鍵按下時,將會進入到recovery模式,這也正是各大android論壇里講到刷機時都會提到的power+音量加鍵進入recovery模式的原因。那么check_recovery_cmd_file又是在什么情況下執行的呢?這個也正是這篇文章所要講的內容之處。

? ? ? 先來看看check_recovery_cmd_file這個函數中的如下這段代碼:

int check_recovery_cmd_file(void)
{
.
.
.
switch (get_boot_device()) {
case MMC_BOOT:
case SD_BOOT:
{
for (i = 0; i < 2; i++) {
block_dev_desc_t *dev_desc = NULL;
struct mmc *mmc = find_mmc_device(i);
dev_desc = get_dev("mmc", i);
if (NULL == dev_desc) {
printf("** Block device MMC %d not supported\n", i);
continue;
}
mmc_init(mmc);
if (get_partition_info(dev_desc, CONFIG_ANDROID_CACHE_PARTITION_MMC,
&info)) {
printf("** Bad partition %d **\n",CONFIG_ANDROID_CACHE_PARTITION_MMC);
continue;
}
part_length = ext2fs_set_blk_dev(dev_desc, CONFIG_ANDROID_CACHE_PARTITION_MMC);
if (part_length == 0) {
printf("** Bad partition - mmc %d:%d **\n", i, CONFIG_ANDROID_CACHE_PARTITION_MMC);
ext2fs_close();
continue;
}
if (!ext2fs_mount(part_length)) {
printf("** Bad ext2 partition or "
"disk - mmc %d:%d **\n",
i, CONFIG_ANDROID_CACHE_PARTITION_MMC);
ext2fs_close();
continue;
}
filelen = ext2fs_open(CONFIG_ANDROID_RECOVERY_CMD_FILE);
ext2fs_close();
break;
}
}
break;
.
.
.
}

? ? ? 主要來看看下面這個ext2fs_open所打開的內容,CONFIG_ANDROID_RECOVERY_CMD_FILE,這個正是上面所提到的rocovery cmd file的宏定義,內容如下:

#define CONFIG_ANDROID_RECOVERY_CMD_FILE "/recovery/command"

? ? ? 當檢測到有這個文件存在時,將會進入到setup_recovery_env這個函數中,其相應的代碼如下:

void setup_recovery_env(void)
{
char *env, *boot_args, *boot_cmd;
int bootdev = get_boot_device();
boot_cmd = supported_reco_envs[bootdev].cmd;
boot_args = supported_reco_envs[bootdev].args;
if (boot_cmd == NULL) {
printf("Unsupported bootup device for recovery\n");
return;
}
printf("setup env for recovery..\n");
env = getenv("bootargs_android_recovery");
/* Set env to recovery mode */
/* Only set recovery env when these env not exist, give user a
? ? ? ?* chance to change their recovery env
*/
if (!env)
setenv("bootargs_android_recovery", boot_args);
env = getenv("bootcmd_android_recovery");
if (!env)
setenv("bootcmd_android_recovery", boot_cmd);
setenv("bootcmd", "run bootcmd_android_recovery");
}

? ? ? 在這里主要是將bootcmd_android_recovery這個環境變量加到uboot啟動的environment中,這樣當系統啟動加載完root fs之后將不會進入到android的system中,而是進入到了recovery這個輕量級的小UI系統中。

? ? ? 下面我們來看看為什么在uboot的啟動環境變量中加入bootcmd_android_recovery這些啟動參數的時候,系統就會進入到recovery模式下而不是android system,先看看bootcmd_android_recovery相應的參數:

#define CONFIG_ANDROID_RECOVERY_BOOTARGS_MMC \
"setenv bootargs ${bootargs} init=/init root=/dev/mmcblk1p4" \
"rootfs=ext4 video=mxcdi1fb:RGB666,XGA ldb=di1 di1_primary"
#define CONFIG_ANDROID_RECOVERY_BOOTCMD_MMC \
"run bootargs_android_recovery;" \
"mmc read 0 ${loadaddr} 0x800 0x2000;bootm"

? ? ? 可以看到在進入recovery模式的時候這里把root的分區設置成了/dev/mmcblk1p4,再來看看在系統燒錄的時候對整個SD卡的分區如下:

sudo mkfs.vfat -F 32 ${NODE}${PART}1 -n sdcards
sudo mkfs.ext4 ${NODE}${PART}2 -O ^extent -L system
sudo mkfs.ext4 ${NODE}${PART}4 -O ^extent -L recovery
sudo mkfs.ext4 ${NODE}${PART}5 -O ^extent -L data
sudo mkfs.ext4 ${NODE}${PART}6 -O ^extent -L cache

? ? ? 這里NODE = /dev/mmcblk1為掛載點,PART = p或者為空,作為分區的檢測。可以看出上面在給recovery分區的時候,用的是/dev/mmcblk1p4這個分區,所以當設置了recovery啟動模式的時候,root根目錄就被掛載到/dev/mmcblk1p4這個recovery分區中來,從而進入recovery模式。

4 ? ? ? recovery

關于android的recovery網上有各種版本的定義,這里我總結一下:所謂recovery是android下加入的一種特殊工作模式,有點類似于windows下的gost,系統進入到這種模式下時,可以在這里通過按鍵選擇相應的操作菜單實現相應的功能,比如android系統和數據區的快速格式化(wipe);系統和用戶數據的備份和恢復;通過sd卡刷新的rom等等。典型的recovery界面如下:

圖2 recovery界面

? ? ? Recovery的源代碼在bootable/recovery這個目錄下面,主要來看看recovery.c這個文件中的main函數:

Int main(int argc, char **argv) {
.
.
.
ui_init();
ui_set_background(BACKGROUND_ICON_INSTALLING);
load_volume_table();
.
.
.
while ((arg = getopt_long(argc, argv, "", OPTIONS, NULL)) != -1) {
switch (arg) {
case'p': previous_runs = atoi(optarg); break;
case's': send_intent = optarg; break;
case'u': update_package = optarg; break;
case'w': wipe_data = wipe_cache = 1; break;
case'c': wipe_cache = 1; break;
case'e': encrypted_fs_mode = optarg; toggle_secure_fs = 1; break;
case't': ui_show_text(1); break;
case'?':
LOGE("Invalid command argument\n");
continue;
}
}
device_recovery_start();
.
.
.
if (update_package)
{
// For backwards compatibility on the cache partition only, if
// we're given an old 'root' path "CACHE:foo", change it to
// "/cache/foo".
if (strncmp(update_package, "CACHE:", 6) == 0)
{
int len = strlen(update_package) + 10;
char* modified_path = malloc(len);
strlcpy(modified_path, "/cache/", len);
strlcat(modified_path, update_package+6, len);
printf("(replacing path \"%s\" with \"%s\")\n",
update_package, modified_path);
update_package = modified_path;
}
//for update from "/mnt/sdcard/update.zip",but at recovery system is "/sdcard" so change it to "/sdcard"
//ui_print("before:[%s]\n",update_package);
if (strncmp(update_package, "/mnt", 4) == 0)
{
//jump the "/mnt"
update_package +=4;
}
ui_print("install package from[%s]\n",update_package);
}
printf("\n");
property_list(print_property, NULL);
printf("\n");
int status = INSTALL_SUCCESS;
.
.
.
// Recovery strategy: if the data partition is damaged, disable encrypted file systems.
// This preventsthe device recycling endlessly in recovery mode.
.
.
.
if (update_package != NULL)
{
status = install_package(update_package);
if (status != INSTALL_SUCCESS)
ui_print("Installation aborted.\n");
else
{
erase_volume("/data");
erase_volume("/cache");
}
} elseif (wipe_data) {
if (device_wipe_data()) status = INSTALL_ERROR;
if (erase_volume("/data")) status = INSTALL_ERROR;
if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
if (status != INSTALL_SUCCESS) ui_print("Data wipe failed.\n");
} elseif (wipe_cache) {
if (wipe_cache && erase_volume("/cache")) status = INSTALL_ERROR;
if (status != INSTALL_SUCCESS) ui_print("Cache wipe failed.\n");
} else {
status = INSTALL_ERROR; // No command specified
}
if (status != INSTALL_SUCCESS) ui_set_background(BACKGROUND_ICON_ERROR);
//Xandy modify for view the install infomation
//if (status != INSTALL_SUCCESS || ui_text_visible())
if(status != INSTALL_SUCCESS)
{
prompt_and_wait();
}
// Otherwise, get ready to boot the main system...
finish_recovery(send_intent);
ui_print("Rebooting...\n");
sync();
reboot(RB_AUTOBOOT);
return EXIT_SUCCESS;
}

? ? ? 在這里首先完成recovery模式輕量級的UI系統初始化,設置背景圖片,然后對輸入的參數格式化,最后根據輸入的參數進行相應的操作,如:安裝新的ROM、格式化(wipe)data及cache分區等等;值得注意的是刷新ROM的時候,要制作相應的update.zip的安裝包,這個在最后一章節講述,這里遇到的一個問題是在recovery模式下sd卡的掛載點為/sdcard而不是android系統下的/mnt/sdcard,所以我在這里通過:

//for update from "/mnt/sdcard/update.zip",but at recovery system is "/sdcard" so change it to "/sdcard"
//ui_print("before:[%s]\n",update_package);
if (strncmp(update_package, "/mnt", 4) == 0)
{
//jump the "/mnt"
update_package +=4;
}



這樣的操作跳過了上層傳過來的/mnt這四個字符。另外一個值得一提的是,傳入這里的這些參數都是從/cache/recovery/command這個文件中提取。具體對command文件的解析過程這里不再講述,可能通過查看recovery.c這個文件中的get_args函數。

? ? ? 那么command這個文件是在什么情況下創建的呢?下面我們就來看看吧!

5 ? ? ? 恢復出廠設置和固件升級

在android的系統設備中進入“隱私權->恢復出廠設置->重置手機”將為進入到恢復出廠設置的狀態,這時將會清除data、cache分區中的所有用戶數據,使得系統重啟后和剛刷機時一樣了。另外為了方便操作我們還可在“隱私權->固件升級->刷新ROM”這里加入了固件升級這一項。

在講述這些內容之前,我們有必要來看看/cache/recovery/command這個文件相應的一些recovery命令,這些命令都由android系統寫入。所有的命令如下:

* --send_intent=anystring ―― write the text out to recovery.intent
* --update_package=root:path —— verify install an OTA package file
* --wipe_data —— erase user data (and cache), then reboot
* --wipe_cache —— wipe cache (but not user data), then reboot

5.1 恢復出廠設置

在frameworks/base/services/java/com/android/server/masterClearReceiver.java

這個文件中有如下代碼:

publicclass MasterClearReceiver extends BroadcastReceiver {
privatestaticfinal String TAG = "MasterClear";
@Override
publicvoid onReceive(final Context context, final Intent intent) {
if (intent.getAction().equals(Intent.ACTION_REMOTE_INTENT)) {
if (!"google.com".equals(intent.getStringExtra("from"))) {
Slog.w(TAG, "Ignoring master clear request -- not from trusted server.");
return;
}
}
Slog.w(TAG, "!!! FACTORY RESET !!!");
// The reboot call is blocking, so we need to do it on another thread.
Thread thr = new Thread("Reboot") {
@Override
publicvoid run() {
try {
if (intent.hasExtra("enableEFS")) {
RecoverySystem.rebootToggleEFS(context, intent.getBooleanExtra("enableEFS", false));
} else {
RecoverySystem.rebootWipeUserData(context);
}
Log.wtf(TAG, "Still running after master clear?!");
} catch (IOException e) {
Slog.e(TAG, "Can't perform master clear/factory reset", e);
}
}
};
thr.start();
}
}

? ? ? 當app中操作了“恢復出廠設置”這一項時,將發出廣播,這個廣播將在這里被監聽,然后進入到恢復出廠設置狀態,我們來看看rebootWipeUserData這個方法的代碼:

publicstaticvoid rebootWipeUserData(Context context) throws IOException {
final ConditionVariable condition = new ConditionVariable();
Intent intent = new Intent("android.intent.action.MASTER_CLEAR_NOTIFICATION");
context.sendOrderedBroadcast(intent, android.Manifest.permission.MASTER_CLEAR,
new BroadcastReceiver() {
@Override
publicvoid onReceive(Context context, Intent intent) {
condition.open();
}
}, null, 0, null, null);
// Block until the ordered broadcast has completed.
condition.block();
bootCommand(context, "--wipe_data");
}

我們可以看到在這里參入了“--wipe_data”這個參數,并把這條命令寫入到command這個文件中去了,在進入recovery模式的時候解析到這條命令時就會清除data和cache中的數據了。

再來看看bootCommand這個方法里的代碼:


privatestaticvoid bootCommand(Context context, String arg) throws IOException {
RECOVERY_DIR.mkdirs(); // In case we need it
COMMAND_FILE.delete(); // In case it's not writable
LOG_FILE.delete();
FileWriter command = new FileWriter(COMMAND_FILE);
try {
command.write(arg);
command.write("\n");
} finally {
command.close();
}
// Having written the command file, go ahead and reboot
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
pm.reboot("recovery");
thrownew IOException("Reboot failed (no permissions?)");
}


? ? ? 其中COMMAND_FILE這個成員的定義如下:

/** Used to communicate with recovery. ?See bootable/recovery/recovery.c. */
privatestatic File RECOVERY_DIR = new File("/cache/recovery");
privatestatic File COMMAND_FILE = new File(RECOVERY_DIR, "command");

? ? ? 至此恢復出廠設置的命令就寫入了recovery cmd file中去了,通過pm.reboot(“recovery”);重啟系統,系統就自動進入到recovery模式自動清除用戶數據后再重啟系統。

5.2 固件升級

固件升級的流程和恢復出廠設置差不多,不同之處是入command這個文件中寫入的命令不一樣,下面是恢復出廠設置時的寫命令的代碼:

publicstaticvoid installPackage(Context context, File packageFile)
throws IOException {
String filename = packageFile.getCanonicalPath();
Log.w(TAG, "!!! REBOOTING TO INSTALL " + filename + " !!!");
String arg = "--update_package=" + filename;
bootCommand(context, arg);
}

? ? ? 這里的packageFile是由上層app傳入的,內容如下:

File packageFile = new File("/sdcard/update.zip");
RecoverySystem.installPackage(context, packageFile);

? ? ? 這樣當系統重啟進入到recovery模式時將會自動查找sdcard的根目錄下是否有update.zip這個文件,如果有將會進入到update狀態,否則會提示無法找到update.zip!

? ? ? 至此我們已經明白了android的整個recovery流程,下面將講講update.zip也就是各大論壇里講到的ROM的制作過程。

6 ? ? ? ROM的制作

我們解壓update.zip這個文件,可發現它一般打包了如下這幾個文件:

圖3 ?ROM包中的內容

或者沒有updates而是system這個目錄,不同的原因是我這里在updates里放置的是system.img等鏡像文件,這些文件都由源碼編譯而來。而如果是system目錄,這里一般放的是android系統的system目錄下的內容,可以是整個android系統的system目錄,也可以是其中的一部分內容,如一些so庫等等,這樣為補丁的發布提供了一個很好的解決辦法,不需要更新整個系統,只需要更新一部分內容就可以了!

來看看META-INF/com/google/android這個目錄下的內容,在這里就兩個文件,一個是可執行的exe文件update-binary,這個文件在進入update狀態的用于控制ROM的燒入,具體的代碼在recovery下的install.c文件中的try_update_binary這個函數中;另一個是updater-script,這個文件里是一些腳本程序,具體的代碼如下:

# Mount system for check figurepoint etc.
# mount("ext4", "EMMC","/dev/block/mmcblk0p2", "/system");
# Make sure Check system p_w_picpath figurepoint first.
# uncomment below lines to check
# assert(file_getprop("/system/build.prop", "ro.build.fingerprint") == "freescale/imx53_evk/imx53_evk/imx53_evk:2.2/FRF85B/eng.b33651.20100914.145340:eng/test-keys");
# assert(getprop("ro.build.platform) == "imx5x");
# unmount("/system");

show_progress(0.1, 5);
package_extract_dir("updates", "/tmp");
#Format system/data/cache partition
ui_print("Format disk...");
format("ext4","EMMC","/system");
format("ext4","EMMC","/data");
format("ext4","EMMC","/cache");
show_progress(0.2, 10);
# Write u-boot to 1K position.
# u-boot binary should be a no padding uboot!
# For eMMC(iNand) device, needs to unlock boot partition.
ui_print("writting u-boot...");
sysfs_file_write(" /sys/class/mmc_host/mmc0/mmc0:0001/boot_config", "1");
package_extract_file("files/u-boot.bin", "/tmp/u-boot.bin");
#ui_print("Clean U-Boot environment...");
show_progress(0.2, 5);
#simple_dd("/dev/zero","/dev/block/mmcblk0",2048);
simple_dd("/tmp/u-boot.bin", "/dev/block/mmcblk0", 2048);
#access user partition,and enable boot partion1 to boot
sysfs_file_write("/sys/class/mmc_host/mmc0/mmc0:0001/boot_config", "8");#Set boot width is 8bits
sysfs_file_write("/sys/class/mmc_host/mmc0/mmc0:0001/boot_bus_config", "2");
show_progress(0.2, 5);ui_print("extract kernel p_w_picpath...");
package_extract_file("files/uImage", "/tmp/uImage");
# Write uImage to 1M position.
ui_print("writting kernel p_w_picpath");
simple_dd("/tmp/uImage", "/dev/block/mmcblk0", 1048576);

ui_print("extract uramdisk p_w_picpath...");
package_extract_file("files/uramdisk.img", "/tmp/uramdisk.img");
# Write uImage to 1M position.
ui_print("writting uramdisk p_w_picpath");
simple_dd("/tmp/uramdisk", "/dev/block/mmcblk0", 6291456);
show_progress(0.2, 50);

# You can use two way to update your system which using ext4 system.
# dd hole system.img to your mmcblk0p2 partition.
package_extract_file("files/system.img", "/tmp/system.img");
ui_print("upgrading system partition...");
simple_dd("/tmp/system.img", "/dev/block/mmcblk0p2", 0);
show_progress(0.1, 5);

相應的腳本指令可在說明可對應源碼可在recovery包中的install.c這個文件中找到。

? ? ? 在bootable/recovery/etc下有原始版的腳本代碼update-script,但在recovery下的updater.c這個文件中有如下定義:

// Where in the package we expect to find the edify script to execute.
// (Note it's "updateR-script", not the older "update-script".)
#define SCRIPT_NAME "META-INF/com/google/android/updater-script"

? ? ? 所在使用這個原版的腳本的時候要將update-script更成updater-script,需要注意!

? ? ? 我們可以發現在bootable/recovery/etcMETA-INFO/com/google/android目錄下少了一個update-binary的執行文件,在out/target/product/YOU_PRODUCT/system/bin下面我們可以找到updater,只要將其重名字為update-binary就可以了!

? ? ? 有了這些準備工作,我們就可以開始制作一個我們自己的ROM了,具體步驟如下:

* Xandy@ubuntu:~$ mkdir recovery
* Xandy@ubuntu:~$ cd recovery 然后將上面提到的bootable/recovery/etc下的所有內容拷貝到當前目錄下并刪掉init.rc這個文件
* 編譯./META-INF/com/google/android/updater-script這個文件使達到我們想要的燒寫控制,如果是燒寫system.img這樣的鏡像文件,可以直接用我上面提到的updater-script這個腳本代碼。
* 拷貝相應的需要制作成ROM的android文件到updates目錄或者system目錄下,這個得根據系統的需要決定。
* Xandy@ubuntu:~/recovery$ mkdir res
* Xandy@ubuntu:~/recovery$ ~/myandroid/out/host/linux-x86/framework/dumpkey.jar ~/myandroid/build/target/product/security/testkey.x509.pem > res/keys 這里創建一個目錄用于存儲系統的key值
* zip /tmp/recovery.zip -r ./META-INF ./updates ./res 將所有文件打包
* java -jar ./tools/signapk.jar -w ./tools/testkey.x509.pem ./tools/testkey.pk8 /tmp/recovery.zip update.zip 我在recovery目錄下創建了一個tools目錄,里面放置了sygnapk.jar、testkey.pk8、testkey.x509.pem這幾個文件用于java簽名時用

經過上面這幾步之后就會在recovery目錄生成一個update.zip的文件,這個就是我們自己制作的ROM文件,將它拷到sdcard的根目錄下,在系統設置里操作進入到“固件升級狀態”,等到系統重啟時,就會看到已經開始自行格式化data和cache分區,稍后就開始出現進度條向相應分區里燒寫uboot、kernel、android system的文件了!

圖4 燒入新ROM


轉載于:https://blog.51cto.com/sunzeduo/1348324

總結

以上是生活随笔為你收集整理的android recovery模式及ROM制作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

人人看97 | 99在线视频网站 | 免费国产在线精品 | 久久久伦理 | 黄色亚洲免费 | 亚洲综合婷婷 | 中文字幕日韩av | 免费视频国产 | 国产精品久久久久久五月尺 | 国产精品18久久久久久不卡孕妇 | 国产网站av | 久色小说 | 九九九视频在线 | 成人小视频在线播放 | 欧美日本啪啪无遮挡网站 | 亚洲精品视频网站在线观看 | 婷婷色视频 | 麻豆播放 | 日韩一区二区在线免费观看 | 少妇bbb搡bbbb搡bbbb | 天堂av免费观看 | 青草视频在线看 | 亚洲一区二区三区四区在线视频 | 日韩精品资源 | 97在线观 | 香蕉影视 | 国产99在线免费 | 日韩和的一区二在线 | 国产精品免费视频一区二区 | 丁香5月婷婷 | 日韩精品视频第一页 | 人人爽人人爽人人片av | 中文字幕在线一二 | 精品国产电影 | 四虎影院在线观看av | 免费成人av在线看 | 成人久久久久久久久久 | 色综合咪咪久久网 | av电影免费在线 | 日韩av一区在线观看 | 懂色av懂色av粉嫩av分享吧 | 天天色天天射综合网 | 色综合www | 欧美成人亚洲成人 | 麻豆视频免费入口 | 免费在线观看不卡av | 男女免费视频观看 | 免费在线| 九九视频免费观看视频精品 | 国产婷婷一区二区 | 久久免费精品视频 | 视频国产精品 | 91在线视频在线 | 在线观看一级 | av电影中文 | av7777777| 欧美日韩二三区 | 99精品国产在热久久 | 日韩免费精品 | 午夜三级在线 | 日韩欧美aaa| 国产亲近乱来精品 | 精品99免费 | 国产高h视频 | 久久伦理网 | 久精品视频免费观看2 | 五月婷婷一区二区三区 | 久久成人国产 | 国产精品国产三级国产aⅴ入口 | 麻豆视频国产精品 | 日日操网 | 91亚洲精品久久久蜜桃借种 | 在线免费国产视频 | 日韩a在线 | 91干干干| 亚洲精品福利在线 | 天堂av观看 | 亚洲精品午夜一区人人爽 | 亚洲精品在线一区二区 | 久久热首页 | 亚州精品一二三区 | 黄色av网站在线观看 | 久久久久国 | 高清一区二区三区 | av青草 | 成年人网站免费在线观看 | 国内精品在线观看视频 | 五月天天色 | 亚洲经典视频 | 97超碰人 | 欧美一级裸体视频 | 国产精品久久久久亚洲影视 | 国产美女在线观看 | 国产在线精品一区二区三区 | 五月激情丁香图片 | 欧美日韩一区二区三区不卡 | 一区二区三区精品在线视频 | 亚洲激情在线观看 | 亚洲专区视频在线观看 | 免费在线观看91 | 最近2019中文免费高清视频观看www99 | 91漂亮少妇露脸在线播放 | 一级性生活片 | 人人网av | 国产亚洲情侣一区二区无 | 亚洲 综合 激情 | 在线看国产日韩 | 亚洲视频一 | 久久精品视频99 | 中文字幕的| 99热精品在线观看 | 成人羞羞视频在线观看免费 | 中文字幕国产 | 亚洲国产视频网站 | 国产中文字幕在线视频 | 最近中文字幕国语免费高清6 | 亚洲日本黄色 | 亚洲永久精品在线观看 | 日韩精品aaa | av网站播放 | 久久久人人爽 | 人人澡人人澡人人 | 亚洲精选视频在线 | 亚洲国产99| 国产精品欧美激情在线观看 | 久久久高清一区二区三区 | 国产护士在线 | 国产免费专区 | 欧美日韩高清 | 999视频在线观看 | 天天夜夜狠狠操 | 超碰97网站 | 欧美9999| 亚洲国产中文字幕 | 日韩在线视频网址 | 色视频在线免费 | 日韩在线视频免费播放 | 91丨九色丨高潮 | 亚洲欧洲精品一区二区精品久久久 | 天天操天天色综合 | 久久久久久国产一区二区三区 | 蜜桃视频日韩 | 天天碰天天操 | 天天干天天想 | 97爱| 成人三级网址 | 久草成人在线 | 91日本在线播放 | 国产精品久久亚洲 | 日韩特黄av | 99色视频在线 | 91丨九色丨国产女 | 91热视频在线观看 | 国产精品theporn | 涩涩网站在线播放 | 人人超碰在线 | 亚洲精品乱码久久久久久高潮 | 国产中年夫妇高潮精品视频 | 日韩欧美电影网 | 久久私人影院 | 1024久久| 国产艹b视频 | 亚洲国产欧美在线看片xxoo | 麻豆91精品91久久久 | 欧美-第1页-屁屁影院 | 午夜视频播放 | 国产一区二区三区视频在线 | 人人讲下载| 在线观看黄色小视频 | 美女又爽又黄 | 欧美色图亚洲图片 | 在线免费观看黄色小说 | 国产精品都在这里 | 成人97人人超碰人人99 | 97电影院网 | 涩涩成人在线 | 亚洲天天草 | 久久综合国产伦精品免费 | 日韩在线国产 | 亚洲一区二区三区在线看 | 精品视频在线视频 | 国产日韩欧美在线影视 | 国产一卡二卡在线 | 久久免费av电影 | 成人h视频在线 | 精品亚洲视频在线观看 | 久久久精品99 | av成人资源| 久久久高清视频 | 右手影院亚洲欧美 | 摸阴视频 | 国产在线97 | 久久久网页 | 久久精品国产免费看久久精品 | 亚洲无人区小视频 | 在线免费观看不卡av | 黄色一级大片在线观看 | 久久伊人精品一区二区三区 | 日韩欧美一区二区在线观看 | a视频在线看 | av免费成人 | 日韩字幕在线观看 | 国产欧美在线一区 | 日韩专区中文字幕 | 狠色狠色综合久久 | 综合色综合色 | 天天做日日爱夜夜爽 | 久久99婷婷| 国产不卡在线视频 | 91丨九色丨国产丨porny精品 | 久久精品福利视频 | 天天综合网 天天 | 天天操夜 | 色婷婷福利 | 免费在线观看不卡av | 中文字幕在线观看视频一区 | 日韩区欧美久久久无人区 | 亚洲美女免费精品视频在线观看 | 久久成人国产精品一区二区 | 亚洲专区在线视频 | www激情网| 激情综合六月 | 一区二区 精品 | 特级毛片aaa| 久久久久欠精品国产毛片国产毛生 | 免费中午字幕无吗 | 国产精品爽爽久久久久久蜜臀 | 中文字幕日韩一区二区三区不卡 | 日韩精品久久久免费观看夜色 | 91成人精品一区在线播放69 | 日韩色av色资源 | 黄色网址在线播放 | av免费成人| 人人爱人人爽 | 人人澡人摸人人添学生av | 国产成人一二片 | av电影在线观看完整版一区二区 | 国产无遮挡又黄又爽在线观看 | 亚洲精品系列 | 久久人人爽av | 999在线视频 | 天天骚夜夜操 | 久久久久国产精品免费免费搜索 | 国产 一区二区三区 在线 | 亚洲另类视频在线 | 日韩精品一区二区三区高清免费 | 91天堂影院| 色黄视频免费观看 | 制服丝袜亚洲 | 国产精品午夜av | 天天操伊人| 婷婷深爱五月 | 97精品国产97久久久久久久久久久久 | 激情五月婷婷激情 | 最新日韩视频在线观看 | 成年人在线看片 | 性色va| av片在线看 | 91黄色小网站 | 午夜视频在线观看一区 | 又紧又大又爽精品一区二区 | 91看片在线播放 | 伊人精品在线 | 成人在线网站观看 | 日本精品va在线观看 | 最新免费中文字幕 | 国产精品久久久久影院日本 | 亚洲精品视频免费在线观看 | 亚州精品在线视频 | 久久美女精品 | 亚洲欧美视频在线观看 | 手机在线看片日韩 | 日本中文一区二区 | 97精品在线视频 | 国产精品麻豆视频 | 日韩在线免费视频观看 | 国产欧美在线一区二区三区 | 天天操夜操 | 久久97久久97精品免视看 | 国产色拍拍拍拍在线精品 | 天天天干天天天操 | 激情综合五月 | 亚洲黄色成人网 | 精品专区一区二区 | 久久视频在线观看 | 国产一级黄色免费看 | 婷婷六月网 | 天天色婷婷 | 国产国产人免费人成免费视频 | 亚洲在线 | 久久99热久久99精品 | 国产成人精品综合 | 日韩激情第一页 | 在线免费av播放 | 国产色啪 | 亚洲欧洲精品在线 | 日韩精品一区二区三区电影 | 激情欧美丁香 | 国产高清av免费在线观看 | 亚洲综合色网站 | 国产黄色视 | 亚洲一区久久 | 久久人人看 | 亚洲1级片 | 菠萝菠萝在线精品视频 | 在线免费观看黄色av | 成人91在线观看 | 久久 一区 | 一性一交视频 | www.久久色 | 久久人人97超碰com | 午夜在线看片 | 天天夜操 | www.久久久.com | 日韩av资源站 | 欧美乱淫视频 | 亚洲高清视频在线观看 | 色偷偷网站视频 | 国产精品永久 | 99日韩精品 | 欧美伦理一区 | 久久久男人的天堂 | 亚洲精品在线观看视频 | 一区二区伦理 | 国产一级二级在线观看 | 精品免费一区二区三区 | 在线一二三四区 | 果冻av在线 | 91人人在线| 久久久久久网址 | 中国精品少妇 | 国产成人精品久久久久蜜臀 | 一区二区三区高清在线观看 | 在线亚洲播放 | 日韩精品一区二区三区视频播放 | 黄色一级网 | 国产精品99久久99久久久二8 | 在线视频电影 | 久久久久久久久久毛片 | 色999在线| 欧美性猛片, | 在线观看日韩精品视频 | 久久国产亚洲视频 | 亚洲狠狠操| 精品国产一区二区三区久久影院 | 91九色精品国产 | 日韩mv欧美mv国产精品 | 久久免费国产视频 | 97av在线视频 | 91精品一区二区三区久久久久久 | 国产在线一区观看 | 一区二区精品在线 | 又黄又爽又无遮挡的视频 | 久久免费一 | 911精品美国片911久久久 | 欧美精品三级 | 日韩亚洲在线视频 | 国产一级片网站 | 国产在线观看h | 亚洲综合五月天 | 国产精品99久久久久久武松影视 | 国产精品一区在线播放 | 国产专区在线看 | 日日夜夜狠狠干 | 中文字幕高清有码 | 国产黄在线 | 国产在线观看一 | 美女视频黄免费的久久 | 国产一级片网站 | 欧美 日韩 国产 中文字幕 | 91高清完整版在线观看 | 在线视频1卡二卡三卡 | 8x成人免费视频 | 欧美9999 | 国产精品福利午夜在线观看 | 欧美日韩不卡在线 | 成人不用播放器 | 免费在线观看午夜视频 | 国产精品久久久久久久久久三级 | 麻豆国产精品一区二区三区 | 97在线看 | 国产97视频 | 黄污视频网站大全 | 在线免费观看不卡av | 狠狠躁天天躁 | www黄免费 | 中文字幕中文字幕中文字幕 | 天天干天天操天天入 | 日韩在线观看一区二区 | 美女网站在线免费观看 | 天天天插 | 久久国内精品视频 | 欧美在线视频一区二区 | 久久手机免费观看 | 国产理论一区二区三区 | 天海冀一区二区三区 | 国产99久久久精品 | 少妇av片 | 久久综合九色欧美综合狠狠 | aa一级片| a级国产乱理论片在线观看 伊人宗合网 | 国产黄免费 | 亚洲国产日韩欧美 | 五月天网站在线 | 特级片免费看 | 一区二区 不卡 | av高清一区二区三区 | 日韩精品一区二区三区水蜜桃 | 麻豆视频免费入口 | 国产黑丝袜在线 | 91黄色小网站 | 色视频一区 | 日韩三区在线 | 成人黄色影片在线 | 亚洲精品免费在线 | 亚洲成a人片77777潘金莲 | 国产高清视频在线播放 | 在线看一区 | 正在播放五月婷婷狠狠干 | 这里只有精彩视频 | 欧美久草视频 | 国产91粉嫩白浆在线观看 | 欧美做受xxx | 日韩欧美黄色网址 | av在线免费网 | 成人黄色毛片 | 99亚洲视频 | 久久99亚洲精品久久久久 | 国产精品久久久久久久久费观看 | 免费在线国产精品 | 美女视频黄频大全免费 | 久草干 | 在线中文字母电影观看 | 美女视频黄是免费的 | 欧美成人精品三级在线观看播放 | 永久免费毛片在线观看 | av在线播放网址 | 免费在线观看亚洲视频 | 国产成人久久 | 三级视频片| 久久免费精彩视频 | 成人免费电影 | 午夜视频播放 | 日韩1页| www.夜夜操.com| 日日碰狠狠添天天爽超碰97久久 | av电影免费观看 | 人人干狠狠干 | 亚洲午夜久久久久 | 国产免费观看高清完整版 | 亚洲国产中文字幕在线 | 丰满少妇在线观看网站 | 久久久久久久网 | 国产成人精品久久亚洲高清不卡 | 日韩精品一区二区三区不卡 | 亚洲一区二区三区毛片 | 在线观看免费黄色 | 国产精品久久久久久久久软件 | 麻豆91在线| 综合色在线观看 | 日韩在线观看视频在线 | www.五月天婷婷 | 成人午夜电影在线 | 国产一级免费片 | 91爱在线 | 午夜精品av在线 | 中文字幕在线色 | 国产精品一区二区av麻豆 | 欧美激情另类文学 | 日韩啪啪小视频 | 日本三级香港三级人妇99 | 91激情视频在线观看 | 成人在线视频你懂的 | 日本久久免费电影 | 久久久久影视 | 亚洲六月丁香色婷婷综合久久 | 99精品国产福利在线观看免费 | 一级黄视频 | 国产一区二区高清视频 | 久久久久久国产精品999 | 亚洲精品美女免费 | 91禁在线观看 | 草久在线视频 | 99热精品在线 | 久久亚洲免费视频 | 国产 亚洲 欧美 在线 | 国产精品 欧美 日韩 | 麻豆影视网 | 成人三级av| 精品视频免费久久久看 | 国内一级片在线观看 | 亚洲精品黄 | 婷婷丁香狠狠爱 | 欧美成天堂网地址 | 免费看国产视频 | 色片网站在线观看 | 91视频久久久 | 亚洲女人天堂成人av在线 | 看片一区二区三区 | 婷婷福利影院 | 不卡电影免费在线播放一区 | 久久久久麻豆 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 西西44人体做爰大胆视频 | 麻豆传媒视频在线免费观看 | 色视频国产直接看 | 最新亚洲视频 | 91精品视频在线观看免费 | 九九热精品视频在线观看 | 久久国产精品精品国产色婷婷 | 99热日本 | 色在线网 | 久久影院亚洲 | 国产精品一区二区吃奶在线观看 | 91亚洲免费| 最近2019中文免费高清视频观看www99 | 亚洲精品乱码久久久久久蜜桃91 | 丝袜美腿亚洲 | 久久久网址 | 99视频黄| 天天狠狠干 | 在线黄色国产 | 国产精品一区二区在线免费观看 | 日韩在线视频免费看 | 国产香蕉视频在线观看 | 热re99久久精品国产99热 | a国产精品 | 欧美日韩国产二区三区 | 婷婷精品国产欧美精品亚洲人人爽 | 欧美久久久久久久久中文字幕 | 天天操天天干天天干 | 99热精品视 | 欧美一进一出抽搐大尺度视频 | 波多野结衣在线中文字幕 | 操久久免费视频 | 婷婷开心久久网 | 99精品福利 | 日韩特级黄色片 | 亚洲精品字幕在线 | 日本中文字幕在线电影 | 天天综合网天天综合色 | 中文字幕精品视频 | 97人人添人澡人人爽超碰动图 | 国产黄免费看 | 中文字幕在线有码 | 丁香花在线视频观看免费 | 欧美坐爱视频 | 91精品久久香蕉国产线看观看 | 免费91麻豆精品国产自产在线观看 | 91麻豆视频 | 在线观看免费av网站 | 97人人爽人人 | 欧美一级日韩三级 | 亚洲精品永久免费视频 | 激情综合六月 | 中文字幕在线观看视频免费 | 久久久污| 99精品国产aⅴ | 国产精品一区二区av | 久久精品香蕉视频 | 欧美久久久久久久久久 | 超碰国产在线播放 | 99免在线观看免费视频高清 | 久久dvd| 操处女逼 | 在线免费av网站 | 免费a级黄色毛片 | av成人免费在线观看 | 免费h在线观看 | 久久精品高清视频 | 欧美国产大片 | 免费a级毛片在线看 | 狠狠狠狠狠狠狠狠干 | 国产在线黄 | 亚洲成人av一区 | 久久男人中文字幕资源站 | 中文字幕日韩国产 | 日本三级不卡视频 | 亚洲成人免费观看 | 91大神在线看 | 国产1区在线 | 99精品国产免费久久 | 天天艹天天干天天 | 婷婷久久综合网 | 国产成人综合在线观看 | 国产精品久久婷婷六月丁香 | 一级黄视频 | 成人精品久久久 | 在线va视频 | 日本在线观看中文字幕无线观看 | 精品国产激情 | 在线 日韩 av | 国内精品久久久久影院优 | 免费观看国产视频 | 欧美日韩在线电影 | 中文字幕观看av | 精品国产免费看 | 亚洲三区在线 | 久久视频国产精品免费视频在线 | 91在线porny国产在线看 | 成人影视免费看 | 国产无套精品久久久久久 | 亚洲一区二区天堂 | a视频免费看 | 国产91对白在线 | 国产精品网址在线观看 | 在线观看视频国产 | 激情婷婷综合 | 久久久亚洲精华液 | 菠萝菠萝在线精品视频 | av一区在线 | 久久免费黄色网址 | 91天天操| 日韩精品91偷拍在线观看 | 成人欧美一区二区三区黑人麻豆 | 精品国产一区二区三区日日嗨 | 日韩一区二区三区不卡 | 在线看一级片 | 天天色棕合合合合合合 | 日韩一二区在线观看 | 日韩欧美在线一区 | 国产精品一区二区三区电影 | 成人国产精品久久久 | 久久夜夜爽 | 亚洲第一区在线观看 | 日韩精品一区二区三区视频播放 | 91久久国产自产拍夜夜嗨 | 日韩欧美极品 | 91麻豆网站 | 天天干,天天射,天天操,天天摸 | 久久精品观看 | 国产精品女同一区二区三区久久夜 | 久久国产视频网站 | 免费看麻豆 | www免费网站在线观看 | 97人人网 | 91看片淫黄大片在线播放 | 国产成人精品在线 | 美女国产在线 | 国产精品一区二区三区免费视频 | 一区二区三区电影 | 国产成人久久av免费高清密臂 | 久久九九久久 | .国产精品成人自产拍在线观看6 | 国产高清久久 | 国产女教师精品久久av | 天天色天天射天天干 | 久久久麻豆精品一区二区 | www.国产在线观看 | 日韩激情视频在线观看 | 亚洲精品456在线播放乱码 | 久久免费黄色网址 | 一本一本久久a久久精品综合 | 亚洲精品小区久久久久久 | 亚洲视频综合 | 久久综合精品国产一区二区三区 | 亚洲精品在线视频 | 四虎www. | av免费播放 | 天天搞天天 | 美女久久99 | 中文字幕国产 | 久久观看最新视频 | 98久久 | 日批在线看 | 日韩高清免费无专码区 | 免费观看第二部31集 | 在线观看黄av| 亚洲永久精品视频 | 五月激情片 | 欧美一二区视频 | 欧美日韩性生活 | 国产精品久久久久av福利动漫 | 国产色女人| 国产成人免费在线 | 国产精品久久久一区二区三区网站 | 国产又粗又硬又爽视频 | 久久精品欧美日韩精品 | 国产不卡视频在线 | 视频一区亚洲 | 国产黄色a| 精品国内自产拍在线观看视频 | 在线看成人av | 日本精品一区二区 | 日韩videos | 五月开心六月伊人色婷婷 | 狠狠综合久久 | 韩日精品中文字幕 | 成人午夜在线观看 | 伊人久久在线观看 | 高清国产午夜精品久久久久久 | 五月婷婷在线播放 | 色婷婷av一区 | 波多野结衣动态图 | 不卡的av在线播放 | 99这里只有精品视频 | 97在线精品国自产拍中文 | 欧美一区二区在线免费观看 | 亚洲黄色成人网 | 国产高清视频在线播放一区 | 亚洲国产网站 | 天天插狠狠干 | 91精品免费视频 | 麻豆视频国产在线观看 | 天天干天天干天天色 | 久久久电影 | 精品在线视频一区 | 青青河边草观看完整版高清 | 天天干天天综合 | 久草视频资源 | 日本久久成人中文字幕电影 | 丁香综合五月 | 国产精彩在线视频 | 97视频网站 | www.com操| 久草视频免费看 | 天天操夜夜操 | 免费高清看电视网站 | 国产91在线观 | 国产v亚洲v| 国产超碰在线观看 | 亚洲资源一区 | 久久久激情视频 | 欧美日韩精品在线观看 | 91精品网站在线观看 | 国产99久久久久久免费看 | 在线免费观看国产 | 草久草久| 国产免费人成xvideos视频 | 免费国产一区二区 | 中文字幕 在线看 | 亚洲综合色视频在线观看 | 天天干天天天天 | 亚洲日本韩国一区二区 | 黄色av成人在线 | 久草在线视频首页 | 国内精品久久久久影院一蜜桃 | 日本高清中文字幕有码在线 | 欧美一级片播放 | 久久久久久久久爱 | 国产不卡av在线 | 日本精品视频一区 | 日韩精品中文字幕在线观看 | 超碰日韩| 亚洲资源一区 | 天天玩天天干天天操 | 日本女人的性生活视频 | 亚洲成人黄色网址 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久伦理| 偷拍精偷拍精品欧洲亚洲网站 | 久久夜色精品国产欧美乱极品 | 欧美日韩久久一区 | 狠狠色婷婷丁香六月 | 97超碰在 | 久久黄色精品视频 | 久久久久9999亚洲精品 | 久久精品79国产精品 | 成人在线观看影院 | 欧美一二区在线 | 网站你懂的 | 91免费版成人 | 欧美精品在线一区 | 久久人人爽人人 | 国产日韩三级 | 国产一级精品视频 | 在线观看日本高清mv视频 | 91色亚洲| 亚洲精品免费在线观看视频 | 夜夜骑日日 | 丁香九月婷婷综合 | 日韩av免费在线看 | 亚洲蜜桃在线 | 999久久a精品合区久久久 | 日本中文乱码卡一卡二新区 | 国产尤物在线 | 免费十分钟| 丝袜+亚洲+另类+欧美+变态 | 久久精品女人毛片国产 | 国产精品99久久久精品 | 天天干,天天射,天天操,天天摸 | 亚洲精品国偷自产在线91正片 | 99视频| av电影在线不卡 | 爱爱av在线 | 婷婷5月色| 精品成人a区在线观看 | 丁香色综合| 人成在线免费视频 | 国产精品video| 97品白浆高清久久久久久 | 久久免费视频观看 | 亚洲国产精品久久久久婷婷884 | 久久99热国产 | 国产高清 不卡 | 亚洲人av免费网站 | 五月天丁香视频 | 午夜av大片 | 在线成人性视频 | 久久精品国产成人 | 奇米影视777影音先锋 | 天天艹 | 最近免费观看的电影完整版 | 精品国产久 | 午夜婷婷在线观看 | 中文国产字幕在线观看 | 亚洲日本一区二区在线 | 深夜免费福利视频 | 日韩精品一区二区在线观看 | 中文字幕在线免费看 | 亚洲aⅴ久久精品 | 91热在线| 91精品国产自产在线观看永久 | 91在线在线观看 | 六月色丁| 婷婷五月在线视频 | 人人爱人人舔 | a视频免费看 | 在线影院中文字幕 | 91麻豆精品国产91久久久使用方法 | 就操操久久| 国产精品一区二区在线 | 欧美日韩一区二区三区不卡 | 91麻豆精品国产自产在线 | 国产成人精品在线观看 | 亚洲第一区在线播放 | 国产成人精品一区二区三区 | 国产视 | 欧美一级视频在线观看 | 日本久久成人 | 天天干天天操天天搞 | 久热免费在线观看 | 不卡电影免费在线播放一区 | 午夜av电影 | 五月激情姐姐 | 欧美一区二区日韩一区二区 | 中文网丁香综合网 | 久青草视频 | 精品久久久免费 | 免费能看的av | 日日操天天操夜夜操 | 欧美一级爽 | 视频在线观看99 | 天天婷婷 | 亚洲免费在线观看视频 | 久久久影片| 99色| 日韩 在线| 欧美日韩免费一区二区三区 | 在线看v片| 综合铜03| 免费看黄电影 | 日韩综合色 | 欧美日韩亚洲在线 | 韩日精品在线 | 久久国际影院 | 91视频国产免费 | 在线看av的网址 | 久久精品网址 | 五月婷婷影视 | 婷婷中文在线 | 最近中文字幕国语免费高清6 | 日韩高清一区在线 | 国产自在线 | 啪啪免费视频网站 | 日韩三区在线 | 久久视频免费 | 超碰免费观看 | 5月丁香婷婷综合 | 国产精品 日韩 欧美 | 99视频在线播放 | 中文字幕在线视频精品 | 天天操夜夜曰 | 99亚洲视频 | av中文字幕在线电影 | 最近高清中文在线字幕在线观看 | 欧美色噜噜 | 成人午夜电影在线播放 | 亚洲国产日韩欧美 | 欧美一区在线观看视频 | 中文字幕第一页在线视频 | 午夜手机看片 | 亚洲天天综合网 | 奇米网777 | 美女网站在线播放 | 国产精品一区二区三区99 | 91在线porny国产在线看 | 色网av | 日韩精品中文字幕一区二区 | 激情av在线播放 | 日韩精品中文字幕在线观看 | 日韩av男人的天堂 | 最近中文字幕高清字幕免费mv | 在线观看中文av | 国产精品video爽爽爽爽 | 99精品在线 | 91大片成人网 | 国产亚洲婷婷免费 | 国产在线日韩 | 免费观看十分钟 | 国产精品毛片一区二区在线 | 毛片99| 狠狠操夜夜 | 丰满少妇高潮在线观看 | 日韩av网站在线播放 | 欧美成a人片在线观看久 | 成人在线视频在线观看 | 免费的成人av | 久久精品国产第一区二区三区 | 日韩欧美电影网 | 国产精品99精品久久免费 | 国产精品一区二区三区在线播放 | 日韩欧美在线国产 | av高清不卡 | 92中文资源在线 | 国产一区二区网址 | 99热国内精品 | 激情综合五月网 | 久久综合精品一区 | 日韩理论片在线观看 | www.夜夜操| 日韩在线免费视频 | 亚洲日日夜夜 | 日韩av成人在线 | 97国产超碰在线 | 九九九九九九精品 | 国内精品免费久久影院 | 国内精品久久久久影院男同志 | 中文字幕久久精品亚洲乱码 | 日本三级不卡 | 天天射天天射天天 | 日韩亚洲在线观看 | 中国黄色一级大片 | 国产精品久久久久久久久免费看 | 精品久久久久国产免费第一页 | 91九色porny在线| 免费观看一区二区 | 国产一区在线免费观看 | 国产精品21区 | 日韩激情视频在线观看 | 国产高清不卡一区二区三区 | 欧美巨大 | 曰本免费av | 中文一区在线 | 日韩一区精品 | 国产一区二区三区免费在线观看 | 99精品热| 日韩欧美99 | 欧美精品久久久久久久亚洲调教 | 日日爱夜夜爱 | 久久超碰99 | 欧美性色综合网站 | 成人国产网站 | 欧美精品一区二区三区一线天视频 | 激情五月六月婷婷 | a级一a一级在线观看 | 久久 一区 | 97超碰免费 | 在线播放你懂 | 日韩欧美在线中文字幕 | 久久免费国产精品1 | 又黄又刺激视频 | 亚洲精品456在线播放 | 欧美日韩视频网站 | www.午夜 | 天天综合色天天综合 | 国产午夜精品一区二区三区四区 | 深夜福利视频在线观看 | 九九久久国产 | 伊人资源视频在线 | 成人av日韩 | 韩国一区二区三区视频 | 亚洲永久精品国产 | 国产精品视频内 | 日韩va在线观看 | 丁香六月网 | 2023亚洲精品国偷拍自产在线 | 亚洲精品在线视频播放 | 色网站免费在线观看 | 91爱爱电影 | 91成人精品一区在线播放69 | 久久精品免费播放 | 日韩在线电影一区 | 久久婷婷综合激情 | 国产成人av电影在线观看 | 五月开心六月伊人色婷婷 | 99草视频在线观看 | 久久久国产在线视频 | 亚洲禁18久人片 | 日本黄区免费视频观看 | 国产免费视频一区二区裸体 | 久久久久免费网站 | 黄色a视频 | 天天色 天天 | 国产精品一区二区三区观看 | 99热这里只有精品国产首页 | 涩涩色亚洲一区 | 国产在线超碰 |