精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

鴻蒙移植樹莓派(下)修改源碼

開發
文章由鴻蒙社區產出,想要了解更多內容請前往:51CTO和華為官方戰略合作共建的鴻蒙技術社區https://harmonyos.51cto.com/#zz

[[378481]]

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

項目最新更新,可以查看碼倉 https://gitee.com/liangzili/harmony-raspberry

1、切換啟動模式

樹莓派默認啟動在HYP模式,我們需要在內核啟動前改為SVC模式

kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S 在115行左右,reset_vector:下面添加

  1. mrs r0,cpsr         //讀取CPU模式寄存器 
  2.    bic r0,r0,#0x1F     //清除CPU模式位(如果處于催眠模式,它將是1A)保留所有其他   
  3.    orr r0,r0,#0x13     //設置CPU_MODE為SVC_MODE (0x13),而ORR仍然保留所有其他位 
  4.    msr spsr_cxsf,r0    //將其寫入spsr_cxsf寄存器,以便在調用交換機時加載該寄存器。 
  5.    add r0,pc,#4        //從pc計算要進入SVC_MODE的地址(后面的兩個操作碼很長) 
  6.    msr ELR_hyp,r0      //將地址值寫入ELR_hyp寄存器 
  7.    eret                //執行了回車指令 

 2、修改串口驅動

2.1、為了方便調試,先設置一個字符打印函數

kernel\liteos_a\platform\uart\amba_pl011\amba_pl011.c在46行左右處添加下面的代碼,uart_putc_phy使用物理地址打印字符,uart_putc_virt使用虛擬地址打印。當內核代碼啟動MMU之后,需用使用uart_putc_virt來打印字符。

  1. /*---------自定義函數----------*/ 
  2. #define RPI_BASE_UART_REGISTER (0x3f201000) //HI3516:0x120A0000 rpi2:0x3F201000 
  3. #define AMBA_UART_DR (*(volatile unsigned char *)(RPI_BASE_UART_REGISTER + 0x00)) 
  4. #define AMBA_UART_FR (*(volatile unsigned char *)(RPI_BASE_UART_REGISTER + 0x18)) 
  5. ​ 
  6. #define RPI_BASE_UART_REGISTER1 IO_DEVICE_ADDR(0x3F201000) //HI3516:0x120A0000 rpi2:0x3F201000 
  7. #define AMBA_UART_DR1 (*(volatile unsigned char *)(RPI_BASE_UART_REGISTER1 + 0x00)) 
  8. #define AMBA_UART_FR1 (*(volatile unsigned char *)(RPI_BASE_UART_REGISTER1 + 0x18)) 
  9. /*---------------------------*/ 
  10. ​ 
  11. void uart_putc_phy(unsigned char c) 
  12.     //UART_Type *uartRegs = (UART_Type *)UART4_REG_PBASE; 
  13.     //while ((uartRegs->USART_ISR & (1<<5)) == 0); 
  14.     //uartRegs->USART_TDR = c; 
  15.     while (AMBA_UART_FR & (1 << 5)); 
  16.     AMBA_UART_DR = c; 
  17. ​ 
  18. void uart_putc_virt(unsigned char c) 
  19.     //UART_Type *uartRegs = (UART_Type *)UART_REG_BASE; 
  20.     //while ((uartRegs->USART_ISR & (1<<5)) == 0); 
  21.     //uartRegs->USART_TDR = c; 
  22.     while (AMBA_UART_FR1 & (1 << 5)); 
  23.     AMBA_UART_DR1 = c; 

 例如:kernel\liteos_a\arch\arm\arm\src\startup\reset_vector_up.S 

  1. ldr sp, =0x00000000 + 0x5000000  //調用C函數前,得先設置棧,樹莓派物理內存從0x0開始 
  2.    mov r0, #'m' 
  3.    bl uart_putc_phy                //在MMU啟動之前使用的是物理地址打印 
  4.     
  5.    bl      mmu_setup                           /* set up the mmu */ 
  6.     
  7.    mov r0, #'M' 
  8.    bl uart_putc_virt               //在MMU啟動之后使用的是虛擬地址打印 

 2.2、添加串口中斷,串口輸入代碼

  1. vendor\broadcom\BCM2836\driver\uart\uart_hardware.c 

2.2.1、 串口的中斷函數,產生中斷時,這個函數調用

  1. static irqreturn_t BCM2836_uart_irq(int irq, void *data) 
  2.     char buf[FIFO_SIZE]; 
  3.     unsigned int count = 0; 
  4.     struct BCM2836_port *port = NULL
  5.     struct uart_driver_data *udd = (struct uart_driver_data *)data; 
  6.     UART_Type *uartRegs; 
  7.     uint32_t status; 
  8.      
  9.     if (udd == NULL) { 
  10.         uart_error("udd is null!\n"); 
  11.         return IRQ_HANDLED; 
  12.     } 
  13.     port = (struct BCM2836_port *)udd->private; 
  14.     uartRegs = (UART_Type *)port->phys_base; 
  15.     READ_UINT32(status, UART_REG_BASE + UART_FR); 
  16.     if ((UARTREG(UART_REG_BASE,UART_FR)&(1<<4)) == 0) { 
  17.         do { 
  18.             buf[count++] = UARTREG(UART_REG_BASE,UART_DR);//*(volatile UINT32 *)((UINTPTR)(UART_REG_BASE + UART_DR)); //去讀取硬件得到數據 
  19.             if (udd->num != CONSOLE_UART) { 
  20.                 continue
  21.             } 
  22.             if (CheckMagicKey(buf[count - 1])) { //數據放在buf里 
  23.                 goto end
  24.             } 
  25. ​ 
  26.             if (buf[count-1] == '\r') //對windows和liteos回車換行的處理 
  27.                 buf[count-1] = '\n'
  28.         } while (UARTREG(UART_REG_BASE,UART_DR)); 
  29.         udd->recv(udd, buf, count); //調用udd里的recv函數把數據發送給上一級 
  30.     } 
  31.     UARTREG(UART_REG_BASE, UART_ICR) = 0x3ff; 
  32. end
  33.     /* clear all interrupt */ 
  34.     return 0; 

 2.2.2、串口的初始化函數

  1. static int BCM2836_startup(struct uart_driver_data *udd)  
  2.     int ret = 0; 
  3.     struct BCM2836_port *port = NULL
  4.     if (udd == NULL) { 
  5.         uart_error("udd is null!\n"); 
  6.         return -EFAULT; 
  7.     } 
  8.     port = (struct BCM2836_port *)udd->private;//*private是一個指針,指向 struct {enable,phys_base,irq_num,*udd} 
  9.     if (!port) { 
  10.         uart_error("port is null!"); 
  11.         return -EFAULT; 
  12.     } 
  13.     /* enable the clock */ 
  14.     LOS_TaskLock(); 
  15.     LOS_TaskUnlock(); 
  16. ​ 
  17.     ret = request_irq(port->irq_num, (irq_handler_t)BCM2836_uart_irq,0, "uart_dw", udd);  //去注冊一個串口的接收中斷函數 
  18.     /* 1.uart interrupt priority should be the highest in interrupt preemption mode */ 
  19.     //ret = LOS_HwiCreate(NUM_HAL_INTERRUPT_UART, 0, 0, (HWI_PROC_FUNC)uart_handler, NULL); 
  20. ​ 
  21.     /* 2.clear all irqs */ 
  22.     UARTREG(UART_REG_BASE, UART_ICR) = 0x3ff; 
  23.     //*(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F201044)) = 0x3ff; 
  24. ​ 
  25.     /* disable FIFO mode */ 
  26.     //uartRegs->USART_CR1 &= ~(1<<29); 
  27.     //*(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F20102C)) = 0x60; 
  28.     UARTREG(UART_REG_BASE, UART_LCR_H) = (1 << 6 | 1 << 5| 1 << 4);  
  29. ​ 
  30.     /* 3.set fifo trigger level */ 
  31.     //*(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F201034)) = 0x0; 
  32.     UARTREG(UART_REG_BASE, UART_IFLS) = 0; 
  33. ​ 
  34.     /* 4.enable rx interrupt 開啟串口接收中斷,第4位*/ 
  35.     UARTREG(UART_REG_BASE, UART_IMSC) = (1 << 4 | 1 << 6); //*(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F201038)) = 0x10; 
  36. ​ 
  37.     /* 5.enable receive */ 
  38.     UARTREG(UART_REG_BASE, UART_CR) |= (1 << 9); //*(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F201030)) = 0x301; 
  39. ​ 
  40.     //HalIrqUnmask(NUM_HAL_INTERRUPT_UART);//6.  
  41.     *(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F00B214)) = 0x02000000;//Unmask接收25號中斷 
  42. ​ 
  43.     BCM2836_config_in(udd); 
  44. ​ 
  45.     return ret; 

 2.2.3、串口寫函數

  1. static int BCM2836_start_tx(struct uart_driver_data *udd, const char *buf, size_t count
  2.     unsigned int tx_len = count
  3.     struct BCM2836_port *port = NULL
  4.     char value; 
  5.     unsigned int i; 
  6.     int ret = 0; 
  7. ​ 
  8.     if (udd == NULL) { 
  9.         uart_error("udd is null!\n"); 
  10.         return -EFAULT; 
  11.     } 
  12.     port = (struct BCM2836_port *)udd->private; 
  13.     if (!port) { 
  14.         uart_error("port is null!"); 
  15.         return -EFAULT; 
  16.     } 
  17.     /* UART_WITH_LOCK: there is a spinlock in the function to write reg in order. */ 
  18.     for (i = 0; i < tx_len; i++ ){ 
  19.         ret = LOS_CopyToKernel((void *)&value, sizeof(char),(void *)(buf++), sizeof(char)); 
  20.         if (ret) { 
  21.             return i; 
  22.         } 
  23.         (void)UartPutsReg(port->phys_base, &value, 1, UART_WITH_LOCK); 
  24.     } 
  25.     return count

 2、系統時鐘初始化

2.1、main函數的各種調用,驗證參數

kernel\liteos_a\platform\main.c->main()

kernel\liteos_a\kernel\common\los_config.c->OsMain()

kernel\liteos_a\arch\arm\arm\src\los_hw_tick.c->OsTickInit()

  1. systemClock     //vendor里設置的是50000000 
  2. tickPerSecond   //鴻蒙默認設置的是100 
  3. LITE_OS_SEC_TEXT_INIT UINT32 OsTickInit(UINT32 systemClock, UINT32 tickPerSecond) 
  4. {    //只是驗證了下傳入的這兩個參數,并未使用 
  5.     HalClockInit(); 
  6.     return LOS_OK; 

 2.2、先獲取當前時鐘頻率,注冊中斷

kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c

  1. OS_TICK_INT_NUM//中斷號,在vendor\***\***\board\include\asm\hal_platform_ints.h下定義,查手冊確定 
  2. MIN_INTERRUPT_PRIORITY//優先級 
  3. OsTickEntry//中斷函數 
  4. LITE_OS_SEC_TEXT_INIT VOID HalClockInit(VOID) 
  5. {   ... 
  6.     g_sysClock = HalClockFreqRead(); //先獲取當前時鐘頻率 
  7.      
  8.     //調用LOS_HwiCreate函數新建中斷,系統中斷由它注冊 
  9.     ret = LOS_HwiCreate(OS_TICK_INT_NUM, MIN_INTERRUPT_PRIORITY, 0, OsTickEntry, 0);//參數1:中斷號、參數4:執行函數 
  10.     //這個函數就不深入了,大體就是將中斷號好和對應的執行函數放到一個數組 
  11.     //比如這里就是,當發生OS_TICK_INT_NUM這個中斷時,執行OsTickEntry()函數 
  12.     ... 

 2.3、時鐘中斷的執行函數OsTickEntry()

kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c

  1. 不過此時這是注冊了這個函數,時鐘并未啟動,得執行了(三.啟動時鐘)之后才會調用這個函數 
  2. LITE_OS_SEC_TEXT VOID OsTickEntry(VOID) 
  3.     TimerCtlWrite(0); 
  4.     OsTickHandler(); 
  5.     TimerCvalWrite(TimerCvalRead() + OS_CYCLE_PER_TICK); 
  6.     TimerCtlWrite(1); 
  7.     //使用最后一個cval生成下一個tick的時間是絕對和準確的。不要使用tval來驅動一般時間,在這種情況下tick會變慢。 

 2.3、啟動時鐘

main() => OsStart(VOID) => OsTickStart() => HalClockStart(VOID)

kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c => HalClockStart(VOID)

  1. //樹莓派2沒有GIC所以這個函數要爆改 
  2. LITE_OS_SEC_TEXT_INIT VOID HalClockStart(VOID) 
  3.     HalIrqUnmask(OS_TICK_INT_NUM);  //wendor里定義的 OS_TICK_INT_NUM = 29 
  4.     TimerCtlWrite(0); 
  5.     TimerTvalWrite(OS_CYCLE_PER_TICK); 
  6.     TimerCtlWrite(1); 

 2.3.1、HalIrqUnmask; //接收中斷(通過設置寄存器,允許CPU響應該中斷)

  1. HalIrqUnmask(OS_TICK_INT_NUM); 
  2. HalIrqUnmask(29); 
  3. GIC_REG_32(GICD_ISENABLER(29 >> 5)) = 1U << (29 % 32); 
  4. ​ 
  5. (GICD_ISENABLER(29 >> 5))拆開 
  6. GIC_REG_32(GICD_OFFSET + 0x100 + (29 >> 5) * 4) = 1U << (29 % 32);/* 中斷使能 Registers */ 
  7. ​ 
  8. GIC_REG_32拆開,(29 % 32)=1D 
  9. GIC_BASE_ADDR + (GICD_OFFSET + 0x100 + (29 >> 5) * 4) = 1U << (29 % 32) 
  10. ​ 
  11. #define GIC_BASE_ADDR             IO_DEVICE_ADDR(0x3F00A100) 
  12. #define GICD_OFFSET               0x1000     /* interrupt distributor offset */ 

 2.3.2、TimerCtlWrite(0); //關閉Timer

參考:ARM ArchitectureReference Manual ARMv7-A and ARMv7-R edition.pdf

《B3.17 Organization of the CP15 registers in a VMSA implementation》

  1. WRITE_TIMER_REG32(TIMER_REG_CTL, 0); 
  2. ARM_SYSREG_WRITE(TIMER_REG_CTL, 0) 
  3. ARM_SYSREG_WRITE(TIMER_REG(_CTL), 0) 
  4. ARM_SYSREG_WRITE(CP15_REG(c14, 0, c2, 1)), 0) 
  5. "mcr " (CP15_REG(c14, 0, c2, 1) :: "r" (val) 
  6. 反匯編 
  7. r8 0 
  8. mcr p15, #0, r8, c14, c2, #1    CNTP_CTL,PL1物理定時器控制寄存器 

 2.3.3、TimerTvalWrite(OS_CYCLE_PER_TICK); //設置Tval

  1. 反匯編 
  2. r0 192000 
  3. mcr p15, #0, r0, c14, c2, #0    CNTP_TVAL,PL1物理時間值寄存器 

 2.3.4、TimerCtlWrite(1); //再開啟Timer

  1. 反匯編 
  2. r5 1 
  3. mcr p15, #0, r5, c14, c2, #1    CNTP_CTL,PL1物理定時器控制寄存器 

 2.4、代碼移植

Z:\bright\harmony-100ask\kernel\liteos_a\platform\hw\arm\interrupt\gic\gic_v2.c

  1. VOID HalIrqUnmask(UINT32 vector) 
  2.     if ((vector > OS_USER_HWI_MAX) || (vector < OS_USER_HWI_MIN)) { 
  3.         return
  4.     } 
  5.     //GIC_REG_32(GICD_ISENABLER(vector >> 5)) = 1U << (vector % 32);  //替換 
  6.     *(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F00B218)) = 1; //使能ARM Timer IRQ     
  7. ​} 

 Z:\bright\harmony-100ask\kernel\liteos_a\platform\hw\arm\timer\arm_generic\arm_generic_timer.c

  1. STATIC_INLINE VOID TimerCtlWrite(UINT32 cntpCtl) 
  2.     //WRITE_TIMER_REG32(TIMER_REG_CTL, cntpCtl);//替換 
  3.     if(cntpCtl == 0){ 
  4.         *(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F00B408)) = 0x003E0000; 
  5.         } 
  6.     else 
  7.     { 
  8.         *(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F00B408)) = 0x003E00A2; 
  9.     } 
  10. ​STATIC_INLINE VOID TimerTvalWrite(UINT32 tval) 
  11.     //WRITE_TIMER_REG32(TIMER_REG_TVAL, tval);//替換 
  12.     *(volatile UINT32 *)((UINTPTR)IO_DEVICE_ADDR(0x3F00B400)) = tval;  //設置倒計時時間,鴻蒙是10ms     

 =======完整內容======

#2020征文-開發板# 鴻蒙 移植 樹莓派(上)搭建環境下載源碼

#2020征文-開發板# 鴻蒙 移植 樹莓派(中)添加單板

#2020征文-開發板# 鴻蒙 移植 樹莓派(下)修改源碼

©著作權歸作者和HarmonyOS技術社區共同所有,如需轉載,請注明出處,否則將追究法律責任.

想了解更多內容,請訪問:

51CTO和華為官方合作共建的鴻蒙技術社區

https://harmonyos.51cto.com/#zz

 

責任編輯:jianghua 來源: 鴻蒙社區
相關推薦

2021-01-25 16:28:10

鴻蒙HarmonyOS搭建環境

2021-01-25 16:39:08

鴻蒙HarmonyOS添加單板

2019-03-31 08:00:02

樹莓派更新樹莓派 Linux

2019-03-24 20:30:18

樹莓派Linux

2021-12-31 10:00:30

鴻蒙HarmonyOS應用

2021-11-23 15:35:05

鴻蒙HarmonyOS應用

2019-03-12 18:33:57

樹莓派Linux

2021-03-29 21:24:40

樹莓派Linux

2022-02-11 09:24:05

樹莓派OpenWrt固定IP服務

2019-03-23 19:33:14

樹莓派Linux操作系統

2018-10-12 11:20:20

樹莓派NAS Linux

2020-07-16 21:00:05

樹莓派Kubernetes集Linux

2024-03-22 15:28:36

樹莓派Linux

2021-07-25 10:30:04

樹莓派Linux

2019-05-24 13:30:57

PiShrink樹莓派Linux

2013-08-26 11:00:27

RaspbianHard Float.NET環境

2019-03-28 18:51:52

樹莓派Linux編程語言

2022-02-11 14:28:50

樹莓派Openharmon鴻蒙

2020-08-16 09:00:15

樹莓派FedoraLinux

2021-09-19 10:41:02

樹莓派ZeroZero W
點贊
收藏

51CTO技術棧公眾號

精品欧美一区免费观看α√| 国产综合福利在线| 亚洲av成人无码一二三在线观看| 亚洲优女在线| 国产精品久久久久7777按摩 | 91插插插插插插| 97色成人综合网站| 欧美午夜在线观看| 国产精品一线二线三线| 91精彩在线视频| 成人一级黄色片| 国产精品久久久久久婷婷天堂 | 人妻少妇精品无码专区久久| 日本亚洲天堂网| 欧美日韩成人在线视频| 国产美女免费无遮挡| 午夜免费欧美电影| 日本高清不卡视频| 国产一区二区四区| 欧美13一16娇小xxxx| 93久久精品日日躁夜夜躁欧美| 国产精品久久久久久久久久免费 | 狠狠躁天天躁日日躁欧美| 亚洲国产午夜伦理片大全在线观看网站 | 国产精品mv在线观看| 亚洲一区二区精品| 无码国产69精品久久久久网站| 久久精品超碰| 日韩欧美有码在线| 欧美一级视频在线播放| 激情视频在线观看| 中文字幕精品在线不卡| 精品一区二区日本| 亚洲精品911| 韩国女主播成人在线观看| 国产精品18久久久久久麻辣| 久久精品国产亚洲av高清色欲 | 一区二区三区黄色| 少妇户外露出[11p]| 蜜桃在线一区| 欧美日韩免费在线视频| 午夜精品久久久内射近拍高清| 91九色在线播放| 怡红院av一区二区三区| 久久久一二三四| wwwxxx在线观看| 日本一区二区综合亚洲| 无遮挡亚洲一区| 福利小视频在线观看| 久久久久久久网| 日韩三级电影免费观看| 精品亚洲综合| 国产午夜精品一区二区三区嫩草| 久久riav二区三区| 香蕉视频911| 久久综合久久综合亚洲| 久久综合中文色婷婷| 三级在线播放| 国产婷婷色一区二区三区| 欧美一区二区三区成人久久片 | 国产午夜一区二区三区| 亚洲国产精品日韩| 毛片在线播放a| 亚洲人吸女人奶水| 成人在线播放网址| 日韩欧美一中文字暮专区| 精品免费在线观看| 92看片淫黄大片一级| 欧美三级精品| 欧美日韩第一区日日骚| 亚洲国产综合av| 久久丝袜视频| 亚洲午夜激情免费视频| 俄罗斯毛片基地| 久久久人成影片免费观看| 欧美疯狂性受xxxxx另类| 国产精品成人网站| 日韩精品每日更新| 成人免费激情视频| 三级视频在线看| 久久免费精品国产久精品久久久久| 欧美专区一二三 | 久久久久久久久91| 欧美在线观看不卡| 久久国产福利国产秒拍| 国产精品二区二区三区| 国产福利免费在线观看| 亚洲青青青在线视频| 久久久久久免费看| 69堂精品视频在线播放| 日韩午夜激情av| 91久久免费视频| 亚洲女同一区| 国产成人97精品免费看片| 99久久婷婷国产一区二区三区| 国产.精品.日韩.另类.中文.在线.播放 | 欧美国产日本在线| 亚洲精品国产无码| 国产成人在线色| 日韩精品极品视频在线观看免费| fc2ppv国产精品久久| 欧美性69xxxx肥| 男人操女人下面视频| 久久99国产精品视频| 欧美乱大交xxxxx| jizz国产在线| 不卡在线观看av| 一区二区三区在线视频看| 激情黄产视频在线免费观看| 在线不卡中文字幕播放| 午夜理伦三级做爰电影| 国产精品久久| 国产在线视频不卡| 成人在线二区| 欧美日韩国产一中文字不卡 | 亚洲视屏在线观看| 成人激情校园春色| 成人手机在线播放| 欧美videos粗暴| 一本色道久久综合亚洲精品小说 | 欧洲一区二区三区免费视频| 美女扒开腿免费视频| 久久精品亚洲人成影院| 国产精品2018| 欧美孕妇孕交| 激情成人在线视频| 久久人妻少妇嫩草av蜜桃| 天天天综合网| 国产日本欧美一区二区三区在线| 黄色av网站在线免费观看| 亚洲国产精品久久人人爱| 在线视频观看一区二区| 日韩在线二区| 国产精品视频在线播放| 成人一区二区不卡免费| 在线亚洲欧美专区二区| 一区二区三区伦理片| 销魂美女一区二区三区视频在线| 国产亚洲第一区| 91超碰在线| 精品福利二区三区| 久久久久久久久久久网| 国产成人精品免费网站| 亚洲国产精品女人| 99久热在线精品视频观看| 中文字幕亚洲无线码a| 岳乳丰满一区二区三区| 国产精品美女久久福利网站 | 成人中文字幕在线| 国产aaa免费视频| 精品国产一区二区三区成人影院| 欧美精品18videos性欧美| 亚洲AV无码一区二区三区少妇| 一区二区三区国产精品| 野战少妇38p| 亚洲第一黄色| 欧美日韩亚洲免费| 欧美aaa大片视频一二区| 中文字幕日韩av综合精品| 中文字幕日日夜夜| 亚洲天天做日日做天天谢日日欢 | 中文字幕欧美在线观看| 国产精品久久久久一区二区三区| 青青草精品视频在线观看| 色喇叭免费久久综合| 91精品综合久久| h片在线观看下载| 亚洲欧美日韩网| 亚洲天堂男人网| 亚洲精品五月天| 国产精品无码电影| 日本女优在线视频一区二区| 伊人久久大香线蕉精品| 一区二区免费| 日韩av成人在线| 欧美猛烈性xbxbxbxb| 日韩视频中午一区| 国产精品免费精品一区| 中日韩av电影| 91九色蝌蚪porny| 日韩精品三区四区| 男人日女人的bb| 免费精品国产| 亚洲xxx大片| 成人亚洲欧美| 欧美乱大交做爰xxxⅹ性3| 日产精品久久久久久久性色| 欧美日韩国产123区| 日韩乱码在线观看| 国产精品剧情在线亚洲| 99免费观看视频| 琪琪一区二区三区| 久久久久99精品成人片| 色乱码一区二区三区网站| 国产精品一区二区免费看| 久久野战av| 欧美日韩国产91| 激情在线视频| 欧美成人女星排行榜| 潘金莲一级淫片aaaaaa播放| 亚洲欧洲中文日韩久久av乱码| 国产精品久久AV无码| 久久99精品国产| 99re在线视频免费观看| 欧美不卡高清| 日韩高清dvd| 韩国精品视频在线观看 | 亚洲人成午夜免电影费观看| 久久精品99久久久香蕉| 国产对白叫床清晰在线播放| 亚洲成年网站在线观看| 国产又大又黄又爽| 在线观看日韩精品| 男人的天堂一区二区| 亚洲精品国产成人久久av盗摄 | 欧美日韩有码| 精品国产一区二区三区麻豆免费观看完整版 | 成人欧美精品一区二区| 久久99精品国产91久久来源| 波多野结衣天堂| 鲁大师成人一区二区三区| 欧美亚洲色图视频| 欧美日韩免费| 欧美大片免费播放| 偷拍欧美精品| 一区二区国产日产| 国内黄色精品| 日本午夜精品一区二区三区| 日韩精品社区| 精品日本一区二区| 久久99精品国产自在现线| 成人av资源网| 亚洲日本视频在线| 97碰碰视频| 亚洲网一区二区三区| 91精品国产99久久久久久红楼| 国产精品美女久久久久| 国产精品一区久久| jizz亚洲女人高潮大叫| 国产精品久久久久久久久男| 亚洲第一影院| 国产精品吹潮在线观看| 88xx成人免费观看视频库| 日本中文字幕久久看| 国模冰冰炮一区二区| 国产999精品久久久| 欧美大片高清| 国产精品久久久久久久一区探花| 国产91亚洲精品久久久| 成人激情春色网| 日本超碰一区二区| av日韩免费电影| 免费看久久久| 欧美久久综合性欧美| 国产麻豆一区二区三区精品视频| 日韩精品久久久| 婷婷成人基地| 欧美狂野激情性xxxx在线观| 亚洲精品一级| 黄色一级大片在线观看| 美女脱光内衣内裤视频久久网站| 亚洲免费黄色网| 国产成人一区二区精品非洲| 亚洲图片欧美另类| 91麻豆国产精品久久| 少妇精品无码一区二区免费视频| 中文欧美字幕免费| 久操视频免费在线观看| 欧美视频一区二区三区…| 久久久久久亚洲av无码专区| 在线观看91av| 天天干天天爽天天操| 国产亚洲精品久久久优势| 国产成人无吗| 91超碰中文字幕久久精品| 日韩一级二级| 成人91视频| 欧美亚洲激情| avav在线播放| 丝袜国产日韩另类美女| www.51色.com| 91香蕉视频mp4| www成人啪啪18软件| 亚洲一本大道在线| 久久人人爽人人爽人人片av免费| 欧美精品精品一区| 四虎在线观看| 自拍亚洲一区欧美另类| 91九色国产在线播放| 国产精品色悠悠| 国产精品一区二区三区美女| 四虎永久国产精品| 在线观看一区视频| 天天干天天综合| av一本久道久久综合久久鬼色| 日本黄色激情视频| 欧美日韩国内自拍| 国产日本精品视频| 亚洲人精品午夜在线观看| 羞羞污视频在线观看| 国产精品久久久久久久久久久久 | 久久久噜噜噜久久中文字幕色伊伊| 黄色精品视频在线观看| 欧美日韩黄色大片| 亚洲国产综合网| 日韩中文av在线| 伊人久久视频| 黑人巨大精品欧美一区二区小视频 | 99久精品国产| 亚洲av无码一区二区三区在线| 日韩欧美视频一区二区三区| 丰满熟女一区二区三区| 日韩中文字幕在线播放| 亚洲承认视频| 久久久久久欧美精品色一二三四| 你懂的国产精品| 91女神在线观看| 国产亲近乱来精品视频| 久久久久久久久久影院| 日韩女同互慰一区二区| 精品国产99久久久久久| 国产男人精品视频| 精品国内自产拍在线观看视频| 日韩欧美不卡在线| 懂色av一区二区夜夜嗨| 国产精品视频一区二区三| 欧美日韩久久不卡| 成年网站在线| 国产精品久久久久高潮| 啄木系列成人av电影| 鲁一鲁一鲁一鲁一澡| www..com久久爱| 日本一区二区不卡在线| 精品久久久久一区| 日本aa在线| 国产精品 日韩| 欧美视频网站| 久久久久国产免费| 亚洲一区二区欧美| 亚洲精品国偷拍自产在线观看蜜桃| 久久福利网址导航| 欧美国产中文高清| 男人的天堂视频在线| 高清国产午夜精品久久久久久| 免费人成年激情视频在线观看| 欧美一区二区三区视频免费播放| 国产黄色在线免费观看| 91嫩草视频在线观看| 在线中文一区| 日本中文字幕精品| 亚洲国产成人91porn| 天天干免费视频| 欧美亚洲在线视频| 国内精品视频在线观看| 日韩一区二区三区久久| 亚洲欧美日韩综合aⅴ视频| 亚洲AV无码精品国产| 97超级碰在线看视频免费在线看| 亚洲69av| 亚洲精品视频导航| 亚洲人成在线观看一区二区| 99视频国产精品免费观看a| 久久久久国产视频| 亚洲欧洲色图| 亚洲免费av一区| 一区二区三区欧美日韩| 黑人精品一区二区| 国产97在线|日韩| 99精品在线免费在线观看| 精品人妻人人做人人爽夜夜爽| 午夜精品影院在线观看| 黄色av网址在线免费观看| 成人午夜在线影院| 99精品福利视频| 欧美激情 一区| 日韩精品一区二| 91av亚洲| 黄色一级片av| 国产亚洲欧美色| 国产av无码专区亚洲a∨毛片| 午夜精品久久久久久久久久久久久 | 99tv成人影院| 大陆极品少妇内射aaaaa| 国产精品视频第一区| 亚洲精品久久久久久久久久| 秋霞av国产精品一区| 五月开心六月丁香综合色啪| 亚洲久久久久久| 69堂精品视频| 校园春色亚洲| av中文字幕av| 国产亚洲成年网址在线观看| xxxx国产精品| 国产精品女人久久久久久| 影音先锋久久精品| 午夜精品久久久久99蜜桃最新版| 亚洲国产精品成人va在线观看| 欧美成人黄色| 日本在线观看a| 亚洲国产三级在线|