• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    一種基于S3C6410的BootLoader的設(shè)計(jì)與實(shí)現(xiàn)

    2016-11-09 01:11:41袁宗勝
    關(guān)鍵詞:宿主機(jī)開(kāi)發(fā)板內(nèi)核

    吳 磊 皮 智 袁宗勝

    (北方工業(yè)大學(xué)計(jì)算機(jī)學(xué)院 北京 100144)

    ?

    一種基于S3C6410的BootLoader的設(shè)計(jì)與實(shí)現(xiàn)

    吳磊皮智袁宗勝

    (北方工業(yè)大學(xué)計(jì)算機(jī)學(xué)院北京 100144)

    引導(dǎo)加載程序(BootLoader)是嵌入式系統(tǒng)開(kāi)發(fā)的關(guān)鍵技術(shù)之一,主要用于建立操作系統(tǒng)的運(yùn)行環(huán)境。針對(duì)BootLoader嚴(yán)重依賴于硬件實(shí)現(xiàn)的問(wèn)題,提出一種基于“NAND Flash+TFTP”存儲(chǔ)下載方式的BootLoader設(shè)計(jì)方法,并采用OK6410開(kāi)發(fā)板對(duì)該BootLoader進(jìn)行實(shí)驗(yàn)驗(yàn)證。實(shí)驗(yàn)結(jié)果表明該BootLoader運(yùn)行良好且穩(wěn)定。該設(shè)計(jì)方法可以廣泛地應(yīng)用到嵌入式系統(tǒng)和其他的處理器中。

    引導(dǎo)加載程序嵌入式系統(tǒng)S3C6410

    0 引 言

    嵌入式系統(tǒng)是以應(yīng)用為中心,以計(jì)算機(jī)技術(shù)為基礎(chǔ),軟硬件可裁剪,適應(yīng)于對(duì)功能、可靠性、成本、體積和功耗等嚴(yán)格要求的專用計(jì)算機(jī)系統(tǒng)[1]。在工業(yè)控制、智能儀器、醫(yī)療設(shè)備和機(jī)器人等方面得到廣泛的應(yīng)用,而在嵌入式系統(tǒng)開(kāi)發(fā)設(shè)計(jì)當(dāng)中,尤為重要的就是引導(dǎo)加載程序的設(shè)計(jì)。

    嵌入式系統(tǒng)從軟件操作方面分析,一般分為四個(gè)層次: 引導(dǎo)加載程序、系統(tǒng)內(nèi)核、文件系統(tǒng)和應(yīng)用程序。其中引導(dǎo)加載程序就是BootLoader,它是嵌入式系統(tǒng)開(kāi)發(fā)的難點(diǎn)之一,同時(shí)也是嵌入式系統(tǒng)運(yùn)行的一個(gè)基本前提,沒(méi)有這段與硬件緊密相連的代碼,再?gòu)?qiáng)大的內(nèi)核也發(fā)揮不了作用[3]。

    1 BootLoader開(kāi)發(fā)環(huán)境介紹

    1.1硬件結(jié)構(gòu)簡(jiǎn)介

    本BootLoader硬件實(shí)驗(yàn)環(huán)境采用飛凌公司的OK6410開(kāi)發(fā)板,它采用了三星公司的ARM11處理器S3C6410。S3C6410是一款高性價(jià)比和低功耗的RSIC處理器,具備視頻圖像處理能力。并且能夠穩(wěn)定地運(yùn)行于667MHz的主頻以上,支持Mobile DDR和多種NAND Flash。OK6410開(kāi)發(fā)板上集成了多種高端接口,如USB、SD卡、液晶屏和以太網(wǎng)等,主要硬件構(gòu)成如圖1所示。

    圖1 主要硬件構(gòu)成

    1.2BootLoader開(kāi)發(fā)方法與工具

    采用交叉開(kāi)發(fā)模式,即程序的編寫(xiě)和編譯在裝有Red Hat Enterprise Linux6.3的PC宿主機(jī)上完成,而交叉編譯產(chǎn)生的bin文件在OK6410目標(biāo)板上運(yùn)行。其中選用arm-linux-gcc-4.3.2工具鏈作為開(kāi)發(fā)工具,它包括了編譯器、鏈接器和匯編器等開(kāi)發(fā)工具[5-7],使用Makefile文件來(lái)管理整個(gè)工程,并選用JTAG進(jìn)行下載并調(diào)試BootLoader,另外選用交叉網(wǎng)線來(lái)下載嵌入式linux內(nèi)核映像文件(zImage),系統(tǒng)開(kāi)發(fā)框圖如圖2所示。

    圖2 系統(tǒng)開(kāi)發(fā)框圖

    2 BootLoader總體分析

    2.1S3C6410啟動(dòng)流程

    S3C6410的啟動(dòng)流程如圖3所示。

    圖3 S3C6410啟動(dòng)流程

    S3C6410的啟動(dòng)流程是IROM初始化,IROM中固化了軟件,稱為BootLoader0,是0階段的BootLoader,該BL0 執(zhí)行初始化時(shí)鐘,D-TCM,設(shè)備特殊控制器,引導(dǎo)設(shè)備;加載BL1到Stepping Stone(墊腳石),將放在nandflash中的BootLoader1(即 BootLoader最前面的8K)拷貝到Stepping Stone中;執(zhí)行BL1:BL1初始化系統(tǒng)時(shí)鐘,UART,SDRAM,Stepping Stone執(zhí)行完8K BootLoader后,將剩余的BootLoader(BL2)拷貝到SDRAM中運(yùn)行;執(zhí)行BL2:跳轉(zhuǎn)到SDRAM中執(zhí)行BL2,加載內(nèi)核。

    2.2BootLoader的總體設(shè)計(jì)

    在嵌入式操作系統(tǒng)中,BootLoader運(yùn)行在操作系統(tǒng)內(nèi)核之前。主要可以初始化一些相關(guān)的硬件設(shè)備、建立內(nèi)存空間的映射圖,將系統(tǒng)的軟硬件環(huán)境帶到一個(gè)合適狀態(tài),為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn)備好正確的環(huán)境[2-4]。

    BootLoader的啟動(dòng)通??梢苑譃榈谝浑A段和第二階段,第一個(gè)階段主要包含依賴于CPU的系統(tǒng)結(jié)構(gòu),比如設(shè)備初始化代碼等,通常都用匯編語(yǔ)言來(lái)實(shí)現(xiàn)。第二階段通常用C語(yǔ)言來(lái)實(shí)現(xiàn),以便實(shí)現(xiàn)更復(fù)雜的功能,也能使程序有更好的可讀性和可移植性,主要任務(wù)有一些相關(guān)硬件初始化,檢測(cè)系統(tǒng)的內(nèi)存映射和加載linux內(nèi)核等工作。BootLoader的總體設(shè)計(jì)流程如圖4所示。

    圖4 BootLoader的總體設(shè)計(jì)流程圖

    3 BootLoader第一階段設(shè)計(jì)

    3.1核心初始化

    核心初始化階段的任務(wù)主要包括異常向量表,設(shè)置svc模式,關(guān)閉看門(mén)狗,關(guān)閉中斷和外設(shè)基地址初始化。在ARM體系結(jié)構(gòu)中,異常向量表放在上電后映射在從0x00000000開(kāi)始的32個(gè)字節(jié)的連續(xù)物理地址上,它的作用是指定了各種異常處理程序的入口地址[2]。因?yàn)槊總€(gè)異常只對(duì)應(yīng)4個(gè)字節(jié),不能放下整個(gè)處理程序,用來(lái)跳轉(zhuǎn)到相應(yīng)程序。具體代碼如下:

    b reset

    //復(fù)位異常向量,地址為0x00000000

    ldr pc,_undefined_instruction

    //未定義指令異常,跳轉(zhuǎn)至未定義異常服務(wù)程序

    ldr pc,_software_interrupt

    //軟中斷異常,跳轉(zhuǎn)至軟中斷異常服務(wù)程序

    ldr pc,_prefetch_interrupt

    //指令預(yù)取中止異常,跳轉(zhuǎn)至指令異常預(yù)取中止異常服務(wù)程序

    ldr pc,_data_abort

    //數(shù)據(jù)訪問(wèn)中止異常,跳轉(zhuǎn)至數(shù)據(jù)訪問(wèn)中止異常服務(wù)程序

    ldr pc,_not_used

    //保留,占用4個(gè)字節(jié)

    ldr pc,_irq

    //IRQ異常,跳轉(zhuǎn)至普通中斷服務(wù)程序

    ldr pc,_fiq

    //FIQ異常,跳轉(zhuǎn)至快速中斷異常服務(wù)程序

    svc模式屬于特權(quán)模式,可以訪問(wèn)一些受控資源,并且比sys模式還多了些自己模式下的影子寄存器。相對(duì)sys模式來(lái)說(shuō),可以訪問(wèn)資源的能力相同,但是擁有更多的硬件資源。從BootLoader方面考慮,設(shè)置svv模式為了初始化系統(tǒng)相關(guān)硬件資源和獲取盡量多的權(quán)限。具體代碼如下:

    set_svc:

    //設(shè)置svc模式

    mrs r0,cpsr

    bic r0,r0,#0x1f

    //清除低5位

    orr r0,r0,#0xd3

    //設(shè)置為svc模式,并且屏蔽irq和fiq中斷

    msr cpsr,r0

    mov pc,lr

    //關(guān)閉看門(mén)狗

    #define pwatchdog 0x7e004000

    disable_watchdog:

    ldr r0,=pwatchdog

    //ldr這里是偽指令,將地址保存到r0中

    mov r1,#0x0

    str r1,[r0]

    mov pc,lr

    //關(guān)閉中斷,將以下2個(gè)地址全部置1

    disable_interrupt:

    mvn r1,#0x0

    ldr r0,=0x71200014

    str r1,[r0]

    ldr r0,=0x71300014

    str r1,[r0]

    mov pc,lr

    //關(guān)閉mmu和cache

    disable_mmu:

    mcr p15,0,r0,c7,c7,0

    //使Icache和Dcache失效

    mrc p15,0,r0,c1,c0,0

    //關(guān)閉Icache,Dcache和mmu

    bic r0,r0,#0x00000007

    mcr p15,0,r0,c1,c0,0

    mov pc,lr

    //外設(shè)基地址初始化

    set_peri_port:

    ldr r0, =0x70000000

    orr r0, r0, #0x13

    mcr p15,0,r0,c15,c2,4

    mov pc, lr

    3.2點(diǎn)亮LED

    點(diǎn)亮LED是為了調(diào)試代碼用。具體代碼如下:

    #define GPMCON 0x7F008820

    //這里的地址根據(jù)開(kāi)發(fā)板硬件資源的不同而設(shè)置不同

    #define GPMDAT 0x7F008824

    light_led:

    ldr r1,=GPMCON

    //控制寄存器

    ldr r0,=0x1111

    str r0,[r1]

    ldr r1,=GPMDAT

    //數(shù)據(jù)寄存器

    ldr r0,=0xe

    //點(diǎn)亮一個(gè)led燈,觀察調(diào)試使用

    str r0,[r1]

    mov pc,lr

    3.3時(shí)鐘初始化

    S3C6410可以使用外部晶振和外部時(shí)鐘兩種方式輸入時(shí)鐘信號(hào),默認(rèn)的工作主頻為12 MHz(晶振頻率),S3C6410有三個(gè)PLL,分別為APLL、MPLL和EPLL。其中APLL產(chǎn)生ACLK,給ARM core使用。MPLL產(chǎn)生HCLK和PCLK。EPLL產(chǎn)生特殊的時(shí)鐘,比如為USB提供48MHz時(shí)鐘。時(shí)鐘初始化流程:(1)設(shè)置lock time(不需要設(shè)置,保持默認(rèn)值即可);(2)設(shè)置分頻系數(shù);(3)設(shè)置CPU到異步工作模式;(4)設(shè)置FCLK。具體代碼如下:

    //設(shè)置分頻系數(shù)

    #define CLK_DIV 0 0x7e00f020

    #define DIV_VAL (0x1<<0)|(0x1<<9)|(0x1<<8)|(0x3<<12)

    //設(shè)置為66MHz

    clock_init:

    ldr r0,=CLK_DIV0

    ldr r1,= DIV_VAL

    str r1,[r0]

    mov pc,lr

    //設(shè)置CPU為異步模式

    //這里可以直接設(shè)置OTHERS寄存器來(lái)完成設(shè)置異步模式

    #define OTHERS 0x7e00f900

    ldr r0,=OTHERS

    ldr r1,[r0]

    bic r1,r1,#0xc0 //這里將第六位也設(shè)置為0的主要目的是當(dāng)

    //選擇為異步模式的時(shí)候,應(yīng)選取MPLL的輸出

    str r1,[r0]

    //設(shè)置FCL

    #define APLL_CON 0x7e00f00c

    #define MPLL_CON 0x7e00f010

    #define PLL_VAL ((1<<31)|(266<<16)|(3<<8)|(1<<0))

    ldr r0,=APLL_CON

    ldr r1,=PLL_VAL

    str r1,[r0]

    ldr r0,=MPLL_CON

    ldr r1,=PLL_VAL

    str r1,[r0]

    //為了必須保證設(shè)置APLL和MPLL作為輸出,這里還需要設(shè)置

    //CLK_SRC的低2位為1

    #define CLK_SRC 0x7e00f01c

    ldr r0,=CLK_SRC

    mov r1,#0x3

    str r1,[r0]

    3.4內(nèi)存初始化

    S3C6410處理器擁有32位地址總線,其尋址空間為4 GB。其中高2 GB為保留區(qū),低2 GB區(qū)域又可劃分為2部分:主存儲(chǔ)區(qū)和外設(shè)區(qū)。其地址空間和主存儲(chǔ)區(qū)如圖5所示。

    圖5 地址空間和主存儲(chǔ)區(qū)

    內(nèi)存初始化的這一過(guò)程主要是指對(duì) DRAM、FLASH 的存儲(chǔ)設(shè)備的地址范圍、數(shù)據(jù)寬度以及 DRAM 的刷新率進(jìn)行設(shè)備,芯片不同,設(shè)置也不同[8-10]。

    3.5將nandflash中的BootLoader復(fù)制至內(nèi)存

    OK6410開(kāi)發(fā)板上電之后,會(huì)運(yùn)行SROM中的BootLoader0(由三星公司出廠設(shè)置),由S3C6410啟動(dòng)流程圖3可以看出,S3C6410的Stepping Stone(墊腳石)只有8 KB,由于8 KB容量太小,不足以完成第二階段的任務(wù),因此需要借助這8 KB的BootLoader1將nandflash中的所有的BootLoader復(fù)制到內(nèi)存運(yùn)行。將nandflash中的BootLoader復(fù)制至內(nèi)存的具體代碼如下:

    copy_to_ram:

    ldr r0,=0x0c000000

    //起點(diǎn)

    ldr r1,=0x50008000

    //終點(diǎn)

    add r3,r0,#1024*8

    //復(fù)制8KB

    copy_loop:

    //循環(huán)復(fù)制至0x50008000

    ldr r2,[r0],#4

    str r2,[r1],#4

    cmp r0,r3

    bne copy_loop

    mov pc,lr

    3.6C語(yǔ)言環(huán)境初始化

    OK6410的內(nèi)存大小是256 MB,64 MB的內(nèi)存對(duì)于一個(gè)精簡(jiǎn)通用的BootLoader足夠使用,即設(shè)置堆棧寄存器(SP)的地址為0x50000000+64 MB = 0x54000000,棧初始化的代碼如下:

    init_stack:

    ldr sp,=0x54000000

    mov pc,lr

    BSS(Block Started by Symbol)通常是指用來(lái)存放程序的未初始化的全局變量和靜態(tài)變量的一塊內(nèi)存區(qū)域。BSS段初始化就是給該段清零,方便以后使用BSS段的數(shù)據(jù),當(dāng)定義變量時(shí),就會(huì)初始化該變量為零。具體代碼如下:

    //初始化BSS段

    clear_bss:

    ldr r0,=bss_start

    //BSS起始地址

    ldr r1,=bss_end

    //BSS終止地址

    cmp r0,r1

    moveq pc,lr

    clean_loop:

    //循環(huán)清除

    mov r2,#0;

    str r2,[r0],#4

    cmp r0,r1

    bne clean_loop

    mov pc,lr

    //跳轉(zhuǎn)至C代碼

    從SRAM調(diào)到內(nèi)存中,直接使用絕對(duì)跳轉(zhuǎn)方式。需要在myboot工程下面新建一個(gè)main.c文件,具體代碼如下:

    int myboot_main()

    //main函數(shù)

    {

    return 0;

    }

    修改匯編start.S和Makefile文件,在原start.S里面的reset下添加ldr pc,=mymain 用來(lái)跳轉(zhuǎn)至C語(yǔ)言環(huán)境,myboot_main是一個(gè)函數(shù)地址,在原Makefile文件的依賴文件里面添加main.o即可,通過(guò)在myboot_main中添加點(diǎn)亮LED的代碼,測(cè)試LED點(diǎn)亮,說(shuō)明程序已經(jīng)跳轉(zhuǎn)至myboot_main。

    4 BootLoader第二階段設(shè)計(jì)

    4.1MMU初始化

    在BootLoader第一階段的設(shè)計(jì)中關(guān)閉了MMU,因此物理地址和虛擬地址是相等的,在Linux系統(tǒng)中不管是內(nèi)核還是應(yīng)用程序,都是使用的虛擬地址,而MMU的作用是自動(dòng)進(jìn)行虛擬地址到物理地址的轉(zhuǎn)化,需要找到一級(jí)頁(yè)表,而一級(jí)頁(yè)表的基地址保存在CP15的C2寄存器中。本BootLoader按照段式方式來(lái)進(jìn)行映射,即一級(jí)頁(yè)表項(xiàng)中最后兩位為‘10’。段式方式轉(zhuǎn)換如圖6所示,由高12位的段基址和低20位的偏移地址組成。

    圖6 段式方式轉(zhuǎn)換

    MMU的初始化具體代碼如下:

    void enable_mmu()

    //使能MMU

    void creat_page_table()

    //創(chuàng)建頁(yè)表和內(nèi)存映射

    {

    unsigned long* ttb = (unsigned long*)0x50000000;

    //頁(yè)表存放在內(nèi)存起始地址

    unsigned long vaddr,paddr;

    vaddr = 0xA0000000;

    //虛擬地址

    paddr = 0x7F000000;

    //物理地址

    *(ttb + (vaddr>>20)) = (paddr&0xfff00000) | (MMU_SECDESC);

    vaddr = 0x50000000;

    paddr = 0x50000000;

    while(vaddr < 0x54000000) //內(nèi)存映射64MB,地址范圍是

    //(0x50000000-0x54000000)

    {

    *(ttb + (vaddr>>20)) = (paddr&0xfff00000) | (MMU_SECDESC_WB);

    vaddr += 0x100000;

    paddr += 0x100000;

    }

    }

    由于MMU初始化后,對(duì)應(yīng)需要修改LED的控制寄存器和數(shù)據(jù)寄存器的地址,具體代碼如下:

    #define GPKCON (volatile unsigned long*)0xA0008820

    //使用的虛擬地址

    #define GPKDAT (volatile unsigned long*)0xA0008824

    //使用的虛擬地址

    *(GPKCON) = 0x1111;

    *(GPKDAT) = 0xe;

    通過(guò)觀察LED來(lái)驗(yàn)證MMU初始化的代碼。如果LED能亮起來(lái),說(shuō)明MMU這部分代碼沒(méi)有問(wèn)題;否則,MMU不起作用。

    4.2相關(guān)硬件初始化

    在BootLoader第一階段中,ARM設(shè)置在svc的模式下,如果在相關(guān)硬件初始化的過(guò)程中需要用到中斷的時(shí)候,須將ARM設(shè)置為irq模式,因此需要重新設(shè)置堆棧。具體代碼如下:

    //設(shè)置堆棧

    init_stack:

    msr cpsr_c, #0xd2

    ldr sp, =0x53000000

    //初始化r13_irq 中斷響應(yīng)的地址

    msr cpsr_c, #0xd3

    ldr sp, =0x54000000

    //初始化r13_svc

    mov pc,lr

    針對(duì)硬件資源不同的開(kāi)發(fā)板,針對(duì)性地做一些硬件的初始化,這里主要包括以下幾點(diǎn)。

    (1) 串口控制臺(tái)建立,在本BootLoader中,需要用戶自己手動(dòng)在串口控制臺(tái)輸入選擇項(xiàng)來(lái)下載Linux內(nèi)核,通過(guò)串口來(lái)交互,移植printf和scanf函數(shù)等。

    (2) DMA解決了CPU每次從內(nèi)存當(dāng)中拷貝很大的數(shù)據(jù)到串口,提高CPU的效率,可以初始化DMA。

    (3) 硬件資源還包括有LCD(OK6410用的TFT液晶屏)和觸摸屏(OK6410用的電阻屏),根據(jù)不同的硬件資源做一些適當(dāng)?shù)男薷摹?/p>

    4.3網(wǎng)卡搭建

    根據(jù)硬件資源的不同,初始化DM9000的代碼也有所不同,本BootLoader需要通過(guò)交叉網(wǎng)線來(lái)下載Linux內(nèi)核,通過(guò)ARP協(xié)議的實(shí)現(xiàn)來(lái)測(cè)試DM9000是否正常工作。

    聲明以太網(wǎng)包和ARP包的結(jié)構(gòu)體代碼如下:

    typedef struct eth_hdr

    //以太網(wǎng)包

    {

    u8 d_mac[6];

    //目的MAC地址

    u8 s_mac[6];

    //源MAC地址

    u16 type;

    //類型

    }ETH_HDR;

    typedef struct arp_hdr

    //ARP包

    {

    ETH_HDR ethhdr;

    //以太網(wǎng)包

    u16 hwtype;

    //硬件類型

    u16 protocol;

    //協(xié)議類型

    u8 hwlen;

    //硬件地址長(zhǎng)度

    u8 protolen;

    //協(xié)議地址長(zhǎng)度

    u16 opcode;

    //OP=1 表示ARP請(qǐng)求 OP=2 表示ARP應(yīng)答

    u8 smac[6];

    //發(fā)送端以太網(wǎng)地址

    u8 sipaddr[4];

    //發(fā)送端IP地址

    u8 dmac[6];

    //目的以太網(wǎng)地址

    u8 dipaddr[4];

    //目的IP地址

    }ARP_HDR;

    主要的函數(shù)有2個(gè)如下:

    void arp_request(); //發(fā)送ARP請(qǐng)求包,注意網(wǎng)絡(luò)中的字節(jié)序問(wèn)

    //題,網(wǎng)絡(luò)字節(jié)序是大端傳輸

    u8 arp_process(u8 *buf, u32 len);

    //解析ARP應(yīng)答包,提取MAC地址

    測(cè)試網(wǎng)卡的搭建如下,開(kāi)發(fā)板OK6410通過(guò)向宿主機(jī)發(fā)送ARP請(qǐng)求,宿主機(jī)回復(fù)一個(gè)ARP應(yīng)答包,開(kāi)發(fā)板即能知道宿主機(jī)的MAC地址,流程如圖7所示。

    圖7 ARP通信流程

    開(kāi)發(fā)板OK6410的IP地址設(shè)置為10.5.114.107,MAC地址設(shè)置為09:08:07:06:05:04,宿主機(jī)的IP地址和物理地址通過(guò)ifconfig命令可以查看如圖8所示:IP地址為10.5.114.109,MAC地址為00:0C:29:45:FC:6A。

    圖8 宿主機(jī)PC的IP地址和MAC地址

    實(shí)驗(yàn)下載該BootLoader,從nandflash啟動(dòng),OK6410循環(huán)發(fā)送ARP請(qǐng)求,顯示數(shù)據(jù)如圖9所示:MAC地址的顯示和圖7中SecureCRT打印的結(jié)果一致,實(shí)驗(yàn)說(shuō)明OK6410開(kāi)發(fā)板可以正確獲取到宿主機(jī)的MAC地址。

    圖9 SecureCRT串口顯示宿主機(jī)PC的IP和MAC

    通過(guò)Wireshark抓包如圖10所示:Wireshark正確抓到ARP的包正確,說(shuō)明OK6410能正確獲取到宿主機(jī)PC的MAC地址,驗(yàn)證了網(wǎng)卡搭建的正確性。

    圖10 Wireshark抓取的ARP包

    4.4移植TFTP客戶端

    通過(guò)TFTP客戶端下載linux內(nèi)核至開(kāi)發(fā)板OK6410,在開(kāi)發(fā)板下載之前發(fā)送一個(gè)ARP請(qǐng)求來(lái)獲取宿主機(jī)PC的MAC地址。TFTP的通信流程如圖11所示。

    圖11 TFTP通信流程

    聲明IP報(bào)文、UDP包以及TFTP包的結(jié)構(gòu)體代碼如下:

    typedef struct ip_hdr

    //IP報(bào)文

    {

    ETH_HDR ethhdr;

    //以太網(wǎng)包

    u8 vhl;

    //版本和首部長(zhǎng)度

    u8 tos;

    //服務(wù)級(jí)別

    u16 len;

    //報(bào)文長(zhǎng)度

    u16 ipid;

    //標(biāo)識(shí)

    u16 ipoffset;

    //片位移

    u8 ttl;

    //生存時(shí)間

    u8 proto;

    //上一層協(xié)議類型

    u16 ipchksum;

    //校驗(yàn)和

    u8 srcipaddr[4];

    //源IP地址

    u8 destipaddr[4];

    //目的IP地址

    }IP_HDR;

    typedef struct udp_hdr

    //UDP包

    {

    IP_HDR iphdr;

    //IP報(bào)文

    u16 sport;

    //源端口號(hào)

    u16 dport;

    //目的端口號(hào)

    u16 len;

    //長(zhǎng)度

    u16 udpchksum;

    //校驗(yàn)和

    }UDP_HDR;

    typedef struct tftp_package

    {

    u16 opcode;

    //操作碼

    u16 blocknum;

    //塊編號(hào)

    u8 data[0];

    //數(shù)據(jù)

    }TFTP_PAK;

    主要的函數(shù)有:

    void tftp_send_request(const char *filename);

    //用來(lái)發(fā)送TFTP請(qǐng)求

    void tftp_send_ack(u16 blocknum);

    //用來(lái)發(fā)送TFTP ACK

    void tftp_process(u8 *buf, u32 len, u16 port);

    //處理TFTP請(qǐng)求

    TFTP測(cè)試結(jié)果如下:在Linux宿主機(jī)上面配置好TFTP服務(wù)器,OK6410開(kāi)發(fā)板通過(guò)交叉網(wǎng)線下載zImage(zImage存放在linux宿主機(jī)上面配置好的TFTP服務(wù)器的目錄下)文件,SecureCRT串口顯示如圖12所示和 Wireshark抓包如圖13所示。

    圖12 SecureCRT串口顯示TFTP下載完成

    圖13 Wireshark抓取的TFTP包

    通過(guò)SecureCRT串口顯示和wireshark抓包顯示可以看出OK6410開(kāi)發(fā)板能正確發(fā)送TFTP請(qǐng)求,并且能正確解析和下載zImage文件,實(shí)驗(yàn)說(shuō)明OK6410的TFTP客戶端正確將Linux內(nèi)核下載至nandflash。

    4.5移植bootm命令

    TFTP客戶端下載完Linux內(nèi)核后,需要啟動(dòng)該內(nèi)核,實(shí)現(xiàn)一個(gè)命令來(lái)啟動(dòng)該Linux內(nèi)核。這個(gè)bootm命令用于啟動(dòng)一個(gè)操作系統(tǒng)映像。它會(huì)從映像文件的頭部取得一些信息,這些信息包括:映像文件的基于的CPU架構(gòu)、其操作系統(tǒng)類型、映像的類型、壓縮方式、映像文件在內(nèi)存中的加載地址、映像文件運(yùn)行的入口地址、映像文件名等。緊接著bootm將映像加載到指定的地址,跳轉(zhuǎn)至入口地址進(jìn)入Linux內(nèi)核。主要的函數(shù)實(shí)現(xiàn)如下:

    #define SDRAM_KERNEL_START 0x51000000 //linux內(nèi)核起始地址

    theKernel = (void (*)(int, int, unsigned int ))SDRAM_KERNEL_START;

    //指向起始地址

    void boot_linux();

    //用來(lái)處理啟動(dòng)linux內(nèi)核,這一過(guò)程需要設(shè)計(jì)

    //啟動(dòng)參數(shù),包括核心啟動(dòng)參數(shù),內(nèi)存參數(shù),命令行參數(shù)和結(jié)束標(biāo)志等

    setup_core_tag();

    //設(shè)置核心啟動(dòng)參數(shù)

    setup_mem_tag();

    //設(shè)置內(nèi)存參數(shù)

    setup_cmdline_tag();

    //設(shè)置命令行參數(shù)

    setup_end_tag();

    //設(shè)置結(jié)束標(biāo)志

    4.6BootLoader測(cè)試

    燒寫(xiě)B(tài)ootLoader,然后從nandflash啟動(dòng),TFTP客戶端下載完Linux內(nèi)核后,通過(guò)SecureCRT串口輸入數(shù)字3,即可正確引導(dǎo)Linux內(nèi)核和根文件系統(tǒng)。實(shí)驗(yàn)效果如圖14、圖15和圖16所示。

    圖14 SecureCRT串口顯示完成加載Linux

    圖15 SecureCRT串口顯示獲取MAC和TFTP下載正常

    圖16 SecureCRT串口顯示正在啟動(dòng)Linux內(nèi)核

    通過(guò)圖14、圖15和圖16顯示,實(shí)驗(yàn)結(jié)果說(shuō)明該BootLoader能正確引導(dǎo)Linux內(nèi)核和根文件系統(tǒng),并且運(yùn)行穩(wěn)定,為后續(xù)的嵌入式系統(tǒng)開(kāi)發(fā)奠定了基礎(chǔ)。

    5 結(jié) 語(yǔ)

    BootLoader是嚴(yán)重依賴于硬件而實(shí)現(xiàn)的,每種不同體系結(jié)構(gòu)的處理器都有不同的BootLoader,因此BootLoader的設(shè)計(jì)在嵌入式系統(tǒng)開(kāi)發(fā)中非常關(guān)鍵,如何設(shè)計(jì)出一個(gè)比較通用的BootLoader更是困難。本文提出了一種基于“NAND Flash+TFTP”存儲(chǔ)下載方式的BootLoader設(shè)計(jì)方法,實(shí)驗(yàn)結(jié)果表明該BootLoader運(yùn)行穩(wěn)定,只需要根據(jù)硬件資源的不同,稍作一些代碼上的修改,即可移植至嵌入式系統(tǒng)和其他的處理器中。同時(shí)該設(shè)計(jì)方法為BootLoader系統(tǒng)設(shè)計(jì)提供了實(shí)用價(jià)值。

    [1] 鄭靈翔. 嵌入式系統(tǒng)設(shè)計(jì)與應(yīng)用開(kāi)發(fā)[M]. 北京: 北京航空航天大學(xué)出版社, 2006:201-219.

    [2] 孫瓊. 嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解[M]. 北京:人民郵電出版社,2006:172-175.

    [3] 田會(huì)峰. 基于S3C2440的BootLoader設(shè)計(jì)與實(shí)現(xiàn)[J]. 自動(dòng)化技術(shù)與應(yīng)用, 2010,29(7):29-32.

    [4] 杜春雷. ARM體系結(jié)構(gòu)與編程[M]. 北京:清華大學(xué)出版社, 2003:22-223.

    [5] 袁磊,朱怡安,蘭婧. 嵌入式系統(tǒng)BootLoader設(shè)計(jì)與實(shí)現(xiàn)[J]. 計(jì)算機(jī)測(cè)量與控制,2009,17(2):389-391.

    [6] 張群忠,沈建華. ARM&Linux嵌入式系統(tǒng)BootLoader的研究與設(shè)計(jì)[J]. 計(jì)算機(jī)應(yīng)用與軟件,2006,23(12):97-99.

    [6] 葉茂,李智,任和. Cortex-A8的Bootloader設(shè)計(jì)與實(shí)現(xiàn)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2015,2(1):17-20.

    [7] 馮林琳,耿恒山. 基于S3C6410的Uboot分析與移植[J]. 計(jì)算機(jī)與現(xiàn)代化,2013,3(1):119-121.

    [9] 梁超,楊峰,雷鳴,等. U-Boot SD卡啟動(dòng)方式的移植分析與功能擴(kuò)展[J]. 現(xiàn)代電子技術(shù),2013,36(20):84-86,90.

    [10] 吳偉,周延周. 基于S3C2440的嵌入式系統(tǒng)小型U-Boot的研究[J]. 廣東工業(yè)大學(xué)學(xué)報(bào),2014,31(4):85-89.

    DESIGN AND REALISATION OF AN S3C6410-BASED BOOTLOADER

    Wu LeiPi ZhiYuan Zongsheng

    (College of Computer, North China University of Technology, Beijing 100144, China)

    BootLoader is one of the key technologies in embedded system development, and is mainly used for establishing operating system environment. To address the problem of BootLoader in seriously relying on the hardware implementation, in this paper we propose a BootLoader design method which is based on “NAND Flash+TFTP” storage download mode, and verify this BootLoader by an experiment with OK6410 development board. Experimental result shows that the newly designed BootLoader operates good and stably. The design method can be widely applied to embedded system and other processors.

    BootLoaderEmbedded systemS3C6410

    2015-06-08。北京市自然科學(xué)基金項(xiàng)目(4131001);中央支持地方專項(xiàng)(PXM2014_014212_000097);北京市屬高等學(xué)校創(chuàng)新團(tuán)隊(duì)建設(shè)與教師職業(yè)發(fā)展計(jì)劃項(xiàng)目(IDHT20130502);北京市自然科學(xué)基金項(xiàng)目(4132026)。吳磊,副教授,主研領(lǐng)域:嵌入式技術(shù),無(wú)線通信。皮智,碩士生。袁宗勝,碩士生。

    TP311.52

    A

    10.3969/j.issn.1000-386x.2016.09.057

    猜你喜歡
    宿主機(jī)開(kāi)發(fā)板內(nèi)核
    萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
    強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
    基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
    Linux內(nèi)核mmap保護(hù)機(jī)制研究
    虛擬網(wǎng)絡(luò)實(shí)驗(yàn)室在農(nóng)村職校計(jì)算機(jī)網(wǎng)絡(luò)技術(shù)教學(xué)中的應(yīng)用研究
    嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)的思考
    Microchip最新推出兩款PIC32 Curiosity開(kāi)發(fā)板
    淺析單片機(jī)開(kāi)發(fā)板的設(shè)計(jì)與制作
    電子制作(2017年22期)2017-02-02 07:10:14
    嵌入式計(jì)算機(jī)軟件測(cè)試關(guān)鍵技術(shù)研究
    Mouser為您呈上開(kāi)發(fā)關(guān)鍵之STMicroelectronics Nucleo開(kāi)發(fā)板
    国产成年人精品一区二区| 91麻豆av在线| 国产欧美日韩精品一区二区| 午夜福利高清视频| 亚洲av免费在线观看| 男女之事视频高清在线观看| 色视频www国产| 脱女人内裤的视频| 亚洲精品在线美女| 国产三级黄色录像| 非洲黑人性xxxx精品又粗又长| 中文在线观看免费www的网站| h日本视频在线播放| 18禁黄网站禁片免费观看直播| 视频区欧美日本亚洲| 1024手机看黄色片| 精品久久久久久久久久免费视频| 日本黄色视频三级网站网址| 亚洲精品色激情综合| 又大又爽又粗| 国产在线精品亚洲第一网站| 亚洲一区二区三区色噜噜| 国产精品一及| 久9热在线精品视频| 99热这里只有是精品50| 我的老师免费观看完整版| 国产精品久久久久久精品电影| 69av精品久久久久久| 日本撒尿小便嘘嘘汇集6| 国产伦精品一区二区三区四那| 国产亚洲av高清不卡| 啦啦啦免费观看视频1| 国产精品av久久久久免费| 午夜激情福利司机影院| 一本综合久久免费| 男女下面进入的视频免费午夜| 18禁美女被吸乳视频| 成年免费大片在线观看| 亚洲国产精品合色在线| 国产精品综合久久久久久久免费| 巨乳人妻的诱惑在线观看| av中文乱码字幕在线| e午夜精品久久久久久久| 亚洲人成伊人成综合网2020| 国产欧美日韩一区二区精品| 久久这里只有精品19| 国产美女午夜福利| 99精品久久久久人妻精品| 国产亚洲av嫩草精品影院| 成人av在线播放网站| e午夜精品久久久久久久| 久久伊人香网站| 国产1区2区3区精品| 欧美激情久久久久久爽电影| 每晚都被弄得嗷嗷叫到高潮| 搡老岳熟女国产| 欧美黑人欧美精品刺激| 精品国产乱码久久久久久男人| 成人无遮挡网站| 无人区码免费观看不卡| 国产精品久久电影中文字幕| 成人一区二区视频在线观看| 岛国在线观看网站| 久久国产乱子伦精品免费另类| 久久天堂一区二区三区四区| 又大又爽又粗| 真人做人爱边吃奶动态| 两个人的视频大全免费| 男女做爰动态图高潮gif福利片| 久久婷婷人人爽人人干人人爱| 日韩欧美精品v在线| 国产真人三级小视频在线观看| 女人高潮潮喷娇喘18禁视频| 美女免费视频网站| 国产成年人精品一区二区| 一个人免费在线观看电影 | 一级毛片高清免费大全| 免费无遮挡裸体视频| 老司机在亚洲福利影院| 国产免费男女视频| 亚洲一区二区三区色噜噜| 热99在线观看视频| 琪琪午夜伦伦电影理论片6080| 久久久国产精品麻豆| 国产三级黄色录像| 久久久久久国产a免费观看| 成年女人永久免费观看视频| 天堂√8在线中文| 亚洲国产欧洲综合997久久,| 黄色视频,在线免费观看| 欧美在线一区亚洲| 久99久视频精品免费| 国产成人啪精品午夜网站| 人人妻人人看人人澡| 三级男女做爰猛烈吃奶摸视频| 日本与韩国留学比较| www.999成人在线观看| а√天堂www在线а√下载| 精品一区二区三区视频在线 | 老司机午夜福利在线观看视频| 国产亚洲精品一区二区www| 亚洲美女黄片视频| 亚洲欧美一区二区三区黑人| 九色国产91popny在线| 两个人的视频大全免费| 51午夜福利影视在线观看| 欧美极品一区二区三区四区| 日本成人三级电影网站| 亚洲国产欧美人成| 亚洲av电影不卡..在线观看| 三级国产精品欧美在线观看 | 国内精品一区二区在线观看| 在线免费观看的www视频| 最近在线观看免费完整版| 麻豆一二三区av精品| 男人舔女人的私密视频| 色吧在线观看| 精品国内亚洲2022精品成人| 婷婷精品国产亚洲av| 啦啦啦免费观看视频1| 国产精品精品国产色婷婷| 欧美日韩福利视频一区二区| 中文字幕最新亚洲高清| 91九色精品人成在线观看| 日韩欧美 国产精品| av中文乱码字幕在线| www.999成人在线观看| 亚洲五月天丁香| 国产97色在线日韩免费| 99精品在免费线老司机午夜| 欧美三级亚洲精品| 99国产极品粉嫩在线观看| 欧美黄色片欧美黄色片| 免费人成视频x8x8入口观看| x7x7x7水蜜桃| 精品国产乱子伦一区二区三区| 一二三四在线观看免费中文在| 村上凉子中文字幕在线| 久久久水蜜桃国产精品网| 丝袜人妻中文字幕| 国产成人啪精品午夜网站| 欧美日韩国产亚洲二区| 午夜a级毛片| 国产精华一区二区三区| 无限看片的www在线观看| 日韩 欧美 亚洲 中文字幕| 性色avwww在线观看| 日韩大尺度精品在线看网址| 国产精品久久久av美女十八| cao死你这个sao货| 国内精品久久久久精免费| 国产三级中文精品| 又大又爽又粗| 无限看片的www在线观看| 九九久久精品国产亚洲av麻豆 | 中文字幕久久专区| 午夜福利18| a级毛片在线看网站| 久久草成人影院| x7x7x7水蜜桃| 美女免费视频网站| 国产一区二区在线观看日韩 | 两性午夜刺激爽爽歪歪视频在线观看| 欧美不卡视频在线免费观看| 亚洲色图av天堂| 身体一侧抽搐| 老司机福利观看| 天堂影院成人在线观看| 别揉我奶头~嗯~啊~动态视频| 亚洲成人久久爱视频| 成年免费大片在线观看| 一级毛片精品| 国产一级毛片七仙女欲春2| 久久国产乱子伦精品免费另类| 成人特级av手机在线观看| 久久中文字幕人妻熟女| 亚洲精品中文字幕一二三四区| 亚洲国产色片| 婷婷丁香在线五月| 午夜精品一区二区三区免费看| av福利片在线观看| 巨乳人妻的诱惑在线观看| 欧美黑人巨大hd| 午夜福利成人在线免费观看| 成人永久免费在线观看视频| 免费看a级黄色片| 九九热线精品视视频播放| 麻豆成人午夜福利视频| 久久久久久久久免费视频了| 国产亚洲精品久久久久久毛片| 久久这里只有精品中国| 夜夜爽天天搞| 法律面前人人平等表现在哪些方面| 岛国在线观看网站| 男女做爰动态图高潮gif福利片| 国产成人精品久久二区二区91| 亚洲专区中文字幕在线| 午夜福利高清视频| 精华霜和精华液先用哪个| 欧美日韩瑟瑟在线播放| 日本黄大片高清| 久久久成人免费电影| av视频在线观看入口| 99久国产av精品| 成人永久免费在线观看视频| 久久久久亚洲av毛片大全| 久久久久久大精品| 女警被强在线播放| 可以在线观看毛片的网站| 亚洲一区二区三区色噜噜| 十八禁网站免费在线| 成年人黄色毛片网站| 亚洲av成人精品一区久久| 欧美日韩黄片免| 亚洲国产欧洲综合997久久,| 男人和女人高潮做爰伦理| 中文字幕久久专区| 日本免费一区二区三区高清不卡| or卡值多少钱| 久久久久国产一级毛片高清牌| 国产精品99久久99久久久不卡| 国内揄拍国产精品人妻在线| 美女高潮的动态| 国产午夜福利久久久久久| 观看美女的网站| 亚洲人成网站高清观看| 九九久久精品国产亚洲av麻豆 | 国产熟女xx| 国产真人三级小视频在线观看| 国产成人精品无人区| 国内精品久久久久久久电影| 国产成人啪精品午夜网站| 亚洲av片天天在线观看| 亚洲成人久久性| 亚洲美女黄片视频| 国产一区二区在线av高清观看| 99riav亚洲国产免费| 国产高清videossex| 欧美乱色亚洲激情| 黄色 视频免费看| 亚洲精品色激情综合| 精品欧美国产一区二区三| 夜夜躁狠狠躁天天躁| 两个人的视频大全免费| 欧美性猛交黑人性爽| 97超级碰碰碰精品色视频在线观看| 国产精品99久久久久久久久| 91av网一区二区| 中国美女看黄片| 久久人妻av系列| 人妻夜夜爽99麻豆av| 国产三级黄色录像| 99久久综合精品五月天人人| 欧美另类亚洲清纯唯美| 在线看三级毛片| 欧美激情久久久久久爽电影| 九九久久精品国产亚洲av麻豆 | 色尼玛亚洲综合影院| 亚洲 欧美 日韩 在线 免费| 床上黄色一级片| 国产精品亚洲av一区麻豆| 网址你懂的国产日韩在线| 黄片小视频在线播放| 成年免费大片在线观看| 在线a可以看的网站| 一个人免费在线观看的高清视频| 精品99又大又爽又粗少妇毛片 | 色播亚洲综合网| 国产aⅴ精品一区二区三区波| 国产乱人视频| а√天堂www在线а√下载| 免费看日本二区| 国产精品久久久久久久电影 | 色播亚洲综合网| 国内精品久久久久精免费| 国产av在哪里看| 91久久精品国产一区二区成人 | 久久久久精品国产欧美久久久| 精品一区二区三区视频在线观看免费| 久久精品国产清高在天天线| 真人一进一出gif抽搐免费| 一卡2卡三卡四卡精品乱码亚洲| 亚洲五月婷婷丁香| 国产人伦9x9x在线观看| av天堂中文字幕网| 在线永久观看黄色视频| 日本 欧美在线| 欧美大码av| 两个人的视频大全免费| 久久久水蜜桃国产精品网| 国产欧美日韩一区二区精品| 一级毛片精品| 99国产极品粉嫩在线观看| 亚洲av第一区精品v没综合| 国产久久久一区二区三区| 999久久久精品免费观看国产| 国产高清有码在线观看视频| 精品久久久久久久久久久久久| 亚洲成人久久性| 亚洲欧美日韩东京热| 免费人成视频x8x8入口观看| 麻豆一二三区av精品| 国产高清视频在线观看网站| 天堂影院成人在线观看| 免费av毛片视频| 午夜福利成人在线免费观看| 国产一区在线观看成人免费| 老司机福利观看| 亚洲成人精品中文字幕电影| 欧美成狂野欧美在线观看| 一级毛片精品| 国产成人福利小说| 日本在线视频免费播放| 久久精品人妻少妇| 成年人黄色毛片网站| 黑人巨大精品欧美一区二区mp4| 两个人视频免费观看高清| 中文资源天堂在线| 视频区欧美日本亚洲| 午夜精品一区二区三区免费看| 宅男免费午夜| 一本精品99久久精品77| 精品国产美女av久久久久小说| 欧美日韩亚洲国产一区二区在线观看| 亚洲成人中文字幕在线播放| 老司机福利观看| 在线视频色国产色| 女人被狂操c到高潮| 国产av在哪里看| 午夜激情欧美在线| 男人舔奶头视频| 日韩有码中文字幕| 男人舔女人的私密视频| 中文字幕精品亚洲无线码一区| 身体一侧抽搐| 麻豆成人午夜福利视频| 18禁观看日本| 黄色片一级片一级黄色片| 999精品在线视频| 毛片女人毛片| 国产一级毛片七仙女欲春2| 桃红色精品国产亚洲av| 精品国产超薄肉色丝袜足j| 久久久久九九精品影院| 欧美日韩综合久久久久久 | 色尼玛亚洲综合影院| 男女下面进入的视频免费午夜| 99久久综合精品五月天人人| 在线观看一区二区三区| 老司机午夜福利在线观看视频| 久久久国产欧美日韩av| 欧美中文日本在线观看视频| 国产一区在线观看成人免费| 亚洲国产精品久久男人天堂| 99久久精品热视频| 制服人妻中文乱码| 岛国视频午夜一区免费看| 观看免费一级毛片| 国产精品一区二区三区四区久久| 99热精品在线国产| 国产精品日韩av在线免费观看| 国产欧美日韩精品一区二区| 精品久久久久久久毛片微露脸| 久久久久久久久中文| 欧美性猛交黑人性爽| 日日摸夜夜添夜夜添小说| 国产成人福利小说| 在线国产一区二区在线| 天天添夜夜摸| 亚洲va日本ⅴa欧美va伊人久久| 一夜夜www| 亚洲va日本ⅴa欧美va伊人久久| 男女之事视频高清在线观看| 老熟妇乱子伦视频在线观看| 丝袜人妻中文字幕| 三级国产精品欧美在线观看 | 日韩成人在线观看一区二区三区| 亚洲欧美精品综合久久99| 五月伊人婷婷丁香| 国产激情久久老熟女| 亚洲乱码一区二区免费版| 香蕉国产在线看| 国产黄片美女视频| 视频区欧美日本亚洲| 亚洲人成网站高清观看| avwww免费| 日本黄色片子视频| 18禁黄网站禁片免费观看直播| 欧美成人免费av一区二区三区| 亚洲国产看品久久| 色尼玛亚洲综合影院| 午夜免费观看网址| 国产探花在线观看一区二区| 九九热线精品视视频播放| 亚洲午夜理论影院| 性色av乱码一区二区三区2| 欧美精品啪啪一区二区三区| 欧美xxxx黑人xx丫x性爽| 一二三四在线观看免费中文在| www.www免费av| 九九在线视频观看精品| 久久久色成人| 国产乱人视频| 少妇的丰满在线观看| 日韩 欧美 亚洲 中文字幕| 欧美中文综合在线视频| 美女黄网站色视频| 可以在线观看毛片的网站| 久久久久久大精品| 亚洲va日本ⅴa欧美va伊人久久| 欧美激情在线99| 在线a可以看的网站| 国产亚洲av嫩草精品影院| 中文亚洲av片在线观看爽| 国产成人精品无人区| 久久精品亚洲精品国产色婷小说| 狠狠狠狠99中文字幕| 精品福利观看| 午夜精品在线福利| 此物有八面人人有两片| 国产单亲对白刺激| 国产蜜桃级精品一区二区三区| 两个人看的免费小视频| 亚洲av日韩精品久久久久久密| 久久精品国产综合久久久| 香蕉丝袜av| 国产精品国产高清国产av| 中亚洲国语对白在线视频| 日本黄色视频三级网站网址| 两性夫妻黄色片| 三级男女做爰猛烈吃奶摸视频| 日本a在线网址| 午夜精品久久久久久毛片777| 久久久色成人| 国产精品亚洲美女久久久| 99精品欧美一区二区三区四区| 中文字幕最新亚洲高清| 国产精品香港三级国产av潘金莲| 青草久久国产| 少妇熟女aⅴ在线视频| 丰满人妻一区二区三区视频av | 亚洲精品美女久久av网站| 级片在线观看| 亚洲 欧美 日韩 在线 免费| 日韩精品中文字幕看吧| 五月玫瑰六月丁香| 法律面前人人平等表现在哪些方面| 欧美又色又爽又黄视频| 一本一本综合久久| 国产视频一区二区在线看| 国产成人精品无人区| 亚洲一区二区三区不卡视频| 天堂动漫精品| 成人18禁在线播放| 19禁男女啪啪无遮挡网站| 久久久久免费精品人妻一区二区| 欧美激情在线99| 中文亚洲av片在线观看爽| 亚洲人成电影免费在线| 午夜福利18| 久久伊人香网站| 天堂动漫精品| 欧美日本视频| 免费搜索国产男女视频| 1000部很黄的大片| 少妇的丰满在线观看| 丰满的人妻完整版| 国产激情欧美一区二区| а√天堂www在线а√下载| 九九在线视频观看精品| 午夜激情欧美在线| 一区福利在线观看| 午夜精品一区二区三区免费看| 在线免费观看的www视频| 亚洲天堂国产精品一区在线| 亚洲国产中文字幕在线视频| 日韩精品青青久久久久久| 成年人黄色毛片网站| 老司机在亚洲福利影院| 噜噜噜噜噜久久久久久91| 国产探花在线观看一区二区| 亚洲片人在线观看| 成人鲁丝片一二三区免费| 国产高清视频在线播放一区| 久久久久九九精品影院| 欧美日韩综合久久久久久 | 午夜福利免费观看在线| 一级毛片精品| 床上黄色一级片| 中文字幕久久专区| 亚洲精品美女久久久久99蜜臀| 制服人妻中文乱码| 国产精品免费一区二区三区在线| 国产高清videossex| 久久亚洲精品不卡| 欧美日韩亚洲国产一区二区在线观看| 精华霜和精华液先用哪个| 免费看日本二区| 一级a爱片免费观看的视频| 久久久久国产一级毛片高清牌| 91av网一区二区| 99热这里只有精品一区 | 国产精品美女特级片免费视频播放器 | 久久精品综合一区二区三区| 手机成人av网站| 精品欧美国产一区二区三| 久久国产乱子伦精品免费另类| 中文在线观看免费www的网站| 欧美性猛交黑人性爽| 免费无遮挡裸体视频| 别揉我奶头~嗯~啊~动态视频| 亚洲成人中文字幕在线播放| 人妻丰满熟妇av一区二区三区| 少妇裸体淫交视频免费看高清| 日韩中文字幕欧美一区二区| 在线看三级毛片| 国产欧美日韩一区二区三| 国产激情偷乱视频一区二区| 男女视频在线观看网站免费| 亚洲 国产 在线| 欧洲精品卡2卡3卡4卡5卡区| 国产三级黄色录像| 国产黄片美女视频| 午夜激情欧美在线| 国产免费av片在线观看野外av| 中文字幕高清在线视频| 久久亚洲真实| 成人国产一区最新在线观看| 亚洲国产精品久久男人天堂| 波多野结衣高清作品| 亚洲av中文字字幕乱码综合| 久久久久久大精品| 亚洲国产日韩欧美精品在线观看 | 亚洲精品美女久久av网站| 麻豆一二三区av精品| 久久久久久久午夜电影| 精品一区二区三区av网在线观看| 色吧在线观看| 久久国产精品人妻蜜桃| 五月玫瑰六月丁香| 丁香六月欧美| 视频区欧美日本亚洲| 久久久久免费精品人妻一区二区| 在线观看美女被高潮喷水网站 | 国产精品日韩av在线免费观看| 成人精品一区二区免费| 精品久久久久久久毛片微露脸| 搡老熟女国产l中国老女人| 国产精品女同一区二区软件 | 美女免费视频网站| 中文在线观看免费www的网站| www.999成人在线观看| 小蜜桃在线观看免费完整版高清| 国产精品久久视频播放| 精品人妻1区二区| 国产aⅴ精品一区二区三区波| 国内毛片毛片毛片毛片毛片| 欧美三级亚洲精品| 婷婷丁香在线五月| 久久久久久久午夜电影| 日本成人三级电影网站| 成人鲁丝片一二三区免费| 国产高清视频在线观看网站| 亚洲 欧美一区二区三区| 免费大片18禁| 一个人看的www免费观看视频| 日韩高清综合在线| 免费在线观看影片大全网站| 中文字幕精品亚洲无线码一区| 丁香欧美五月| 亚洲av电影不卡..在线观看| 国产91精品成人一区二区三区| 国产高清三级在线| 亚洲精品粉嫩美女一区| 黑人操中国人逼视频| 性色av乱码一区二区三区2| 国产乱人伦免费视频| 国产欧美日韩一区二区精品| 好男人电影高清在线观看| 成年女人毛片免费观看观看9| 国产精品香港三级国产av潘金莲| 国产aⅴ精品一区二区三区波| 亚洲精品粉嫩美女一区| 91九色精品人成在线观看| 天堂动漫精品| 国产精品电影一区二区三区| 综合色av麻豆| 亚洲午夜精品一区,二区,三区| 亚洲色图 男人天堂 中文字幕| 99国产极品粉嫩在线观看| 午夜福利成人在线免费观看| 精华霜和精华液先用哪个| 欧美另类亚洲清纯唯美| 丰满人妻一区二区三区视频av | 精品一区二区三区四区五区乱码| 国产精品久久久av美女十八| 亚洲第一电影网av| 老汉色av国产亚洲站长工具| 看片在线看免费视频| 亚洲七黄色美女视频| 久久香蕉精品热| 99久久国产精品久久久| 99re在线观看精品视频| 真实男女啪啪啪动态图| 国产一区二区三区在线臀色熟女| 亚洲自偷自拍图片 自拍| 中亚洲国语对白在线视频| 免费在线观看影片大全网站| 色视频www国产| 婷婷六月久久综合丁香| 国产探花在线观看一区二区| 国内毛片毛片毛片毛片毛片| 在线观看66精品国产| 久99久视频精品免费| 啦啦啦免费观看视频1|