瑞芯微的安卓平台使用 parameter 文件来配置一些系统参数,比如定义串口号,固件版本,flash分区,按键信息等。
parameter 文件是由 BootLoader 解析的,大小不能超过 64 KB。
1、FIRMWARE_VER:5.0.0
固件版本,打包 update.img 会用到,升级工具会根据这个识别固件版本。
BootLoader 会读取这个版本传给 kernel 使用。
2、MACHINE_MODEL:rk3288
机型,打包 update.img 会用到,可以根据需求修改,用于升级工具显示。
3、MACHINE_ID:007
产品开发 ID,可以是字符和数字组合,打包 update.img 会用到,不同的项目使用不通的 ID,
可以用于识别机器机型。
4、MANUFACTURER:RK3288
厂商信息,打包 update.img 会用到,可以根据需求修改,用于升级工具显示。
5、MAGIC: 0x5041524B
MAGIC,不能修改
6、ATAG: 0x60000800
ATAG,不能修改
7、MACHINE: 3288
内核识别用到,不能修改
8、CHECK_MASK: 0x80
保留,不能修改
9、PWR_HLD: 0,0,A,0,1
控制 GPIO0_A0 输出高电平
第1是按键类型:0 为普通按键,1 为 AD 按键
第2、3、4是 GPIO 定义:上面是 GPIO0_A0
第5是判断电平:
1 为解析 parameter 时输出高电平
2 为解析 parameter 时输出低电平
3 为在 BootLoader 需要控制电源时,输出高电平
4 为在 BootLoader 需要控制电源时,输出低电平
/按键类型为:0 = 普通按键 , 1 = AD 按键
//GPIO 定义:上例中定义的是 GPIO 4 C5
//判断电平:0 = 低电平 ,1=高电平
//AD 定义(通道,下限值,上限值)
//:上例中,1 表示 ADC 通道 1,8 表示下限值为 80,20 表
//示上限值为 200,也就是 AD 值在 80~200 内的按键都认为是 COMBINATION_KEY。
//Combination 按键定义,可以定义多个,用户可以根据实际机型定义按键。
//功能说明:
//1、按住 recovery 按键并接 USB 开机,进 loader rockusb 升级模式。
//2、按住 recovery 按键不接 USB 开机,3S 左右会引导 recovery.img。
//3、按住 combination 按键开机,会引导 recovery.img,进 android 的 recovery 模式,用户
//可以根据菜单选择操作。
10、CMDLINE
console=console=ttyFIQ0 androidboot.console=ttyFIQ0
串口定义
init=/init initrd=0x62000000,0x00800000
第一个参数是 boot.img 加载到 sdram 的位置
第二个参数是 ramdisk 的大小,目前 ramdisk 的大小没有限制
MTD分区:
mtdparts=rk29xxnand:0x00002000@0x00002000(uboot),0x00002000@0x00004000(misc),0x00008000@0x00006000(resource),0x00008000@0x0000e000(kernel),0x00010000@0x00016000(boot),0x00010000@0x00026000(recovery),0x0001a000@0x00036000(backup),0x00040000@0x00050000(cache),0x00002000@0x00090000(kpanic),0x00300000@0x00092000(system),0x00008000@0x00392000(metadata),0x00600000@0x0039A000(userdata),0x00020000@0x0099A000(radical_update),-@0x009BA000(user)
mtdparts=rk29xxnand: //nand flash 分区,因为系统是安装在nandflash里面的
0x00002000@0x00002000(misc), //misc分区 前面表示大小,后面表示起始地址
0x00008000@0x00004000(kernel), //内核分区
0x00008000@0x0000C000(boot), //引导区大小
0x00010000@0x00014000(recovery),//恢复区
0x00020000@0x00024000(backup), //备份区
0x00100000@0x00044000(cache), //缓存区
0x00400000@0x00144000(userdata),//用户数据区
0x00002000@0x00544000(kpanic), //重要数据保存去(学名叫啥 过后再找找)
0x00100000@0x00546000(system), //系统文件区
-@0x00646000(user)
为了兼容性,都是用 rk29xxnand 做标识。
0x00002000@0x00002000(uboot),@符号之前的数值是分区大小,@符号之后的数值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位都是扇区,一个扇区为 512Bytes,boot 分区的起始位置为 0x2000 扇区位置,大小为 0x2000 扇区(4MB)。
目前 flash 最大的 block 是 4MB(0x2000 扇区),所以每个分区要以 4MB 对齐,也就是每个分区的大小必须是 4MB 的整数倍。
backup 及之前的分区为固件区,在 Linux 系统中是只读的,在确定大小后,后续升级时不能修改分区的大小。
backup 之后的分区在 Linux 系统中是可读写的。在后续升级时可以调整分区的大小,调整分区大小后,需要进安卓的 recovery 系统格式化 cache 等分区。
//分区定义说明:
//为了兼容性,RK30xx、RK29xx 和 RK292x 都是用 rk29xxnand 做标识。
//单个分区说明:
//例如:0x00002000@0x00008000(boot),@符号之前的数值是分区大小,@符号之后的数
//值是分区的起始位置,括号里面的字符是分区的名字。所有数值的单位是 sector,1 个 sector
//为 512Bytes.
//上例中,boot 分区起始位置为 0x8000 sectors 位置,大小为 0x2000 sectors(4MB).
//目前 flash 最大的 block 是 4MB(0x2000 sectors),所以每个分区需要 4MB 对齐,也就是每个分区都必须为 4MB 的整数倍大小。
//Backup 及之前的分区为固件区,在 linux 系统里是只读的,在确定大小后,后续升级时不能修改分区大小。
//Backup 之后的分区在 linux 系统里是可读写的。在后续升级时可以调整分区大小,调整分区大小后需要进 android 的 recovery 系统格式化 cache 等分区。
//-----------------------------------------------------------------------------------------------
parameter文件最大不超过64Kb 以上参数由bootloader解析;
GPIO 控制信息
例如:
PWR_HLD:0,0,C,7,1 //控制 GPIO0C7 输出高电平
PWR_HLD:0,0,C,7,2 //控制 GPIO0C7 输出低电平
PWR_HLD:0,0,A,0,3 //配置 PWR_HLD 为 GPIO0A0,在 Loader 需要锁定电源时,输出高电平锁定电源
GPIO 控制信息和 PWR_HLD 管脚定义信息复用,因此定义 GPIO 控制信息后,最后一条需要配置真正的 PWR_HLD 引脚,不然 loader 不会锁定电源。代码不会配置 IOMUX,被配置为特殊功能的 IO 是不可以控制的,
这些 IO 有:SD0,SD1,NANDFLASH(不包含 D8~D15),SPI0,UART2 等使用到的 IO。
定义格式和 COMBINATION_KEY 的 GPIO 定义类似,只有最后一个字节(电平判断)不同。
电平判断解释:
1:= 解析 parameter 时,输出高电平
2:= 解析 parameter 时,输出低电平
3:= 在 Loader 需要控制电源时,输出高电平
0:= 在 Loader 需要控制电源时,输出低电平