本文转载自: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. 常用的Axure操作方法(1)

    1. 保存原型图片到本地,如在网页上看到图标素材,好多个在一张图上.                                   如上图所示,将图片拖入axure中,利用分割或者裁剪,把小图标 ...

  2. Android基础TOP3:Activity的线性,相对,帧和表格布局的概括

    线性布局 LinearLayout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&q ...

  3. CSS——层级

    层级问题:选中的盒子显示的效果并不完整,右边的边框并没有显示红色,原因是其右边的盒子压了它的边框. <!DOCTYPE html> <html lang="en" ...

  4. IE bug集锦

    ie8 iframe 不显示 问题描述: IE8的非兼容模式下(兼容模式是ie7,不存在),iframe会不显示: 可以通过Ctrl+A全选或者是调整窗口大小显示出来. 解决办法: 这是由于要显示的i ...

  5. Python语言之控制流(if...elif...else,while,for,break,continue)

    1.if...elif...else... number = 23 guess = int(input('Enter an integer : ')) if guess == number: prin ...

  6. 【sqli-labs】 less53 GET -Blind based -Order By Clause -String -Stacked injection(GET型基于盲注的字符型Order By从句堆叠注入)

    http://192.168.136.128/sqli-labs-master/Less-53/?sort=1';insert into users(id,username,password) val ...

  7. MFC TAB控件顺序

    在MFC中添加控件后,按Ctrl+d可以改变控件TAB顺序,怕自己忘了,一个神奇的东西,记下. 关于改变Tab顺序的方法有以下几种: 方法一:在动态创建控件的时候STYLE设置成为WS_CHILD|W ...

  8. Sping——使用注解创建切面

    为讲解例子,我们首先定义一个Performance接口: package aoptest; public interface Performance { public void perform(); ...

  9. JS弹出子窗口

    目的 在一个主窗口中,点击一个链接, 弹出一个子窗口 , 父窗口保留 在子窗口中点击关闭, 关闭子窗口. 子窗口的位置位于屏幕的中间 实现 main.html <!DOCTYPE html> ...

  10. 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)

    在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...