rk3288对于parameter参数文件的解析处理【转】
本文转载自:http://blog.csdn.net/groundhappy/article/details/56479694
rk3288有一个parameter文件。
类似于
FIRMWARE_VER:4.4.2MACHINE_MODEL:rk30sdkMACHINE_ID:007MANUFACTURER:RK30SDKMAGIC: 0x5041524BATAG: 0x60000800MACHINE: 3066CHECK_MASK: 0x80PWR_HLD: 0,0,A,0,1#KERNEL_IMG: 0x62008000#FDT_NAME: rk-kernel.dtb#RECOVER_KEY: 1,1,0,20,0CMDLINE: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 - recoveryuint32 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 checkchar 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参数文件的解析处理【转】相关推荐
- Oracle parameter file(参数文件)
Oracle中的参数文件是一个包含一系列参数以及参数对应值的系统文件.数据库启动时加载参数文件,按参数文件中的配置决定数据库的物理结构.内存.数据库的限制等各种属性. 一.参数文件可分为:pfile( ...
- Lemur的参数文件
Lemur Toolkit是一个新兴的实验系统.它由卡耐基-梅隆大学(CMU)开发,在2001年公布了第一个公开的版本,目前最新版本是4.6.其特点是在检索中引入了语言模型,更重要的是,它不仅是一个完 ...
- oracle参数文件initorcl位置,ORACLE参数文件
ORACLE参数文件 简介 参数文件记录了数据库的配置.在数据库启动时,Oracle要根据参数文件中的参数配置数据库.如果为各个内存池分配多少内存,允许打开的进程数和会话数等.要让数据库启动,必须先读 ...
- Office文件的奥秘——.NET平台下不借助Office实现Word、Powerpoint等文件的解析(完)...
原文 http://www.cnblogs.com/mayswind/archive/2013/04/01/2991271.html [题外话] 这是这个系列的最后一篇文章了,为了不让自己觉得少点什么 ...
- Oracle的参数文件pfile和spfile
Oracle中的参数文件是一个包含一系列参数以及参数对应值的操作系统文件.它们是在数据库实例启动时候加载的,决定了数据库的物理 结构.内存.数据库的限制及系统大量的默认值.数据库的各种物理属性.指定数 ...
- 《MySQL技术内幕:InnoDB存储引擎第2版》——3.1 参数文件
3.1 参数文件 在第1章中已经介绍过了,当MySQL实例启动时,数据库会先去读一个配置参数文件,用来寻找数据库的各种文件所在位置以及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等.在默认 ...
- oracle参数文件的本质
环境: SQL> select * from v$version where rownum=1; BANNER ----------------------------------------- ...
- ORACLE初始化参数文件概述
ORACLE初始化参数文件概述 在9i之前,参数文件只有一种,它是文本格式的,称为pfile,在9i及以后的版本中,新增了服务器参数文件,称为spfile,它是二进制格式的.这两种参数文件都是用来存储 ...
- linux下oracle数据库由于参数文件丢失导致的数据库服务启动失败,报“failure in processing system parameters“错误问题解决
ORA-01078: failure in processing system parameters LRM-00109: could not open parameter file '/data/o ...
最新文章
- ARM的位置无关程序设计在Bootloader中的应用
- nodejs 中on 和 emit
- spring boot 日志文件配置(logback-spring.xml)亲测可用!
- Nagios(页面)报错: Return code of 13 is out of bounds
- 安装 SAP Cloud Application Programming SDK @sap/cds-dk 时报错以及解决方案
- 如何清理Virtualbox虚拟机VDI镜像文件的空间大小
- Unobtrusive JavaScript介绍
- 通杀IIS7.0畸形解析0day漏洞
- Swift中文教程(十八) 类型检查
- PHP亿乐社区源码一比一高仿全开源源码
- 蓝桥杯单片机Proteus仿真源文件
- MINGW里面没有mingw32 make.exe
- 大数据与人工智能方向基础课程简单介绍
- ubuntu10.10 教育网 使用ipv6,亲测可用【经过再次验证与修正】
- 连接到手机热点显示无法解析服务器,Win10连接到手机热点却无法上网的解决方法...
- KDD CUP 99利用决策分类树进行网络异常检测
- Excel合并单元格怎么分组排序?
- reference other engineer's code to explain wheather linux terminal can display matplotlib' figure
- 只有微信账号,我可以查询聊天记录吗?
- bootstrap实现网页手风琴--博客园老牛大讲堂