嵌入式開發(fā)實(shí)驗(yàn)筆記(五)

移植新(2012.04.01) U-Boot 到S3C2440之中

date: 2018年1月23日

簡述:相關(guān)知識(shí)點(diǎn)可以參考視頻教程的附帶文檔,本文主要是寫出每一步的操作過程;

修改時(shí)鐘,配置新板

建立單板

  1. board/samsung/smdk2440
cd ./board/samsung
cp -rf smdk2410 smdk2440
cd smdk2440; mv smdk2410.c smdk2440.c; 
vim Makefile; 
- COBJS   := smdk2410.o
+ COBJS   := smdk2440.o
  1. include/config/smdk2440.h
cd ./include/config
cp smdk2410.h smdk2440.h
  1. boards.cfg
vim boards.cfg
+ smdk2440     arm  arm920t  -    samsung        s3c24x0                 
(參考smdk2410的書寫規(guī)范即可)

修改源代碼使得u-boot可以在s3c2440上啟動(dòng)

  1. 調(diào)整時(shí)鐘

原因:UBOOT以60MHZ的時(shí)鐘參數(shù)計(jì)算參數(shù)設(shè)置內(nèi)存控制器业稼,但是MPLL還未設(shè)置。所以第一步
將MPLL的設(shè)置轉(zhuǎn)移至 start.S 中,注釋掉 board_early_init_f 中的 MPLL 的設(shè)置

/* ./arch/arm/cpu/arm920t/start.S */
line: 170
-   /* FCLK:HCLK:PCLK = 1:2:4 */
-   /* default FCLK is 120 MHz ! */
-   ldr r0, =CLKDIVN
-   mov r1, #3
-   str r1, [r0]

+   /* FCLK:HCLK:PCLK = 1:4:8 */
+   /* default FCLK is 400 MHz ! */
+ /* 2. 設(shè)置時(shí)鐘 */
+   ldr r0, =0x4c000014
+   // mov r1, #3               // FCLK:HCLK:PCLK= 1:2:4
+   mov r1, #5               // FCLK:HCLK:PCLK= 1:4:8
+   str r1, [r0]
+ 
+   /* 如果HDIVN非0俭尖,CPU的總線模式應(yīng)該從“fast bus mode”變?yōu)椤癮synchronous bus mode” */
+   mrc p15, 0, r1, c1, c0, 0       /* 讀出控制寄存器 */ 
+   orr r1, r1, #0xc0000000         /* 設(shè)置為“asynchronous bus mode” */
+   mcr p15, 0, r1, c1, c0, 0       /* 寫入控制寄存器 */
+ 
+ #define S3C2440_MPLL_400MHZ ((0x5c<<12)|(0x01<<4)|(0x01))
+ 
+   /* MPLLCON = S3C2440_MPLL_200MHZ */
+   ldr r0, =0x4c000004
+   ldr r1, =S3C2440_MPLL_400MHZ        /* 盡早進(jìn)行時(shí)鐘初始化,有利于提高效率 */
+   str r1, [r0]
+ 
+   /* 啟動(dòng)ICACHE */
+   mrc p15, 0, r0, c1, c0, 0   @ read control reg
+   orr r0, r0, #(1<<12)        @ r0 = r0 | (1<<12)
+   mcr p15, 0, r0, c1, c0, 0   @ write it back
/* board/samsung/smdk2440/smdk2440.c */
line76:
- /* 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);
  1. 設(shè)置內(nèi)存
/* board/samsung/smdk2440/lowlevel_init.S */
line 155:
- .word (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
- .word ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC))
- .word ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC))
- .word ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC))
- .word ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC))
- .word ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC))
- .word ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC))
- .word ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN))
- .word ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN))
- .word ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
- .word 0x32
- .word 0x30
- .word 0x30 
  
+ .long 0x22011110   //BWSCON
+ .long 0x00000700   //BANKCON0
+ .long 0x00000700   //BANKCON1
+ .long 0x00000700   //BANKCON2
+ .long 0x00000700   //BANKCON3  
+ .long 0x00000700   //BANKCON4
+ .long 0x00000700   //BANKCON5
+ .long 0x00018005   //BANKCON6
+ .long 0x00018005   //BANKCON7
+ .long 0x008C04F4   // REFRESH
+ .long 0x000000B1   //BANKSIZE
+ .long 0x00000030   //MRSRB6
+ .long 0x00000030   //MRSRB7
  1. 解決亂碼問題 ( 串口波特率沒有正確配置 )

原因:查看波特率設(shè)置(arch/arc/cpu/arm920t/s3c24x0/speed.c) 中配置get_HCLK里沒有定義
CONFIG_S3C2440洞翩;解決方法:在 ./include/configs/smdk2440.h 中定義這個(gè)變量

/* ./include/configs/smdk2440.h */
line38:
- #define CONFIG_S3C2410
+ #define CONFIG_S3C2440
  1. 解決報(bào)錯(cuò):s3c2410_nand.c 中報(bào)錯(cuò)
s3c2410_nand.c: In function 's3c2410_hwcontrol':
s3c2410_nand.c:57: warning: implicit declaration of function 's3c2410_get_base_nand'
s3c2410_nand.c:57: warning: initialization makes pointer from integer without a cast
s3c2410_nand.c:72: error: dereferencing pointer to incomplete type
s3c2410_nand.c:72: error: dereferencing pointer to incomplete type
s3c2410_nand.c:75: error: dereferencing pointer to incomplete type
s3c2410_nand.c:75: error: dereferencing pointer to incomplete type

原因:因?yàn)樯喜街凶⑨尩袅薈ONFIG_S3C2410 宏稽犁,而這個(gè)文件里需要的結(jié)構(gòu)體是在這個(gè)宏定義的前提下使用,所以現(xiàn)在先將 nand 移除骚亿,不進(jìn)行編譯

/* ./include/configs/smdk2440.h */
line103:
- #define CONFIG_CMD_NAND

修改原有代碼來支持 nand flash 啟動(dòng)

  1. 拷貝自己寫的 init.c 到 u-boot 中來簡化我們的操作

注意對(duì) init.c 中的代碼進(jìn)行修改已亥,修改有一下幾個(gè)方面:

  1. 更改函數(shù)名,對(duì)于 nand_read , nand_init 之類存在外部調(diào)用的来屠,將名字改的更具辨識(shí)度
  2. 對(duì)于nand_cmd, IsBootFromNor 之類的函數(shù)只存在文件內(nèi)的調(diào)用陷猫,通過函數(shù)定義前添加
    static 來限制函數(shù)的生效空間。
  3. 刪去代碼中多余的部分的妖;
cp /path/to/init.c/ ./board/samsung/smdk2440
vim Makefile
line 28:
- COBJS   := smdk2440.o
+ COBJS   := smdk2440.o init.o
  1. ./arch/arm/cpu/arm920t/start.S 中的修改
/* 1. ./arch/arm/cpu/arm920t/start.S */
line 182:
bl  cpu_init_crit
#endif

+   ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)  /* sp = 30000f80 */
+   bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
+   bl nand_init_s3c2440
+   mov r0, #0
+   ldr r1, _TEXT_BASE
+   ldr r2, _bss_start_ofs
+   bl copy_code_to_sdram
+   bl clear_bss
+   ldr pc, =call_board_init_f

 /* Set stackpointer in internal RAM to call board_init_f */
 call_board_init_f:
-   ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
-   bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
    ldr r0,=0x00000000
    bl  board_init_f
    
+   /* unsigned int 的值正好存在r0里绣檬,正好給board_init_r */
+   ldr r1,=_TEXT_BASE
+   /* 調(diào)用第2階段的代碼 */
+   bl  board_init_r 
 
/* 2. 刪除line:192-281; 重定位和clear_bss我們已經(jīng)完成了 */
 - /*--------------------------------------------------------------*/      
 - /*                                             
 -  * void relocate_code (addr_sp, gd, addr_moni)                          
 -  * This "function" does not return, instead it continues in RAM        
 -  * after relocating the monitor code.                                  
 -  */ 
......
- clbss_l:str r2, [r0]        /* clear loop... */
- add r0, r0, #4
- cmp r0, r1
- bne clbss_l
- bl coloured_LED_init
- bl red_led_on
- #endif 
  1. 修改 CONFIG_SYS_INIT_SP_ADDR 的值
/* ./include/configs/smdk2440.h */
line: 43
- #define CONFIG_SYS_INIT_SP_ADDR 0x0
+ #define CONFIG_SYS_INIT_SP_ADDR 0x33f00000
  1. 修改board_init_f
/* 1. ./arch/arm/lib/board.c */
line 438:
- relocate_code(addr_sp, id, addr);
+ return (unsigned int)id;
line 259
- void board_init_f(ulong bootflag)
+ unsigned int board_init_f(ulong bootflag)
line 372
-   addr -= gd->mon_len;
-   addr &= ~(4096 - 1);
+   addr = CONFIG_SYS_TEXT_BASE;
/* 2. ./include/common.h */
line : 276
- void    board_init_f  (ulong) __attribute__ ((noreturn));
- void    board_init_r  (gd_t *, ulong) __attribute__ ((noreturn));  

+ unsigned int board_init_f (ulong);
+ void board_init_r (gd_t *, unlong);


  1. 修改連接腳本,Makefile 去掉 '-pie'

"-pie" --- 生成位置無關(guān)碼嫂粟; 原來的代碼中帶有此選項(xiàng)導(dǎo)致最后生成的 u-boot.bin 過大娇未,不適合在
nand 中啟動(dòng);

/* 1. 修改Makefile ./arch/arm/config.mk */
line 75:
- LDFLAGS_u-boot += -pie

/* 2. 修改連接腳本星虹,將start.S, init.c, lowlevel_init.S等文件放在最前面 
 * ./arch/arm/cpu/u-boot.lds
 */
 line 38
 +        board/samsung/smdk2440/libsmdk2440.o (.text)
  1. yaffs2部分報(bào)錯(cuò)
/* ./include/configs/smdk2440.h */
line: 228
- #define CONFIG_YAFFS2

目前為止所有修改過的文件:

  1. board/samsung/smdk2440/smdk2440.c
  2. arch/arm/cpu/arm920t/start.S
  3. board/samsung/smdk2440/lowlevel_init.S
  4. include/configs/smdk2440.h
  5. board/samsung/smdk2440/init.c
  6. arch/arm/lib/board.c
  7. include/common.h
  8. board/samsung/smdk2440/Makefile
  9. arch/arm/config.mk
  10. arch/arm/cpu/u-boot.lds

修改源碼支持NorFlash

  1. 去掉 源碼自帶的Flash檢測死循環(huán)
/* arch/arm/lib/board.c line 527: */
- puts(failed);
- hang();
+ puts("0KB\n\r");
  1. 在 cfi_flash.c 中打開調(diào)試開關(guān)以供分析
/* drivers/mtd/cfi_flash.c line 45 */
+ #define DEBUG 1
+ #define _DEBUG 1
// 最后記得把標(biāo)志注釋掉A闾АD魉稀!平夜!
  1. 添加我們自己的設(shè)備信息結(jié)構(gòu)體
/* drivers/mtd/jedec_flash.c line 370 */
+ {
+   .mfr_id     = (u16)MX_MANUFACT,
+   .dev_id     = MX29LV160,
+   .name       = "MXIC MX29LV160",
+   .uaddr      = {
+       [1] = MTD_UADDR_0x0555_0x02AA /* x16 */
+   },
+   .DevSize    = SIZE_2MiB,
+   .CmdSet     = P_ID_AMD_STD,
+   .NumEraseRegions= 4,
+   .regions    = {
+           ERASEINFO(16 * 1024, 1),
+           ERASEINFO(8 * 1024, 2),
+           ERASEINFO(32 * 1024, 1),    
+           ERASEINFO(64 * 1024, 31),
+   }
+ },

/* drivers/mtd/jedec_flash.c line 77 */
+ #define MX29LV160 0x2249
  1. 報(bào)錯(cuò) too many flash sectors
/* include/configs/smdk2440.h line 190 */
- #define CONFIG_SYS_MAX_FLASH_SECT (19)
+ #define CONFIG_SYS_MAX_FLASH_SECT (128)
  1. 經(jīng)過NORFlash 讀寫實(shí)驗(yàn)得出蝶棋,u-boot 中的棧的設(shè)置不準(zhǔn)確
/* arch/arm/cpu/arm920t/start.S line 113 */
/* 定義一個(gè)可以與C語言進(jìn)行數(shù)據(jù)交換的變量
+ .globl base_sp
+ base_sp:
+   .long 0
/* arch/arm/cpu/arm920t/start.S line 232 */
+   ldr sp, base_sp                 /* 重新設(shè)置棧 */

/* arch/arm/lib/board.c line 265 */
+ extern ulong base_sp;               /* 聲明變量 */
/* arch/arm/lib/board.c line 439 */
+ base_sp = addr_sp;

目前為止所有修改過的文件:

  1. arch/arm/lib/board.c
  2. drivers/mtd/cfi_flash.c
  3. drivers/mtd/jedec_flash.c
  4. include/configs/smdk2440.h
  5. arch/arm/cpu/arm920t/start.S
  6. arch/arm/lib/board.c

修改源碼支持NANDFlash

  1. 加上剛開始為了編譯而注釋掉的NAND的宏
/* ./include/configs/smdk2440.h */
line103:
+ #define CONFIG_CMD_NAND
  1. 創(chuàng)建對(duì)應(yīng)于 S3C2440 的 NANDFlash 操作文件(s3c2440_nand.c)
# 1. 創(chuàng)建s3c2440_nand.c
cd drivers/mtd/nand
cp s3c2410_nand.c s3c2440_nand.c
# 2. 將s3c2440_nand.c 加入編譯之中
/* 2.1 include/configs/smdk2440.h line 211 */
+ #ifdef CONFIG_S3C2410
#define CONFIG_NAND_S3C2410
#define CONFIG_SYS_S3C2410_NAND_HWECC
+ #else
+ #define CONFIG_NAND_S3C2440
+ #define CONFIG_SYS_S3C2440_NAND_HWECC
+ #endif

# 2.2
cd drivers/mtd/nand
vim Makefile  # line 61
+ COBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o 
  1. 修改s3c2440_nand.c
 /* drivers/mtd/nand/s3c2440_nand.c */
 1. line 129:
 - struct s3c2410_nand *nand_reg = s3c2410_get_base_nand();
 + struct s3c2440_nand *nand_reg = s3c2440_get_base_nand();
 2. line 146
+ #if 0
    cfg = S3C2410_NFCONF_EN;
    cfg |= S3C2410_NFCONF_TACLS(tacls - 1);
    cfg |= S3C2410_NFCONF_TWRPH0(twrph0 - 1);
    cfg |= S3C2410_NFCONF_TWRPH1(twrph1 - 1);
+ #endif
+ /* 初始化時(shí)序 */
+ cfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);
+ /* 使能NAND Flash控制器,初始化ECC忽妒,禁止片選 */
+ writel((1<<4)|(1<<1)|(1<<0), &nand_reg->nfcont);

 3. line 90 - line 122 有關(guān)于ECC的部分刪除
 4. 替換 s3c2440_nand.c 中 所有s3c2410的函數(shù)名為s3c2440;
 5. line 71:
 - if (ctrl & NAND_NCE)  /* 使能選中 */
 -      writel(readl(&nand->nfcont) & ~S3C2410_NFCONF_nFCE,
 -          &nand->nfconf);
 -  else    /* 取消選中 */
 -      writel(readl(&nand->nfcont) | S3C2410_NFCONF_nFCE,
 -          &nand->nfconf);
 
 + if (ctrl & NAND_NCE)  /* 使能選中 */
 +      writel(readl(&nand->nfcont) & ~(1<<1),
 +          &nand->nfcont);
 +  else    /* 取消選中 */
 +      writel(readl(&nand->nfcont) | (1<<1),
 +          &nand->nfcont);
 
 6. 自己添加 s3c2440_nand_select 的函數(shù)
 /* line 130 */
 -  nand->select_chip = NULL;
 +  nand->select_chop = s3c2440_nand_select;
 刪除 函數(shù) s3c2440_hwcontrol 的原有內(nèi)容玩裙,自己重新完成
 +  struct s3c2440_nand *nand = s3c2440_get_base_nand();
 +  if (ctrl & NAND_CLE) {
 +      /* 發(fā)命令 */
 +      writeb (dat, &nand->nfcmd);
 +  } else if (ctrl & NAND_ALE) {
 +      /* 發(fā)地址 */
 +      writeb (dat, &nand->nfaddr);
 +  }

完成的s3c2440_nand_select函數(shù)
static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr)
{
    struct s3c2440_nand *nand = s3c2440_get_base_nand();
    switch (chipnr) {
    case -1:  /* 取消選中 */
        nand->nfcont |= (1<<1);
        break;
    case 0:  /* 選中 */
        nand->nfcont &= ~(1<<1);
        break;
    default:
        BUG();
    }
}

目前為止所有修改過的文件:

  1. include/configs/smdk2440.h
  2. drivers/mtd/nand/s3c2440_nand.c
  3. drivers/mtd/nand/Makefile // 直接在u-boot 中進(jìn)行修改注意檢查

修改源碼支持DM9000

u-boot 的代碼有DM9000的網(wǎng)卡的代碼,只需要修改配置文件編譯即可

/* include/configs/smdk2440.h line 59 */
+ #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
+ #endif
/* board/samsung/smdk2440/lowlevel_init.S line 160 */
-       .long 0x00000700     //BANKCON4
+       .long 0x00000740     //BANKCON4
/* board/samsung/smdk2440/smdk2440.c line 141 */
+ #ifdef CONFIG_DRIVER_DM9000
+   rc = dm9000_initialize(bis);
+ #endif

  1. 測試未連通段直,*** ERROR: `ethaddr' not set
# 不要執(zhí)行save吃溅,因?yàn)檫€沒有設(shè)置參數(shù)存放地址
 set ipaddr 192.168.1.17
 set ethaddr 00:0c:29:b2:67:65 (不設(shè)置這個(gè)就會(huì)出現(xiàn)上述報(bào)錯(cuò))

目前為止所有修改過的文件:

  1. include/configs/smdk2440.h
  2. board/samsung/smdk2440/lowlevel_init.S
  3. board/samsung/smdk2440/smdk2440.c

裁剪和設(shè)置環(huán)境變量,讓u-boot更易用

1. 一些完善性的修改

  1. 傳給內(nèi)核的啟動(dòng)參數(shù)
/* include/configs/smdk2440.h line  162 */
#define CONFIG_BOOTARGS "console=ttySAC0,115200 root=/dev/mtdblock3"
#define CONFIG_BOOTCOMMAND "nand read 30000000; bootm 30000000 "

/* board/samsung/smdk2440.c line 116 */
- gd->bd->bi_arch_number = MACH_TYPE_SMDK2410;
+ gd->bd->bi_arch_number = MACH_TYPE_S3C2440;

/* include/configs/smdk2440.h line  123 */
- #define CONFIG_IPADDR     10.0.0.110
- #define CONFIG_SERVERIP       10.0.0.1

+ #define CONFIG_IPADDR     192.168.1.17
+ #define CONFIG_SERVERIP       192.168.1.25
+ #define CONFIG_ETHADDR     00:0c:29:b2:67:66

2. 刪減

/* include/configs/smdk2440.h */
1. line 77 - 80 USB 部分
2. line 85 RTC 部分
3. line 93 - 96 BOOTP 部分
4. line 105鸯檬, 106, 111
// #define CONFIG_CMD_DATE
// #define CONFIG_CMD_DHCP
// #define CONFIG_CMD_USB
5. line 237 - 245 文件系統(tǒng)部分

3. 分區(qū)

  1. 注釋掉原有的環(huán)境變量設(shè)置: include/configs/smdk2440.h line 202 - 207
  2. 重設(shè)自己的環(huán)境變量宏:
/* include/configs/smdk2440.h line 210 */
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_OFFSET        0x00040000
#define CONFIG_ENV_SIZE          0x00020000
#define CONFIG_ENV_RANGE         CONFIG_ENV_SIZE
  1. 添加分區(qū)命令 mtdparts 至編譯隊(duì)列之中
/* include/configs/smdk2440.h line 215 */
+ #define CONFIG_CMD_MTDPARTS
+ #define CONFIG_MTD_DEVICE
+ #define MTDIDS_DEFAULT        "nand0=jz2440-0"  /* 哪一個(gè)設(shè)備 */
+ #define MTDPARTS_DEFAULT  "mtdparts=jz2440-0:256k(u-boot),"   \
+                       "128k(params),"     \
+                       "3m(kernel),"   \
+                       "-(rootfs)"     \
  1. 在 board.c 中設(shè)置分區(qū)
/* arch/arm/lib/board.c line 654 */
+   run_command ("mtdparts default", 0);
  1. 修改配置文件添加 yaffs2 支持
/* include/configs/smdk2440.h line 163 */
+ #define CONFIG_CMD_NAND_YAFFS
/* driver/mtd/nand/nand_util.c line 556 */
-           ops.mode = MTD_OOB_AUTO;
+           ops.mode = MTD_OOB_RAW;
/* driver/mtd/nand/nand_util.c line 567 */
- if(!rval)  
+ if (rval)   /* 錯(cuò)誤修改 */

目前為止所有修改過的文件:

  1. include/configs/smdk2440.h
  2. board/samsung/smdk2440/lowlevel_init.S
  3. board/samsung/smdk2440/smdk2440.c
  4. arch/arm/lib/board.c
  5. driver/mtd/nand/nand_util.c

制作補(bǔ)丁

diff -urN u-boot-2012.04.01 u-boot-2012.04.01_100ask > u-boot-2012.04.01_100ask.patch

補(bǔ)充: DNW下載方式操作

對(duì)于課程自帶的 u-boot1.1.6 來說决侈,u-boot 界面集成了dnw下載的快捷連接
選擇相應(yīng)選項(xiàng),然后再用dnw下載文件即可喧务。不過對(duì)于通過 u-boot1.1.6 來下載
u-boot2012.04.01 這種情況是無法使用現(xiàn)有選項(xiàng)的赖歌,因?yàn)閎ootloader的分區(qū)太小
放不下新版的u-boot

1. 對(duì)于下載到NORFlash的操作

# q 退出u-boot 的選擇菜單
1. usb 1 30000000  # 連接usb, 此時(shí)可以通過dnw開始下載文件
2. protect off all  # 關(guān)閉NORFlash 的寫保護(hù)
3. erase 0 7FFFF    # 擦出指定空間,第一個(gè)參數(shù)是起始地址功茴,第二個(gè)參數(shù)是偏移量
4. cp.b 30000000 0 80000  # 拷貝文件到指定位置俏站,第一個(gè)參數(shù)是源文件的首地址,第二個(gè)參數(shù)是目標(biāo)地址痊土,第三個(gè)參數(shù)是大小

2. 對(duì)于下載到NANDFlash的操作

# q 退出u-boot 的選擇菜單
1. usb 1 30000000  # 連接usb, 此時(shí)可以通過dnw開始下載文件
2. nand erase 0 7FFFF    # 擦出指定空間肄扎,第一個(gè)參數(shù)是起始地址,第二個(gè)參數(shù)是偏移量
3. nand write 30000000 0 80000  # 拷貝文件到指定位置赁酝,第一個(gè)參數(shù)是源文件的首地址犯祠,第二個(gè)參數(shù)是目標(biāo)地址,第三個(gè)參數(shù)是大小   
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末酌呆,一起剝皮案震驚了整個(gè)濱河市衡载,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌隙袁,老刑警劉巖痰娱,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異菩收,居然都是意外死亡梨睁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門娜饵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來坡贺,“玉大人,你說我怎么就攤上這事”榉兀” “怎么了拳亿?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長愿伴。 經(jīng)常有香客問我肺魁,道長,這世上最難降的妖魔是什么隔节? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任鹅经,我火速辦了婚禮,結(jié)果婚禮上官帘,老公的妹妹穿的比我還像新娘。我一直安慰自己昧谊,他們只是感情好刽虹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著呢诬,像睡著了一般涌哲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上尚镰,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天阀圾,我揣著相機(jī)與錄音,去河邊找鬼狗唉。 笑死初烘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的分俯。 我是一名探鬼主播肾筐,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼缸剪!你這毒婦竟也來了吗铐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤杏节,失蹤者是張志新(化名)和其女友劉穎唬渗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奋渔,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡镊逝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嫉鲸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扭仁。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖符相,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情染突,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布辈灼,位于F島的核電站份企,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏巡莹。R本人自食惡果不足惜司志,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望降宅。 院中可真熱鬧骂远,春花似錦、人聲如沸腰根。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽额嘿。三九已至瘸恼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間册养,已是汗流浹背东帅。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留球拦,地道東北人靠闭。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像坎炼,于是被迫代替她去往敵國和親阎毅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 一点弯、道 道是什么扇调,出于《老子·道經(jīng)》首章:道可道,非常道抢肛。名可名狼钮,非常名。無名天地之始捡絮,有名萬物之母熬芜。故常無欲以觀...
    末月424閱讀 534評(píng)論 0 0
  • R:用三個(gè)F創(chuàng)建有效的心理表征 I:WHY:創(chuàng)建心理表征是一個(gè)過程,用三個(gè)F形象地解釋了創(chuàng)建的過程福稳。 WHAT: ...
    hhg閱讀 258評(píng)論 0 0
  • 在荒野中 掘鑿出一堆碎骨 撲一條黑色的狗 與你爭食 白色的風(fēng)下 埋藏好一把彎刀 亮一輪皎潔的月兒 慘把詩人割置
    樹來閱讀 152評(píng)論 0 4
  • ◆★◆21世紀(jì)的今天,科技發(fā)展日新月異鼓拧,全球各行各業(yè)的競爭愈演愈烈半火,崇達(dá)技術(shù)能是PCB企業(yè)在大浪淘沙角逐中的幸存者...
    1b849f1e5525閱讀 702評(píng)論 2 0