瑞芯微系列 EMMC,SD,FLASH开机,加载顺序

本文详细解析了RK3399平台基于Android 7.1的启动过程,涉及eMMC、SD卡、Flash和bootRom之间的交互,重点介绍了加载流程,适合嵌入式开发者参考。

OS: Android 7.1
Board: RK3399
Kernel: v4.4.55

系统可以从eMMC, SD, Flash开机, bootRom中存有boot code, 加载流程如下:

        

 


参考:Rockchip_RK3399TRM_V1.4_Part1-20170408.pdf

### 瑞芯微平台 eMMC 使用方法与配置 #### 初始化过程 在瑞芯微平台上,为了使能并使用eMMC存储设备,初始化阶段至关重要。具体来说,在U-Boot环境中,`mmc_init` 函数负责对MMC控制器以及连接在其上的eMMC卡执行必要的初始化操作[^1]。 ```c int mmc_init(bd_t *bis) { struct mmc *mmc; /* 获取指向当前选定的 MMC 设备 */ mmc = find_mmc_device(current_device); if (!mmc || !mmc->ops || !mmc->ops->init) { printf("No init function for device\n"); return -ENODEV; } /* 调用具体的初始化函数 */ ret = mmc->ops->init(mmc); ... } ``` 此部分代码展示了如何通过调用特定于硬件的操作来完成初始化工作。对于瑞芯微系列处理器而言,这通常涉及到设置时钟频率、电源管理单元(PMU)参数以及其他低级控制逻辑。 #### 配置文件调整 当移植Linux内核至像RK3399这样的瑞芯微芯片组时,确保正确配置了SD/eMMC相关的驱动程序选项同样重要。这意味着需要编辑`.config` 文件中的相应条目以启用支持,并确认DTS (Device Tree Source) 中有关EMMC节点的信息无误[^2]。 例如,在DTS中定义如下: ```diff &sdhci { status = "okay"; + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&emmc_pins_a>; + cd-gpios = <&gpio1 7 GPIO_ACTIVE_LOW>; // Card Detect Pin }; ``` 这些改动确保了操作系统能够识别并正常访问物理存在的eMMC模块。 #### 分区表规划 考虑到实际应用需求,合理设计根文件系统(rootfs)及其他必要分区显得尤为关键。依据项目具体情况,可能还需要调整启动加载器环境变量或kernel命令行参数以便指定正确的bootargs传递给内核。同时也要注意各分区间相互关系及其大小分配合理性,以免造成数据覆盖等问题发生[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值