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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

s3c6410 uboot代码分析《一》

發布時間:2025/5/22 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 s3c6410 uboot代码分析《一》 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?來源:http://hi.baidu.com/__eabi/blog/item/be67533797bc73f014cecb49.html

?

以下用以記錄uboot代碼的分析過程,目標是s3c6410,如有錯誤,歡迎指正。

強調,內容與三星原廠提供的uboot-1.1.6有更改的地方,因為外接外設的區別,特別是nand_flash、外接網卡芯片和LCD芯片

以下純代碼情景分析,請結合uboot的功能結構圖和內存分布圖查看代碼,這樣會更加容易理解。

s3c-u-boot-1.1.6源代碼可以在三星下面的網站獲得,但前提是你有官方的email。

還是百度google搜一下吧,當然我這也是有的哦。

http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=835&partnum=S3C6410

?



?

??????????????????????????????????????????????? 功能結構圖(上圖)???????????????????????????????????????????????uboot內存分布圖(上圖)
?

?

1.start.s代碼分析(第一階段)

/*?以下是具有arm特色的異常向量表,為中斷異常準備 */

--------------------

.globl _start
_start: b?reset
?ldr?pc, _undefined_instruction
?ldr?pc, _software_interrupt
?ldr?pc, _prefetch_abort
?ldr?pc, _data_abort
?ldr?pc, _not_used
?ldr?pc, _irq
?ldr?pc, _fiq

_undefined_instruction:
?.word undefined_instruction
_software_interrupt:
?.word software_interrupt
_prefetch_abort:
?.word prefetch_abort
_data_abort:
?.word data_abort
_not_used:
?.word not_used
_irq:
?.word irq
_fiq:
?.word fiq
_pad:
?.word 0x12345678 /* now 16*4=64 */
.global _end_vect
_end_vect:

?.balignl 16,0xdeadbeef

--------------------

?

/*?當發生中斷異常時,pc會跳轉到.word的后面地址處 處理異常,

?? undefined異常由arm核譯碼單元檢測,并觸發未定義指令異常請求,硬件設置pc的值為0x4,強制程序從內存0x4地址執行指令;

?? 0x8存放軟件中斷處理指令,arm中使用swi指令時觸發軟件中斷,硬件設置PC的值為0x8,同時進入系統模式,多用在系統庫的編寫;

?? prefetch異常,預取指中止異常,導致正在取的指令無法正常取出,這里需要注意流水線造成的pc值?;

?? data中止,無法獲取數據,產生的原因有可能是內存未準備好、內存無讀或寫權限等一些原因產生的異常;

?? 0x14暫時未使用;

?? 0x18提供系統硬件中斷跳轉接口,一般我們的處理器都會引出很多的外部中斷線,在這里能做的就是判斷系統中斷線產生的中斷,注冊中斷,初始化中斷,調用中斷函數等等;

?? 0x1c地址為_fiq快速中斷,一個系統在中斷流水線上可能產生很多中斷,但快中斷只會有一個

*/

--------------------

_undefined_instruction:
?.word undefined_instruction
_software_interrupt:
?.word software_interrupt
_prefetch_abort:
?.word prefetch_abort
_data_abort:
?.word data_abort
_not_used:
?.word not_used
_irq:
?.word irq
_fiq:
?.word fiq
_pad:
?.word 0x12345678 /* now 16*4=64 */
.global _end_vect
_end_vect:

?.balignl 16,0xdeadbeef

--------------------

?

/*?

?? _TEXT_BASE標號所代表的是uboot代碼的運行地址,對于s3c6410

?? 系統來說,如果nand flash啟動方式,系統會把0xc000000里面前4KB的內容映射到引導鏡像區,即0x0地址,但是我們需要把

?? uboot代碼放到我們的SDRAM,原因是我們代碼里面需要對變量做更改并且增加代碼執行效率等

?? 下面代碼的含義是定義uboot程序執行的運行地址,值為0xc7e00000,.word后面的值TEXT_BASE在編譯的時候,

?? 通過向編譯器傳遞參數獲得,-DTEXT_BASE方式向編譯器傳遞宏參,在編譯的時候可以注意下編譯的時候都會指定它的值,值得定義在

?? config.mk中,Makefile會包含它。

*/

--------------------

_TEXT_BASE:
?.word?TEXT_BASE

--------------------

?

?

/*?

在uboot里面會開啟MMU,下面是在MMU開啟前uboot在內存存放的真實物理地址,值為0x57e00000。強調一下,我們做的開發板的SDRAM在DMC1上,即訪問物理內存的實際物理地址從0x50000000開始,SDRAM的大小為256M,正好是一個DMC1,所以內存的訪問地址就是0x50000000-0x6FFFFFFF之間了。

*/

--------------------

_TEXT_PHY_BASE:
?.word?CFG_PHY_UBOOT_BASE

--------------------

?

?

/*?

?? 這個不解釋也是可以的,但是還是要解釋。很多人對_start的值有疑惑,認為是0x0,因為看到_start的標號在代碼段最開始處,其實是錯誤的,匯編代碼里面的標號是和編譯時指定的運行地址有關系的。我們在編譯程序的時候會通過-DTEXT_BASE=0xc7e00000參數告訴編譯器我們程序將會運行在0xc7e00000地址,那么自然編譯器會認為代碼開始的時候就運行在這個地址,那么_start的值自然就是0xc7e00000了。總結之,標號的值與編譯時指定的程序地址有關系,而與程序實際存放在內存出的位置無關。?小心使用哦。特別在使用一些偽指令的時候

*/

--------------------

.globl _armboot_start
_armboot_start:
?.word _start

--------------------

?

?

/*?

?? 下面的代碼__bss_start的值是在u-boot.lds腳本里面定義的,雖然沒給值,但是你要知道文件的大小和位置是由

?? 編譯器指定的,那么還需要我們告訴它值嗎?所以沒值勝有值啦,由編譯時編譯器決定它們的值

?*/

--------------------

.globl _bss_start
_bss_start:
?.word __bss_start

.globl _bss_end
_bss_end:
?.word _end

--------------------

?

?

/*?

?? uboot開始執行的第二條代碼處即在這里了,下面的代碼使得cpu的模式為管理模式,如果想使得為cpu為管理模式,需要保證cpsr寄存

?? 器的最低5位為10011,下面是把0xd3的值賦值給cpsr,0xd3即1101 0011,最高兩位置1的意思為關閉中斷和快中斷,這是為了防止代碼

???正在執行時,產生外部中斷,導致程序跳轉到異常向量表而無法正常按順序執行。5位為0的意思是cpu的狀態為arm狀態,如果是1則cpu進入thumb態,thumb態處理16位指令代碼和數據。?

*/

--------------------

reset:

?mrs?r0,cpsr
?bic?r0,r0,#0x1f
?orr?r0,r0,#0xd3
?msr?cpsr,r0

--------------------

?

/* 以下標號所在處的代碼比較多,將做逐步分析,這段代碼主要的工作也就是改了一些硬件寄存器和內存初始化工作 */

--------------------

cpu_init_crit:

--------------------

?/*
??指令的含義為刷新指令和數據緩存。mcr的意思是把arm寄存器的值賦值給coprocesser寄存器,拿第一條指令來說,

? p15代表協處理器,0為一定的值,指令中0b0000四位來表示,現在無具體作用,如果不是0則結果未知,后面的r0是即將寫入

??c7目標寄存器中的值,后面還有個c7所代表的意思為額外操作碼,如果不是c0,則表示的是同一個寄存器的不同物理寄存器,因為

??同一個寄存器的名字并不代碼通一個物理內存,我們在學rpsr的時候應該知道這點,最后的0提供附加信息,用于區分同一寄存器的

?不同物理寄存器,如無附加信息,請保持為0值,否則結果不可預測

?下面三行代碼不難看出,c7、c8的值被清為0,為什么要清為零呢,你需要去看arm1176jzf-s芯片手冊了,其中是有說明的,不再累述,

?arm1176jzf-sarm核芯片手冊下載地址httop://www.arm.com,也可以與本人聯系獲取。
? */

--------------------
?mov?r0, #0
?mcr?p15, 0, r0, c7, c7, 0?/* flush v3/v4 cache */
?mcr?p15, 0, r0, c8, c7, 0?/* flush v4 TLB */

--------------------

?/*
??實在不想解釋這段,因為以前看過芯片手冊的解釋,且不止一遍,對于這里面要更改的內容就是不能全部記下來,和工作有關了,

? 不能全心搞這塊內容,最多2個月左右的時間能回來回顧一下了??傊€是去查arm11核芯片手冊,因為以下改的內容是協處理器

? c1,那么你就該去查c1是用來干什么的。查看得知,是控制寄存器,查看手冊是online books12.2.2 Primary register allocation

? 一節,其中13,9,8位為?V、R、S:V位是對高端異常向量表的支持,如果選擇0異常向量表為0x00000000-0x0000001c,如果選擇

?1異常向量表就是FFFF0000-FFFF001c;R位用于ROM保護的,具體的還要與c5里面的配合,這都是MMU惹的禍,很煩,但是現在

? 我們還沒有講到MMU,所以為什么這樣做,也必須到講到MMU的時候才見分曉了,S在這里面的意思也是用于系統保護的,和MMU

? 又是有很大的關系,好吧,后面會找MMU算賬的,這里就先不深入了,接下來再分析下下面的指令含義

??bic?r0, r0, #0x00000087?@ clear bits 7, 2:0(B--- -CAM) 的B位為0表示支持小little-endian,1表示支持big-endian格式的系統內存

? CAM為第三位,M為0代表禁止MMU,反之打開,A代表地址對齊檢查,0代表禁止,C代表指令數據cache控制,0為禁止

? orr?r0, r0, #0x00000002?@ set bit 2 (A) Align 這段指令又比較犯賤了,打開地址對齊檢查了,這是應該的O(∩_∩)O~,后面又

??設置12位為1,含義是如果數據cache和指令cache是分開的話,這里面置1的含義將會打開指令緩存

*/

--------------------
?mrc?p15, 0, r0, c1, c0, 0
?bic?r0, r0, #0x00002300?@ clear bits 13, 9:8 (--V- --RS)
?bic?r0, r0, #0x00000087?@ clear bits 7, 2:0 (B--- -CAM)
?orr?r0, r0, #0x00000002?@ set bit 2 (A) Align
?orr?r0, r0, #0x00001000?@ set bit 12 (I) I-Cache
?mcr?p15, 0, r0, c1, c0, 0

--------------------

?

/*?

?? 以下代碼的作用是為了給256M的內存在MMU開啟的時候把0x70000000作為重映射的基地址

?? c15協處理器寄存器在s3c6410上有特殊作用,它是外部內存端口映射寄存器,32位,在開關MMU的時候發生作用,且優先級最高

?? 這里的0x70000000為外部端口的基地址,0x13的二進制為0x10011,0x10011的意思為256M,代表映射的

?? 大小為256M,0x10010為128M。假如你沒開MMU,PHY和Peri port映射的地址將相同。通過下面的內容后,我們知道我們原來uboot

?? 代碼是放置到0x57e00000的,現在便只能通過0x57e00000+0x70000000虛擬地址來訪問uboot起始地址了。

?? 使用C15的方法是:

?? 1.Opcode_1 set to 0

?? 2.CRn set to c15

?? 3.CRm set to c2

?? 4.Opcode_2 set to 4

?? 還有問題請參考arm1176jzfs芯片手冊,如下圖:

?*/

--------------------

?/* Peri port setup */
?ldr?r0, =0x70000000
?orr?r0, r0, #0x13
?mcr?p15,0,r0,c15,c2,4?????? @ 256M(0x70000000-0x7fffffff)

--------------------

?

?

/*?

?? 下面是一條跳轉指令,代碼這里不貼,但是其中的代碼很重要,在lowlevel.S中實現比如說點亮LED燈、關閉watchdog、關閉中斷、系統

???時鐘初始、nand flash初始化、內存控制器初始化。不過說實在的,去仔細分析這些初始化的過程,對于你對如何控制硬件有很大的幫

? ?助,?對于這個函數,所要說的東西太多,會在后面的文章中單獨分析它,現在先知道功能就好,沒有它代碼無法啟動。

*/

--------------------

bl?lowlevel_init

--------------------

?

/*?跳轉出來以后,繼續執行下面的代碼,下面的代碼是判斷程序是否已經在ram中了,在的話就不拷貝,直接跳轉到after_copy了,否則

?? 繼續執行下面的代碼?*/

--------------------

?ldr?r0, =0xff000fff
?bic?r1, pc, r0??/* r0 <- current base addr of code */
?ldr?r2, _TEXT_PHY_BASE??/* r1 <- original base addr in ram */
?bic?r2, r2, r0??/* r0 <- current base addr of code */
?cmp???? r1, r2????????????????? /* compare r0, r1????????????????? */
?beq???? after_copy??/* r0 == r1 then skip flash copy?? */

--------------------

?

/*?

?? 下面代碼通過函數copy_from_nand函數把代碼拷貝到ram中。steppingstone只能拷貝4KB,我們需要把所有的代碼搬運到內存中哦

?? 我們知道s3c6410可以通過SD、onenand、nand啟動,但是我們這里做了簡化,先只從nand啟動,以后會再增加SD卡啟動

?? copy_from_nand代碼也在start.S中,做了修改以適合大頁訪問,如有需要請留言告知,將添加copy_from_nand代碼分析

*/

--------------------

#ifdef CONFIG_BOOT_NAND
?mov?r0, #0x1000
?bl?copy_from_nand
#endif

--------------------

?

/*?SD卡啟動方式,這個宏我沒有定義,先保留吧?*/

--------------------

#ifdef CONFIG_BOOT_MOVINAND
?ldr?sp, _TEXT_PHY_BASE
?bl?movi_bl2_copy
?b?after_copy
#endif

--------------------

?

/*?這里我啥都沒做*/

after_copy:

?

/*?

?? 打開MMU功能

?? 協處理器c3的作用是存儲的保護和控制,用在MMU中為內存的域訪問控制

?? c3為32位寄存器,每兩位為一個訪問控制特權,0x00代表沒有訪問權限,這時候訪問將失效;0x01為客戶類型,將根據

?? 地址變換條目中的訪問控制位決定是否允許特定內存訪問;0x10是保留的,暫時沒有使用,0x11為管理者權限,不考慮

?? 地址變換條目中的權限控制位,將不會訪問內存失效。

?? ldr?r5, =0x0000ffff
?? mcr?p15, 0, r5, c3, c0, 0,代碼的含義為設置高8個域無訪問權限,低8個域為管理者權限。

?? 接著下面通過mcr?p15, 0, r1, c2, c0, 0指令給c2賦值,c2用于保存頁表基地址。所謂頁表基地址即是虛實轉換的內存頁表的首地址。

?? 這里r1的值賦值給了c2,r1的值為0x57exxxxx,c2高14位是儲存頁表的基地址

?? 最后代碼很簡單,打開MMU。

*/

--------------------

#ifdef CONFIG_ENABLE_MMU
enable_mmu:
?/* enable domain access */
?ldr?r5, =0x0000ffff
?mcr?p15, 0, r5, c3, c0, 0??@ load domain access register

?/* Set the TTB register */
?ldr?r0, _mmu_table_base
?ldr?r1, =CFG_PHY_UBOOT_BASE
?ldr?r2, =0xfff00000
?bic?r0, r0, r2
?orr?r1, r0, r1
?mcr?p15, 0, r1, c2, c0, 0

?/* Enable the MMU */
mmu_on:
?mrc?p15, 0, r0, c1, c0, 0
?orr?r0, r0, #1???/* Set CR_M to enable MMU */
?mcr?p15, 0, r0, c1, c0, 0
?nop
?nop
?nop
?nop
#endif

--------------------

?

/*?

?? 堆棧初始化代碼,我們在這里定義了CONFIG_MEMORY_UPPER_CODE

?? sp的值為0xC7FFFFE8

*/

--------------------

skip_hw_init:
?/* Set up the stack????????? */
stack_setup:
#ifdef CONFIG_MEMORY_UPPER_CODE
?ldr?sp, =(CFG_UBOOT_BASE + CFG_UBOOT_SIZE - 0xc)
#else
?ldr?r0, _TEXT_BASE??/* upper 128 KiB: relocated uboot?? */
?sub?r0, r0, #CFG_MALLOC_LEN?/* malloc area????????????????????? */
?sub?r0, r0, #CFG_GBL_DATA_SIZE /* bdinfo??????????????????????? */
#ifdef CONFIG_USE_IRQ
?sub?r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
?sub?sp, r0, #12??/* leave 3 words for abort-stack??? */

#endif

--------------------

?

/*?清零BSS段內容為0 */

--------------------

clear_bss:
?ldr?r0, _bss_start??/* find start of bss segment??????? */
?ldr?r1, _bss_end??/* stop here??????????????????????? */
?mov ?r2, #0x00000000??/* clear??????????????????????????? */

clbss_l:
?str?r2, [r0]??/* clear loop...??????????????????? */
?add?r0, r0, #4
?cmp?r0, r1
?ble?clbss_l

--------------------

?

/*?跳轉到uboot代碼的第二個階段,第二階段基本上都是用C實現的,幸好前面sp的值已經設置好了 */

--------------------

?ldr?pc, _start_armboot

_start_armboot:
?.word start_armboot

--------------------

?

2.第二階段代碼分析(代碼在lib_arm目錄下的board.c里面,start_armboot函數)

?

1)初始化CPU及外圍硬件

?init_fnc_t **init_fnc_ptr;
?char *s;
#ifndef CFG_NO_FLASH
?ulong size;
#endif

#if defined(CONFIG_VFD) || defined(CONFIG_LCD)
?unsigned long addr;
#endif

#if defined(CONFIG_BOOT_MOVINAND)
?uint *magic = (uint *) (PHYS_SDRAM_1);
#endif

?/* Pointer is writable since we allocated a register for it */
#ifdef CONFIG_MEMORY_UPPER_CODE /* by scsuh */
?ulong gd_base;

?gd_base = CFG_UBOOT_BASE + CFG_UBOOT_SIZE - CFG_MALLOC_LEN - CFG_STACK_SIZE - sizeof(gd_t);
#ifdef CONFIG_USE_IRQ
?gd_base -= (CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ);
#endif
?gd = (gd_t*)gd_base;
#else
?gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));
#endif

?/* compiler optimization barrier needed for GCC >= 3.4 */
?__asm__ __volatile__("": : :"memory");

?memset ((void*)gd, 0, sizeof (gd_t));
?gd->bd = (bd_t*)((char*)gd - sizeof(bd_t));
?memset (gd->bd, 0, sizeof (bd_t));

?monitor_flash_len = _bss_start - _armboot_start;

?for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
??if ((*init_fnc_ptr)() != 0) {
???hang ();
??}
?}

解釋:定義二級指針init_fnc_ptr指向一個存放函數指針的數組,init_fnc_ptr是typedef int (init_fnc_t) (void)類型,即函數類型,init_fnc_ptr可以指向一個沒有參數,返回值為int型的函數指針的地址(很繞哦,呵呵),我們看上面代碼最后的for循環init_fnc_ptr = init_sequence,if中會使用(*init_fnc_ptr)()方式調用init_sequence中的函數(函數名可以看為一個地址),如果返回值不是0,則執行hang報錯。

???????因為我們定義了CONFIG_MEMORY_UPPER_CODE宏,所以gd = (gd_t*)gd_base,由gd_base的值我們知道,malloc區域、stack區域、bdinfo數據在內存的位置是放在upper of uboot。

?????? __asm__ __volatile__("": : :"memory");這條是內嵌匯編,請查看另一篇介紹內嵌匯編的博文。

?????? gd->bd指針指向數據類型為bd_t的結構體,bd_t結構體記錄開發板的參數,例如串口波特率、ip地址、機器類型、啟動參數、環境變量位置等。

?????? 下面分析for循環執行的函數:

??????? cpu_init:因為我們沒有定義CONFIG_USE_IRQ,所以這個函數直接返回0

??????? board_init:

???????函數內首先執行dm9000_pre_init()函數,因為我們把DM9000AEP網卡映射到內存的Xm0CSn[1]上,所以我們要設置訪問CSn[1]的方式,SROM_BW_REG &= ~(0xf << 4);SROM_BW_REG |= (1<<7) | (1<<6) | (1<<4);兩條代碼的含義為設置0x70000000控制器的CSn[1]訪問方式為nBE enable、wait enable、16位數據總線訪問模式,SROM_BC1_REG = ((DM9000_Tacs<<28)+(DM9000_Tcos<<24)+(DM9000_Tacc<<16)+(DM9000_Tcoh<<12)+(DM9000_Tah<<8)+(DM9000_Tacp<<4)+(DM9000_PMC));這句話的意思是設置訪問的時序,s3c6410 datasheet中已經給出了時序代碼,歡迎查看哦。因為我的zc6410開發箱接了4.3的TFT LCD,所以在代碼中增加了對LCD的配置工作,代碼如下:

?writel(readl(MIFPCON) & (~(1 << 3)), MIFPCON);

?writel(readl(MIFPCON) & (~(3 << 0)) | 0x1, SPCON);

?writel(0xaaaaaaaa, GPICON);
?writel(0xaaaaaa, GPJCON);

?????? 以上四行代碼分別對MIFPCON、SPCON、GPICON、GPJCON四個寄存器賦值。為什么賦值?查看s3c6410 datasheet手冊14.5.1節,給出了DisplayController的引腳配置,MIFPCON的[3]位設置為0(normal mode)instead of “1”(by-pass mode),SPCON[1:0]位的值設置為“01”(use RGB I/F Style)or “00” to use Host I/F Style,我們設置的是01。GPICON、GPJCON賦值的原因請看下面圖:

?

???????

第一張圖是LCD控制器接口連接原理圖,后面的是圖是芯片手冊,通過兩個圖我們就知道為什么要寫后面兩行代碼了吧。

?????? 好了,73-74行一個是記錄機器類型,一個是指定向內核傳參的地址。

?????? interrupt_init:

?????? 上圖,我發現注釋很給力,我想我就不畫蛇添足了。不過做一下部分解釋

?????? 184行:值0x0101的含義是設置Prescaler0、1、2、3的值,請看下圖真相(datasheet)??????

?

?????? env_init:如下圖,因為沒有定義ENV_IS_EMBEDDED,所有只是執行了142-143,把環境變量的首地址賦值給gd->env_addr。

?????? init_baudrate:

?????? 139行使用getenv_r函數在default_environment里找baudrate關鍵字,找到后把“=”號后面的值賦值給gd->baudrate,然后

??????? 再放到gd->bd->bi_baudrate里面。simple_strtoul是uboot實現的字符串轉UL類型。

?????? serial_init:什么都沒做,保持默認的8位數據、無奇偶校驗、1 停止位、無開始位。

?????? console_init_f:gd->have_console = 1就這一句話

?????? display_banner:串口打印uboot信息,就是uboot啟動的時候我們看到的信息,這里使用的是printf,但是我們追進去后,關注的函數

?????? 應該是serial_putc,它是真實向串口輸出一個字符的函數,這個函數會遞歸調用,應該說自己調用自己,遇到\n結束。

?????? print_cpuinfo:打印CPU信息,CPU型號和速度 CPU:...

?????? checkboard:打印開發板信息 BOARD:...

?????? dram_init:

?????? 記錄dram的起始地址,0x50000000,size為256M(me的)

?????? display_dram_config:因為沒有定義DEBUG,所以打印DRAM:256M

?

2)配置malloc空間

????? (因為CONFIG_LCD、CONFIG_VFD沒有定義,所以跳過這一部分)

?????? 我們定義了UPPER_CODE,所以執行第一個mem_malloc_init。這個函數的作用是記錄堆??臻g的起始地址、結束地址、當前地址。

?

?

3)啟動設備初始化(SD、NAND、ONENAND)

?????? 系統一開始嘗試從SD卡啟動,因為本篇介紹的是NANDFLASH啟動方式,所以SD卡部分暫不分析,會單獨開辟章節介紹s3c6410

?????? 的SD卡啟動方式(包括windows下SD flasher應用程序的編寫、SD卡硬件電路分析、SD寄存器操作和啟動流程)。

?????? 下面分析nand啟動方式,我們在自己的頭文件里定義了CONFIG_COMMANDS和CFG_CMD_NAND,所以會執行nand_init函數

???????

?????? 分析代碼中的368行nand_init函數,我們知道在uboot啟動起來之后,會顯示NAND:? 512M(你nandflash的大小),所以不難想象,

?????? nand_init會向終端打印NAND大小的信息,以下是nand_init的實現:

?????? nand_init函數的實現體在drivers/nand/nand.c中,nand_init函數不僅會打印出nandflash的大小,還會初始化描述nand的結構體

?????? nand_info以及代表“nand”的設備結構體nand_chip,這兩個結構體前者是mtd層對設備的抽象和對塊設備的接口統一,后者是

?????? 設備的實體,所有對設備的讀寫控制操作都最終通過這個結構體完成,下面我們開始分析nand_init函數:

???????64~69行:從外表看,最后會執行size += nand_info[i].size,由此最起碼可以猜測到這個函數會計算出nand的大小。那么是怎樣計算出

?????? 來的呢,我們需要看nand_init_chip函數,注意,在進入這個函數之前,先看一下傳入的三個參數,前兩個參數我們已經介紹過,第三

?????? 個參數是nand的數據寄存器,訪問地址為0x70200010。nand_init_chip函數會根據我們傳入的參數,去查找對應的nand設備,并初

?????? 始化一些功能接口為以后對nand操作做準備,下面看圖:

?????? 47行:mtd->priv實現了mtd中間層對底層nand設備的接口,我們以后在訪問nand硬件時,通過mtd的priv成員可以快速找到我們的

?????? nand設備。

?????? 49行:nand成員中保存了讀寫nand數據的數據寄存器基地址,我們通過讀寫base_addr中的數據,實現對nand中數據的讀和寫,

?????? 后面的__iomem是個宏定義,這樣定義的#define __iomem,只定義并沒有給值,所以沒有任何功能意義,但是對于我們在看代碼

?????? 的時候,很容易能判斷出后面的變量是IO地址空間的寄存器地址。

?????? 50行:是對nand設備的初始化操作,我們進入函數體

?????? 820~823行:判斷是否是從nand_flash啟動。看s3c6410寄存器就會明白:

?????? 820行:NFCONF定義的宏,其實是取0x70200000地址里面的內容,那么如果我們把OM跳線設置為nand啟動,這個[31]

?????? 位的值就會為1,這樣的話NFCONF & 0x80000000的值就是1了,因而boot_nand的值為1;

?????? 825行:清除0x70200004的[16]位,關閉軟件鎖存,如果此位設置為1,則NFSBLK(0x70200020)到NFEBLK

?????(0x70200024)-1被開啟,除了這部分區域,寫或擦除命令是無效的,只有讀命令是有效的(NFSBLK和NFEBLK)為可編程

?????? 可編程開始和結束塊地址寄存器;

?????? 826~827行:我們在進入這個函數的時候就做過了;

?????? 828行:nand->cmd_ctrl = s3c_nand_hwcontrol,這個函數是用于向nand硬件發送命令的,比如發送00h,代表的是讀命令。

?????? 829行:nand->dev_ready = s3c_nand_device_ready,是用于判斷nand芯片處于忙/可讀狀態的。s3c_nand_device_ready

?????? 用一個循環去判斷NFSTAT(0x70000028)的最低位(RnB輸入引腳狀態),如果是1表示現在nand可讀,0代表正在忙不可讀

?????? 830行:bbt(bad block table)壞塊表,因為我們沒用到,所以s3c_nand_scan_bbt函數會直接返回;

?????? 我們沒有定義宏CFG_NAND_FLASH_BBT,所以nand->options??|= NAND_SKIP_BBTSCAN,后面宏的含義代表在初始化期間

?????? 將跳過壞塊掃描;

?????? 839行:CFG_NAND_HWECC需要我們自己定義,含義代表使用錯誤糾錯碼;

?????? 840行:代表使用NAND_FLASH模塊內部的ECC模塊產生糾錯碼;

?????? 841行:nand->ecc.hwctl??= s3c_nand_enable_hwecc,設置對ECC的控制,這個函數應該在產生ECC編碼前被調用。這個函數的

?????? 功能為確認SLC FLASH或是MLC FLASH,SLC代表single layer cell,MCL為multi-level cell,有關SLC和MLC的區別在容量、可

?????? 讀寫總次數、讀寫速度上,SLC的讀寫速度要快于MLC,但MCL的容量要比SLC大很多,因為1cell可以容納4bits,有興趣可以查閱

?????? 相關手冊。此函數還有一個功能為:1.初始化主區ECC×××/編碼器(向0x70200004的[5]位寫1)2.開啟主區ECC

???? (向0x70200004的[7]位寫0);

?????? 842行:nand->ecc.calculate?= s3c_nand_calculate_ecc,用于存儲產生的校驗糾錯碼;

?????? 843行:nand->ecc.correct?= s3c_nand_correct_data,用生成的ECC碼檢測是否有錯誤,沒有則返回,具體內容看函數說明就好;

?????? 845~849行:向nand發送4條命令,849行為等待設備準備好;

?????? 851~852行:將讀取到nand芯片的廠商信息和芯片ID編號;

?????? 854~859行:nand_flash_ids結構體保存了很多公司生產的nand芯片信息和編號,for循環將通過ID找到和我們板子匹配的NAND芯片;

?????? 再往下雖然代碼挺多的,但不用擔心,只會執行877行的nand->ecc.layout = &s3c_nand_oob_16,這是在定義oob信息;

?????? 以下是nand芯片可以處理的命令以及命令的含義(下面是三星K9F4G08U0A-PCB0芯片的命令集)

?????? 分析完board_nand_init函數后,我們繼續看nand_init_chip第52行,nand_scan函數:

???????

?????? 這個函數的主要功能就是2768行的nand_scan_ident函數,功能是填充mtd結構體,配置對nand的接口。這樣下次在訪問設備時,可

?????? 通過mtd層找到對應的底層設備,我們看下nand_scan_ident函數:

?????? 到此,我們不再往下追函數了,

?????? 2501行在設置mtd設備層的接口函數,

?????? 2504行nand_get_flash_type函數代碼比較多,主要的功能還是在獲得nand芯片的廠商信息和ID,并判斷是否支持,如果支持

?????? 為這個nand設備和mtd填充一些功能接口函數,

????? ?我們再來看nand_scan_ident函數的后面代碼,2512行是for循環,maxchips的值是nand_scan函數傳遞進來的1,所以我們最后

?????? 看到的i值為1,在2526行chip->numchips=1,mtd->size=512(我的nandflash型號是K9F4G08U0A-PCB0,大小512M,

?????? 我們在board_nand_init函數中已經在結構體nand_flash_ids中找到我們的nand型號,chipsize的值為512)。

?????? nand初始化分析完畢。。。

?

由于文章長度太長,以下分析部分放到s3c6410 uboot代碼分析二(下面是鏈接)

http://hi.baidu.com/__eabi/blog/item/bf06b6c14c13434b0eb345d9.html?timeStamp=1313056638500

4)環境變量初始化

5)網絡初始化

6)設備列表初始化

7)配置功能函數表

8)終端完全初始化

9)開中斷異常向量表

10)網卡芯片初始化

11)一些后續初始化

12)main_loop詳解

?

等有時間,會針對這些問題在新的文章中深入淺出說明以下問題:

1.硬件初始化的詳細過程,比如說nand_flash、serial(通過原理圖、datasheet、寄存器控制等說明)

2.網絡傳輸功能(將介紹DM9000網卡芯片的驅動程序)

3.命令交互(uboot中是如何添加命令的,如何增加自己的命令調用)

4.環境變量的存儲和調用,以及uboot代碼中的一些重要環境變量

敬請期待,

轉載于:https://blog.51cto.com/kane023/862490

總結

以上是生活随笔為你收集整理的s3c6410 uboot代码分析《一》的全部內容,希望文章能夠幫你解決所遇到的問題。

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

热re99久久精品国产66热 | 亚洲国产片色 | 97狠狠操 | 欧美在线视频一区二区三区 | 99免费在线视频观看 | 色综合久久88色综合天天免费 | 9999毛片| 在线久热 | 九七视频在线观看 | 亚洲国产大片 | 99r在线视频 | 国产伦理精品一区二区 | 91av视频在线观看免费 | 日本精品久久久一区二区三区 | 欧美性做爰猛烈叫床潮 | 欧美大片www | 久久国产精品99久久久久久进口 | 免费观看视频黄 | 91激情在线视频 | 在线观看激情av | 日韩在线观看视频网站 | 亚洲视频每日更新 | 国产剧情av在线播放 | 一区二区理论片 | 国产综合久久 | 最新中文字幕在线观看视频 | 国产女人40精品一区毛片视频 | 久久久久亚洲精品中文字幕 | 日本精品久久久久久 | 园产精品久久久久久久7电影 | 久久久精品国产一区二区 | 久久综合毛片 | 久久精品欧美视频 | 久久久久久毛片精品免费不卡 | 国产精品免费小视频 | 国产在线一区观看 | 国产最顶级的黄色片在线免费观看 | 色综合夜色一区 | 久久久免费播放 | 国产区久久 | 欧美人体xx | 日b黄色片 | 欧美做受高潮电影o | 五月天中文字幕mv在线 | 精品国产乱码一区二区三区在线 | 狠狠干.com| 成人宗合网 | 久久久久人人 | 黄色在线成人 | 国产精品日韩欧美一区二区 | 亚洲精品小视频 | 九九热av | 久精品视频免费观看2 | 伊色综合久久之综合久久 | 91精品秘密在线观看 | 天天射天天爱天天干 | 97日日 | 久草在线免费在线观看 | 精品欧美一区二区三区久久久 | 在线观看日本高清mv视频 | 国产91区| 久久久伊人网 | 日韩亚洲在线观看 | 久草影视在线观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 成人影片在线免费观看 | 在线免费色| 91香蕉视频720p| 国产亚洲高清视频 | 97超碰在线视 | 久久久久久亚洲精品 | 国产精彩视频 | 波多野结衣在线观看一区 | 国产99久久久国产精品免费二区 | 亚洲免费观看视频 | 亚洲成aⅴ人片久久青草影院 | 深爱激情站 | 中文欧美字幕免费 | 久久99九九99精品 | 97超碰人人| 91九色蝌蚪视频在线 | 久久理伦片 | 亚洲3级 | 日韩成人xxxx| 少妇bbb| 91av在线视频播放 | 欧美成人h版在线观看 | 国产精品毛片久久久久久久 | 国产精品美女网站 | 狠狠的干狠狠的操 | 99久久婷婷国产综合精品 | 欧美日韩一二三四区 | 成年人视频在线免费观看 | 人人爱人人舔 | 麻豆国产在线视频 | www.色国产| 国产不卡精品 | 日韩精品中文字幕在线观看 | 九九九热| 国产精品igao视频网网址 | 久久免费在线观看 | 国产成人专区 | 99久免费精品视频在线观看 | 五月天婷婷在线播放 | 欧美在线一二区 | 最近免费中文字幕大全高清10 | 91视频久久久 | 午夜av大片 | 精品国产日本 | 亚洲美女在线一区 | 三级午夜片| av天天澡天天爽天天av | 亚洲一区日韩 | 最新的av网站 | 欧美另类高清 videos | 国产1区2区3区精品美女 | 97精品国产97久久久久久春色 | 激情狠狠干 | 狠狠色伊人亚洲综合网站色 | 91黄色成人| 久久久av电影 | 黄色大片日本免费大片 | 中文字幕第一页在线 | 国产精品久久久久久久久久久久久 | 最新日韩在线观看 | 一区二区 不卡 | 日韩性久久 | 日韩网站在线观看 | 天天射天天射天天射 | 96精品视频 | 在线国产一区二区 | 久久看片网站 | 国产美女精品久久久 | 国产高清精品在线 | 亚洲高清在线视频 | 久久久国产一区 | 热久久最新地址 | 欧美日韩不卡在线视频 | 大胆欧美gogo免费视频一二区 | 久久成年人视频 | 久久草在线免费 | 久久黄色小说 | 免费在线看v | 青春草免费在线视频 | 99热这里只有精品在线观看 | 久久综合色影院 | 久久理论电影网 | 久草视频中文 | 911亚洲精品第一 | 国产精品尤物视频 | 国产一区二区不卡在线 | 在线视频一二三 | 婷婷色av| 国产精品视频久久久 | 中文字幕在线观看你懂的 | 国产精品99久久久久人中文网介绍 | 91黄视频在线 | 中文字幕在线视频网站 | 免费国产一区二区视频 | 丁香激情网 | 日本精品视频网站 | 国产视频2| 日韩精品欧美专区 | 一级免费黄视频 | 日韩黄色在线 | 欧美一区二区日韩一区二区 | 一区二区精品在线观看 | 国产字幕av| 久久久精品福利视频 | av黄色影院 | 国产一区二区免费 | 国产精品免费大片视频 | 欧洲色综合 | 91成人短视频在线观看 | 在线免费观看欧美日韩 | 免费观看一级视频 | 国产偷在线 | 精品爱爱 | 欧洲亚洲精品 | av在线电影播放 | 成人一级黄色片 | 成人性生交视频 | 日韩高清片 | 正在播放国产一区 | 国产高清视频在线 | 五月激情天 | 91九色视频在线播放 | 久久久国产一区二区三区四区小说 | a级国产乱理论片在线观看 伊人宗合网 | 国产精品一区二区三区在线免费观看 | 久久第四色| 国产午夜精品福利视频 | 国产黄色片免费观看 | 特级a老妇做爰全过程 | 国产区第一页 | 久久av中文字幕片 | 色视频在线观看 | 欧美日本啪啪无遮挡网站 | 麻豆久久久久 | 国产婷婷在线观看 | av在线免费在线观看 | 国产精品 久久 | 国产a级免费 | 国产精品日韩高清 | 精品国产免费人成在线观看 | 久草久草视频 | 日日干日日操 | 欧美一级片在线 | 欧美一区二区在线免费看 | 中文字幕一二三区 | 在线观看你懂的网站 | 在线草 | 色婷婷国产精品 | 亚洲精品国产视频 | 成人在线一区二区三区 | 99久久精品费精品 | 久久伊人五月天 | av解说在线| www.午夜视频| 日韩亚洲在线视频 | 国产精品免费在线 | 91免费试看 | 在线观看日韩专区 | 亚洲h在线播放在线观看h | 五月婷婷视频在线观看 | 99热日本 | 欧美日韩视频免费看 | 国产黄色大全 | www.夜夜骑.com | 精品亚洲欧美一区 | 国产一区二区精品在线 | 婷婷激情久久 | 91在线国产观看 | 午夜国产福利在线观看 | av中文字幕网 | 在线观看91网站 | 欧美性生爱 | 天堂av在线网址 | 日韩欧美一区二区三区在线观看 | 精品视频在线观看 | 色婷婷视频在线观看 | 久久永久视频 | 久久人91精品久久久久久不卡 | av解说在线观看 | 亚洲精品视频在线观看免费视频 | 我爱av激情网| 国产精品一区二区三区观看 | 国产特级毛片 | 97在线免费视频观看 | 日本免费久久高清视频 | 亚洲理论电影 | 国产99久久久欧美黑人 | 97在线成人| 高潮久久久久久久久 | 欧美日韩不卡在线观看 | 亚洲一二区精品 | 国产黄网在线 | 久久精品久久精品久久39 | 国产xvideos免费视频播放 | 久久优 | 国产精品18p| 中文字幕色在线 | 日本九九视频 | 国产视频精品视频 | 久久午夜网 | 在线综合色 | 88av网站 | 日韩理论在线 | 国产精品www | 久久天天躁 | 成人在线播放视频 | 99久久精品国产欧美主题曲 | 黄色av免费电影 | 久久另类小说 | 久久69精品久久久久久久电影好 | 日韩av视屏在线观看 | 国产一区二区成人 | 波多野结衣精品 | 日韩免费三区 | 五月婷婷操 | 欧美性生爱 | 又黄又爽又无遮挡免费的网站 | 日韩美一区二区三区 | 黄色一级在线免费观看 | 黄色毛片视频免费观看中文 | 欧美久久久久久久久久久 | 91亚洲夫妻 | 天天操天天色天天 | 狠狠干天天 | 亚洲成人av免费 | 久久久999免费视频 日韩网站在线 | 麻豆国产电影 | 涩涩伊人 | 国产特级毛片aaaaaaa高清 | 91视频在线免费看 | 日韩在线观看你懂的 | 婷婷射五月| 99热网站| 91最新在线观看 | 成人理论电影 | 日韩久久影院 | 天天爽天天做 | 国产一区在线免费观看视频 | 婷婷久久婷婷 | 色婷婷视频在线 | 亚洲精品视频在 | 久久久福利| 精品一区二区在线观看 | 亚洲成av人影院 | 深爱开心激情网 | 久久久精品小视频 | av综合av | 亚洲影院一区 | 91 在线视频 | 亚洲成人黄| 狠狠干2018 | 99久久精品免费看国产麻豆 | 国产3p视频 | 一本一道久久a久久精品 | 久久美女视频 | 日日综合| 中文字幕乱码电影 | 午夜美女福利直播 | 干狠狠| 天天射天天射天天 | 91豆麻精品91久久久久久 | 国产99免费 | 久久精品精品 | 一区二区三区免费在线观看视频 | www.色爱 | 欧美精品在线观看一区 | 9999精品免费视频 | 成人久久久久久久久久 | 天天操天天干天天综合网 | 国产黄网站在线观看 | 亚洲专区在线视频 | 国模一区二区三区四区 | 欧美日韩二区三区 | 婷婷精品国产一区二区三区日韩 | 国产黄影院色大全免费 | 色成人亚洲| 久久a级片| 精品视频中文字幕 | 97超碰中文字幕 | 中文字幕精品三级久久久 | 久久综合导航 | 亚洲日本在线一区 | 91福利国产在线观看 | 黄色av网站在线观看 | 免费网站看av片 | 精品久久久久一区二区国产 | 日本精品视频网站 | 免费在线观看中文字幕 | 久久久久久蜜桃一区二区 | 天天操天天操天天操天天 | 99视频网站| 国产日韩精品久久 | 91自拍视频在线观看 | 国内精品久久久久久久久久清纯 | 精品一二三四视频 | 国产视频美女 | 97av在线视频 | 粉嫩av一区二区三区四区五区 | 天天操天天吃 | 999精品网| 在线观看91久久久久久 | 日韩精品久久久久久 | av在观看| 日韩,中文字幕 | 成人性生爱a∨ | 日本中文字幕网 | 超碰在线观看99 | 91麻豆操| 国产男男gay做爰 | 92国产精品久久久久首页 | 91激情视频在线观看 | 91麻豆文化传媒在线观看 | 在线观看免费中文字幕 | 91亚洲精品久久久蜜桃 | 久久一区二区三区超碰国产精品 | 国产精品不卡一区 | 日韩女同一区二区三区在线观看 | 久久久久欠精品国产毛片国产毛生 | 成年人免费观看在线视频 | 国产香蕉久久精品综合网 | 国产自产在线视频 | 中文字幕久久网 | 久久好看免费视频 | 欧洲一区精品 | www五月天com| 91av免费观看 | 激情视频二区 | 午夜 免费 | 国产美女精品视频 | 毛片在线播放网址 | 午夜视频在线观看一区二区三区 | 亚洲男男gaygay无套同网址 | 日韩精品一区二区三区免费观看视频 | 国产精品99久久久久久武松影视 | av中文在线观看 | 久久国产一区 | 国产99久久精品 | 成人网页在线免费观看 | 一区二区三区免费在线 | 在线亚洲欧美视频 | 中文国产在线观看 | 高清一区二区 | 欧美精品一级视频 | 日日干天天爽 | 免费在线激情视频 | 久久久久高清毛片一级 | 香蕉久久久久久久 | 激情影音 | 在线观看精品一区 | 亚洲女裸体 | 激情喷水 | 99久国产 | 五月婷婷综合在线 | 奇米影视8888在线观看大全免费 | 五月激情婷婷丁香 | 在线综合 亚洲 欧美在线视频 | www.久久精品视频 | 国产资源网 | 久久99亚洲精品久久 | 国产精品美女久久久久aⅴ 干干夜夜 | 国产一卡二卡四卡国 | 国产精品久久99 | 99精品福利 | 久久久久欧美精品 | 日日夜夜精品视频 | 在线观看一级片 | 中文字幕亚洲在线观看 | 日韩av区| 一区 在线 影院 | 欧美日本在线观看视频 | 欧美日韩国产一区二区在线观看 | 一区二区三区在线视频观看58 | www.亚洲精品视频 | 中文字幕在线观看网站 | 国产裸体永久免费视频网站 | 最新成人在线 | 国产精品久久 | 深爱婷婷网 | 国产日韩精品一区二区在线观看播放 | av超碰在线观看 | 精品国产一区二区三区久久久蜜月 | 国产在线一区二区三区播放 | 在线播放一区 | 日韩中文字幕免费在线播放 | 国产在线视频在线观看 | 蜜臀av性久久久久av蜜臀三区 | 人人爱人人添 | 国产一级精品视频 | 一级一片免费观看 | 日韩理论片中文字幕 | 在线 日韩 av | 久久久久久久网站 | 免费日韩三级 | 久久亚洲人| 亚洲精品av中文字幕在线在线 | 欧美精品久久久久久久免费 | 激情婷婷色 | 麻花豆传媒mv在线观看网站 | 激情五月六月婷婷 | 91完整版观看 | 日本特黄特色aaa大片免费 | 婷婷六月综合网 | 免费黄色在线 | 黄色三级免费片 | 久久三级毛片 | 免费观看的黄色片 | 操久 | 免费看国产曰批40分钟 | 国产精品一区二区久久精品爱微奶 | 高清在线一区二区 | 国产免费xvideos视频入口 | 99热在线看 | 日韩在线网 | 久久麻豆精品 | 欧美性色综合网 | 激情综合网在线观看 | 色噜噜噜| 四虎影视成人永久免费观看亚洲欧美 | 国产不卡免费视频 | 亚洲天天摸日日摸天天欢 | 免费三级av | 国外成人在线视频网站 | 2024国产精品视频 | 亚洲一区二区黄色 | 最新超碰 | 91精品在线免费观看 | 国产三级国产精品国产专区50 | 久久精品一区二区三区视频 | 国产一级免费视频 | 深爱婷婷激情 | 亚洲天堂社区 | 日本中文不卡 | 麻豆视频国产精品 | 国产视频一区在线播放 | 国内精品久久久久久久影视简单 | 樱空桃av | 国产福利资源 | 精品毛片久久久久久 | 久久高清视频免费 | 国产精品美女www爽爽爽视频 | 一区二区视频免费在线观看 | 国产精品久久久久高潮 | bbbb操bbbb| 日本在线观看一区 | 久久综合婷婷 | 国产精品久久久久久久久久不蜜月 | 2019精品手机国产品在线 | 九九热国产视频 | 91精品欧美一区二区三区 | 日本精品久久久久中文字幕5 | 精品久久久久久综合日本 | 国内精品视频一区二区三区八戒 | 黄色字幕网 | 伊人宗合| 国产黄色大全 | 精品国产片 | 美女视频a美女大全免费下载蜜臀 | 成人免费观看电影 | 天天操天天射天天插 | 91最新国产 | 国产剧情一区二区 | 激情久久伊人 | 日韩3区| 久草在线费播放视频 | 久久久久久久国产精品视频 | 久久久私人影院 | 成人久久精品 | 免费成人在线观看 | 欧美日视频 | 色综合久久88色综合天天免费 | 99热九九这里只有精品10 | 91精品国自产在线观看 | 国产精品一区免费在线观看 | 97香蕉超级碰碰久久免费软件 | 亚洲欧洲精品一区 | 久久久www | 欧美在线99| 天堂av在线网址 | 成人av电影在线观看 | 国产一区二区观看 | 超碰在线97国产 | 99色国产| 国产精品99久久久精品免费观看 | 久久成人国产精品一区二区 | 成人黄色电影在线播放 | 91在线国内视频 | 伊人亚洲综合 | 麻豆传媒在线视频 | 欧美日本在线视频 | 一区在线观看 | 日本黄色免费大片 | 国产麻豆剧果冻传媒视频播放量 | 欧美做受xxx | avove黑丝| 欧美日韩国产精品一区二区 | 国产色视频一区二区三区qq号 | 久久国精品 | 美女福利视频在线 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 亚洲视频一 | 天天射天天操天天色 | 精品日韩视频 | 亚洲成av人片在线观看 | 深爱激情综合网 | 亚洲欧洲精品视频 | 国产资源中文字幕 | 日韩精品视频一二三 | 久久久久久网址 | 成人午夜性影院 | 91精品久久久久久综合乱菊 | 国产精品99精品久久免费 | 免费av视屏 | 国内精品久久久久久久影视简单 | 欧美激情xxxx | 在线国产视频观看 | 日韩av一区在线观看 | 久久久影视 | 探花系列在线 | 国产欧美日韩精品一区二区免费 | 色小说在线 | av+在线播放在线播放 | 97成人精品区在线播放 | 欧美成人h版 | 国产精品av久久久久久无 | 国产精品精品国产色婷婷 | 日本天天操 | 特级西西444www大胆高清无视频 | 91丨九色丨91啦蝌蚪老版 | 91看片淫黄大片一级在线观看 | 日韩精品视 | 九九色在线观看 | 精品九九九九 | 欧美va电影 | 香蕉看片| 亚洲一级片免费观看 | av中文资源在线 | 日日操狠狠干 | 天天躁天天狠天天透 | 久久综合免费视频影院 | 69精品视频在线观看 | 欧美日韩大片在线观看 | av天天在线观看 | av在线网站免费观看 | 婷婷国产一区二区三区 | 97精品视频在线播放 | 亚洲精色| 国产成人精品久久久久 | 人人干人人超 | 亚洲精品天天 | 国产精品午夜av | 国产在线资源 | 97超碰中文字幕 | 久久久午夜精品福利内容 | 国产精品成人在线 | 成人精品在线 | 成人小视频在线播放 | 国产久草在线 | 欧美成人区 | 中国一级片在线观看 | 999一区二区三区 | 欧美在线观看视频 | 天堂av在线网站 | 九九色综合 | 久久99精品一区二区三区三区 | 中文字幕在线日 | 亚洲国产剧情av | 一本色道久久综合亚洲二区三区 | 国产成人1区 | www国产亚洲精品久久网站 | 国产精品第二十页 | 天天干,天天射,天天操,天天摸 | 99精彩视频在线观看免费 | av福利在线 | 日日干天天插 | 99精品免费网 | 日本性生活免费看 | 91视频亚洲| 欧美黄色高清 | 婷婷激情欧美 | www.久久色| 99久久精品无码一区二区毛片 | 视频国产一区二区三区 | 久久久久伦理电影 | 色丁香色婷婷 | 久久99亚洲精品久久久久 | 狠狠综合久久 | 婷婷狠狠操 | 亚洲欧美乱综合图片区小说区 | 久草网视频在线观看 | 欧美午夜激情网 | 中文字幕在线视频免费播放 | 激情综合色综合久久 | 午夜精品一区二区三区可下载 | 国产精品一区二区在线看 | 激情亚洲综合在线 | 欧美日韩国产在线 | 狠狠躁夜夜av | 五月婷婷伊人网 | 美女av电影 | 天天摸天天舔天天操 | 日本不卡123 | 韩日在线一区 | 国产日韩精品一区二区 | 亚洲欧洲精品视频 | 久久好看免费视频 | 99久久99视频只有精品 | 久久久亚洲国产精品麻豆综合天堂 | 五月天综合 | 日日草天天草 | av电影不卡| 亚洲成人中文在线 | 91自拍视频在线观看 | 亚洲激情在线视频 | 玖草在线观看 | 五月天网页 | 在线观看亚洲专区 | 人人爽久久涩噜噜噜网站 | 成人av高清 | 激情五月激情综合网 | 一级黄色在线视频 | 国产精品一区二区麻豆 | av在观看 | 日韩午夜网站 | 亚洲人视频在线 | www.久久婷婷| 久久成人国产精品一区二区 | 亚洲国产免费网站 | 91丨九色丨91啦蝌蚪老版 | 日韩久久精品一区二区三区下载 | 国产精品久久久久久久妇 | 欧美午夜久久久 | 国产99久久久精品视频 | 正在播放 国产精品 | 精品国产三级 | 精品三级av | 欧美精品国产综合久久 | 丁香在线观看完整电影视频 | 中文字幕三区 | www.色爱| 92中文资源在线 | 日本aaa在线观看 | 国产香蕉视频在线播放 | 国产一区高清在线观看 | 国产精品一区二区久久精品 | 狠狠操狠狠插 | 国产精品毛片久久久久久久 | 亚洲资源在线观看 | 成人在线免费av | 欧美一级久久久 | 色综合久久88色综合天天免费 | 中文字幕在线观看播放 | 99久在线精品99re8热视频 | 97天堂| 国产视频91在线 | 亚洲国产中文字幕在线观看 | 在线视频 成人 | 天天综合91| 国产欧美精品一区二区三区四区 | 国产99精品 | 人人澡视频 | 99久久精品免费看 | 亚洲精品在线观看免费 | 久久这里只有精品1 | 国产精品久久久久久69 | 欧美日韩国产色综合一二三四 | 人人爽久久久噜噜噜电影 | 国产成人综合在线观看 | 在线观看亚洲a | 国产又粗又猛又黄又爽视频 | www欧美日韩 | 五月丁香 | 黄色资源网站 | 深爱激情av | 天天添夜夜操 | 日本在线视频网址 | 欧美日韩国语 | 免费黄在线看 | 日日爱av | 九九爱免费视频 | 97视频在线看 | 久久久91精品国产一区二区精品 | 精精国产xxxx视频在线播放 | 欧美人zozo | 婷婷色中文字幕 | 国产精品免费麻豆入口 | 国产中文字幕91 | 亚洲激情电影在线 | 天天射天天爱天天干 | 在线免费观看国产视频 | 久久中文欧美 | 中文字幕之中文字幕 | 国产精品久久久影视 | 日韩久久久久久久久久久久 | 国产精品精品国产色婷婷 | 精品嫩模福利一区二区蜜臀 | 丰满少妇在线观看资源站 | 国产a免费 | 狠狠操91| 久久免费福利 | 亚洲精品乱码久久久久久 | 亚洲国产精品久久久 | 男女拍拍免费视频 | 韩国av三级 | 一区免费观看 | 国产97视频 | 中文字幕在线资源 | 97精品国产97久久久久久免费 | 久久久久久久久久影院 | 中文字幕免费一区 | 在线国产精品一区 | 日韩视频1| 伊人va| 中文欧美字幕免费 | japanese黑人亚洲人4k | 色在线网| 久久精品亚洲 | 99久久久久久久久久 | 久久精品一 | 黄色免费电影网站 | 免费99精品国产自在在线 | 人人天天夜夜 | 五月花丁香婷婷 | 丁香六月天 | 91福利国产在线观看 | 激情九九 | 日韩mv欧美mv国产精品 | 在线观看视频一区二区 | 五月激情婷婷丁香 | 天天爱天天色 | 中文欧美字幕免费 | 久久久久久免费视频 | 五月婷婷久 | 国产在线播放一区 | 不卡视频国产 | 天天摸天天操天天舔 | www色com| 99久久精品国产免费看不卡 | 综合激情久久 | 香蕉在线视频播放网站 | av色综合 | 在线免费看片 | 8x成人在线 | 日三级在线 | 亚洲一区久久久 | 日韩在线视频观看免费 | 98涩涩国产露脸精品国产网 | 亚洲精品视频中文字幕 | 免费av看片 | 999成人| 在线你懂的视频 | 久久视频国产精品免费视频在线 | 婷婷5月激情5月 | 国产精品欧美日韩 | 日本在线观看一区二区三区 | av解说在线 | 伊人天天色 | 91在线麻豆 | 国产免费观看久久 | 亚洲精品国产成人av在线 | 天天干夜夜夜操天 | 99热国产精品 | 国产精品麻豆视频 | 国产在线不卡精品 | 欧美色综合天天久久综合精品 | 99re久久资源最新地址 | 成年人在线观看视频免费 | 精品9999 | 亚洲一区二区三区miaa149 | 性色av免费看 | 粉嫩av一区二区三区免费 | 国产精品毛片久久蜜 | 91黄色在线观看 | 精品一区二区久久久久久久网站 | 日韩综合第一页 | 在线三级播放 | 成人视屏免费看 | 操高跟美女 | 91九色蝌蚪视频 | 亚洲第一区在线播放 | 欧美一级片| 久久黄色影院 | 色综合久久久久久久久五月 | 色婷婷国产在线 | 96久久久 | 国产精品成人自产拍在线观看 | 午夜在线免费视频 | 午夜精品麻豆 | 深爱激情久久 | 丁香婷五月| 国产不卡毛片 | 美腿丝袜一区二区三区 | 99中文字幕视频 | 蜜臀av性久久久久蜜臀av | 国产精品午夜在线 | 久操视频在线免费看 | 亚洲精品伦理在线 | 狠狠干电影 | 日批视频 | 免费网站观看www在线观看 | 又爽又黄又无遮挡网站动态图 | 国产毛片在线 | 欧美日韩国产精品久久 | 一区二区视频在线播放 | 亚洲午夜久久久久久久久久久 | 婷婷激情综合网 | 91精品国产乱码 | www久久久| 欧美日韩免费一区二区三区 | 婷婷丁香国产 | 欧美一级特黄高清视频 | 国产精品一区二区三区在线免费观看 | 国产日本高清 | 人人狠| 爱av在线网 | 婷婷网站天天婷婷网站 | 久久99九九99精品 | 久久99国产精品二区护士 | 国产伦理一区二区三区 | 麻豆91精品 | 激情深爱五月 | 综合久久精品 | 日韩成人精品一区二区 | 国产第一页福利影院 | 国产午夜在线 | 久久一区精品 | 日韩免费电影一区二区 | 久久久久欠精品国产毛片国产毛生 | x99av成人免费 | 91视频91自拍| 久久草在线免费 | 久久久久久久久久久久久久免费看 | 国产色在线 | 欧美日韩高清一区二区三区 | 国产在线观看免费观看 | 色妞色视频一区二区三区四区 | 天天久久综合 | www.成人久久 | 亚洲精品国产精品国自产 | av网站地址 | 精品久久一 | 综合天天网 | 国产一区视频在线播放 | 国产色啪 | 久久免费的精品国产v∧ | 日韩成人高清在线 | av一级片网站 | 在线看av网址 | 久久成人国产精品 | 在线免费高清一区二区三区 | 亚洲3级 | 在线免费观看视频 | 97看片吧 | 亚洲91网站 | 亚洲精品一区二区三区在线观看 | 色婷婷成人网 | 国产精品久久久久久久久久三级 | 国产91精品一区二区绿帽 | 亚州国产视频 | 久久久91精品国产一区二区三区 | 欧美日韩免费一区二区 | 亚洲 欧洲av | 国产伦精品一区二区三区无广告 | 夜夜操天天干 | 亚洲国产黄色片 | 91大神精品视频在线观看 | 91网在线观看 | 黄色成年网站 | 午夜91在线 | 中文字幕免费在线看 | 在线v| 婷婷色九月 | 四虎永久免费 | 丁香婷五月 | 日日操夜 | 综合网av| 久草9视频 | 91久久影院 | 亚洲黄色免费电影 | 人人讲下载 | 日本激情视频中文字幕 | 九九久久精品 | 天天干天天摸 | 色视频网站在线观看一=区 a视频免费在线观看 | 最近av在线| 亚州精品一二三区 | 欧美最猛性xxxxx免费 | 在线导航av | 免费男女羞羞的视频网站中文字幕 | 免费91在线| 亚洲精品高清在线观看 | 日本大尺码专区mv | 成人国产精品 | 97偷拍视频 | 日韩高清二区 | 国产黄免费 | 国产精品久久久毛片 | 日韩免费成人 | 欧美日韩视频在线播放 | 超碰97人 | 96久久久 | 天天综合网天天 | 黄色亚洲精品 | 久久综合色天天久久综合图片 | 国产亚洲精品女人久久久久久 | 中文字幕一二三区 | 久久精品精品电影网 | 丁香狠狠| 欧美日韩久久 | 亚洲精品自在在线观看 | 免费av小说 | 日本精品xxxx | av电影中文字幕 | 九九久久在线看 | 成人资源在线播放 | 不卡的一区二区三区 | 日本大尺码专区mv | 在线免费观看黄色大片 | 中文字幕乱码电影 | av日韩国产| 国产精久久久久久妇女av | 激情丁香 | 三级黄色免费 | 国产精品久久久久婷婷 | 天堂中文在线播放 | 色久综合 | 国产午夜三级一二三区 | 欧美日韩不卡一区 | 天天搞天天干 | 国内精品久久久精品电影院 | 国产黄色看片 | 在线播放91 | 超碰97在线看 | 国产亚洲精品久久19p |