OpenNuvoton / NUC970_U-Boot_v2016.11

U-Boot v2016.11 for NUC970, N9H30, and NUC980
29 stars 45 forks source link

请问如何调整 SPL、ENV、U-BOOT 等分区的在 FLASH 的起始位置和大小? #44

Closed xray-bit closed 11 months ago

xray-bit commented 11 months ago

查看了 include/configs/nuc980_iot.h 的源码,CONFIG_ENV_OFFSET / CONFIG_ENV_RANGE 可以调整 ENV 的起始地址和大小。但是 U-BOOT 在 FLASH 的起始地址没有找到那哪里修改,似乎是 CONFIG_SYS_TEXT_BASE 宏 (0xE00000) 指定的,但是实际在 NuWriter 中的烧录地址并不是 0xE00000。目前的分区有点过大了,所以想请教一下如何调整?

ychuang3 commented 11 months ago

0xE00000 是 u-boot 執行位址 關於 NUC970 SD, NAND, SPI 對於 SPL, ENV, uboot, kenel 燒錄的規劃 請參見 NuWriter 說明文件,有詳細的說明

xray-bit commented 11 months ago

《NUC980 NuWriter User Manual CHT.pdf》(rev 1.12) 中相关内容如下:

4.6.1 SPI NAND Flash模式

4.6.1.1 SPI NAND模式

可以將Image檔案燒入到SPI NAND Flash中,並且將Image檔案型態設定為Loader 、Data、Environment、Pack,四種型態中的其中一種。 Image檔案型態 Loader 型態 Loader 主要是作為開機的第一支程式,Loader分成Main U-Boot和SPL U-Boot兩個部分,Main U-Boot是完整功能的U-Boot,SPL U-Boot將Main U-Boot從NAND/SPI NAND Flash搬到 DDR 執行。SPL U-Boot只有NAND和SPI NAND boot時才會用到;SPI 開機或eMMC/SD 開機只需要Main U-Boot。SPL U-Boot 的鏈結位址預設為0x200,Main U-Boot的鏈結位址是0xE00000。當NUC980系列晶片上電後會讀取Loader型態的Image並執行,不限定一定要存放Loader,一般程式也是可以使用Loader型態來作為上電後第一支執行程式。Loader Image增加32bytes的檔頭(Header)和DDR參數合併而成,Figure 4-29為Loader型態的Image格式。

4.6.1.2 Data型態

將指定的檔案放入到SPI NAND Flash中所指定的位址,不做任何其他的處理。依據輸入的Image start offset的值(需要對齊Page Size,Page Size是依據SPI NAND Flash規格所決定),決定將Data存放在SPI NAND Flash的哪個位址,如果Image start offset = 0x10000,則將Data 存放到 SPI NAND Flash 0x10000 的位址,此方式主要可以幫助使用者依據個人需求配置SPI NAND Flash,例如:當Linux Kernel 需要由Loader型態中Image帶起來,Image設定帶起來的位址為0x8000,則需要將Linux Kernel當作Data型態,配置到0x8000的位址。

4.6.1.3 Environment 型態

主要設定Loader 的環境變數,檔案放入到SPI NAND Flash中所指定的位址,讓Loader 讀取時做相對應的動作。依據輸入的Image start offset的值(需要對齊Block size),決定將Enviroment存放在SPI NAND Flash的哪個位址,如果Image start offset = 0x10000,則將Enviroment存放到SPI NAND Flash 0x10000 的位址。

4.6.1.2 Data型態 中提到"依據輸入的Image start offset的值,決定將Data存放在SPI NAND Flash的哪個位址",请问此处的 “Image start offset” 是 NuWriter 界面中的 "Image start offset" 输入框的内容吗?SPL 是根据此处输入的 Offset 引导完整的 Main U-Boot 吗?我尝试过修改此处的 Offest ,但是 SPL 无法引导 Main U-Boot。

xray-bit commented 11 months ago

https://github.com/OpenNuvoton/NUC970_U-Boot_v2016.11/blob/7e0b6dda7639cbb8d4f4103a962f6740d2c62301/include/configs/nuc980_iot.h#L127

翻看源码发现此处有个宏定义,Main U-Boot 似乎是从此处定义的位置进行加载,我先修改源码尝试一下。