rk3288对于parameter参数文件的解析处理【转】
本文转载自: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参数文件的解析处理【转】的更多相关文章
- Spring MVC-控制器(Controller)-参数方法名称解析器(Parameter Method Name Resolver )示例(转载实践)
		以下内容翻译自:https://www.tutorialspoint.com/springmvc/springmvc_parametermethodnameresolver.htm 说明:示例基于Sp ... 
- RK3288 mipi屏参数配置文件
		RK3288 Android 5.1系统 Linux 3.10 mipi屏参数配置文件所在的路径:kernel/arch/arm/boot/dts/xxx_mipi.dtsi 屏参数配 ... 
- oracle参数文件与启动过程
		oracle随系统启动而启动 cs65-64桌面版orcle-11.2.0.4 启动监听器,后台进程,OEM. 注意: 如果只做一和三,只能启动后台进程,监听器不启动,如果只做二和三,只能启动监听器, ... 
- MyBatis源码分析(1)-MapConfig文件的解析
		1.简述 MyBatis是一个优秀的轻ORM框架,由最初的iBatis演化而来,可以方便的完成sql语句的输入输出到java对象之间的相互映射,典型的MyBatis使用的方式如下: String re ... 
- oracle-7参数文件的管理
		参数文件的管理:1.参数文件的作用:记录数据库的配置的 (1)pfile ---> 文本文件 (2)spfile --->服务器的参数文件(二进制的) 两个参数文件的区别: pfile ... 
- Oracle的参数文件
		参数文件的作用: 它们是在数据库实例启动时候加载的,决定了数据库的物理结构.内存.数据库的限制及系统大量的默认值.数据库的各种物理属性.指定数据库控制文件名和路径等信息,是进行数据库设计和性能调优的重 ... 
- JVM-class文件完全解析-字段表集合
		字段表集合 这个class文件的解析,分析得有点太久了.前面介绍类魔数,次版本号,主板本号,常量池入口,常量池,访问标志,类索引,父类索引和接口索引集合.下面就应该到字段表集合了. 紧接着接口索引 ... 
- RMAN备份与恢复之参数文件与控制文件
		0 说明 本例是基于备份数据库全库的基础上,还原参数据文件(spfile),控制文件. 1 准备 [oracle@TEST144239 /]$ sqlplus /nolog SQL Produ ... 
- springmvc笔记(基本配置,核心文件,路径,参数,文件上传,json整合)
		首先导入jar包 大家注意一下我的springmvc,jackson,common-up的jar包版本.其他版本有可能出现不兼容. src文件: webroot目录: web.xml <?xml ... 
随机推荐
- VMWare 安装Ubuntu 16.04
			1.新建虚拟机 (1)点击文件-->新建虚拟机 (2)选择 自定义(高级)--> 下一步 (3)选择Workstation 12.0 --> 下一步 (4)选择 稍后安装操作系统 - ... 
- 移动web——bootstrap如何修改原组件
			基本介绍 1.bootstrap提供了丰富的组件,但是有时候我们不仅要删除不必要的标签,还需要修改里面的样式 2.我们建议若是修改样式那么最好将源样式从css中拷贝出来,名字换掉,然后修改具体样式,这 ... 
- html5——背景
			背景大小 background-size: % %;//宽 高 background-size: 100px 100px;//宽 高 background-size: cover;//覆盖,图片会完全 ... 
- Python语言之类
			1.一个空类 #Filename : emptyclass.py class Empty: pass e = Empty() print( e ) #<__main__.Empty object ... 
- url中含有中文路径时访问出现404问题
			/** * URL中文字符编码转换 * @param url 含中文字符的URL * @return */ public static String getChineseURICode(String ... 
- 非常好用的1款UI自动化测试工具:airTest
			网易团队开发的UI自动化测试神器airTest,下载地址:http://airtest.netease.com/tutorial/Tutorial.html Appium和airTest对比,我的看法 ... 
- CAD调用导角命令,并返回导角的圆弧对象
			主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数,详细说明如下: 参数 说明 IDispatch* pParam 命令参数,IMx ... 
- linu下nginx的安装
			这里用到的环境是nginx-1.8.0,linux用的是CentOS-7-x86_64-DVD-1804.iso版本 1 什么是nginx Nginx ("engine x") ... 
- JavaScript day3(数据类型)
			数据类型(data type) JavaScript提供七种不同的数据类型(data types),它们是string(字符串), symbol(符号), number(数字), undefined( ... 
- Win32 线程同步
			Win32 线程同步 ## Win32线程同步 ### 1. 原子锁 ### 2. 临界区 {全局变量} CRITICAL_SECTION CS = {0}; // 定义并初始化临界区结构体变量 {线 ... 
