20160728_jeffrey - silenceuncrio/diary GitHub Wiki

Index

  • 1010 - trace 從 U-Boot 的 start.s 出發 經過的路
  • 1050 - start.S - crt0.S - board_f.cboard_init_f()
  • 1125 - init_sequence_f[] - console_init_f - 我要把陣亡的點找出來
  • 1410 - NAND Falsh 的 U-Boot 直接開起來了
  • 1530 - NAND Flash 開機 4 號 - 6 號 無法從 NAND Flash 開機 - 4 號板子 bad block 消失
  • 1515 - 14 號板子 實驗 - nand scrub.chip - erase all factory set bad blocks - NAND Flash 開機 成功
  • 1605 - 復健

1010

先來 trace 一下從 U-Boot 的 start.s 出發會經過的路

1050

第一隻被叫起來的 C function 是 <UBOOT_SRC_NAND>/common/board_f.cboard_init_f()

<UBOOT_SRC_NAND>/arch/arm/cpu/armv7/start.S 開始

save_boot_params_ret:

	bl	_main

經過 <UBOOT_SRC_NAND>/arch/arm/lib/crt0.S

ENTRY(_main)

	bl	board_init_f

ENDPROC(_main)

然後進入 <UBOOT_SRC_NAND>/common/board_f.cboard_init_f()

void board_init_f(ulong boot_flags)
{
	if (initcall_run_list(init_sequence_f))
		hang();
}

init_sequence_f 這個 table 是關鍵

1125

static init_fnc_t init_sequence_f[] = {
    ...
    console_init_f,		/* stage 1 init of console */
    ...
    NULL,
};

console_init_f 這條路前就陣亡了

我要把陣亡的點找出來

1410

沒找到陣亡的點... 因為 NAND Falsh 的 U-Boot 直接開起來了

目前動起來的 <UBOOT_DIR_NAND>/include/configs/mx6ul_14x14_evk.hHow-To use NAND boot on i.MX6UL EVK board 提供的 mx6ul_14x14_evk.h 有所不同

我把這幾個幾個 macro 註解掉了

  • CONFIG_FSL_USDHC
  • CONFIG_CMD_I2C
  • CONFIG_VIDEO
  • CONFIG_CMD_USB

來抓抓看到底是 註解掉什麼功能讓 NAND Falsh boot 起來

先整個還原跟 How-To use NAND boot on i.MX6UL EVK board 提供的 mx6ul_14x14_evk.h 一模一樣

結果是可以從 NAND Falsh 開機...

我還改了什麼呢?

  • <UBOOT_SRC_NAND>/arch/arm/cpu/armv7/start.S
  • <UBOOT_SRC_NAND>/arch/arm/lib/crt0.S

可能嗎?

1530

昨天 winston 好像透過 U-Boot 的 nand scrub 做了什麼?

目前可以從 NAND Flash 開機的板子編號是 4 號

換成 6 號板子試試

6 號板子無法從 NAND Flash 開機

發現利用 MfgTool 在燒錄 image 到 4 號板子時的 console log 似乎和 6 號板子有所不同

紀錄一下

會發現 6 號板子有幾個 bad block 而 4 號板子沒有

nand_read_bbt: bad block at 0x000000000000
nand_read_bbt: bad block at 0x000000020000
nand_read_bbt: bad block at 0x000000040000

winston 昨天對 4 號板子做了什麼動作讓 bad block 消失了

會這麼說是因為之前燒錄板子的時候都會看到 bad block

所謂的 nand scrub 在 U-Boot 裡是這個意思

nand scrub [-y] off size | scrub.part partition | scrub.chip
    really clean NAND erasing bad blocks (UNSAFE)

先跟 morris 再拿個兩片板子確認這件事

1515

拿 14 號板子來做實驗

利用 SD Card 開機進 U-Boot

=> nand dump 0
Page 00000000 dump:
        d1 00 20 40 00 00 80 87  00 00 00 00 2c f4 7f 87
        20 f4 7f 87 00 f4 7f 87  00 00 00 00 00 00 00 00
        ...
        00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
OOB:
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00
        00 00 00 00 00 00 00 00

winston 表示 OOB 看起來就不對

利用 nand scrub.chip erase all factory set bad blocks

=> nand scrub.chip

NAND scrub.chip: device 0 whole chip
Warning: scrub option will erase all factory set bad blocks!
         There is no reliable way to recover them.
         Use this command only for testing purposes if you
         are sure of what you are doing!

Really scrub this NAND flash? <y/N>
y
Erasing at 0x4e00000 --  61% complete.
nand0: MTD Erase failure: -5
Erasing at 0x5980000 --  70% complete.
nand0: MTD Erase failure: -5
Erasing at 0x7fe0000 -- 100% complete.
OK

確認一下

=> nand dump 0
Page 00000000 dump:
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
        ...
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
OOB:
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff

再用 mfgTool 燒燒看 - 2016-07-25-MfgTool.no.14.nand-scrub.chip.log

燒完... NAND Flash 開機... 成功

1605

明天再繼續... 去復健一下

⚠️ **GitHub.com Fallback** ⚠️