本文转载自:http://blog.csdn.net/groundhappy/article/details/56479694

rk3288有一个parameter文件。

类似于

 FIRMWARE_VER:4.4.2
MACHINE_MODEL:rk30sdk
MACHINE_ID:007
MANUFACTURER:RK30SDK
MAGIC: 0x5041524B
ATAG: 0x60000800
MACHINE: 3066
CHECK_MASK: 0x80
PWR_HLD: 0,0,A,0,1
#KERNEL_IMG: 0x62008000
#FDT_NAME: rk-kernel.dtb
#RECOVER_KEY: 1,1,0,20,0
CMDLINE:console=ttyS2,115200 earlyprintk root=/dev/block/mtd/by-name/linuxroot rw rootfstype=ext4 init=/sbin/init initrd=0x62000000,0x00800000 mtdparts=rk29xxnand:0x00008000@0x00002000(kernel),0x00008000@0x0000A000(boot),0x00002000@0x00012000(misc),0x00001000@0x00014000(backup),-@0x00015000(linuxroot)

这个文件是在uboot中被解析的。

在init_sequence_r中有board_late_init函数

board_late_init中首先就执行了

load_disk_partitions()这一部分。这一部分执行了解析parameter的过程。还有一次解析Parameter的过程是在执行完一次flash以后。刷了新的flash的时候会重新解析一次。

这一次是调用board_fbt_load_partition_table->load_disk_partitions执行的解析

在load_disk_partitions中

首先分配了一块内存用于保存解析的param结构

Parameters有多个Line组成,限制每个Line最大占1024 Bytes

#define PARAMETER_NUM 8
// parameter文件的备份个数

#define MAX_LOADER_PARAM (128*512)
// Parameters所占的最大Sector数(含tag、length、crc等)

PLoaderParam param = (PLoaderParam)memalign(ARCH_DMA_MINALIGN, MAX_LOADER_PARAM * PARAMETER_NUM);

申请了 128*512*8字节 512KB的大小。每个parameter文件只有128*512的大小。但是一共有8个parameter,可能7个是作为备份的。

只要按照顺序读取出一个parameter。并且是有效的parameter文件就表明成功了

随后调用GetParam获取parameter文件到这块内存中

然后调用ParseParam将这些信息解析到gBootInfo.cmd_mtd结构中。

释放申请param

GetParam就是从param_addr=0的地址读取emmc的内容。按照扇区读取,一共读取8次。其中有一次读取的数据是准确的就可以了。验证parameter的有效性是通过

CheckParam完成的

(为什么是从磁盘的地址0开始读取呢?,不是RKubootbin是从0地址保存的吗?)

随后调用ParseParam来解析数据,每次取得一行,然后调用ParseLine(pboot_info, line);解析数据,存放到pboot_info结构中

PBootInfo

typedef struct tagBootInfo
{
uint32 magic_code;
uint16 machine_type;
uint16 boot_index; // 0 - normal boot, 1 - recovery
uint32 atag_addr;
uint32 misc_offset;
uint32 kernel_load_addr;
uint32 boot_offset; // 以Sector为单位
uint32 recovery_offset; // 以Sector为单位
uint32 ramdisk_offset; // 以Sector为单位
uint32 ramdisk_size; // 以Byte为单位
uint32 ramdisk_load_addr;
uint32 is_kernel_in_boot; uint32 check_mask; // 00 - 不校验, 01 - check kernel, 10 - check ramdisk, 11 - both check
char cmd_line[MAX_LINE_CHAR];
cmdline_mtd_partition cmd_mtd; int index_misc;
int index_kernel;
int index_boot;
int index_recovery;
int index_system;
int index_backup;
int index_snapshot;
char fw_version[MAX_LINE_CHAR];
char fdt_name[MAX_LINE_CHAR];
} BootInfo, *PBootInfo;

其中解析 cmdline的时候还调用了一次

parse_cmdline(pboot_info)

{

mtdpart_parse解析数据到CMDMTD里面

并且解析了每个分区的信息保存到disk_partition_t结构中。这个结构位于include/part.h

}

rk3288对于parameter参数文件的解析处理【转】的更多相关文章

  1. Spring MVC-控制器(Controller)-参数方法名称解析器(Parameter Method Name Resolver )示例(转载实践)

    以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parametermethodnameresolver.htm 说明:示例基于Sp ...

  2. RK3288 mipi屏参数配置文件

    RK3288     Android 5.1系统     Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ...

  3. oracle参数文件与启动过程

    oracle随系统启动而启动 cs65-64桌面版orcle-11.2.0.4 启动监听器,后台进程,OEM. 注意: 如果只做一和三,只能启动后台进程,监听器不启动,如果只做二和三,只能启动监听器, ...

  4. MyBatis源码分析(1)-MapConfig文件的解析

    1.简述 MyBatis是一个优秀的轻ORM框架,由最初的iBatis演化而来,可以方便的完成sql语句的输入输出到java对象之间的相互映射,典型的MyBatis使用的方式如下: String re ...

  5. oracle-7参数文件的管理

    参数文件的管理:1.参数文件的作用:记录数据库的配置的 (1)pfile  ---> 文本文件 (2)spfile --->服务器的参数文件(二进制的) 两个参数文件的区别: pfile ...

  6. Oracle的参数文件

    参数文件的作用: 它们是在数据库实例启动时候加载的,决定了数据库的物理结构.内存.数据库的限制及系统大量的默认值.数据库的各种物理属性.指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重 ...

  7. JVM-class文件完全解析-字段表集合

     字段表集合 这个class文件的解析,分析得有点太久了.前面介绍类魔数,次版本号,主板本号,常量池入口,常量池,访问标志,类索引,父类索引和接口索引集合.下面就应该到字段表集合了.  紧接着接口索引 ...

  8. RMAN备份与恢复之参数文件与控制文件

    0   说明 本例是基于备份数据库全库的基础上,还原参数据文件(spfile),控制文件. 1   准备 [oracle@TEST144239 /]$ sqlplus /nolog SQL Produ ...

  9. springmvc笔记(基本配置,核心文件,路径,参数,文件上传,json整合)

    首先导入jar包 大家注意一下我的springmvc,jackson,common-up的jar包版本.其他版本有可能出现不兼容. src文件: webroot目录: web.xml <?xml ...

随机推荐

  1. Android RecyclerView notifyDataSetChanged不起作用

    一般listview设置完data后调用notifyDataSetChanged便可刷新布局界面,然而recycleview调用这个方法却没有任何反应.对于很多不熟悉recycleview的话很容易躺 ...

  2. ElasticSearch-5.21安装

    环境 操作系统:Centos 6.5 X64 IP地址:192.168.56.100 JDK 环境: # java -version java version "1.8.0_121" ...

  3. 常用的SSH注解标签

    常用的SSH注解标签 1.Spring的注解 关于配Bean用的        @Component        @Controller @Service @Repository        作用 ...

  4. python2升级成python3

    系统环境centos 6.5原python版本2.6.6目标python版本3.5.11.下载python3.5wget --no-check-certificate  http://www.pyth ...

  5. PHP 之用证书对数据进行签名、验签、加密、解密

    /** * 对数据进行签名 * $data = 'If you are still new to things, we’ve provided a few walkthroughs to get yo ...

  6. iDRAC RAC0218 最大会话限制

    用ssh工具登陆IDRAC远程管理ip地址: /admin1-> racadm racreset RAC reset operation initated successfully.  It m ...

  7. 数组的复制 --System.arraycopy()

    import java.util.Arrays; public class HellowWorld { public static void main(String[] argv ) { int[] ...

  8. js 简单小知识

    1. javascript的typeof返回哪些数据类型: string, boolean, number, undefined, function, object 2. split() join() ...

  9. 1 Excel

    #region 设置页边距 //sheet.SetMargin(MarginType.LeftMargin, (double)0.6 / 3); //sheet.SetMargin(MarginTyp ...

  10. 我理解的数据结构(二)—— 栈(Stack)

    我理解的数据结构(二)-- 栈(Stack) 一.栈基础 栈是一种线性结构 相比较数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从同一端取出元素,这一端称为栈顶 栈是一种后进先出的数据结构 ...