前馈科技

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 377|回复: 0

全志A64 引导加载过程

[复制链接]

97

主题

97

帖子

539

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
539
发表于 2022-12-13 12:27:38 | 显示全部楼层 |阅读模式
A64的BootROM在上电时的加载优先级如下所示:


  1. boot-> check fel key pressed (yes)--> FEL mode (boot from USB OTG)
  2.                                                \  
  3.                                         (no) \
  4.                                                   \-------> 1) try to boot from SMHC0 (SD card)
  5.                                                                 2) try to boot from SMHC2 (eMMC)
  6.                                                                 3) try to boot from SPI0 (SPI NOR Flash)
  7.                                                                 4) FEL mode (boot from USB OTG)
复制代码

因此若在SD卡中发现Uboot,则有限执行SD卡中的Uboot
SD卡一个扇区是512字节,前8KB(16个扇区)是分区表(若分区表被删除,则计算机将无法识别SD卡),不可使用。
Screenshot from 2022-12-14 12-21-58.png

目前ARM一般的启动过程如下:

RomBoot --> SPL --> u-boot --> Linux kernel --> file system --> start application

(RomBoot一般是固化在SoC内部的,因此在真正的uboot运行前还有段SPL的运行,因此 uboot是分为stage1和stage2两段 执行的)
RomBoot是厂商固化在芯片内部的一小段程序,类似于PC机上的BIOS引导程序,这段程序主要的工作内容包括:
     (1)初始化部分硬件。
     (2)启动模式boot mode选择。
     (3)读取外部固件中的SPL程序到片内RAM。
     (4)跳转到RAM去执行这段SPL程序,把控制权交给用户程序
RomBoot读取多少SPL才算合适呢?每 个用户的需求不一样,大小也不能确定。很多芯片厂商干脆就只读4K/8K/16K等很小一段数据,对于A64来说是32KB。

从1MB往后,一般是SD卡的用户分区(我们用fdisk命令分区时的起始扇区默认为2048扇区),因此一般U-Boot最大是984KB,但这也不是绝对,只要你不怕麻烦,修改用户分区的起始扇区,U-Boot最大也可以超过984KB

清除前1M:
  1. dd if=/dev/zero of=${card} bs=1M count=1
复制代码
上面指令将分区表也删除了,想要保留分区表进行清除的话:
  1.         dd if=/dev/zero of=${card} bs=1k count=1023 seek=1
复制代码


通过dd指令烧写U-boot:
  1. dd if=u-boot-sunxi-with-spl.bin of=${card} bs=1024 seek=8
复制代码

https://wiki.pine64.org/wiki/User:Oogwaymaki/PinePhone_Multiboot
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|计算机控制

GMT+8, 2024-4-29 20:28 , Processed in 0.053536 second(s), 21 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表