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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

jz2440-uboot-201204版本移植【学习笔记】【原创】

發(fā)布時間:2023/12/18 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jz2440-uboot-201204版本移植【学习笔记】【原创】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?平臺:jz2440

作者:莊澤彬(歡迎轉(zhuǎn)載,請注明作者)

說明:韋東山二期視頻學習筆記

交叉編譯工具:arm-linux-gcc (GCC)4.3.2

PC環(huán)境:ubuntu18.04

一、uboot的編譯和燒錄

下載uboot-2012-04版本的uboot進行移植,下載鏈接:ftp://ftp.denx.de/pub/u-boot/

編譯:

1 make smdk2410_config 2 make -j4

使用oflash進行燒錄,注意要燒錄到norflash進行啟動,不能燒錄到nandflash啟動:

1 sudo oflash u-boot.bin

使用沒有修改的uboo2012-04版本燒錄啟動肯定不能啟動,要進行修改,支持jz2440

?

二、uboot的啟動流程

在進行移植之前,我們要先了解uboot的啟動流程,才能快速的移植。根據(jù)編譯過程,看看是那些文件先編譯,在uboot啟動階段最先執(zhí)行.

根據(jù)下圖編譯的log,和鏈接器腳本可知,arch/arm/cpu/arm920t/start.c 是最先執(zhí)行的,并且鏈接地址為0。

根據(jù)start.c分析uboot主要內(nèi)容如下:

2.1? set the cpu to SVC32 mode 設置為管理模式

2.2? turn off the watchdog? 關閉看門狗

2.3? mask all IRQs by setting all bits in the INTMR

2.4? 設置時鐘比例:?FCLK:HCLK:PCLK = 1:2:4

2.5? 設置內(nèi)存控制器

2.6 設置棧,調(diào)用board_init_f進行初始化

2.6.1 設置棧指針地址sp = 0x30000f80

2.6.2? 設置gd變量

DECLARE_GLOBAL_DATA_PTR

#define DECLARE_GLOBAL_DATA_PTR? ? ?register volatile gd_t *gd asm ("r8")?

ffixed-r8

指定r8寄存器來存放gd變量的地址

2.7 重定位代碼:

為什么要重定位代碼呢?norflash的全局變量能像內(nèi)存一樣讀,但是不能像內(nèi)存一樣寫,從這一點出發(fā)也需要把代碼進行重定位,重定位之后,還要修改代碼,修改里面的變量,函數(shù)使用新的地址.

在鏈接的時候添加pie選項,會把地址信息存放在.rel和dynsym段中。arm-linux-ld -pie

查看鏈接腳本中也有這兩個段:

最終的sdram內(nèi)存分布如下圖:

  

?三、uboot重定位分析

3.1 從NOR Flash 把代碼復制到sdram(源碼:u-boot-2012.04.01\arch\arm\cpu\arm920t\start.S)

1 /* Set up the stack */ 2 stack_setup: 3 mov sp, r4 4 5 adr r0, _start 6 cmp r0, r6 7 beq clear_bss /* skip relocation */ 8 mov r1, r6 /* r1 <- scratch for copy_loop */ 9 ldr r3, _bss_start_ofs 10 add r2, r0, r3 /* r2 <- source end address */ 11 12 copy_loop: 13 ldmia r0!, {r9-r10} /* copy from source address [r0] */ 14 stmia r1!, {r9-r10} /* copy to target address [r1] */ 15 cmp r0, r2 /* until source end address [r2] */ 16 blo copy_loop

3.2 程序的鏈接地址是0,訪問全局變量、靜態(tài)變量、調(diào)用函數(shù)時是基于0地址編譯得到的地址,現(xiàn)在把程序復制到了sdram,需要修改代碼,把基于0地址編譯得到的地址改為新地址

1 分析"重定位之修改代碼為新地址": 2 #ifndef CONFIG_SPL_BUILD 3 /* 4 * fix .rel.dyn relocations 5 */ 6 ldr r0, _TEXT_BASE /* r0 <- Text base */ 7 // r0=0, 代碼基地址 8 9 sub r9, r6, r0 /* r9 <- relocation offset */ 10 // r9 = r6-r0 = 0x33f41000 - 0 = 0x33f41000 11 12 ldr r10, _dynsym_start_ofs /* r10 <- sym table ofs */ 13 // r10 = 00073608 14 15 add r10, r10, r0 /* r10 <- sym table in FLASH */ 16 // r10 = 00073608 + 0 = 00073608 17 18 ldr r2, _rel_dyn_start_ofs /* r2 <- rel dyn start ofs */ 19 // r2=0006b568 20 21 add r2, r2, r0 /* r2 <- rel dyn start in FLASH */ 22 // r2=r2+r0=0006b568 23 24 ldr r3, _rel_dyn_end_ofs /* r3 <- rel dyn end ofs */ 25 // r3=00073608 26 27 add r3, r3, r0 /* r3 <- rel dyn end in FLASH */ 28 // r3=r3+r0=00073608 29 30 fixloop: 31 ldr r0, [r2] /* r0 <- location to fix up, IN FLASH! */ 32 1. r0=[0006b568]=00000020 33 34 add r0, r0, r9 /* r0 <- location to fix up in RAM */ 35 1. r0=r0+r9=00000020 + 0x33f41000 = 0x33f41020 36 37 ldr r1, [r2, #4] 38 1. r1=[0006b568+4]=00000017 39 40 and r7, r1, #0xff 41 1. r7=r1&0xff=00000017 42 43 cmp r7, #23 /* relative fixup? */ 44 1. r7 == 23(0x17) 45 46 beq fixrel 47 cmp r7, #2 /* absolute fixup? */ 48 49 beq fixabs 50 /* ignore unknown type of fixup */ 51 b fixnext 52 fixabs: 53 /* absolute fix: set location to (offset) symbol value */ 54 mov r1, r1, LSR #4 /* r1 <- symbol index in .dynsym */ 55 56 add r1, r10, r1 /* r1 <- address of symbol in table */ 57 58 ldr r1, [r1, #4] /* r1 <- symbol value */ 59 60 add r1, r1, r9 /* r1 <- relocated sym addr */ 61 62 b fixnext 63 fixrel: 64 /* relative fix: increase location by offset */ 65 ldr r1, [r0] 66 1. r1=[00000020]=000001e0 67 68 add r1, r1, r9 69 1. r1=r1+r9=000001e0 + 0x33f41000 = 33F411E0 70 71 fixnext: 72 str r1, [r0] 73 1. [0x33f41020] = 33F411E0 74 75 add r2, r2, #8 /* each rel.dyn entry is 8 bytes */ 76 1. r2=r2+8=0006b568+8=6B570 77 78 cmp r2, r3 79 1. 80 81 blo fixloop 82 #endif

3.3 調(diào)用clear_bss

3.4 調(diào)用C函數(shù)board_init_r:第2階段的代碼

四、修改uboot代碼--新建單板、修改系統(tǒng)時鐘、串口

4.1 新建新的單板

4.2修改系統(tǒng)時鐘、支持串口顯示:

uboot代碼里先以60Mhz時鐘計算參數(shù)來設置內(nèi)存控制器,但是還沒有設置MPLL

cpu_init_crit
|  |
|  lowlevel_init 對內(nèi)存的初始化,要求HCLK=60Mhz,但是時鐘的設置在初始化內(nèi)存之后,這部分代碼有問題需要調(diào)整
|
board_init_f
   |
   init_sequence
    |
board_early_init_f

? ? ? ? ? ?/* to reduce PLL lock time, adjust the LOCKTIME register */
? ? ? ? ? ?writel(0xFFFFFF, &clk_power->locktime);

? ? ? ? ? ?/* configure MPLL */
? ? ? ? ? ?writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV,&clk_power->mpllcon);

使用openjtag調(diào)試,根據(jù)下面調(diào)試的內(nèi)容可知,無法往sdram寫入數(shù)據(jù),這部分的初始化需要調(diào)整

代碼修改如下:

?

1 zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$ git diff . 2 diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S 3 index 8c5612c..8655eca 100644 4 --- a/arch/arm/cpu/arm920t/start.S 5 +++ b/arch/arm/cpu/arm920t/start.S 6 @@ -169,9 +169,30 @@ copyex: 7 8 /* FCLK:HCLK:PCLK = 1:2:4 */ 9 /* default FCLK is 120 MHz ! */ 10 - ldr r0, =CLKDIVN 11 - mov r1, #3 12 - str r1, [r0] 13 + /* 2. 設置時鐘 */ 14 + ldr r0, =0x4c000014 15 + // mov r1, #0x03; // FCLK:HCLK:PCLK=1:2:4, HDIVN=1,PDIVN=1 16 + mov r1, #0x05; // FCLK:HCLK:PCLK=1:4:8 17 + str r1, [r0] 18 + 19 + /* 如果HDIVN非0,CPU的總線模式應該從“fast bus mode”變?yōu)椤癮synchronous bus mode” */ 20 + mrc p15, 0, r1, c1, c0, 0 /* 讀出控制寄存器 */ 21 + orr r1, r1, #0xc0000000 /* 設置為“asynchronous bus mode” */ 22 + mcr p15, 0, r1, c1, c0, 0 /* 寫入控制寄存器 */ 23 + 24 + #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01)) 25 + 26 + /* MPLLCON = S3C2440_MPLL_200MHZ */ 27 + ldr r0, =0x4c000004 28 + ldr r1, =S3C2440_MPLL_400MHZ 29 + str r1, [r0] 30 + 31 + /* 啟動ICACHE */ 32 + mrc p15, 0, r0, c1, c0, 0 @ read control reg 33 + orr r0, r0, #(1<<12) 34 + mcr p15, 0, r0, c1, c0, 0 @ write it back 35 + 36 + 37 #endif /* CONFIG_S3C24X0 */ 38 39 /* 40 diff --git a/board/samsung/smdk2440/lowlevel_init.S b/board/samsung/smdk2440/lowlevel_init.S 41 index a2bf570..c14cab3 100644 42 --- a/board/samsung/smdk2440/lowlevel_init.S 43 +++ b/board/samsung/smdk2440/lowlevel_init.S 44 @@ -152,16 +152,16 @@ lowlevel_init: 45 /* the literal pools origin */ 46 47 SMRDATA: 48 - .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28)) 49 - .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) 50 - .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) 51 - .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) 52 - .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) 53 - .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) 54 - .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) 55 - .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) 56 - .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) 57 - .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT) 58 - .word 0x32 59 - .word 0x30 60 - .word 0x30 61 +.long 0x22011110 //BWSCON 62 +.long 0x00000700 //BANKCON0 63 +.long 0x00000700 //BANKCON1 64 +.long 0x00000700 //BANKCON2 65 +.long 0x00000700 //BANKCON3 66 +.long 0x00000700 //BANKCON4 67 +.long 0x00000700 //BANKCON5 68 +.long 0x00018005 //BANKCON6 69 +.long 0x00018005 //BANKCON7 70 +.long 0x008C04F4 // REFRESH 71 +.long 0x000000B1 //BANKSIZE 72 +.long 0x00000030 //MRSRB6 73 +.long 0x00000030 //MRSRB7 74 diff --git a/board/samsung/smdk2440/smdk2410.c b/board/samsung/smdk2440/smdk2410.c 75 index e9ba922..44f38d1 100644 76 --- a/board/samsung/smdk2440/smdk2410.c 77 +++ b/board/samsung/smdk2440/smdk2410.c 78 @@ -74,11 +74,11 @@ int board_early_init_f(void) 79 struct s3c24x0_gpio * const gpio = s3c24x0_get_base_gpio(); 80 81 /* to reduce PLL lock time, adjust the LOCKTIME register */ 82 - writel(0xFFFFFF, &clk_power->locktime); 83 + //writel(0xFFFFFF, &clk_power->locktime); 84 85 /* configure MPLL */ 86 - writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV, 87 - &clk_power->mpllcon); 88 + //writel((M_MDIV << 12) + (M_PDIV << 4) + M_SDIV, 89 + // &clk_power->mpllcon); 90 91 /* some delay between MPLL and UPLL */ 92 pll_delay(4000); 93 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h 94 index 7d16320..71336c7 100644 95 --- a/include/configs/smdk2440.h 96 +++ b/include/configs/smdk2440.h 97 @@ -35,7 +35,8 @@ 98 */ 99 #define CONFIG_ARM920T /* This is an ARM920T Core */ 100 #define CONFIG_S3C24X0 /* in a SAMSUNG S3C24x0-type SoC */ 101 -#define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC */ 102 +//#define CONFIG_S3C2410 /* specifically a SAMSUNG S3C2410 SoC */ 103 +#define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2410 SoC */ 104 #define CONFIG_SMDK2410 /* on a SAMSUNG SMDK2410 Board */ 105 106 #define CONFIG_SYS_TEXT_BASE 0x0 107 @@ -98,7 +99,7 @@ 108 #define CONFIG_CMD_DATE 109 #define CONFIG_CMD_DHCP 110 #define CONFIG_CMD_ELF 111 -#define CONFIG_CMD_NAND 112 +//#define CONFIG_CMD_NAND 113 #define CONFIG_CMD_PING 114 #define CONFIG_CMD_REGINFO 115 #define CONFIG_CMD_USB 116 @@ -223,7 +224,7 @@ 117 #define CONFIG_CMD_MTDPARTS 118 #define CONFIG_MTD_DEVICE 119 #define CONFIG_MTD_PARTITIONS 120 -#define CONFIG_YAFFS2 121 +//#define CONFIG_YAFFS2 122 #define CONFIG_RBTREE 123 124 /* additions for new relocation code, must be added to all boards */

?編譯和燒錄查看現(xiàn)在結(jié)果,現(xiàn)在串口起碼可以輸出了啊:

五、支持nandflash啟動

  原來的代碼在鏈接時加了“-pie選項”,使得u-boot.bin里多了rel、dynsym段,這兩個段主要是重定位之后修改成新的地址使用的,使用這種方式代碼相對會比較大。

5.1 去掉-pie選項,修改如下:

代碼修改支持nandflash主要如下:

1 zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$ git diff . 2 diff --git a/arch/arm/config.mk b/arch/arm/config.mk 3 index 3c5f987..cca02b3 100644 4 --- a/arch/arm/config.mk 5 +++ b/arch/arm/config.mk 6 @@ -72,5 +72,5 @@ endif 7 8 # needed for relocation 9 ifndef CONFIG_NAND_SPL 10 -LDFLAGS_u-boot += -pie 11 +#LDFLAGS_u-boot += -pie 12 endif 13 diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S 14 index 8655eca..34f7da8 100644 15 --- a/arch/arm/cpu/arm920t/start.S 16 +++ b/arch/arm/cpu/arm920t/start.S 17 @@ -203,103 +203,30 @@ copyex: 18 bl cpu_init_crit 19 #endif 20 21 -/* Set stackpointer in internal RAM to call board_init_f */ 22 -call_board_init_f: 23 ldr sp, =(CONFIG_SYS_INIT_SP_ADDR) 24 bic sp, sp, #7 /* 8-byte alignment for ABI compliance */ 25 + 26 + bl nand_init_ll 27 + mov r0,#0 28 + ldr r1,_TEXT_BASE 29 + 30 + ldr r2,_bss_start_ofs 31 + 32 + bl copy_code_to_sdram 33 + bl clear_bss 34 + 35 + ldr pc,=call_board_init_f 36 + 37 +/* Set stackpointer in internal RAM to call board_init_f */ 38 +call_board_init_f: 39 + 40 ldr r0,=0x00000000 41 bl board_init_f 42 43 -/*------------------------------------------------------------------------------*/ 44 - 45 -/* 46 - * void relocate_code (addr_sp, gd, addr_moni) 47 - * 48 - * This "function" does not return, instead it continues in RAM 49 - * after relocating the monitor code. 50 - * 51 - */ 52 - .globl relocate_code 53 -relocate_code: 54 - mov r4, r0 /* save addr_sp */ 55 - mov r5, r1 /* save addr of gd */ 56 - mov r6, r2 /* save addr of destination */ 57 - 58 - /* Set up the stack */ 59 -stack_setup: 60 - mov sp, r4 61 - 62 - adr r0, _start 63 - cmp r0, r6 64 - beq clear_bss /* skip relocation */ 65 - mov r1, r6 /* r1 <- scratch for copy_loop */ 66 - ldr r3, _bss_start_ofs 67 - add r2, r0, r3 /* r2 <- source end address */ 68 - 69 -copy_loop: 70 - ldmia r0!, {r9-r10} /* copy from source address [r0] */ 71 - stmia r1!, {r9-r10} /* copy to target address [r1] */ 72 - cmp r0, r2 /* until source end address [r2] */ 73 - blo copy_loop 74 - 75 -#ifndef CONFIG_SPL_BUILD 76 - /* 77 - * fix .rel.dyn relocations 78 - */ 79 - ldr r0, _TEXT_BASE /* r0 <- Text base */ 80 - sub r9, r6, r0 /* r9 <- relocation offset */ 81 - ldr r10, _dynsym_start_ofs /* r10 <- sym table ofs */ 82 - add r10, r10, r0 /* r10 <- sym table in FLASH */ 83 - ldr r2, _rel_dyn_start_ofs /* r2 <- rel dyn start ofs */ 84 - add r2, r2, r0 /* r2 <- rel dyn start in FLASH */ 85 - ldr r3, _rel_dyn_end_ofs /* r3 <- rel dyn end ofs */ 86 - add r3, r3, r0 /* r3 <- rel dyn end in FLASH */ 87 -fixloop: 88 - ldr r0, [r2] /* r0 <- location to fix up, IN FLASH! */ 89 - add r0, r0, r9 /* r0 <- location to fix up in RAM */ 90 - ldr r1, [r2, #4] 91 - and r7, r1, #0xff 92 - cmp r7, #23 /* relative fixup? */ 93 - beq fixrel 94 - cmp r7, #2 /* absolute fixup? */ 95 - beq fixabs 96 - /* ignore unknown type of fixup */ 97 - b fixnext 98 -fixabs: 99 - /* absolute fix: set location to (offset) symbol value */ 100 - mov r1, r1, LSR #4 /* r1 <- symbol index in .dynsym */ 101 - add r1, r10, r1 /* r1 <- address of symbol in table */ 102 - ldr r1, [r1, #4] /* r1 <- symbol value */ 103 - add r1, r1, r9 /* r1 <- relocated sym addr */ 104 - b fixnext 105 -fixrel: 106 - /* relative fix: increase location by offset */ 107 - ldr r1, [r0] 108 - add r1, r1, r9 109 -fixnext: 110 - str r1, [r0] 111 - add r2, r2, #8 /* each rel.dyn entry is 8 bytes */ 112 - cmp r2, r3 113 - blo fixloop 114 -#endif 115 + ldr r1,_TEXT_BASE 116 117 -clear_bss: 118 -#ifndef CONFIG_SPL_BUILD 119 - ldr r0, _bss_start_ofs 120 - ldr r1, _bss_end_ofs 121 - mov r4, r6 /* reloc addr */ 122 - add r0, r0, r4 123 - add r1, r1, r4 124 - mov r2, #0x00000000 /* clear */ 125 - 126 -clbss_l:str r2, [r0] /* clear loop... */ 127 - add r0, r0, #4 128 - cmp r0, r1 129 - bne clbss_l 130 - 131 - bl coloured_LED_init 132 - bl red_led_on 133 -#endif 134 + //second action 135 + bl board_init_r 136 137 /* 138 * We are done. Do not return, instead branch to second part of board 139 diff --git a/arch/arm/cpu/u-boot.lds b/arch/arm/cpu/u-boot.lds 140 index e49ca0c..ba20982 100644 141 --- a/arch/arm/cpu/u-boot.lds 142 +++ b/arch/arm/cpu/u-boot.lds 143 @@ -35,6 +35,7 @@ SECTIONS 144 { 145 __image_copy_start = .; 146 CPUDIR/start.o (.text) 147 + board/samsung/smdk2440/libsmdk2440.o (.text) 148 *(.text) 149 } 150 151 diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c 152 index 5270c11..afafe7b 100644 153 --- a/arch/arm/lib/board.c 154 +++ b/arch/arm/lib/board.c 155 @@ -256,7 +256,7 @@ init_fnc_t *init_sequence[] = { 156 NULL, 157 }; 158 159 -void board_init_f(ulong bootflag) 160 +unsigned int board_init_f(ulong bootflag) 161 { 162 bd_t *bd; 163 init_fnc_t **init_fnc_ptr; 164 @@ -369,8 +369,9 @@ void board_init_f(ulong bootflag) 165 * reserve memory for U-Boot code, data & bss 166 * round down to next 4 kB limit 167 */ 168 - addr -= gd->mon_len; 169 - addr &= ~(4096 - 1); 170 + //addr -= gd->mon_len; 171 + //addr &= ~(4096 - 1); 172 + addr = CONFIG_SYS_TEXT_BASE; 173 174 debug("Reserving %ldk for U-Boot at: %08lx\n", gd->mon_len >> 10, addr); 175 176 @@ -435,8 +436,10 @@ void board_init_f(ulong bootflag) 177 debug("relocation Offset is: %08lx\n", gd->reloc_off); 178 memcpy(id, (void *)gd, sizeof(gd_t)); 179 180 - relocate_code(addr_sp, id, addr); 181 + //relocate_code(addr_sp, id, addr); 182 183 + return (unsigned int )id; 184 + 185 /* NOTREACHED - relocate_code() does not return */ 186 } 187 188 diff --git a/board/samsung/smdk2440/Makefile b/board/samsung/smdk2440/Makefile 189 index b8657b4..04d36b3 100644 190 --- a/board/samsung/smdk2440/Makefile 191 +++ b/board/samsung/smdk2440/Makefile 192 @@ -25,7 +25,7 @@ include $(TOPDIR)/config.mk 193 194 LIB = $(obj)lib$(BOARD).o 195 196 -COBJS := smdk2410.o 197 +COBJS := smdk2410.o init.o 198 SOBJS := lowlevel_init.o 199 200 SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c) 201 diff --git a/include/common.h b/include/common.h 202 index 4b5841e..390ab72 100644 203 --- a/include/common.h 204 +++ b/include/common.h 205 @@ -273,7 +273,7 @@ int abortboot(int bootdelay); 206 extern char console_buffer[]; 207 208 /* arch/$(ARCH)/lib/board.c */ 209 -void board_init_f (ulong) __attribute__ ((noreturn)); 210 +unsigned int board_init_f(ulong) ; 211 void board_init_r (gd_t *, ulong) __attribute__ ((noreturn)); 212 int checkboard (void); 213 int checkflash (void); 214 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h 215 index 71336c7..b638eb4 100644 216 --- a/include/configs/smdk2440.h 217 +++ b/include/configs/smdk2440.h 218 @@ -39,7 +39,7 @@ 219 #define CONFIG_S3C2440 /* specifically a SAMSUNG S3C2410 SoC */ 220 #define CONFIG_SMDK2410 /* on a SAMSUNG SMDK2410 Board */ 221 222 -#define CONFIG_SYS_TEXT_BASE 0x0 223 +#define CONFIG_SYS_TEXT_BASE 0x33f00000 224 225 #define CONFIG_SYS_ARM_CACHE_WRITETHROUGH 226 227 zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$

添加了一個文件:board/samsung/smdk2440/init.c這里封裝了nandflash初始化等操作,nand_init_ll、copy_code_to_sdram,由于我們在start.S文件中重定位了代碼,因此不要在arch/arm/lib/board.c中要去掉重定位的操作relocate_code。

這個值CONFIG_SYS_TEXT_BASE為什么要設置為0x33f00000,這個值是程序鏈接的大小,bin文件的大小只有300多k,但是沒有包含bss等段,

反匯編查看文件的大小:0x00094b40的十進制是600多k,因此設置的CONFIG_SYS_TEXT_BASE我們設置為1M(設置大一點比較安全),我們的sdram的末端地址為0x34000000,0x3400000-0x33f00000=1M

1 arm-linux-objdump -D u-boot > u-boot.dis

編譯燒錄,開發(fā)板設置為nandflash啟動,根據(jù)下圖nandflash啟動還是可以輸出之前的log,設置成nandflash啟動的代碼修改暫時沒有問題,其余的bug后續(xù)修復.

?

?六、支持norflash:

首先我們來看看代碼為什么會打印? ? ?Flash:*** failed ***,norflash會調(diào)用這個進行初始化flash_init,如果初始化失敗,則會卡在hang中無法執(zhí)行,我們打開了調(diào)試信息之后,其實是識別出來norflash的,但是為什么會初始化失敗是由于jedec_table這個數(shù)組沒有添加我們norflash的型號導致的。

Board.c (arch\arm\lib)?

flash_init

      flash_detect_legacy

        jedec_flash_match

          jedec_table? ? //根據(jù)這個數(shù)組匹配有沒有相應的norflash型號

|
|success |------ |
|failed
|-----puts(failed);
|
|-----hang();norflash初始化失敗則會卡在這里

?代碼修改如下:

1 zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$ git diff . 2 diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c 3 index afafe7b..b8c17ae 100644 4 --- a/arch/arm/lib/board.c 5 +++ b/arch/arm/lib/board.c 6 @@ -527,8 +527,9 @@ void board_init_r(gd_t *id, ulong dest_addr) 7 print_size(flash_size, "\n"); 8 # endif /* CONFIG_SYS_FLASH_CHECKSUM */ 9 } else { 10 - puts(failed); 11 - hang(); 12 + puts("0 KB\r\n"); 13 + //puts(failed); 14 + //hang(); 15 } 16 #endif 17 18 diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c 19 index 35294bc..295003e 100644 20 --- a/drivers/mtd/cfi_flash.c 21 +++ b/drivers/mtd/cfi_flash.c 22 @@ -42,6 +42,9 @@ 23 #include <mtd/cfi_flash.h> 24 #include <watchdog.h> 25 26 +//#define DEBUG 1 27 +//#define _DEBUG 1 28 + 29 /* 30 * This file implements a Common Flash Interface (CFI) driver for 31 * U-Boot. 32 diff --git a/drivers/mtd/jedec_flash.c b/drivers/mtd/jedec_flash.c 33 index 2350f36..4037ec2 100644 34 --- a/drivers/mtd/jedec_flash.c 35 +++ b/drivers/mtd/jedec_flash.c 36 @@ -367,6 +367,24 @@ static const struct amd_flash_info jedec_table[] = { 37 } 38 }, 39 #endif 40 + { 41 + .mfr_id = (u16)MX_MANUFACT, 42 + .dev_id = 0x2249, 43 + .name = "MXIC MT29LV160DB", 44 + .uaddr = { 45 + [1] = MTD_UADDR_0x0555_0x02AA /* x16 */ 46 + }, 47 + .DevSize = SIZE_2MiB, 48 + .CmdSet = P_ID_AMD_STD, 49 + .NumEraseRegions= 4, 50 + .regions = { 51 + ERASEINFO(16*1024, 1), 52 + ERASEINFO(8*1024, 2), 53 + ERASEINFO(32*1024, 1), 54 + ERASEINFO(16*1024, 31), 55 + } 56 + }, 57 + 58 }; 59 60 static inline void fill_info(flash_info_t *info, const struct amd_flash_info *jedec_entry, ulong base) 61 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h 62 index b638eb4..9342042 100644 63 --- a/include/configs/smdk2440.h 64 +++ b/include/configs/smdk2440.h 65 @@ -187,7 +187,7 @@ 66 67 #define CONFIG_SYS_MAX_FLASH_BANKS 1 68 #define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE } 69 -#define CONFIG_SYS_MAX_FLASH_SECT (19) 70 +#define CONFIG_SYS_MAX_FLASH_SECT (128) 71 72 #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) 73 #define CONFIG_ENV_IS_IN_FLASH 74 zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$

?

按照上述方式進行修改,編譯燒錄現(xiàn)象如下,起碼norflash初始化不會報錯:

在uboot中進行norflash的讀寫實驗,從下圖可以看出norflash進行讀寫的實驗基本沒有問題,但是在0x3000000會有點問題:

?

由于之前在第一階段的時候講sp設置到了0x30000000,因此在調(diào)用函數(shù)的時候30000000的數(shù)據(jù)會變化,我們在第一階段的時候sp已經(jīng)重新定義了位置,在第二階段的時候沒有修改sp的指向,因此這里需要重新設置sp的地址:

修改代碼如下:

1 diff --git a/arch/arm/cpu/arm920t/start.S b/arch/arm/cpu/arm920t/start.S 2 index 34f7da8..a1876a5 100644 3 --- a/arch/arm/cpu/arm920t/start.S 4 +++ b/arch/arm/cpu/arm920t/start.S 5 @@ -110,6 +110,11 @@ FIQ_STACK_START: 6 IRQ_STACK_START_IN: 7 .word 0x0badc0de 8 9 +.globl base_sp 10 +base_sp: 11 + .long 0 12 + 13 + 14 /* 15 * the actual start code 16 */ 17 @@ -224,7 +229,9 @@ call_board_init_f: 18 bl board_init_f 19 20 ldr r1,_TEXT_BASE 21 - 22 + 23 + ldr sp,=base_sp 24 + 25 //second action 26 bl board_init_r 27 28 diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c 29 index afafe7b..6cd7352 100644 30 --- a/arch/arm/lib/board.c 31 +++ b/arch/arm/lib/board.c 32 @@ -262,6 +262,7 @@ unsigned int board_init_f(ulong bootflag) 33 init_fnc_t **init_fnc_ptr; 34 gd_t *id; 35 ulong addr, addr_sp; 36 + extern ulong base_sp; 37 #ifdef CONFIG_PRAM 38 ulong reg; 39 #endif 40 @@ -436,6 +437,8 @@ unsigned int board_init_f(ulong bootflag) 41 debug("relocation Offset is: %08lx\n", gd->reloc_off); 42 memcpy(id, (void *)gd, sizeof(gd_t)); 43 44 + base_sp = addr_sp; 45 + 46 //relocate_code(addr_sp, id, addr); 47

重新進行norflash的讀寫實驗,在0x3000000讀寫沒有問題.

?七、支持nandflash操作:

修改代碼如下:

1 diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile 2 index 1d1b628..1554712 100644 3 --- a/drivers/mtd/nand/Makefile 4 +++ b/drivers/mtd/nand/Makefile 5 @@ -59,6 +59,7 @@ COBJS-$(CONFIG_NAND_MXS) += mxs_nand.o 6 COBJS-$(CONFIG_NAND_NDFC) += ndfc.o 7 COBJS-$(CONFIG_NAND_NOMADIK) += nomadik.o 8 COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.o 9 +COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o 10 COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o 11 COBJS-$(CONFIG_NAND_SPEAR) += spr_nand.o 12 COBJS-$(CONFIG_NAND_OMAP_GPMC) += omap_gpmc.o 13 diff --git a/drivers/mtd/nand/s3c2440_nand.c b/drivers/mtd/nand/s3c2440_nand.c 14 index e1a459b..a0c8876 100644 15 --- a/drivers/mtd/nand/s3c2440_nand.c 16 +++ b/drivers/mtd/nand/s3c2440_nand.c 17 @@ -51,46 +51,47 @@ static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len) 18 } 19 #endif 20 21 -static void s3c2410_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) 22 +static void s3c2440_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl) 23 { 24 struct nand_chip *chip = mtd->priv; 25 - struct s3c2410_nand *nand = s3c2410_get_base_nand(); 26 - 27 - debug("hwcontrol(): 0x%02x 0x%02x\n", cmd, ctrl); 28 - 29 - if (ctrl & NAND_CTRL_CHANGE) { 30 - ulong IO_ADDR_W = (ulong)nand; 31 - 32 - if (!(ctrl & NAND_CLE)) 33 - IO_ADDR_W |= S3C2410_ADDR_NCLE; 34 - if (!(ctrl & NAND_ALE)) 35 - IO_ADDR_W |= S3C2410_ADDR_NALE; 36 + struct s3c2440_nand *nand = s3c2440_get_base_nand(); 37 38 - chip->IO_ADDR_W = (void *)IO_ADDR_W; 39 - 40 - if (ctrl & NAND_NCE) 41 - writel(readl(&nand->nfconf) & ~S3C2410_NFCONF_nFCE, 42 - &nand->nfconf); 43 - else 44 - writel(readl(&nand->nfconf) | S3C2410_NFCONF_nFCE, 45 - &nand->nfconf); 46 + if (ctrl &NAND_CLE){ 47 + writeb(dat,&nand->nfcmd); 48 + }else if (ctrl &NAND_ALE){ 49 + writeb(dat,&nand->nfaddr); 50 } 51 - 52 - if (cmd != NAND_CMD_NONE) 53 - writeb(cmd, chip->IO_ADDR_W); 54 } 55 56 -static int s3c2410_dev_ready(struct mtd_info *mtd) 57 +static int s3c2440_dev_ready(struct mtd_info *mtd) 58 { 59 - struct s3c2410_nand *nand = s3c2410_get_base_nand(); 60 + struct s3c2440_nand *nand = s3c2440_get_base_nand(); 61 debug("dev_ready\n"); 62 return readl(&nand->nfstat) & 0x01; 63 } 64 65 +static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr) 66 +{ 67 + struct s3c2440_nand *nand = s3c2440_get_base_nand(); 68 + 69 + switch (chipnr) { 70 + case -1: 71 + nand->nfcont |= (1<<1); 72 + break; 73 + case 0: 74 + nand->nfcont &= ~(1<<1); 75 + break; 76 + 77 + default: 78 + BUG(); 79 + } 80 +} 81 + 82 + 83 #ifdef CONFIG_S3C2410_NAND_HWECC 84 void s3c2410_nand_enable_hwecc(struct mtd_info *mtd, int mode) 85 { 86 - struct s3c2410_nand *nand = s3c2410_get_base_nand(); 87 + struct s3c2440_nand *nand = s3c2440_get_base_nand(); 88 debug("s3c2410_nand_enable_hwecc(%p, %d)\n", mtd, mode); 89 writel(readl(&nand->nfconf) | S3C2410_NFCONF_INITECC, &nand->nfconf); 90 } 91 @@ -126,7 +127,7 @@ int board_nand_init(struct nand_chip *nand) 92 u_int32_t cfg; 93 u_int8_t tacls, twrph0, twrph1; 94 struct s3c24x0_clock_power *clk_power = s3c24x0_get_base_clock_power(); 95 - struct s3c2410_nand *nand_reg = s3c2410_get_base_nand(); 96 + struct s3c2440_nand *nand_reg = s3c2440_get_base_nand(); 97 98 debug("board_nand_init()\n"); 99 100 @@ -143,17 +144,20 @@ int board_nand_init(struct nand_chip *nand) 101 twrph1 = 8; 102 #endif 103 104 - cfg = S3C2410_NFCONF_EN; 105 - cfg |= S3C2410_NFCONF_TACLS(tacls - 1); 106 - cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1); 107 - cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1); 108 + //cfg = S3C2410_NFCONF_EN; 109 + //cfg |= S3C2410_NFCONF_TACLS(tacls - 1); 110 + //cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1); 111 + //cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1); 112 + cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4); 113 writel(cfg, &nand_reg->nfconf); 114 115 + writel((1<<4)|(1<<1)|(1<<0), &nand_reg->nfcont); 116 + 117 /* initialize nand_chip data structure */ 118 nand->IO_ADDR_R = (void *)&nand_reg->nfdata; 119 nand->IO_ADDR_W = (void *)&nand_reg->nfdata; 120 121 - nand->select_chip = NULL; 122 + nand->select_chip = s3c2440_nand_select; 123 124 /* read_buf and write_buf are default */ 125 /* read_byte and write_byte are default */ 126 @@ -162,9 +166,9 @@ int board_nand_init(struct nand_chip *nand) 127 #endif 128 129 /* hwcontrol always must be implemented */ 130 - nand->cmd_ctrl = s3c2410_hwcontrol; 131 + nand->cmd_ctrl = s3c2440_hwcontrol; 132 133 - nand->dev_ready = s3c2410_dev_ready; 134 + nand->dev_ready = s3c2440_dev_ready; 135 136 #ifdef CONFIG_S3C2410_NAND_HWECC 137 nand->ecc.hwctl = s3c2410_nand_enable_hwecc; 138 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h 139 index 9342042..6f5710d 100644 140 --- a/include/configs/smdk2440.h 141 +++ b/include/configs/smdk2440.h 142 @@ -99,7 +99,7 @@ 143 #define CONFIG_CMD_DATE 144 #define CONFIG_CMD_DHCP 145 #define CONFIG_CMD_ELF 146 -//#define CONFIG_CMD_NAND 147 +#define CONFIG_CMD_NAND 148 #define CONFIG_CMD_PING 149 #define CONFIG_CMD_REGINFO 150 #define CONFIG_CMD_USB 151 @@ -208,8 +208,14 @@ 152 * NAND configuration 153 */ 154 #ifdef CONFIG_CMD_NAND 155 + 156 +#ifdef CONFIG_S3C2410 157 #define CONFIG_NAND_S3C2410 158 #define CONFIG_SYS_S3C2410_NAND_HWECC 159 +#else 160 +#define CONFIG_NAND_S3C2440 161 +#define CONFIG_SYS_S3C2440_NAND_HWECC 162 +#endif 163 #define CONFIG_SYS_MAX_NAND_DEVICE 1 164 #define CONFIG_SYS_NAND_BASE 0x4E000000 165 #endif

使用loady進行燒錄,現(xiàn)在串口輸入loady 30000000,之后按ctrl+A,之后按s,選擇ymodel,選擇文件即可使用loady進行燒錄

燒錄到Norflash

燒錄到nandflash:

  

啟動,識別到nandflash:

八、支持DM9000:

根據(jù)下圖可知uboot支持的是cs8900網(wǎng)卡,我們使用的是DM9000網(wǎng)卡,因此需要把dm9000編譯進uboot而不是cs8900,在配置文件添加這個宏CONFIG_DRIVER_DM9000

?根據(jù)下面的原理圖可知DM9000是使用nGCS4作為片選引腳,內(nèi)存的基地址要設置為0x2000_0000 ,

代碼修改如下,BANKCON4用于修改DM9000的時序:

?

zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$ git diff . diff --git a/board/samsung/smdk2440/lowlevel_init.S b/board/samsung/smdk2440/lowlevel_init.S index c14cab3..0adf662 100644 --- a/board/samsung/smdk2440/lowlevel_init.S +++ b/board/samsung/smdk2440/lowlevel_init.S @@ -157,7 +157,7 @@ SMRDATA:.long 0x00000700 //BANKCON1.long 0x00000700 //BANKCON2.long 0x00000700 //BANKCON3 -.long 0x00000700 //BANKCON4 +.long 0x00000740 //BANKCON4.long 0x00000700 //BANKCON5.long 0x00018005 //BANKCON6.long 0x00018005 //BANKCON7 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h index 6f5710d..780adb7 100644 --- a/include/configs/smdk2440.h +++ b/include/configs/smdk2440.h @@ -55,10 +55,17 @@/** Hardware drivers*/ + # if 0 #define CONFIG_CS8900 /* we have a CS8900 on-board */#define CONFIG_CS8900_BASE 0x19000300#define CONFIG_CS8900_BUS16 /* the Linux driver does accesses as shorts */ +#else +#define CONFIG_DRIVER_DM9000 +#define CONFIG_DM9000_BASE 0x20000000 +#define DM9000_IO CONFIG_DM9000_BASE +#define DM9000_DATA (CONFIG_DM9000_BASE + 4)+#endif/** select serial console configuration*/

?

編譯燒錄:現(xiàn)象如下,顯示沒有找到網(wǎng)卡:

在uboot里網(wǎng)卡初始化流程如下,由于沒有修改成DM9000的初始化導致的:

puts("Net: ");
eth_initialize(gd->bd);

    |

    int board_eth_init(bd_t *bis)
    {
      int rc = 0;
      #ifdef CONFIG_CS8900
      rc = cs8900_initialize(0, CONFIG_CS8900_BASE);
      #endif
      return rc;
    }
    #endif

代碼修改如下:

1 diff --git a/board/samsung/smdk2440/smdk2410.c b/board/samsung/smdk2440/smdk2410.c 2 index 44f38d1..b56f8aa 100644 3 --- a/board/samsung/smdk2440/smdk2410.c 4 +++ b/board/samsung/smdk2440/smdk2410.c 5 @@ -138,6 +138,11 @@ int board_eth_init(bd_t *bis) 6 #ifdef CONFIG_CS8900 7 rc = cs8900_initialize(0, CONFIG_CS8900_BASE); 8 #endif 9 + 10 +#ifdef CONFIG_DRIVER_DM9000 11 + rc = dm9000_initialize(bis); 12 +#endif 13 + 14 return rc; 15 } 16 #endif

編譯燒錄現(xiàn)象如下,識別到DM9000,并且ping成功:

使用tftp下載:

安裝相關的軟件

1 apt-get install tftp-hpa tftpd-hpa xinetd

修改配置文件:

sudo vim /etc/default/tftpd-hpa

# /etc/default/tftpd-hpaTFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" TFTP_ADDRESS=":69" TFTP_OPTIONS="--secure"

創(chuàng)建tftp的目錄

1 sudo mkdir /tftpboot 2 sudo chmod 777 /tftpboot

使用tftp下載內(nèi)核實驗如下,成功下載內(nèi)核,因此uboot對應dm9000的修改暫時沒有問題:

九、修改默認參數(shù)以及裁剪uboot

代碼修改如下:

?

1 zhuang@zhuang:~/project/3-jz2440/systems/u-boot-2012.04.01$ git diff . 2 diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c 3 index 6cd7352..634f4c8 100644 4 --- a/arch/arm/lib/board.c 5 +++ b/arch/arm/lib/board.c 6 @@ -654,6 +654,9 @@ void board_init_r(gd_t *id, ulong dest_addr) 7 } 8 #endif 9 10 + //mtdparts_init(); 11 + run_command("mtdparts default",0); //在執(zhí)行mtdpart之前需要運行mtdparts default 進行初始化設置 12 + 13 /* main_loop() can return to retry autoboot, if so just run it again. */ 14 for (;;) { 15 main_loop(); 16 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h 17 index bb3f227..709071d 100644 18 --- a/include/configs/smdk2440.h 19 +++ b/include/configs/smdk2440.h 20 @@ -75,15 +75,15 @@ 21 /************************************************************ 22 * USB support (currently only works with D-cache off) 23 ************************************************************/ 24 -#define CONFIG_USB_OHCI 25 -#define CONFIG_USB_KEYBOARD 26 -#define CONFIG_USB_STORAGE 27 -#define CONFIG_DOS_PARTITION 28 +//#define CONFIG_USB_OHCI //裁剪沒有用到的模塊 29 +//#define CONFIG_USB_KEYBOARD 30 +//#define CONFIG_USB_STORAGE 31 +//#define CONFIG_DOS_PARTITION 32 33 /************************************************************ 34 * RTC 35 ************************************************************/ 36 -#define CONFIG_RTC_S3C24X0 37 +//#define CONFIG_RTC_S3C24X0 38 39 40 #define CONFIG_BAUDRATE 115200 41 @@ -91,10 +91,10 @@ 42 /* 43 * BOOTP options 44 */ 45 -#define CONFIG_BOOTP_BOOTFILESIZE 46 -#define CONFIG_BOOTP_BOOTPATH 47 -#define CONFIG_BOOTP_GATEWAY 48 -#define CONFIG_BOOTP_HOSTNAME 49 +//#define CONFIG_BOOTP_BOOTFILESIZE 50 +//#define CONFIG_BOOTP_BOOTPATH 51 +//#define CONFIG_BOOTP_GATEWAY 52 +//#define CONFIG_BOOTP_HOSTNAME 53 54 /* 55 * Command line configuration. 56 @@ -103,13 +103,13 @@ 57 58 #define CONFIG_CMD_BSP 59 #define CONFIG_CMD_CACHE 60 -#define CONFIG_CMD_DATE 61 -#define CONFIG_CMD_DHCP 62 +//#define CONFIG_CMD_DATE 63 +//#define CONFIG_CMD_DHCP 64 #define CONFIG_CMD_ELF 65 #define CONFIG_CMD_NAND 66 #define CONFIG_CMD_PING 67 #define CONFIG_CMD_REGINFO 68 -#define CONFIG_CMD_USB 69 +//#define CONFIG_CMD_USB 70 71 #define CONFIG_SYS_HUSH_PARSER 72 #define CONFIG_SYS_PROMPT_HUSH_PS2 "> " 73 @@ -162,7 +162,7 @@ 74 75 76 #define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3" 77 -#define CONFIG_BOOTCOMMAND "nand read 30000000 0xabc 0x200000;bootm 30000000" 78 +#define CONFIG_BOOTCOMMAND "nand read 30000000 kernel 0x200000;bootm 30000000" 79 #define CONFIG_ETHADDR "00:06:3b:01:41:55" 80 /*----------------------------------------------------------------------- 81 * Stack sizes 82 @@ -200,11 +200,28 @@ 83 #define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE } 84 #define CONFIG_SYS_MAX_FLASH_SECT (128) 85 86 +#if 0 87 #define CONFIG_ENV_ADDR (CONFIG_SYS_FLASH_BASE + 0x070000) 88 #define CONFIG_ENV_IS_IN_FLASH 89 #define CONFIG_ENV_SIZE 0x10000 90 /* allow to overwrite serial and ethaddr */ 91 #define CONFIG_ENV_OVERWRITE 92 +#endif 93 + 94 +#define CONFIG_ENV_IS_IN_NAND 95 +#define CONFIG_ENV_OFFSET 0x00040000 //設置params分區(qū)存放的大小和便宜 96 +#define CONFIG_ENV_SIZE 0x20000 /* nand blcok size */ 97 +#define CONFIG_ENV_RANGE CONFIG_ENV_SIZE 98 + 99 +#define CONFIG_CMD_MTDPARTS 100 +#define CONFIG_MTD_DEVICE 101 +#define MTDIDS_DEFAULT "nand0=jz2440-0" // which device 102 + //mtdparts 命令對nandflash的劃分 103 +#define MTDPARTS_DEFAULT "mtdparts=jz2440-0:256k(u-boot)," \ 104 + "128k(params)," \ 105 + "2m(kernel)," \ 106 + "-(rootfs)" 107 + 108 109 /* 110 * Size of malloc() pool 111 @@ -234,6 +251,7 @@ 112 /* 113 * File system 114 */ 115 + #if 0 116 #define CONFIG_CMD_FAT 117 #define CONFIG_CMD_EXT2 118 #define CONFIG_CMD_UBI 119 @@ -241,9 +259,9 @@ 120 #define CONFIG_CMD_MTDPARTS 121 #define CONFIG_MTD_DEVICE 122 #define CONFIG_MTD_PARTITIONS 123 -//#define CONFIG_YAFFS2 124 +#define CONFIG_YAFFS2 125 #define CONFIG_RBTREE 126 - 127 +#endif 128 /* additions for new relocation code, must be added to all boards */ 129 #define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1 130 #define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - \

?

設置默認的環(huán)境變量修改文件include/configs/smdk2440.h

1 /* 2 * select serial console configuration 3 */ 4 @@ -115,8 +122,8 @@ 5 #define CONFIG_ZERO_BOOTDELAY_CHECK 6 7 #define CONFIG_NETMASK 255.255.255.0 8 -#define CONFIG_IPADDR 10.0.0.110 9 -#define CONFIG_SERVERIP 10.0.0.1 10 +#define CONFIG_IPADDR 192.168.1.17 11 +#define CONFIG_SERVERIP 192.168.1.100 12 13 #if defined(CONFIG_CMD_KGDB) 14 #define CONFIG_KGDB_BAUDRATE 115200 /* speed to run kgdb serial port */ 15 @@ -153,6 +160,10 @@ 16 #define CONFIG_LZO 17 #define CONFIG_LZMA 18 19 + 20 +#define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3" 21 +#define CONFIG_BOOTCOMMAND "nand read 30000000 0xabc 0x200000;bootm 30000000" 22 +#define CONFIG_ETHADDR "00:06:3b:01:41:55" 23 /*-----------------------------------------------------------------------

?

編譯燒錄,設置默認的環(huán)境變量生效:

?tftp下載uboot到sdram,解除寫保護,擦除分區(qū),從內(nèi)存拷貝到norflash。

下載內(nèi)核到nandflash

從nandflash讀到sdram并啟動

支持mtdpart命令:

?利用分區(qū)名進行燒錄,擦除等操作

十、uboot支持jffs2文件系統(tǒng)燒錄,默認支持jffs2文件系統(tǒng)燒錄

支持yaffs2文件系統(tǒng),代碼修改如下:

1 diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c 2 old mode 100644 3 new mode 100755 4 index 60c778e..f9c4a88 5 --- a/drivers/mtd/nand/nand_util.c 6 +++ b/drivers/mtd/nand/nand_util.c 7 @@ -515,7 +515,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, 8 return -EINVAL; 9 } 10 11 - if (!need_skip && !(flags & WITH_DROP_FFS)) { 12 + if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) { 13 rval = nand_write (nand, offset, length, buffer); 14 if (rval == 0) 15 return 0; 16 @@ -553,7 +553,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, 17 18 ops.len = pagesize; 19 ops.ooblen = nand->oobsize; 20 - ops.mode = MTD_OOB_AUTO; 21 + ops.mode = MTD_OOB_RAW; 22 ops.ooboffs = 0; 23 24 pages = write_size / pagesize_oob; 25 @@ -564,7 +564,7 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length, 26 ops.oobbuf = ops.datbuf + pagesize; 27 28 rval = nand->write_oob(nand, offset, &ops); 29 - if (!rval) 30 + if (rval) 31 break; 32 33 offset += pagesize; 34 diff --git a/include/configs/smdk2440.h b/include/configs/smdk2440.h 35 index 709071d..dc25330 100644 36 --- a/include/configs/smdk2440.h 37 +++ b/include/configs/smdk2440.h 38 @@ -160,7 +160,7 @@ 39 #define CONFIG_LZO 40 #define CONFIG_LZMA 41 42 - 43 +#define CONFIG_CMD_NAND_YAFFS 44 #define CONFIG_BOOTARGS "console=ttySAC0 root=/dev/mtdblock3" 45 #define CONFIG_BOOTCOMMAND "nand read 30000000 kernel 0x200000;bootm 30000000" 46 #define CONFIG_ETHADDR "00:06:3b:01:41:55"

?

更新uboot

?

?燒錄yaffs文件系統(tǒng)

?使用yaffs文件系統(tǒng)啟動Ok

?

轉(zhuǎn)載于:https://www.cnblogs.com/zzb-Dream-90Time/p/9703328.html

總結(jié)

以上是生活随笔為你收集整理的jz2440-uboot-201204版本移植【学习笔记】【原创】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

日韩在线观看视频在线 | 成年人在线播放视频 | 日韩综合一区二区三区 | 成人av电影在线观看 | 在线超碰av | 91麻豆精品国产 | 国产精品一区二区美女视频免费看 | 天天色天天操天天爽 | 日韩欧美视频免费看 | 国产精品去看片 | 亚洲欧美日韩一区二区三区在线观看 | 久久久综合精品 | 黄色日视频 | 999成人国产 | 久久久电影网站 | 中文字幕在线看视频国产中文版 | 蜜桃久久久 | 午夜视频在线网站 | 521色香蕉网站在线观看 | 99精品热视频 | 日本女人逼| 日韩理论在线观看 | 日本久久免费视频 | 国产视频中文字幕在线观看 | 69av久久 | 久久一区国产 | 五月婷婷一级片 | 中文字幕在线播放第一页 | 久久久国产成人 | 91亚洲精品久久久蜜桃借种 | 蜜桃av人人夜夜澡人人爽 | 欧美日韩一区三区 | 日韩毛片一区 | av在线播放网址 | 2019av在线视频 | 日本久久久精品视频 | 久久无码av一区二区三区电影网 | 六月丁香婷婷在线 | 91在线产啪| 久久一区二区三区国产精品 | 黄色亚洲免费 | 国产在线播放一区二区三区 | 国产小视频在线 | 精品久久国产精品 | 国产精品网址在线观看 | av在线在线 | 亚洲国产欧美在线人成大黄瓜 | 美女国产网站 | 国产 一区二区三区 在线 | 欧美日韩国产成人 | 久久久精品国产免费观看一区二区 | 婷婷丁香狠狠爱 | 天天摸天天弄 | 国产色视频一区二区三区qq号 | 国产午夜一区 | 在线免费观看视频一区 | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美超碰在线 | 国产资源在线播放 | 97国产在线播放 | 久久爽久久爽久久av东京爽 | 涩涩网站在线播放 | www.xxxx欧美| 国产精品一区二区果冻传媒 | 亚洲精品99久久久久久 | 国产午夜小视频 | 国产成人一区二区三区影院在线 | va视频在线| 亚洲 欧洲av | 国产免码va在线观看免费 | 国产精品99蜜臀久久不卡二区 | 天天天操天天天干 | 中文字幕在线播放第一页 | 狠狠色丁香婷婷综合久小说久 | 99视频播放 | 日韩在线第一 | 操操操综合| 日韩激情免费视频 | 操操操com | 激情五月婷婷激情 | 天天玩夜夜操 | 色综合久久久久久中文网 | 就要干b | 在线观看av小说 | 色国产精品一区在线观看 | 福利网址在线观看 | 久草国产在线观看 | 亚洲精品免费观看视频 | 日韩中文字幕免费 | 黄网站大全 | 啪啪免费观看网站 | 欧美大片第1页 | 国产视频欧美视频 | 久久综合九色九九 | 91精品人成在线观看 | 日韩av电影免费观看 | 日本久久不卡视频 | 成人av高清在线 | 在线观看国产中文字幕 | www免费网站在线观看 | 在线视频观看成人 | 一级片视频在线 | 午夜久久久久久久久久久 | 一区二区三区四区五区六区 | 天天草网站 | 成人黄色影片在线 | 99c视频高清免费观看 | 国产第一二区 | 91精品一区二区三区蜜臀 | 久久精品99国产精品亚洲最刺激 | 永久免费av在线播放 | 国产性xxxx | 中文字幕在线视频一区二区 | 日韩中文字幕在线 | 日韩视频一二三区 | 夜夜夜夜夜夜操 | 久久久久免费精品国产小说色大师 | 精品免费在线视频 | 国产精品一区二区在线观看 | 亚洲乱码在线 | 中文字幕亚洲欧美日韩 | 日本黄色免费在线 | 亚洲一级影院 | 免费男女羞羞的视频网站中文字幕 | 久久tv | 亚洲婷婷免费 | 天天操天天干天天爱 | 99久久er热在这里只有精品15 | 久久亚洲二区 | 国产激情小视频在线观看 | 国产福利av | 亚洲国内精品在线 | www在线观看视频 | 国产精品亚州 | 亚洲无吗av | 国产韩国精品一区二区三区 | 99热高清| 日韩系列 | 免费观看91 | 国产精品久久久久久久久费观看 | 欧美另类sm图片 | www.色五月 | 亚洲最大在线视频 | 国产精品色婷婷视频 | avv天堂| 日韩免费观看高清 | 欧美人交a欧美精品 | 在线国产欧美 | 欧美激情综合五月 | 91视频 - 88av| 国产九九在线 | 99精品免费在线 | 在线观看日本高清mv视频 | 麻豆精品国产传媒 | 久久九九精品 | 最近中文字幕在线播放 | 婷婷在线不卡 | 香蕉影视 | 黄色一集片 | 天天躁日日躁狠狠躁av麻豆 | 黄色av影院 | 成人免费观看视频大全 | 91精品国产综合久久婷婷香蕉 | 96在线 | 久久精品中文字幕少妇 | 在线视频 日韩 | 成人免费观看在线视频 | 精品一二三区 | 顶级欧美色妇4khd | 人人澡人人草 | 超碰97免费 | 久久综合狠狠综合久久综合88 | 男女男视频 | 在线观看成人网 | 日韩网站在线 | 日韩高清在线一区 | 欧美a在线看 | 国产一区高清在线 | 亚洲日本黄色 | 精品一区二区三区久久久 | 久久美女高清视频 | 成人免费影院 | 激情综合啪 | 久插视频 | 黄色成人在线观看 | 一本一本久久a久久精品牛牛影视 | 成人av高清在线观看 | 亚洲精品在线观看中文字幕 | 在线电影播放 | 永久av免费在线观看 | 国内精品久久久久影院男同志 | 免费网站观看www在线观看 | 在线va视频| 日本午夜在线亚洲.国产 | 免费在线观看av不卡 | 日韩试看 | 成人在线免费观看视视频 | 狠狠操欧美 | 国产精品免费久久久久 | 欧美午夜精品久久久久久浪潮 | 色婷婷激情网 | 国产999精品久久久久久麻豆 | 激情久久久久久久久久久久久久久久 | 色综合夜色一区 | 91麻豆精品国产91久久久无需广告 | 精品一区二区三区久久久 | 国产一区二区精 | 国产精品一区免费看8c0m | 天堂av在线免费观看 | 久久成人国产精品免费软件 | 国产又粗又硬又爽视频 | 国产极品尤物在线 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 中文字幕在线观看91 | 99re在线视频观看 | 91在线免费视频 | 亚洲成色777777在线观看影院 | 国产精品av免费在线观看 | 日韩在线观看电影 | 成人免费共享视频 | 天天碰天天操视频 | 日本精品久久久久中文字幕5 | 丁香花在线观看视频在线 | 色九九影院 | 精品99在线 | 中文理论片 | 国产二区视频在线观看 | 欧美精品v国产精品v日韩精品 | 色福利网 | 国产对白av | 亚洲精品乱码久久久久久久久久 | 日躁夜躁狠狠躁2001 | 久久黄色影院 | 国产精品久久久久久a | 欧美精品在线观看免费 | 久久艹在线观看 | 亚州精品一二三区 | 粉嫩av一区二区三区四区五区 | 精品毛片一区二区免费看 | 99久久超碰中文字幕伊人 | 精品国产乱码一区二 | 欧美在线观看视频免费 | 在线看片日韩 | 国产黑丝袜在线 | 欧美极品一区二区三区 | 国产综合婷婷 | 天天爱av导航 | 天天爱天天操天天干 | 天天干天天拍天天操 | 天天插天天狠 | 精品久久久久久国产偷窥 | 色偷偷网站视频 | 亚洲精品国偷自产在线91正片 | 丁香婷婷激情 | 久艹视频在线免费观看 | 麻豆视频国产 | av在线不卡观看 | 日韩网站在线免费观看 | 91精品在线免费视频 | 国产乱视频 | 久久精品黄 | 免费十分钟 | 久久精品影片 | 狠狠操狠狠| 欧美一区二区三区在线播放 | 亚洲成人精品 | av一区二区三区在线 | 韩国精品在线观看 | 亚洲 欧美 日韩 综合 | 日韩视频欧美视频 | 欧美亚洲成人xxx | 欧美,日韩| 在线欧美最极品的av | 欧美成人在线免费观看 | 久久免费视频网站 | 天天操夜夜拍 | 日韩av电影国产 | 日韩av电影网站在线观看 | 在线观看视频日韩 | 在线国产91 | 国产日韩视频在线播放 | 五月激情丁香婷婷 | 亚洲尺码电影av久久 | 日韩xxxx视频| 日韩最新av | 黄色三级免费网址 | 天天操天天操天天 | 国产在线观看免费 | 最新av观看| 91av在线免费播放 | 美女国产在线 | 日日操天天操夜夜操 | 中文超碰字幕 | 欧美国产一区在线 | 在线观看免费黄视频 | 国产精品大尺度 | 中文一区在线 | 激情综合色播五月 | 888av| 黄色毛片在线看 | 中文字幕成人在线 | 久久久久国产成人免费精品免费 | 国产69精品久久99不卡的观看体验 | 男女激情麻豆 | 91成人在线视频观看 | 天天干亚洲 | 在线观看的av | 日韩精品免费一区二区三区 | 伊人中文网 | 亚洲乱码久久 | 亚洲午夜av电影 | 色综合久久久久综合体 | 九九热免费观看 | 超碰国产97 | 欧美日韩首页 | 欧美成人xxxxx | 欧美日产在线观看 | 99精品欧美一区二区 | 国产91精品一区二区麻豆网站 | 欧洲亚洲国产视频 | 国产精品第 | 香蕉久草| 日韩精品一区二区三区水蜜桃 | 国产一区二区视频在线播放 | 国产成本人视频在线观看 | 久久精品999 | 国产一级黄色免费看 | 日本午夜免费福利视频 | 国产高清精品在线 | 国产福利一区在线观看 | av免费网站 | 久久国产精品99久久久久久进口 | 久久99热这里只有精品国产 | 91在线播放国产 | 在线免费高清视频 | 久久精品国产一区二区电影 | 射九九 | 欧美性色黄 | 国产精品久久久久久麻豆一区 | 亚洲色图激情文学 | 国产一级在线免费观看 | 日日插日日干 | 久久精品国产亚洲精品2020 | 精品99在线| 国产中文字幕av | 午夜影院在线观看18 | 91看片看淫黄大片 | 成人av一二三区 | 国产精品麻豆果冻传媒在线播放 | 99久热精品| 国产九色91 | 91视频-88av | 亚洲影音先锋 | 黄色在线观看免费网站 | 亚洲麻豆精品 | 午夜视频在线观看一区二区 | www.久草视频 | 一本一本久久a久久精品综合妖精 | 亚洲区另类春色综合小说 | 91在线视频免费播放 | 欧美成人精品在线 | 日韩黄色免费电影 | 久久av不卡 | 中文字幕有码在线 | 国产午夜三级 | 欧美福利片在线观看 | 六月丁香激情综合 | 久久女教师 | 在线观看视频h | 99婷婷 | 国产亚洲综合在线 | 午夜久久网 | 免费一级片久久 | 欧美日韩精品久久久 | 久草视频看看 | 免费碰碰 | 国产在线不卡一区 | 在线色视频小说 | 91精品国产自产老师啪 | 免费看成人a | 天天色天天干天天 | 韩国视频一区二区三区 | 狠狠狠狠狠干 | 免费日韩精品 | 99精品视频中文字幕 | 四虎在线视频免费观看 | a在线视频v视频 | 色婷婷亚洲精品 | 91资源在线 | 国产一卡久久电影永久 | 91精品视频网站 | 成年人免费看的视频 | 久久国产露脸精品国产 | 九九精品久久久 | 亚洲欧美日韩精品一区二区 | 免费人成在线观看网站 | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲国产色一区 | 天天想夜夜操 | a在线观看视频 | 热久久免费视频精品 | 夜夜天天干 | 日韩电影中文字幕 | 99精品系列 | 国产又粗又猛又色又黄网站 | 欧美久久久久久久久 | 中文字幕一区二区三区久久蜜桃 | 在线观看国产一区二区 | 成人精品视频久久久久 | 亚洲欧美日本国产 | 欧美一二三区播放 | 国产午夜精品免费一区二区三区视频 | 极品嫩模被强到高潮呻吟91 | 狠狠色狠狠色综合日日小说 | 色婷婷狠狠18| 精品字幕在线 | 久久99久久99久久 | 免费观看一级特黄欧美大片 | 日本中文字幕免费观看 | 成年人国产在线观看 | 成人手机在线视频 | 国产精品久久久久久久婷婷 | 中文字幕大全 | 中文字幕在线观看网 | 欧美日韩国产精品一区二区亚洲 | 国产亲近乱来精品 | 特及黄色片 | 免费视频国产 | 免费观看国产精品视频 | 在线观看中文字幕亚洲 | 国产护士在线 | 国产成人在线观看 | 国产精品一区久久久久 | 成人免费视频在线观看 | 精品国产伦一区二区三区观看体验 | 精品视频免费久久久看 | 国产精品久久电影网 | 免费观看黄 | 久久久久国产成人精品亚洲午夜 | 日韩高清一区 | 在线看一级片 | 久久草| 久久精品视频观看 | 日韩久久精品 | 911久久| 在线观看国产一区 | 久久一二三四 | 伊人看片 | 99国产精品 | 日韩精品黄 | 一区二区精品视频 | 亚洲精品久久久久久久不卡四虎 | 色小说在线| 国产亚州av | 99视频在线免费播放 | 日本在线观看中文字幕无线观看 | 亚洲少妇激情 | 免费精品国产va自在自线 | 激情五月伊人 | 毛片网站在线看 | 91九色蝌蚪视频网站 | 国产中文字幕在线观看 | 久久精品五月 | 国产精品免费久久久久久 | 国产日产在线观看 | 欧美日韩不卡在线观看 | 看全黄大色黄大片 | 日韩免费视频线观看 | 最新av在线网站 | 精品在线一区二区三区 | 51久久夜色精品国产麻豆 | 日韩免费视频播放 | 激情欧美日韩一区二区 | 日本久久综合视频 | 久久久久久亚洲精品 | 天天操天天操一操 | 婷婷六月久久 | 久久久精品综合 | 一级电影免费在线观看 | 亚洲精品久久视频 | 福利视频第一页 | www五月天婷婷 | 精品一区二区av | www.午夜| 尤物九九久久国产精品的分类 | www.国产在线视频 | 99视频在线免费观看 | 中文字幕在线观看2018 | 国产成人av一区二区三区在线观看 | 91精品播放| 国产黄免费 | 狠狠的日 | 久久久国产精品视频 | 狠狠干,狠狠操 | 成人性生交大片免费观看网站 | 国产精品手机在线播放 | 麻豆免费精品视频 | 久草免费在线观看 | 日韩午夜精品 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 午夜免费在线观看 | 亚洲天堂网视频在线观看 | 波多野结衣一区二区三区中文字幕 | 欧美一区二区三区特黄 | av天天澡天天爽天天av | 日韩欧美在线观看一区 | 久久视频一区 | 中文字幕在线看片 | 最近最新中文字幕视频 | 欧美乱熟臀69xxxxxx | 日韩中文字幕在线看 | 开心丁香婷婷深爱五月 | 最新在线你懂的 | 五月激情五月激情 | 激情网在线观看 | 国产看片免费 | www.av免费观看| 国产韩国日本高清视频 | 国产色a在线观看 | 久久久久久久久久亚洲精品 | 成人a级免费视频 | 深夜精品福利 | 天天射天天拍 | 成年人网站免费在线观看 | 人人爽人人干 | 久操免费视频 | 亚洲精品一区二区三区新线路 | av资源在线观看 | 超碰97免费| 亚洲一级电影在线观看 | 在线观看国产亚洲 | www色com | 中文字幕乱码一区二区 | 久草网站在线观看 | 精品国产伦一区二区三区观看方式 | 91黄色免费看 | 欧美伊人网| 国内精品久久久久影院男同志 | 国产高清精品在线观看 | 日日干视频 | 91麻豆精品国产91久久久久久久久 | 最新av免费 | 精品日韩中文字幕 | 在线性视频日韩欧美 | 国产黄 | 国产精品手机播放 | 精品嫩模福利一区二区蜜臀 | 超碰在线9 | 国产精品一区二区麻豆 | 久久黄色小说 | 成人av免费看 | 国产福利精品在线观看 | 97超碰人人澡| 久久成人国产精品入口 | 黄色网址国产 | 日韩激情小视频 | 久久精品中文字幕一区二区三区 | 伊人色综合久久天天网 | 国内视频1区 | 波多野结衣一区三区 | 999电影免费在线观看2020 | 午夜免费福利视频 | 激情欧美一区二区免费视频 | 亚州国产精品视频 | 狠狠干狠狠色 | 亚洲黄色片在线 | 日韩视频免费在线观看 | 黄色国产区 | 国产黄a三级三级 | 国产精品理论视频 | 国产精品久久久久三级 | 91视频成人免费 | 手机av网站 | 91色网址 | 国产高清在线免费视频 | 综合天堂av久久久久久久 | 久久tv | 色天天| 久草在线观看 | 一区二区中文字幕在线 | 国产精品免费在线视频 | 毛片网站免费在线观看 | 国产69精品久久99不卡的观看体验 | 中文字幕一区二区三区在线播放 | 精品福利片 | av电影中文字幕在线观看 | 2023年中文无字幕文字 | 波多野结衣一区 | 日日躁夜夜躁aaaaxxxx | 成人高清在线 | 国产电影黄色av | 丁香激情婷婷 | 91传媒在线 | 国产99视频在线观看 | 日本免费久久高清视频 | 久草视频在线资源站 | 午夜视频福利 | 国内精品视频久久 | 久久久久久久免费 | 国产一区免费在线 | 91大神免费视频 | 国产最新91 | 国产一区私人高清影院 | 夜夜视频资源 | 日精品| 免费日韩一区二区 | 国产欧美中文字幕 | 99 视频 高清 | 日韩在线在线 | 日韩精品视频在线免费观看 | 色六月婷婷| 韩日av一区二区 | 国产精品一区在线观看 | 五月天六月婷婷 | 亚洲欧洲精品久久 | 91高清一区| 国产精品第52页 | 日日夜夜91| 国产成人精品999在线观看 | 亚洲精品午夜一区人人爽 | 亚洲综合网站在线观看 | 日韩特黄一级欧美毛片特黄 | 成人免费观看完整版电影 | 99视频这里有精品 | 国产高清久久久 | 国产精品一区二区三区四 | 伊在线视频 | 日本公妇色中文字幕 | 国产精品免费在线 | 国产精品综合久久久久 | 免费视频一级片 | 久久精品com | 免费大片黄在线 | 视频一区二区在线观看 | 中文在线免费观看 | 成人精品一区二区三区电影免费 | 国产色女人| 久久免费视频在线观看 | 国产91全国探花系列在线播放 | 成人在线播放av | 中文区中文字幕免费看 | 久久久黄视频 | 国产精品亚洲视频 | 久久成人18免费网站 | 日韩在线激情 | 国产精品久久嫩一区二区免费 | 国产精品国产三级国产专区53 | 亚洲乱码在线观看 | 久久成年人网站 | 久久人人艹 | 91丨九色丨国产女 | 日韩视频免费播放 | 在线看成人av | 99在线精品视频 | 国内丰满少妇猛烈精品播 | 久久成年人视频 | 毛片黄色一级 | 91中文在线视频 | 婷婷 综合 色 | 国产精品 久久 | 国产精品不卡在线播放 | 亚洲精品视频免费观看 | 久久撸在线视频 | 国产精品视频不卡 | 午夜国产在线 | 国产精品岛国久久久久久久久红粉 | 美女一二三区 | 四虎影视精品成人 | 国产一级二级在线 | 一级理论片在线观看 | 亚洲黄色在线免费观看 | a v在线观看 | 国产一级一片免费播放放a 一区二区三区国产欧美 | 欧美日韩成人 | 久久免费99精品久久久久久 | 中文一区二区三区在线观看 | 午夜精品久久久久久久久久久 | 久久99欧美 | 亚洲精品国偷自产在线91正片 | 精品国产伦一区二区三区 | 欧美巨大荫蒂茸毛毛人妖 | 911在线 | 日韩成人在线免费观看 | 热re99久久精品国产99热 | www.av小说| 亚洲自拍自偷 | 久草精品资源 | 国产精品丝袜在线 | 天天操夜夜曰 | 伊人婷婷综合 | 综合久久婷婷 | 亚洲视频播放 | 色在线免费观看 | 午夜精品久久久久久久久久久久 | 久久99视频免费 | 久久69精品 | 亚洲欧洲精品一区二区 | 天天干天天拍天天操天天拍 | 一区二区三区在线播放 | 亚洲在线激情 | 在线视频手机国产 | 黄色高清视频在线观看 | 久久精品国产精品亚洲精品 | 99久久久久久久久 | 国产视频不卡一区 | 国产精品18久久久久久久久 | 丝袜av一区 | 欧美日韩一区二区三区视频 | 丁香五婷| 日韩丝袜视频 | 超碰成人av| 欧美精品三级 | 国产精品久久久久久久久久久不卡 | 丝袜+亚洲+另类+欧美+变态 | 久久久久国产精品一区 | 色国产在线 | www.777奇米 | 五月天色网站 | 亚洲精品资源在线 | 91精品办公室少妇高潮对白 | 特及黄色片| 91污污视频在线观看 | 在线免费观看视频你懂的 | 日韩欧美一区二区三区黑寡妇 | 久久久久久久久免费 | 91在线精品一区二区 | 手机在线日韩视频 | 91视频免费 | 国产精品99视频 | 一区二区三区日韩视频在线观看 | 亚洲最新视频在线 | 不卡视频国产 | 亚洲小视频在线观看 | av超碰在线 | 久久精品专区 | 亚洲女同videos| 九九精品毛片 | 天天干国产 | 久久网站最新地址 | 亚洲免费成人av电影 | 亚洲91中文字幕无线码三区 | 韩国av免费看 | 国产一级大片在线观看 | 999国内精品永久免费视频 | 国产精品第54页 | 黄色大全视频 | 激情欧美一区二区三区免费看 | 天天插伊人| 超碰人人干人人 | 91看片在线免费观看 | 丝袜美腿亚洲综合 | 丁香六月综合网 | av在线专区 | 少妇搡bbbb搡bbb搡忠贞 | 九九九电影免费看 | 久久精品网站视频 | 久久99精品国产麻豆婷婷 | 午夜精品久久久久99热app | 国产黑丝一区二区三区 | 精品一区精品二区高清 | 九九热视频在线播放 | 久久伊人五月天 | 色婷婷综合久久久久中文字幕1 | 久久免费av | 国内精品久久久精品电影院 | 天天色图 | 亚洲精品玖玖玖av在线看 | 国产精品一码二码三码在线 | 涩涩网站在线看 | 国产精品女同一区二区三区久久夜 | 美女视频黄网站 | 天天干天天干天天操 | 亚洲精品视频免费观看 | 麻豆一精品传二传媒短视频 | 人人玩人人爽 | 中文在线中文a | 免费一级片在线观看 | 免费影视大全推荐 | 色五月色开心色婷婷色丁香 | 久久久久国产视频 | 国际精品网 | 中文字幕资源在线 | 日韩高清在线不卡 | 超碰在线最新地址 | 亚洲综合色站 | 久久精品日产第一区二区三区乱码 | 免费在线观看黄 | 视频在线观看国产 | 天天se天天cao天天干 | 超碰av在线 | 欧美孕交vivoestv另类 | 国产97色在线 | 香蕉网在线观看 | 波多野结衣理论片 | 韩国在线视频一区 | 国产精品一区二区三区免费视频 | 国色天香永久免费 | 国产精品一区久久久久 | 麻豆久久一区二区 | 国产日韩欧美在线 | 久久久999 | 天天干天天操天天拍 | 九九热1 | 麻花传媒mv免费观看 | 日韩精品久久一区二区 | 涩涩网站在线播放 | 精品一区二区在线免费观看 | 五月婷婷伊人网 | 日本黄色免费看 | 永久中文字幕 | av亚洲产国偷v产偷v自拍小说 | 国产字幕在线观看 | 91精品在线观看入口 | 久久精品免费观看 | 中文字幕久久精品一区 | 国内精品一区二区 | 中文字幕高清免费日韩视频在线 | 天天天天天天天天操 | www.天天干.com | 在线观看国产永久免费视频 | 亚洲国产视频网站 | 成人app在线播放 | 亚洲国产精品日韩 | 综合久久婷婷 | 久久综合婷婷国产二区高清 | 亚洲三级在线 | 亚洲成人欧美 | 在线免费观看亚洲视频 | 久久草精品 | 久久久久高清毛片一级 | 婷婷丁香激情五月 | 国产一区二区在线免费播放 | 色婷婷av国产精品 | 香蕉视频在线观看免费 | 91网站免费观看 | 在线一区电影 | 日韩精品一区二区三区免费观看视频 | a在线免费观看视频 | 国产一级片观看 | 国产精品毛片一区视频播 | 性色av一区二区三区在线观看 | 国产精品免费大片视频 | 日韩视频免费在线观看 | 天天综合网 天天 | 亚洲国产成人精品在线观看 | 精品国模一区二区 | 中文字幕一区二区三区四区久久 | 国产亚洲精品久久 | 麻豆精品国产传媒 | 午夜色影院 | 在线看免费 | 亚洲视频高清 | 91热精品视频 | 九七在线视频 | 国产又粗又猛又爽又黄的视频免费 | 国产成人精品午夜在线播放 | 亚洲理论电影网 | av免费在线观看1 | 日本中文字幕视频 | 高清国产一区 | 精品久久中文 | 天天干,天天操 | 色综合久久网 | 四虎海外影库www4hu | 成人电影毛片 | 亚洲综合婷婷 | 国产精品久久久久av免费 | 少妇bbw撒尿 | 日本精品一区二区三区在线播放视频 | 国产97av | 天堂av高清 | 国产日韩精品在线观看 | 久久一区国产 | 久久精品一区二区三区中文字幕 | 69亚洲乱 | 在线视频你懂 | 色香天天| 久操视频在线免费看 | 黄色亚洲大片免费在线观看 | 天天摸天天操天天舔 | 久久你懂的 | 久久国产手机看片 | 亚洲国产成人在线播放 | 久草免费在线观看视频 | 国产精品 中文字幕 亚洲 欧美 | 中文字幕在线视频免费播放 | 日精品在线观看 | 日韩字幕| 在线观看的av | 久久麻豆精品 | 日韩免费小视频 | 精品9999 | 国产精品资源 | 色999五月色| 在线观看av小说 | 人人射人人爽 | 日韩欧美一区二区三区免费观看 | 97电影在线 | 日本精品xxxx | 97av视频 | 伊人午夜视频 | 九九在线精品视频 | 免费看一级黄色大全 | 成人少妇影院yyyy | 国产日韩在线视频 | 日韩久久久久久久 | 国产91粉嫩白浆在线观看 | 91视频免费国产 | 国产精品美女www爽爽爽视频 | 激情网在线视频 | 精品国产成人在线 | 91在线最新| 亚洲欧洲国产日韩精品 | 麻豆综合网 | 久久综合精品国产一区二区三区 | 丁香影院在线 | 福利二区视频 | 成人一级电影在线观看 | 成人在线视频免费观看 | 一区二区三区日韩视频在线观看 | 在线国产不卡 | 日本激情中文字幕 | 丁香婷婷射 | 国产无遮挡猛进猛出免费软件 | 99久久精品无免国产免费 | 久久五月情影视 | 蜜桃av久久久亚洲精品 | 国产在线观看地址 | 人人爽人人澡人人添人人人人 | 亚洲精品视频www | 亚洲片在线观看 | av片无限看 | 久久久99久久| 在线观看国产区 | av丝袜在线 | 一区二区三区电影 | 美女黄频网站 | 久久久精品久久 | 欧美日韩一区二区在线观看 | 天天操天天添天天吹 | 天天干天天爽 | 丁香六月在线 | 日本久草电影 | 欧美另类巨大 | 日韩av综合网站 | 国产精品一区二区三区观看 | 国产亚洲日本 | 在线观看国产成人av片 | 久插视频 | 国产在线第三页 | 91免费观看| 久久伊人精品一区二区三区 | 国产精品嫩草影视久久久 | 在线观看黄色大片 | 久草网在线观看 | 国产精品欧美久久久久三级 | 狠狠色噜噜狠狠狠狠 | 六月丁香综合 | 国产人成看黄久久久久久久久 | 激情久久网 | 最新婷婷色| 中文字幕精品一区二区精品 | 伊人视频| 男女精品久久 | 亚洲精品永久免费视频 | 99久久国产免费,99久久国产免费大片 | 婷婷六月中文字幕 | 欧美成人在线免费观看 | 黄色成人影院 | 人人插人人玩 | 免费视频 你懂的 | 91九色在线视频观看 | 日日干天天射 | 亚洲97在线| 91精品国产网站 | 精品一区二区综合 | 四虎成人精品 | 午夜精品久久久久久久99 | 国产手机在线播放 | 黄色网www| 中文字幕国产精品一区二区 | 国内亚洲精品 | 亚州精品在线视频 | 欧美孕妇与黑人孕交 | 91精品久久久久久综合乱菊 | 欧美精品久久久久久久久免 | 欧美精品乱码99久久影院 | 久久精品国产v日韩v亚洲 | 91成人免费看片 | 免费看网站在线 | 亚洲h视频在线 | a√天堂中文在线 | 成人资源在线播放 | 国产成人一区二区三区影院在线 | 日韩在线观看高清 | av黄色av| 国产精品视频线看 | 91精品欧美一区二区三区 |