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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Android研究-linux内核启动到android系统

發布時間:2025/4/5 linux 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android研究-linux内核启动到android系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

很多人閱讀代碼,總喜歡從頭開始,這樣覺得很安全,有依靠,無論如何總是能知道“頭”,有頭就能找到任何需要的部分。

Android生在linux內核基礎上,linux內核啟動的最后一步,一定是啟動的android的進程,下面看收集到的文章。

1. linux內核啟動過程

引用地址:http://blog.csdn.net/ayangke/article/details/6888699

?????? 內核版本:2.6.22? 為什么要采用這樣一個較低的版本進行移植了,因為韋東山大牛說了,低版本的才能學到東西,越是高版本需要移植時做的工作量越少,學的東西越少。

?????? 內核啟動分為三個階段,第一是運行head.S文件和head-common.S,第三個階段是允許第二是運行main.c文件

?????? 對于ARM的處理器,內核第一個啟動的文件是arc/arm/kernel下面的head.S文件。當然arc/arm/boot/compress下面 也有這個文件,這個文件和上面的文件略有不同,當要生成壓縮的內核時zImage時,啟動的是后者,后者與前者不同的時,它前面的代碼是做自解壓的,后面 的代碼都相同。我們這里這分析arc/arm/kernel下面的head.S文件。當head.S所作的工作完成后它會跳到init/目錄下跌的 main.c的start_kernel函數開始執行。

?

第一階段:

?

首先截取部分head.S文件

ENTRY(stext)

?????? msr? cpsr_c,#PSR_F_BIT | PSR_I_BIT | SVC_MODE @ ensure svc mode

????????????????????????????????????????? @ andirqs disabled

?????? mrc? p15,0, r9, c0, c0?????????? @ get processor id

?????? bl??? __lookup_processor_type???????????? @ r5=procinfo r9=cpuid

?????? movs?????? r10,r5???????????????????????? @ invalidprocessor (r5=0)?

?????? beq? __error_p???????????????????? @ yes, error 'p'

?????? bl??? __lookup_machine_type??????? @ r5=machinfo

?????? movs?????? r8,r5?????????????????????????? @ invalidmachine (r5=0)?

?????? beq? __error_a???????????????????? @ yes, error 'a'

?????? bl??? __create_page_tables

?

?????? /*

?????? ?*The following calls CPU specific code in a position independent

?????? ?*manner.? See arch/arm/mm/proc-*.S fordetails.? r10 = base of

?????? ?*xxx_proc_info structure selected by __lookup_machine_type

?????? ?*above.? On return, the CPU will be readyfor the MMU to be

?????? ?*turned on, and r0 will hold the CPU control register value.

?????? ?*/

?????? ldr?? r13,__switch_data??????? @ address to jump toafter

????????????????????????????????????????? @ mmuhas been enabled

?????? adr?? lr,__enable_mmu????????? @ return (PIC)address

?

?

第一步,執行的是__lookup_processor_type,這個函數是檢查處理器型號,它讀取你的電路板的CPU型號與內核支持的處理器進行比較看是否能夠處理。這個我們不關心它的具體實現過程,因為現在主流處理器內核都提供了支持。

?????? 第二步,執行的是__lookup_machine_type,這個函數是來檢查機器型號的,它會讀取你bootloader傳進來的機器ID和他能夠處 理的機器ID進行比較看是否能夠處理。內核的ID號定義在arc/arm/tool/mach_types文件中MACH_TYPE_xxxx宏定義。內 核究竟就如何檢查是否是它支持的機器的呢?實際上每個機器都會在/arc/arm/mach-xxxx/smdk-xxxx.c文件中有個描述特定機器的 數據結構,如下

?

[html] view plaincopy
  • MACHINE_START(S3C2440,"SMDK2440")??
  • ???????/*?Maintainer:?Ben?Dooks<ben@fluff.org>?*/??
  • ???????.phys_io??=S3C2410_PA_UART,??
  • ???????.io_pg_offst????=?(((u32)S3C24XX_VA_UART)?>>?18)?&?0xfffc,??
  • ???????.boot_params??=?S3C2410_SDRAM_PA?+?0x100,??
  • ???
  • ???????.init_irq???=s3c24xx_init_irq,??
  • ???????.map_io??????????=smdk2440_map_io,??
  • ???????.init_machine??=?smdk2440_machine_init,??
  • ???????.timer?????????????=&s3c24xx_timer,??
  • MACHINE_END??
  • ???

  • MACHINE_START和 MACHINE_END實際上被展開成一個結構體

    [html] view plaincopy
  • #defineMACHINE_START(_type,_name)?????????????????\??
  • staticconst?struct?machine_desc?__mach_desc_##_type???????\??
  • ?__used?????????????????????????????????????????????\??
  • ?__attribute__((__section__(".arch.info.init")))=?{????\??
  • ???????.nr??????????=MACH_TYPE_##_type,???????????\??
  • ???????.name?????????????=_name,??
  • ????????
  • #defineMACHINE_END??????????????????????????\??
  • };??

  • ?

    于是上面的數據結構就被展開為

    [html] view plaincopy
  • staticconst?struct?machine_desc?__mach_desc_S3C2440?????\??
  • ?__used?????????????????????????????????????????????\??
  • ?__attribute__((__section__(".arch.info.init")))=?{????\??
  • ???????.nr??????????=MACH_TYPE_S3C2440,??????????\??
  • ???????.name?????????????=”SMDK2440”,};??
  • .phys_io??=?S3C2410_PA_UART,??
  • ???????.io_pg_offst????=?(((u32)S3C24XX_VA_UART)?>>?18)?&?0xfffc,??
  • ???????.boot_params??=?S3C2410_SDRAM_PA?+?0x100,??
  • ???
  • ???????.init_irq???=s3c24xx_init_irq,??
  • ???????.map_io??????????=smdk2440_map_io,??
  • ???????.init_machine??=?smdk2440_machine_init,??
  • ???????.timer?????????????=&s3c24xx_timer,??
  • ???
  • }??

  • 每個機器都會有一個machine_desc__mach_desc結構,內核通過檢查每個machine_desc__mach_desc的nr 號和bootloader傳上來的ID進行比較,如果相同,內核就認為支持該機器,而且內核在后面的工作中會調用該機器的 machine_desc__mach_desc_結構中的方法進行一些初始化工作。

    ?????? 第三步,創建一級頁表。

    ?????? 第四步,在R13中保存__switch_data 這個函數的地址,在第四步使能mmu完成后會跳到該函數執行。

    第五步,執行的是__enable_mmu,它是使能MMU,這個函數調用了__turn_mmu_on函數,讓后在_turn_mmu_on在最后將第三步賦給R13的值傳給了PC指針 (mov??? pc, r13),于是內核開始跳到__switch_data這個函數開始執行。

    ?

    我們再來看arch/arm/kenel/head-common.S這個文件中的__switch_data函數

    ?

    [html] view plaincopy
  • __switch_data:??
  • ???????.long???????__mmap_switched??
  • ???????.long???????__data_loc????????????????????@?r4??
  • ???????.long???????__data_start??????????????????@?r5??
  • ???????.long???????__bss_start????????????????????@?r6??
  • ???????.long???????_end????????????????????????????@?r7??
  • ???????.long???????processor_id?????????????????@?r4??
  • ???????.long???????__machine_arch_type???????????@?r5??
  • ???????.long???????cr_alignment?????????????????@?r6??
  • ???????.long???????init_thread_union+?THREAD_START_SP?@?sp??
  • ???
  • /*??
  • ?*?The?following?fragment?of?code?is?executedwith?the?MMU?on?in?MMU?mode,??
  • ?*?and?uses?absolute?addresses;?this?is?notposition?independent.??
  • ?*??
  • ?*??r0??=cp#15?control?register??
  • ?*?r1??=?machine?ID??
  • ?*?r9??=?processor?ID??
  • ?*/??
  • ???????.type???????__mmap_switched,%function??
  • __mmap_switched:??
  • ???????adr???r3,__switch_data?+?4??
  • ???
  • ???????ldmia??????r3!,{r4,?r5,?r6,?r7}??
  • ???????cmp?r4,r5???????????????????????????@?Copy?datasegment?if?needed??
  • 1:????cmpne?????r5,r6??
  • ???????ldrne???????fp,[r4],?#4??
  • ???????strne???????fp,[r5],?#4??
  • ???????bne??1b??
  • ???
  • ???????mov?fp,#0???????????????????????????@?Clear?BSS(and?zero?fp)??
  • 1:????cmp?r6,r7??
  • ???????strcc?fp,[r6],#4??
  • ???????bcc??1b??
  • ???
  • ???????ldmia??????r3,{r4,?r5,?r6,?sp}??
  • ???????str????r9,?[r4]??????????????????@?Save?processor?ID??
  • ???????str????r1,?[r5]??????????????????@?Save?machine?type??
  • ???????bic???r4,r0,?#CR_A???????????????@?Clear?'A'?bit??
  • ???????stmia???????r6,{r0,?r4}???????????????????@?Save?controlregister?values??
  • ???????b?????start_kernel??

  • ?

    這個函數做的工作是,復制數據段清楚BBS段,設置堆在指針,然后保存處理器內核和機器內核等工作,最后跳到start_kernel函數。于是內核開始執行第二階段。

    ?

    第二階段:

    ?

    ?????? 我們再來看init/目錄下的main.c的start_kernel函數,這里我只截圖了部分。

    [html] view plaincopy
  • asmlinkage?void?__init?start_kernel(void)??
  • {??
  • ???????…………………….??
  • ???????……………………..??
  • ???????printk(KERN_NOTICE);??
  • ???????printk(linux_banner);??
  • ???????setup_arch(&command_line);??
  • ???????setup_command_line(command_line);??
  • ????????
  • ????????
  • ???????parse_early_param();??
  • ???????parse_args("Booting?kernel",static_command_line,?__start___param,??
  • ????????????????__stop___param?-?__start___param,??
  • ????????????????&unknown_bootoption);??
  • ……………………??
  • …………………………????????
  • ???????init_IRQ();??
  • ???????pidhash_init();??
  • ???????init_timers();??
  • ???????hrtimers_init();??
  • ???????softirq_init();??
  • ???????timekeeping_init();??
  • ???????time_init();??
  • ???????profile_init();??
  • …………………………??
  • ……………………………??
  • ???????console_init();??
  • ………………………………??
  • ………………………………??
  • ???????rest_init();??
  • }??

  • 從上面可以看出start_kernel首先是打印內核信息,然后對bootloader傳進來的一些參數進行處理,再接著執行各種各樣的初始化,在這其中會初始化控制臺。最后會調用rest_init();

    我們再來看rest_init()函數

    [html] view plaincopy
  • static?void?noinline?__init_refok?rest_init(void)??
  • ????__releases(kernel_lock)??
  • {??
  • ????int?pid;??
  • ??
  • ????kernel_thread(kernel_init,?NULL,?CLONE_FS?|?CLONE_SIGHAND);??
  • ????............??????
  • }???
  • ?他啟動了kernel_init這個函數,再來看kerne_init函數

    [html] view plaincopy
  • static?int?__init?kernel_init(void?*?unused)??
  • {??
  • ????..............................??
  • ??
  • ????if?(!ramdisk_execute_command)??
  • ????????ramdisk_execute_command?=?"/init";??
  • ??
  • ????if?(sys_access((const?char?__user?*)?ramdisk_execute_command,?0)?!=?0)?{??
  • ????????ramdisk_execute_command?=?NULL;??
  • ????????prepare_namespace();??
  • ????}??
  • ??
  • ????/*??
  • ?????*?Ok,?we?have?completed?the?initial?bootup,?and??
  • ?????*?we're?essentially?up?and?running.?Get?rid?of?the??
  • ?????*?initmem?segments?and?start?the?user-mode?stuff..??
  • ?????*/??
  • ????init_post();??
  • ????return?0;??
  • }??
  • kernel_init先調用了prepare_namespace();然后調用了init_post函數

    [html] view plaincopy
  • void?__init?prepare_namespace(void)??
  • {??
  • ????..........................??
  • ????mount_root();??
  • ????.....................??
  • }??
  • 可以看出prepare_namespace調用了mount_root掛接根文件系統。接著kernel_init再執行init_post

    [html] view plaincopy
  • static?int?noinline?init_post(void)??
  • {??
  • ????.......................................??
  • ????/*打開dev/console控制臺,并設置為標準輸入、輸出*/??
  • ??????????
  • ????if?(sys_open((const?char?__user?*)?"/dev/console",?O_RDWR,?0)?<?0)??
  • ????????printk(KERN_WARNING?"Warning:?unable?to?open?an?initial?console.\n");??
  • ??
  • ????(void)?sys_dup(0);??
  • ????(void)?sys_dup(0);??
  • ??
  • ????if?(ramdisk_execute_command)?{??
  • ????????run_init_process(ramdisk_execute_command);??
  • ????????printk(KERN_WARNING?"Failed?to?execute?%s\n",??
  • ????????????????ramdisk_execute_command);??
  • ????}??
  • ??
  • ????/*??
  • ?????*?We?try?each?of?these?until?one?succeeds.??
  • ?????*??
  • ?????*?The?Bourne?shell?can?be?used?instead?of?init?if?we?are??
  • ?????*?trying?to?recover?a?really?broken?machine.??
  • ?????*/??
  • ??
  • ????//如果bootloader指定了init參數,則啟動init參數指定的進程??
  • ????if?(execute_command)?{??
  • ????????run_init_process(execute_command);??
  • ????????printk(KERN_WARNING?"Failed?to?execute?%s.??Attempting?"??
  • ????????????????????"defaults...\n",?execute_command);??
  • ????}??
  • ??
  • ????//如果沒有指定init參數,則分別帶sbin、etc、bin目錄下啟動init進程??
  • ????run_init_process("/sbin/init");??
  • ????run_init_process("/etc/init");??
  • ????run_init_process("/bin/init");??
  • ????run_init_process("/bin/sh");??
  • ??
  • ????panic("No?init?found.??Try?passing?init=?option?to?kernel.");??
  • }??
  • ?

    注意上面的run_init_process的會等待init進程返回才往后面執行,所有它一旦找到一個init可執行的文件它將一去不復返。

    綜上,內核啟動的過程大致為以下幾步:

    1.檢查CPU和機器類型

    2.進行堆棧、MMU等其他程序運行關鍵的東西進行初始化

    3.打印內核信息

    4.執行各種模塊的初始化

    5.掛接根文件系統

    6.啟動第一個init進程

    2. android啟動

    引用地址:http://monner.iteye.com/blog/728334

    Android 系統啟動分析(轉)

    init進程是Android啟動后系統執行的第一個名稱為init的可執行程序。這個程序以一個守護進程的方式運行,它提供了以下功能:
    • 設備管理
    • 解析啟動腳本
    • 執行啟動腳本中的基本功能
    • 執行啟動腳本中的各種功能

    1、init可執行程序

    init 可執行文件是系統運行的第一個用戶空間程序,它以守護進程的方式運行。因此這個程序的init.c文件包含main函數的入口,基本分析如下: int main(int argc,char**argv){ ? ?(省略若干。。。) ? ?umask(0); ?/*對umask進行清零。*/ ? ? mkdir("/dev",0755);/*為rootfs建立必要的文件夾,并掛載適當的分區。 */ ? ? mkdir("/proc",0755); ? ? mkdir("/sys",0755);? ? mount("tmpfs","/dev","tmpfs",0,"mode=0755"); ? ? mkdir("/dev/pts",0755); ? ? mkdir("/dev/socket",0755); ? ? mount("devpts","/dev/pts","devpts",0, NULL); ? ? mount("proc","/proc","proc",0, NULL); ? ? mount("sysfs","/sys","sysfs",0, NULL);? ? /*創建/dev/null和/dev/kmsg節點*/ ? ? open_devnull_stdio(); ? ? log_init(); ? ?/*解析/init.rc,將所有服務和操作信息加入鏈表。*/ ? ? INFO("reading config file\n"); ? ? parse_config_file("/init.rc");? ? /*獲取內核命令行參數*/ ? ? qemu_init(); ? ? import_kernel_cmdline(0); ? ? /*先從上一步獲得的全局變量中獲取信息硬件信息和版本號,如果沒有則從/proc/cpuinfo中提取,*并保存到全局變量。根據硬件信息選擇一個/init.(硬件).rc,并解析,將服務和操作信息加入鏈表。*/ ? ? get_hardware_name(); ? ? snprintf(tmp,sizeof(tmp),"/init.%s.rc", hardware); ? ? parse_config_file(tmp); ? ? /*執行鏈表中帶有“early-init”觸發的的命令。*/ ? ? action_for_each_trigger("early-init", action_add_queue_tail); ? ? drain_action_queue(); ? ? /*遍歷/sys文件夾,是內核產生設備添加事件(為了自動產生設備節點)。*初始化屬性系統,并導入初始化屬性文件。用于在系統運行過程中動態創建設備節點、刪除設備節點等操作*/ ? ? INFO("device init\n"); ? ? device_fd = device_init();? ? property_init(); ? ? // 從屬性系統中得到ro.debuggable,若為1,則初始化keychord監聽。 ? ? debuggable = property_get("ro.debuggable"); ? ? if(debuggable &&!strcmp(debuggable,"1")){ ? ? ? ? keychord_fd = open_keychord(); ? ? } ? ? /*打開console,如果cmdline中沒有指定的console則打開默認的/dev/console*/ ? ? if(console[0]){ ? ? ? ? snprintf(tmp,sizeof(tmp),"/dev/%s", console); ? ? ? ? console_name = strdup(tmp); ? ? }? ? fd = open(console_name, O_RDWR); ? ? if(fd >=0) ? ? ? ? have_console =1; ? ? close(fd); ? ? /*讀取/initlogo.rle(一張位圖),如果成功則在/dev/graphics/fb0 顯示Logo,如果失敗則將/dev/tty0*設為TEXT模式并打開/dev/tty0,輸出文本ANDROID(本人修改為Zhao Rui Jia做為啟動項目的修改)。*/ ? ? if( load_565rle_image(INIT_IMAGE_FILE)){ ? ? fd = open("/dev/tty0", O_WRONLY); ? ? if(fd >=0){ ? ? ? ? constchar*msg; ? ? ? ? ? ? msg ="\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ?// console is 40 cols x 30 lines ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? ? "\n" ? ? ? /*" ? ? ? ? ? ? A N D R O I D ";*/ ? ? ? ? " ? ? ? ? ?z h a o R u i J i a"; ? ? ? ? write(fd, msg, strlen(msg)); ? ? ? ? close(fd); ? ? } ? ? } ? ?/* 判斷cmdline 中的參數,并設置屬性系統中的參數:* ?1、 如果 bootmode為* ? ? - factory,設置ro.factorytest值為1* ? ? - factory2,設置ro.factorytest值為2* ? ? - 其他的設ro.factorytest值為0* ?2、如果有serialno參數,則設置ro.serialno,否則為""* ?3、如果有bootmod參數,則設置ro.bootmod,否則為"unknown"* ?4、如果有baseband參數,則設置ro.baseband,否則為"unknown"* ?5、如果有carrier參數,則設置ro.carrier,否則為"unknown"* ?6、如果有bootloader參數,則設置ro.bootloader,否則為"unknown"* ?7、通過全局變量(前面從/proc/cpuinfo中提取的)設置ro.hardware和ro.version。*/ ? ? if(qemu[0]) ? ? ? ? import_kernel_cmdline(1); if(!strcmp(bootmode,"factory")) ? ? ? ? property_set("ro.factorytest","1"); ? ? elseif(!strcmp(bootmode,"factory2")) ? ? ? ? property_set("ro.factorytest","2"); ? ? else ? ? ? ? property_set("ro.factorytest","0");? ? property_set("ro.serialno", serialno[0]? serialno :""); ? ? property_set("ro.bootmode", bootmode[0]? bootmode :"unknown"); ? ? property_set("ro.baseband", baseband[0]? baseband :"unknown"); ? ? property_set("ro.carrier", carrier[0]? carrier :"unknown"); ? ? property_set("ro.bootloader", bootloader[0]? bootloader :"unknown");? ? property_set("ro.hardware", hardware); ? ? snprintf(tmp, PROP_VALUE_MAX,"%d", revision); ? ? property_set("ro.revision", tmp);? ? /*執行所有觸發標識為init的action。*/ ? ? action_for_each_trigger("init", action_add_queue_tail); ? ? drain_action_queue(); ? ? property_set_fd = start_property_service();? ? ?/* 為sigchld handler創建信號機制*/ ? ? if(socketpair(AF_UNIX, SOCK_STREAM,0, s)==0){ ? ? ? ? signal_fd = s[0]; ? ? ? ? signal_recv_fd = s[1]; ? ? ? ? fcntl(s[0], F_SETFD, FD_CLOEXEC); ? ? ? ? fcntl(s[0], F_SETFL, O_NONBLOCK); ? ? ? ? fcntl(s[1], F_SETFD, FD_CLOEXEC); ? ? ? ? fcntl(s[1], F_SETFL, O_NONBLOCK); ? ? }? ? /* 確認所有初始化工作完成* device_fd(device init 完成)* property_set_fd(property server start 完成)* signal_recv_fd (信號機制建立) */ ? ? if((device_fd <0)|| ? ? ? ? (property_set_fd <0)|| ? ? ? ? (signal_recv_fd <0)){ ? ? ? ? ERROR("init startup failure\n"); ? ? ? ? return1; ? ? }? ? /* execute all the boot actions to get us started */ ? ? action_for_each_trigger("early-boot", action_add_queue_tail); ? ? action_for_each_trigger("boot", action_add_queue_tail); ? ? drain_action_queue();? ? /* run all property triggers based on current state of the properties */ ? ? queue_all_property_triggers(); ? ? drain_action_queue();? ? /* enable property triggers */ ? property_triggers_enabled =1; ? ? /** ? ?注冊輪詢事件:* ? - device_fd* ? - property_set_fd* ? -signal_recv_fd* ? -如果有keychord,則注冊keychord_fd*/ ? ? ufds[0].fd = device_fd; ? ? ufds[0].events = POLLIN; ? ? ufds[1].fd = property_set_fd; ? ? ufds[1].events = POLLIN; ? ? ufds[2].fd = signal_recv_fd; ? ? ufds[2].events = POLLIN; ? ? fd_count =3;? ? if(keychord_fd >0){ ? ? ? ? ufds[3].fd = keychord_fd; ? ? ? ? ufds[3].events = POLLIN; ? ? ? ? fd_count++; ? ? }else{ ? ? ? ? ufds[3].events =0; ? ? ? ? ufds[3].revents =0; ? ? }/*如果支持BOOTCHART,則初始化BOOTCHART*/#if BOOTCHART ? ? bootchart_count = bootchart_init(); ? ? if(bootchart_count <0){ ? ? ? ? ERROR("bootcharting init failure\n"); ? ? }elseif(bootchart_count >0){ ? ? ? ? NOTICE("bootcharting started (period=%d ms)\n", bootchart_count*BOOTCHART_POLLING_MS); ? ? }else{ ? ? ? ? NOTICE("bootcharting ignored\n"); ? ? }#endif ? /* ?*進入主進程循環:* ?- 重置輪詢事件的接受狀態,revents為0* ?- 查詢action隊列并執行。* ?- 重啟需要重啟的服務* ?- 輪詢注冊的事件* ? ? ? - 如果signal_recv_fd的revents為POLLIN,則得到一個信號,獲取并處理* ? ? ? - 如果device_fd的revents為POLLIN,調用handle_device_fd* ? ? ? - 如果property_fd的revents為POLLIN,調用handle_property_set_fd* ? ? ? - 如果keychord_fd的revents為POLLIN,調用handle_keychord*/ for(;;){ ? ? ? ? int nr, i, timeout =-1;? ? ? ? for(i =0; i < fd_count; i++) ? ? ? ? ? ? ufds[i].revents =0;? ? ? ? drain_action_queue(); ? ? ? ? restart_processes();? ? ? ? if(process_needs_restart){ ? ? ? ? ? ? timeout =(process_needs_restart - gettime())*1000; ? ? ? ? ? ? if(timeout <0) ? ? ? ? ? ? ? ? timeout =0; ? ? ? ? }#if BOOTCHART ? ? ? ? if(bootchart_count >0){ ? ? ? ? ? ? if(timeout <0|| timeout > BOOTCHART_POLLING_MS) ? ? ? ? ? ? ? ? timeout = BOOTCHART_POLLING_MS; ? ? ? ? ? ? if(bootchart_step()<0||--bootchart_count ==0){ ? ? ? ? ? ? ? ? bootchart_finish(); ? ? ? ? ? ? ? ? bootchart_count =0; ? ? ? ? ? ? } ? ? ? ? }#endif ? ? ? ? nr = poll(ufds, fd_count, timeout); ? ? ? ? if(nr <=0) ? ? ? ? ? ? continue;? ? ? ? if(ufds[2].revents == POLLIN){ ? ? ? ? ? ? /* we got a SIGCHLD - reap and restart as needed */ ? ? ? ? ? ? read(signal_recv_fd, tmp,sizeof(tmp)); ? ? ? ? ? ? while(!wait_for_one_process(0)) ? ? ? ? ? ? ? ? ; ? ? ? ? ? ? continue; ? ? ? ? }? ? ? ? if(ufds[0].revents == POLLIN) ? ? ? ? ? ? handle_device_fd(device_fd);? ? ? ? if(ufds[1].revents == POLLIN) ? ? ? ? ? ? handle_property_set_fd(property_set_fd); ? ? ? ? if(ufds[3].revents == POLLIN) ? ? ? ? ? ? handle_keychord(keychord_fd); ? ? }? ? return0;}

    2、啟動腳本init.rc

    在 Android中使用啟動腳本init.rc,可以在系統的初始化過程中進行一些簡單的初始化操作。這個腳本被直接安裝到目標系統的根文件系統中,被 init可執行程序解析。 init.rc是在init啟動后被執行的啟動腳本,其余發主要包含了以下內容:

    • Commands:命令
    • Actions:動作
    • Triggers:觸發條件
    • Services:服務
    • Options:選項
    • Propertise:屬性

    Commands是一些基本的操作,例如:

    ? ? mkdir /sdcard 0000 system systemmkdir /systemmkdir /data 0771 system systemmkdir /cache 0770 system cachemkdir /config 0500 root rootmkdir /sqlite_stmt_journals 01777 root rootmount tmpfs tmpfs /sqlite_stmt_journals size=4m

    這些命令在init可執行程序中被解析,然后調用相關的函數來實現。 Actions(動作)表示一系列的命令,通常在Triggers(觸發條件)中調用,動作和觸發條件例如:

    ? ? on initexport PATH /sbin:/system/sbin:/system/bin:/system/xbin

    init表示一個觸發條件,這個觸發事件發生后,進行設置環境變量和建立目錄的操作稱為一個“動作” Services(服務)通常表示啟動一個可執行程序,Options(選項)是服務的附加內容,用于配合服務使用。

    service vold /system/bin/voldsocket vold stream 0660 root mountservice bootsound /system/bin/playmp3user mediagroup audiooneshot

    vold和bootsound分別是兩個服務的名稱,/system/bin /vold和/system /bin/playmp3分別是他們所對應的可執行程序。socket、user、group、oneshot就是配合服務使用的選項。 Properties(屬性)是系統中使用的一些值,可以進行設置和讀取。

    ? ? setprop ro.FOREGROUND_APP_MEM 1536 ? ? setprop ro.VISIBLE_APP_MEM 2048 ? ? start adbd

    setprop 用于設置屬性,on property可以用于判斷屬性,這里的屬性在整個Android系統運行中都是一致的。

    綜上如果想要修改啟動過程只需要修改init.c或者init.rc里的內容即可.


    3. 總結:

    (1)內核的init_post類似接口,會去文件系統中啟動init類似的用戶進程

    (2)android實現了這樣的init,這就是android框架啟動的地方,當然linux內核也可說是android系統的一部分

    (3)init進程無限分裂,啟動框架,演變成android系統

    (4)android的init進程的代碼在system/core/init/init.c中,從main函數開始.

    ?

    本文完~

    總結

    以上是生活随笔為你收集整理的Android研究-linux内核启动到android系统的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    成人h视频在线 | 欧美精品亚洲精品日韩精品 | 1024在线看片 | 久 久久影院 | 久久艹艹 | 成人三级网站在线观看 | 97视频在线观看视频免费视频 | 精品视频成人 | 国产一区二区三区久久久 | 97在线视频免费播放 | 中文字幕三区 | 91精品啪 | 国产黄大片 | 99久久er热在这里只有精品66 | 国产精品久久久久久a | 日日干干 | 成人免费在线观看av | 深夜激情影院 | 字幕网资源站中文字幕 | 欧美性超爽 | 国产啊v在线观看 | 国产美女视频网站 | 精品99视频 | 看毛片的网址 | 色欧美日韩 | 午夜精品福利一区二区三区蜜桃 | 天天干天天操天天入 | 国产一线天在线观看 | 亚洲最新精品 | 日韩欧美在线免费观看 | 最新色站 | 亚洲精品乱码久久久久久 | 国产黄色一级片在线 | 一区二区三区日韩在线观看 | 免费看成人av | 久久久高清免费视频 | 国产在线一卡 | 日韩视| 久久综合九色欧美综合狠狠 | 亚洲精品456在线播放 | 成年人电影免费在线观看 | 91精品啪啪| 精品国产区 | 精品久久国产一区 | 久久久亚洲精品 | 国产区精品在线观看 | 日韩在线国产精品 | 黄网站色成年免费观看 | 欧美一区免费在线观看 | 亚洲一级在线观看 | 日韩欧美精品在线观看视频 | 欧美精品v国产精品 | 少妇高潮流白浆在线观看 | 亚洲精品一区二区网址 | 久久美女精品 | 欧美日韩精品综合 | 精品国产一区二区三区在线观看 | 黄色三级久久 | a级片久久久 | 日韩三级av | 久热av在线 | 欧产日产国产69 | 四虎欧美 | 国产成人精品一区二三区 | 欧美二区视频 | 九九九在线观看 | 亚洲视频网站在线观看 | 成人在线免费av | 成人免费视频播放 | 五月婷婷在线视频观看 | 天天翘av | 国产一二三区在线观看 | 天天操天天干天天爽 | 日韩在线中文字幕视频 | 国产一区二区在线播放视频 | 碰超在线97人人 | 国产精品 日韩 欧美 | 久久久免费看片 | 久久色网站| 手机在线观看国产精品 | 欧洲精品在线视频 | 免费观看黄 | 91视频免费看片 | 国产爽视频 | 怡红院av久久久久久久 | 99国产情侣在线播放 | 久久久首页 | 97av在线视频免费播放 | 国产在线观看免 | 欧美日韩国内在线 | 91成人精品一区在线播放69 | 在线观看电影av | 91成人免费看| 精品一区二区在线免费观看 | 免费观看全黄做爰大片国产 | 国产一区二区三区在线免费观看 | 欧美日韩精品在线 | 欧美日韩国产成人 | 337p日本欧洲亚洲大胆裸体艺术 | 国产中文字幕亚洲 | 黄色av成人在线观看 | 国产精品久久久久久久免费观看 | 西西444www大胆高清图片 | 日操操| 国内小视频在线观看 | 久久久久这里只有精品 | 久久1区| 日韩欧美在线视频一区二区三区 | 国产69久久精品成人看 | 免费成人av | 成年人在线看视频 | 深爱五月激情网 | 日本精品视频在线观看 | 欧美在线一 | 久草视频免费在线播放 | 亚洲欧洲国产精品 | 免费aa大片 | 日韩字幕在线观看 | 国产99久久久欧美黑人 | 国产又粗又猛又色又黄网站 | 亚州av网站 | 五月天亚洲精品 | 久久九九免费视频 | 黄色1级毛片 | 精品不卡av| 久久久国产精品人人片99精片欧美一 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 播五月综合 | 日日草天天草 | 亚洲视频在线视频 | 久久久精品视频网站 | 成人三级网址 | 国产精品久久久久久久久久新婚 | 国产精品久久电影网 | 97视频网站| 国产原创av在线 | 精品久久五月天 | 久久xxxx | 91xav| 国产不卡一二三区 | 久久久久久久久久久黄色 | 日日夜夜精品视频 | 狠狠干电影 | 久久人91精品久久久久久不卡 | 黄色国产在线观看 | 亚洲黑丝少妇 | 久久一及片| 国产1区2区| www.国产在线观看 | 久久伊人精品天天 | 夜添久久精品亚洲国产精品 | 日韩成人免费电影 | 91丨九色丨蝌蚪丰满 | 欧美一级高清片 | 欧美一区免费观看 | 美女国产精品 | 成人资源在线 | 狠狠躁天天躁 | 97人人模人人爽人人喊网 | 91av在线免费视频 | av在线亚洲天堂 | 成人免费视频播放 | 婷婷国产精品 | 亚洲欧美精品在线 | 91热爆在线观看 | 波多野结衣精品视频 | 91系列在线 | 日韩av高清在线观看 | 麻花豆传媒一二三产区 | 伊人超碰在线 | 99精品久久精品一区二区 | 成x99人av在线www | 欧美色图亚洲图片 | 国产精品久久久久久久久久直播 | 欧美精品视 | 国产福利91精品一区 | 91麻豆精品国产91久久久久久久久 | 国产在线探花 | 日本一区二区三区视频在线播放 | 国产福利精品视频 | 五月婷婷综合网 | 欧美99热| 免费a级毛片在线看 | 麻豆精品传媒视频 | 国产永久网站 | 精品美女久久久久久免费 | 色婷婷啪啪免费在线电影观看 | 亚洲国产精品影院 | 亚洲精品中文在线资源 | 国产小视频免费在线网址 | 亚洲精品在线免费 | 国产麻豆剧果冻传媒视频播放量 | 国产高清免费观看 | 精品在线视频一区 | 天天色 天天 | 看片网站黄 | 欧美日韩在线电影 | 久久免费公开视频 | 在线日韩av| 中文字幕精品一区 | 夜夜躁日日躁 | 干天天| 婷婷看片| 国产69熟| 国产精品毛片久久久久久久 | 日韩av免费在线看 | 又黄又爽免费视频 | 99久久久国产精品免费观看 | 久久这里只有精品9 | 黄色app网站在线观看 | 久久综合免费视频影院 | 久久精品视频在线播放 | 狠狠色狠狠色综合系列 | 九色精品在线 | 香蕉网站在线观看 | 亚洲日韩中文字幕 | 一区二区在线不卡 | 欧美视频日韩视频 | 久草青青在线观看 | 国产精品免费在线视频 | 成人久久免费视频 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 成人免费看电影 | 久久综合五月天 | 免费看的黄网站 | 91精品视频免费观看 | 久草视频在线观 | 国产一级片网站 | 在线观看91视频 | 亚洲一区二区观看 | 美女黄频在线观看 | 欧美精彩视频在线观看 | 国产一区二区观看 | 99热国产在线 | 日韩精品一区二区三区中文字幕 | av网站播放| 国产电影一区二区三区四区 | 国产亚洲精品久久久久久大师 | 国产亚洲精品成人av久久ww | 狠狠操精品 | 美女久久99 | 亚洲婷婷在线 | 日韩网站中文字幕 | 黄色网址a | 91精品国产一区二区三区 | 亚洲另类xxxx | 国产一级做a爱片久久毛片a | 美女精品久久久 | 亚洲欧美国产精品18p | 欧美日韩性生活 | 91亚洲精品乱码久久久久久蜜桃 | 亚洲精品国产麻豆 | 97超碰人人澡人人 | 国产 日韩 欧美 中文 在线播放 | 久久伊人操 | 涩涩伊人| 中文在线√天堂 | 激情导航 | 香蕉影院在线观看 | 色插综合 | 日韩在线免费 | 手机在线看片日韩 | 欧美国产不卡 | 久久国产精品久久精品国产演员表 | 国产97碰免费视频 | 久久精品永久免费 | 国产精品久久久久久久久免费看 | 色噜噜狠狠狠狠色综合久不 | 久久午夜网 | 国产 一区二区三区 在线 | 丁香 久久 综合 | 国产精品久久久久久久久婷婷 | 亚洲精品在线观看免费 | 日本韩国在线不卡 | 免费福利在线 | 日日夜夜干 | 婷婷激情影院 | 中文网丁香综合网 | 精品久久精品久久 | 天天干天天操 | 久久夜色精品国产欧美一区麻豆 | 黄色字幕网 | 综合网伊人 | 日韩素人在线观看 | 一区二区影院 | 国产精品亚洲片夜色在线 | 久久视频免费在线 | 亚洲精品综合在线 | 久久久久亚洲精品男人的天堂 | 久久毛片高清国产 | 婷婷九九 | 中国一级特黄毛片大片久久 | 91麻豆精品国产91久久久无限制版 | 99在线精品视频在线观看 | 亚洲最大的av网站 | 中文字幕视频免费观看 | 波多野结衣视频一区 | 日韩经典一区二区三区 | 九九热1 | 国产亚洲一级高清 | 国产午夜精品一区二区三区在线观看 | 99视频99 | 婷婷色综合色 | 午夜三级大片 | 中文字幕在线观看免费高清电影 | 九九久久精品 | 久久久久麻豆 | 日本三级香港三级人妇99 | 五月婷丁香网 | 人人插超碰 | 久久久久久久久久久影视 | 国产亚洲精品成人av久久影院 | 揉bbb玩bbb少妇bbb | 亚洲女裸体 | 91成人免费在线视频 | 久久国产免费看 | 免费观看性生交 | 国产精品2019 | 亚洲国产一二三 | 日韩精品久久中文字幕 | 波多野结衣视频一区二区 | 国产精品视频不卡 | 亚洲精品乱码久久 | 97超碰人人网 | 色av男人的天堂免费在线 | 国产精品美女久久久久aⅴ 干干夜夜 | 久久精品一区二区 | 一级黄色在线视频 | 成人在线观看免费 | 色是在线视频 | 天天鲁一鲁摸一摸爽一爽 | 日韩三级免费 | 日韩精品免费一区二区三区 | 国产精品毛片久久 | www.天天干| 夜夜爱av| 国产精品一区二区久久国产 | 天天综合区| 午夜影院三级 | 欧美日本不卡高清 | 久久99国产精品久久99 | 亚洲精品美女久久 | 999久久久久久久久6666 | 国产精品爽爽久久久久久蜜臀 | 亚洲成人av在线 | 久久电影国产免费久久电影 | 日韩影视在线观看 | 91亚洲精品国偷拍 | 久久手机看片 | 91自拍91 | 伊人资源视频在线 | 国产一区二区三精品久久久无广告 | 婷婷在线不卡 | 日韩免费三级 | 999成人免费视频 | 日韩激情综合 | 999成人| 在线日本v二区不卡 | 在线视频免费观看 | 午夜av一区 | 亚洲精欧美一区二区精品 | 亚洲一区二区精品视频 | 国产99一区二区 | 操操操av | 韩国精品在线观看 | 免费久久99精品国产婷婷六月 | av在线免费播放网站 | 狠狠操夜夜操 | 在线观看日本高清mv视频 | 国产中文字幕视频在线观看 | 国产精品视频地址 | www.超碰97.com | 五月婷婷在线视频观看 | 午夜精品久久久久久久99热影院 | 精品91久久久久 | 国产成人99av超碰超爽 | 日韩精品在线播放 | 激情综合中文娱乐网 | 精品一区二区在线免费观看 | 亚洲综合在线观看视频 | 香蕉久久久久久久 | 亚洲精品日韩一区二区电影 | 久久综合狠狠综合久久综合88 | 在线播放视频一区 | 日韩精品无码一区二区三区 | 天天天天色综合 | 色偷偷网站视频 | 99热国产在线观看 | 人人要人人澡人人爽人人dvd | 91探花在线 | 久草在线费播放视频 | 在线国产福利 | 国产精品久久久久久妇 | 996久久国产精品线观看 | 欧美色就是色 | 91麻豆精品国产91久久久更新时间 | 国产精品免费视频一区二区 | 中文字幕亚洲国产 | 免费男女羞羞的视频网站中文字幕 | 97精品国产97久久久久久 | 欧美综合干 | 亚洲va欧美va人人爽 | 91精品999 | 在线韩国电影免费观影完整版 | 久久视频免费在线 | 2019中文最近的2019中文在线 | japanese黑人亚洲人4k | 97精品国产 | 99久久久久免费精品国产 | 99精品免费久久久久久日本 | 天天射天天爽 | 黄色亚洲免费 | 9999激情| 国产一二三精品 | 国产第一页福利影院 | 国内精品久久久久影院男同志 | av免费在线观看网站 | 狠狠插狠狠操 | 狠狠色婷婷丁香六月 | 久久在线免费观看 | 天天操天天干天天爽 | 精品国产一区二区三区男人吃奶 | 97成人在线免费视频 | 激情综合色综合久久综合 | 日韩手机视频 | 久久视频这里有久久精品视频11 | 97视频免费在线观看 | 免费久久精品视频 | 91精品一区国产高清在线gif | 啪啪免费观看网站 | 久久成人国产 | 国产精品白丝jk白祙 | 国产精选视频 | 亚洲一片黄 | 亚洲欧美在线视频免费 | av怡红院 | av一区在线播放 | 99精品国自产在线 | 亚洲黄色在线免费观看 | 处女av在线 | 五月天网站在线 | 一级一片免费观看 | 亚洲精品国产自产拍在线观看 | 国产又粗又猛又色又黄视频 | 在线观看国产成人av片 | 婷婷五综合 | 久久免费视频播放 | 一级片免费在线 | av中文字幕网 | 成人毛片100免费观看 | 91精品一区国产高清在线gif | www.色就是色 | 亚洲理论片 | 国产亚洲在线视频 | 九九热视频在线免费观看 | 天躁狠狠躁 | 久草在线99 | 91精品视频一区 | 日韩一区二区三 | 天堂av在线中文在线 | 一二三久久久 | 韩国精品视频在线观看 | 91视频免费网址 | 久久久精品视频成人 | 日日夜夜天天操 | 欧美日本不卡高清 | 五月婷婷欧美 | 久久久久国产一区二区 | 国产精品永久久久久久久久久 | 日韩精品一区二区三区第95 | 久久精品视频在线观看免费 | 国产网红在线观看 | 日日干夜夜骑 | 999抗病毒口服液 | 99se视频在线观看 | 亚洲精品免费在线视频 | 国产成人一区二区三区 | 国产午夜三级一区二区三桃花影视 | 中文字幕日韩在线播放 | 欧美韩国在线 | 韩国三级一区 | 国产精品18久久久久久久网站 | 91九色成人 | 婷婷伊人网 | 国产成人一区二区三区 | 国产一区在线免费观看 | 国产无吗一区二区三区在线欢 | 日韩在线电影 | 三级黄色理论片 | 麻豆传媒电影在线观看 | 黄色看片 | 国产玖玖在线 | 天天操天天操天天操天天 | 国产美女网站视频 | 久久久久免费精品国产 | 欧美日韩高清不卡 | 99夜色| 精品久久国产一区 | 天天色天天射天天操 | 麻豆国产精品视频 | 久久精品精品电影网 | 国产69精品久久久久久 | 91视频啪 | 99热精品免费观看 | 欧美日本不卡 | 中文在线天堂资源 | 99视频在线免费观看 | 一区二区高清在线 | 日本 在线 视频 中文 有码 | 国产一区二区久久久久 | 久久网页 | 国产亲近乱来精品 | 九九激情视频 | 亚洲一级片av | 波多野结衣一区 | 国产剧情一区在线 | 日韩动态视频 | 中文字幕国产亚洲 | 免费av高清 | 久久久久久不卡 | 成人免费一区二区三区在线观看 | 丁香婷婷色综合亚洲电影 | 在线观看黄网 | 中国美女一级看片 | 免费看的国产视频网站 | 久久久电影 | 五月激情丁香图片 | 国产aa免费视频 | 久久综合99| av免费网| 成人在线观看网址 | 国产精品理论视频 | 不卡的av电影| 在线看免费 | 狠狠干夜夜爽 | 国产在线视频一区二区三区 | 蜜桃麻豆www久久囤产精品 | 国产毛片在线 | 在线亚洲人成电影网站色www | 中文字幕精品一区二区精品 | 黄色日批网站 | 久久蜜桃av | 亚洲午夜激情网 | 日韩天天操| 一区二区三区播放 | 五月天亚洲综合小说网 | 久久国产精品视频免费看 | 草久视频在线观看 | 免费看一级片 | 日韩av电影手机在线观看 | 中文字幕一区2区3区 | 在线v片免费观看视频 | 99精品一区 | 五月激情亚洲 | 日批网站免费观看 | 国产精品美女久久久久久久久久久 | 亚洲天天在线日亚洲洲精 | 国产精品永久久久久久久久久 | h网站免费在线观看 | 日韩三级视频在线观看 | 亚洲人成影院在线 | 免费久久久久久 | 日韩v在线 | 91精品国产高清 | 亚洲国产久 | 久久久精品福利视频 | 日韩免费不卡视频 | 99国产精品免费网站 | www免费看片com | 久99视频| 97色婷婷成人综合在线观看 | 午夜精品一区二区三区在线视频 | 香蕉视频日本 | av在线色 | 五月婷婷激情五月 | 久久99久久99精品 | 精品福利网站 | 国产精品va在线观看入 | 日韩精品视频在线观看网址 | 91中文字幕网| 最新av免费在线观看 | 99婷婷狠狠成为人免费视频 | 激情欧美xxxx | 天天色天天干天天 | 三级在线播放视频 | 免费在线观看一区二区三区 | 操操操夜夜操 | av中文在线观看 | 激情久久久 | 99久久精品一区二区成人 | 九色视频网 | 日本久久片 | 成人蜜桃视频 | 国产精品自产拍在线观看中文 | 最近免费中文字幕 | 五月天综合色 | 中文成人字幕 | av直接看 | 国产精品初高中精品久久 | 国产男女免费完整视频 | 亚洲成人在线免费 | 日韩在线不卡av | 久久久黄视频 | www色片 | www成人精品 | 视频在线观看入口黄最新永久免费国产 | 在线观看911视频 | 日韩精品在线一区 | 久久在线精品视频 | 四川妇女搡bbbb搡bbbb搡 | 亚洲成人一区 | 天天综合成人 | 亚洲视频精选 | 日韩二区三区 | 欧美 日韩 久久 | 蜜臀av性久久久久蜜臀av | 91av免费在线观看 | 天天久久综合 | 国产精品电影一区 | 99热网站 | 国产乱老熟视频网88av | 四虎影视精品成人 | 黄网站a | 国产欧美在线一区二区三区 | 国产不卡一 | 日韩欧美99| 国产亚洲成人网 | 99精品久久只有精品 | 超碰在线97观看 | 欧美日韩在线观看不卡 | 国产麻豆精品95视频 | 国产麻豆传媒 | 一区在线电影 | 久久久久久久久久久综合 | 天堂av观看 | 五月天久久激情 | 免费久久99精品国产 | 91视频在线看 | 精品一二三区 | 深夜福利视频一区二区 | 在线观看色网站 | 日韩av一区二区三区在线观看 | 一区二区三区在线看 | 一区二区三区观看 | 亚洲精品91天天久久人人 | 精品一区二区av | 日韩精品一区二区三区中文字幕 | av成人免费在线 | av电影在线不卡 | 伊人五月天.com | 99久久久久| 亚洲国产97在线精品一区 | 美女av免费| 国产成人高清 | 亚洲资源在线观看 | 狠狠狠狠狠狠狠干 | av中文天堂在线 | 伊人影院得得 | 国产小视频免费在线网址 | 精品福利在线观看 | 免费看搞黄视频网站 | 深爱婷婷 | 婷婷国产视频 | 成人宗合网| 亚洲成人国产 | 女人魂免费观看 | 国产伦精品一区二区三区在线 | 国产字幕在线观看 | 黄色av网站在线观看 | 亚洲视频在线观看网站 | 国产一区二区三区免费在线观看 | 成人免费在线观看电影 | 97麻豆视频 | 日韩午夜在线播放 | 精品国模一区二区三区 | 成年人免费在线观看网站 | 91精品导航 | 国产一区二区三区四区大秀 | 久久成人亚洲欧美电影 | 免费观看v片在线观看 | 中文字幕a∨在线乱码免费看 | 91av大全 | 国产精品乱看 | 碰超在线观看 | 伊人中文在线 | 一区二区精品久久 | 国产黄色电影 | 色综合夜色一区 | 国产精品久久久久久久久久99 | 久久开心激情 | 久久精品日本啪啪涩涩 | 人人爽人人澡 | 免费在线观看不卡av | 日韩免费一区二区三区 | 久热免费 | 手机色在线| 97天天综合网 | 美女免费视频一区 | 国内久久视频 | 久久久精品 一区二区三区 国产99视频在线观看 | 欧美a级成人淫片免费看 | 黄色看片| 免费a v观看| 久久99久久99免费视频 | 西西444www | 一区二区免费不卡在线 | 探花视频免费观看 | 婷婷电影在线观看 | 久久av电影 | 中文字幕久久精品亚洲乱码 | 园产精品久久久久久久7电影 | 超碰日韩在线 | 高清美女视频 | 最近中文字幕免费观看 | 亚洲激情国产精品 | 亚洲精选视频在线 | 国产白浆在线观看 | 国产精品99久久久久久久久 | 不卡的av| 国产视频一 | 国产福利91精品张津瑜 | 欧美成人亚洲 | 国产婷婷vvvv激情久 | 狠狠干狠狠操 | 在线观看国产日韩 | 天天操天天射天天爱 | 国产成人一区二 | 亚洲精品久久久久www | 久久久久久久久久毛片 | 不卡的av | 国产精品免费高清 | 人人涩| 九九久久婷婷 | 99久久精品免费看国产四区 | 亚洲欧洲精品视频 | 欧美日韩一区二区在线观看 | 最新国产在线 | 国产情侣一区 | 久久免费在线观看视频 | 在线观看黄av | 日本99热 | 亚洲免费在线视频 | www.久久com| 麻豆精品视频在线 | 日本韩国在线不卡 | 久久不射电影院 | 日韩在线免费视频 | 日韩在线观看小视频 | 五月的婷婷 | 伊人天堂久久 | 亚洲自拍偷拍色图 | 日批视频 | 国产精品福利av | 色综合天天综合在线视频 | 国产精品第二页 | 天天综合五月天 | 日韩色视频在线观看 | 91精品国产99久久久久 | 免费看av片网站 | 国产视频第二页 | 国产精品久久久久一区二区三区共 | 国内精品小视频 | 久久久久中文 | 国产精品久久久久av免费 | 去干成人网| 亚洲天堂免费视频 | 亚洲综合五月 | 免费高清在线一区 | 日韩中文字幕免费在线播放 | 成人小视频在线播放 | 91av官网 | 在线免费观看黄网站 | 成人欧美一区二区三区在线观看 | 插综合网| 在线观看国产高清视频 | 国产精品久久久久久久久久久久久 | 日韩av视屏在线观看 | 超碰97在线人人 | 一区二区三区免费在线观看视频 | 国产精品九九九九九九 | 最近中文字幕在线中文高清版 | 狠狠色狠狠色合久久伊人 | 中文永久免费观看 | 国产69久久久 | 欧美成人精品欧美一级乱黄 | 四虎在线视频免费观看 | 久久在线观看视频 | 日韩素人在线观看 | 粉嫩av一区二区三区四区在线观看 | 波多野结衣久久精品 | 国产精品久久久久aaaa九色 | 亚洲三级在线免费观看 | 久久午夜免费视频 | 亚洲成av| 亚洲精品久久久久久久蜜桃 | 亚洲最新av网址 | 久草在线视频新 | 波多野结衣电影一区二区三区 | 超碰人人舔| 91九色蝌蚪视频 | 国产特黄色片 | 人人插人人玩 | 国产精品色视频 | 欧美国产日韩一区 | 天天躁日日躁狠狠 | 伊人手机在线 | 精品久久久久久久久久久久久久久久 | 日韩美在线 | 69性欧美 | 欧洲精品视频一区 | 91av在线看| 久草在线视频在线 | 一区二区不卡 | 天天综合成人网 | 国内精品免费久久影院 | 国产日韩av在线 | 国产成人av网址 | 欧美日韩免费看 | 精品美女在线观看 | 亚洲资源在线观看 | 国产精品 9999 | 欧美精品xx | 国产精品成久久久久三级 | 亚洲免费精品一区二区 | 国产不卡视频在线播放 | 一区二区三区四区精品 | 日韩欧美视频一区二区 | 天天射天天拍 | 天天插天天操天天干 | 正在播放一区二区 | 福利在线看片 | 欧美午夜性生活 | 亚洲色图27p | 国产一级大片在线观看 | 成人97视频一区二区 | 成人午夜剧场在线观看 | 欧美男男激情videos | 国产精品短视频 | 国语自产偷拍精品视频偷 | 一区二区三区播放 | 最近中文字幕视频网 | 嫩草av影院| 久草在线资源观看 | 国产午夜麻豆影院在线观看 | 欧美黑人xxxx猛性大交 | 亚洲精品日韩av | 在线亚洲欧美视频 | 久久艹精品 | 九九综合久久 | 这里有精品在线视频 | 欧美少妇xxx | 精品亚洲成人 | 日本在线观看一区二区 | 国产欧美三级 | 在线播放精品一区二区三区 | 国产精品乱码久久久久久1区2区 | 午夜精品视频福利 | 日韩精品不卡在线观看 | 久久社区视频 | 国产精品久久一区二区三区不卡 | 片黄色毛片黄色毛片 | 一区二区国产精品 | 久久久久久久国产精品视频 | 久久精品99国产精品亚洲最刺激 | 日韩在线一二三区 | 精品一区精品二区高清 | 一区二区精品视频 | 精品久久国产 | 亚洲精品自拍视频在线观看 | 亚洲乱码久久 | 国产一区二区三精品久久久无广告 | 国产一区二区在线免费播放 | 99精品免费在线观看 | 美女天天操 | 日韩欧美精品免费 | 一级做a视频 | 97超碰人人模人人人爽人人爱 | 日本中文字幕一二区观 | 天天操偷偷干 | www.综合网.com | 亚洲毛片久久 | 成人a免费看 | 亚洲精品tv| 久久精品国产免费观看 | 亚洲最新av | 在线播放国产精品 | 久久国产一区二区三区 | 91中文字幕永久在线 | 99视频精品免费观看, | 一区二区视频在线观看免费 | 亚洲美女视频在线观看 | 97成人超碰| 国产精品青青 | 国产一级黄色片免费看 | 视频一区在线免费观看 | 免费高清av在线看 | 99热这里只有精品久久 | 四虎影视精品 | 亚洲乱码久久 | 国产婷婷| 天堂麻豆| se视频网址| 日韩欧美视频在线免费观看 | 五月天国产精品 | 国产黄色av | 久久五月婷婷丁香 | 欧美日韩综合在线 | 91精品视频免费在线观看 | 亚洲综合情 | 国产一线二线三线在线观看 | 欧美韩国在线 | 粉嫩aⅴ一区二区三区 | av免费看网站 | 成人蜜桃视频 | 国产乱老熟视频网88av | 久久资源总站 | 香蕉视频啪啪 | 色a网 | 天天射射天天 | 久久永久免费视频 | 午夜影院在线观看18 | www五月天| 亚洲综合在线五月 | 综合色站导航 | 亚洲精品福利在线 | 久久艹欧美 | 日本在线精品视频 | 精品国产99国产精品 | 国产一级片毛片 | 国产美女网站视频 | 天天射,天天干 | 精品国产伦一区二区三区观看说明 | 亚洲狠狠婷婷 | 99热精品视 | 国产午夜精品视频 | 91麻豆精品91久久久久同性 | 狠狠干天天操 | 欧美日韩视频在线一区 | 91人人射| 国产精品专区在线 | 日韩a级黄色片 | 成人免费看电影 | 天天撸夜夜操 | 狠狠色狠狠色综合系列 | 日本xxxx.com| 日韩黄色影院 | 日韩视| 国产人成在线观看 | a级国产乱理伦片在线观看 亚洲3级 | 中文字幕免费在线看 | 中文字幕精 | 在线 高清 中文字幕 | 国产精品久久久久久久久软件 | 久久久久久久久久久久电影 | 午夜影院日本 | 91九色蝌蚪国产 | 久草视频免费在线播放 | 国产小视频在线免费观看视频 | www91在线观看 | 最新日韩在线观看视频 | 国产精品久久久久永久免费 | 国产免费观看久久 | 久久激情五月丁香伊人 | 男女啪啪视屏 | 欧美少妇xxx | 色噜噜狠狠狠狠色综合久不 | 欧美色操 | 正在播放五月婷婷狠狠干 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 日本成人免费在线观看 | 99色在线视频 | 天天干天天草天天爽 | 99久久精品免费看 | 久久不射电影网 | 在线观看aaa | 国产精品色视频 | 夜夜躁狠狠躁日日躁视频黑人 | 在线亚洲欧美视频 | 婷婷精品国产欧美精品亚洲人人爽 | 亚洲黄色一级电影 | 99re在线视频观看 | 国产精选在线 | 色av资源网 | 99热精品国产一区二区在线观看 | 在线观看黄网 | 国产理伦在线 | 99久久精品电影 | 一区二区中文字幕在线播放 | 国产h片在线观看 | 日本精品久久久久影院 | 狠狠色狠狠色终合网 | 欧洲精品一区二区 | 日韩网站在线看片你懂的 | 免费看黄在线 | 91tv国产成人福利 | 97操操操 | 中文字幕九九 | 91成人免费看片 |