UBoot环境变量(EnvironmentVariable)
U-Boot通过环境变量(env)为用户提供一定程度的可配置性,这些环境变量包括启动kernel的参数(bootargs)、本地IP(ipaddr)、网卡MAC地址(ethaddr),波特率(baudrate)等等。环境变量可以固化到非易失性存储介质中(比如spi flash),使用printenv/setenv/saveenv命令来查看和修改保存。环境变量可以理解为一个键值对,即name=value,通过name找到value,再对不同的value做不同的设置。MBoot把环境变量分成3类:普通的环境变量,process环境变量,kernel环境变量。通过下面代码实现:
几个关键的API:
查找指定的环境变量:
设置指定环境变量的值:
保存环境变量: 根据不同的硬件配置,环境变量存储的位置不一样,有spi flash、eeprom、nand flash等,mstar的android平台一般是用spi flash存储环境变量。具体使用哪种存储介质,在/MBoot/u-boot-2011.06/include/configs/Uboot_module_config.h
PM概述
PM即Power Manager,为待机控制管理模块。待机时有一颗C51内核的MCU在跑,负责待机时的电源管理,IR和按键处理等操作。 进入PM的方式有两种,从MBoot进入PM和从Supernova进入PM。
从MBoot进入PM
1. 定义Command
2. 注册Process类型Command
3. 执行Command
Main_loop()->MstarProcess()->App_Register_Process()、run_command(do_if_boot_to_pm)->
If_Boot_To_PM()->msAPI_Power_PowerDown_EXEC()->MDrv_PM_PowerDown(&PmPowerDownCfg)
在If_Boot_To_PM(void)根据环境变量\判断是否进入PM,可以开机后进入工厂菜单设置,也可以通过MBoot的CLI改写环境变量的方式。
在void msAPI_Power_PowerDown_EXEC(void)会传一个PmWakeCfg和PM_PowerDownCfg的结构体到PM,这些结构体定义了开机方法和中断的开关状态。另外需要注意,如果PM运行状态为E_PM_STANDBY,则表示PM是运行在Dram上,所以进入PM后Dram不能断电。
从Supernova进入PM
当按power off按键或者因为timer out而进入待机,将从Supernova进入PM: MSrv_Control_common::EnterSleepMode()->void
mapi_system::PowerDown()->MDrv_PM_PowerDown() 过程类似MBoot进入PM
Android内核(Kernel)概述
内核(kernel)是操作系统最基本的部分,主要负责管理系统资源。内核提供一种硬件抽象的方法,通过进程间通信机制(IPC)及系统调用(system call),应用进程可间接控制所需的硬件资源。如下图所示:
内核(Kernel)
IPC
系统调用 应用软件 Android内核在整个Android架构中的层次图: