嵌入式小白,斐迅 N1 是如何决定从 eMMC 还是 SDCard 启动的?

2021-05-12 16:37:59 +08:00
 asilin

相关的 uboot --> uImage --> zImage 启动流程已经有所了解,但是不了解是哪个部件决定从 eMMC 还是 SDCard 读取 uboot 二进制文件的?

就好像 UEFI 可以根据启动菜单来决定从哪个硬盘启动,或者给我一些关键字提示也行。

硬件小白,初次接触,如果不正确的地方请谅解

1820 次点击
所在节点   嵌入式开发
11 条回复
dalabenba
2021-05-12 16:50:37 +08:00
不管是 emmc 还是 sdcard 都是块设备,cpu 不能直接访问,一定有一块地址里放了最基本的驱动,让 io 控制器能工作,这块内存可以是在 soc 内部也可以是外接(norflash),看具体平台。总之 cpu 被 hardcode 启动到一块非易失的内存,这里有启动最初的固件,emmc 和 sdcard 都是后面的事情
pkookp8
2021-05-12 17:25:15 +08:00
uboot 镜像的存储位置是固定的,应该是硬件,或者说有一小块 cpu 上写死的代码决定的
启动后会把 uboot load 到固定内存地址
我的理解,但我不知道 cpu 怎么知道 uboot 的大小,100kb 还是 100mb
asilin
2021-05-12 17:32:38 +08:00
从这边文章: https://conanwhf.github.io/2017/06/08/bootup-2-spl/

```
通常每块芯片,都在硬件中包含了一个 BootROM,是一个小程序,上电后自动运行,无法修改,不同的厂家有不同的设计,但都是给定几种不同的启动模式,然后循环检测。TI 这块板就支持各种模式,如 emmc, nand flash, network, spi, uart 等。
```
ruanimal
2021-05-12 18:39:04 +08:00
关注一下
sujin190
2021-05-12 18:49:31 +08:00
@pkookp8 #2 不用知道,固定大小,先加载这么多,然后就开始执行,uboot 如果需要更多,那么自己再加载就是了吧
402124773
2021-05-12 22:49:53 +08:00
uboot 里面决定。bootrom 启动 uboot 在固定位置,uboot 决定后续的
asilin
2021-05-13 09:20:49 +08:00
@402124773 "固定位置"能给一个示例或者范围吗?这应该就是我想要的答案。
402124773
2021-05-13 10:05:58 +08:00
@asilin
这个每种芯片都是不一样的。
我只记得那个 nxp imx8 的芯片,spl 固定位置是在 66 个 blocks 所在的地方。但是手头没有资料了。
一般在芯片手册里面关于启动的部分有介绍的。
bitdepth
2021-05-18 01:10:50 +08:00
SoC 中有固化代碼,可以讀取一些 storage 的固定位置到 SRAM 執行,然後初始化記憶體
至於啟動設備選擇順序有的是固定好的,或者可以用 pin 控制
wszgrcy
2021-05-20 15:20:53 +08:00
还以为是我问的....这个我记得是在 uboot 中有
uboot 规定盘符顺序,然后按顺序启动(好像是)
不过搞完自己的硬件就不搞了....
另外这个还是自己去看代码吧,因为你可能还需要更多的知识
tylinux
2021-06-08 01:39:04 +08:00
同小白,我一般是找一下 datasheet: https://dn.odroid.com/S905/DataSheet/S905_Public_Datasheet_V1.1.4.pdf ,从里边的 booting 段,可以看到 S905D 的启动判断流程:

![image.png]( https://i.loli.net/2021/06/08/baNC71qt38m9xo6.png)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/776523

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX