SMEM介绍
2016-03-30 15:27
267 查看
SMEM :shared memory,是高通平台各子系统共享信息的一种机制,通过SMEM机制,PBL可以将信息传递给SBL1,SBL1可以将信息传递给RPM、LK。下面分析一个SMEM信息传递的具体实现过程。
1 Platform id信息
SBL1会将board level platform id信息通过SMEM机制保存,LK在启动过程中会自动platform detect,检测当前平台board infor信息,根据检测到的board infor加载相应的device tree
SBL1:从emmc中读取platform id等CDT信息,并保存到约定的smem中
voidboot_config_data_table_init(bl_shared_data_type* bl_shared_data)
{
/*populate configuration data table's info*/
config_data_table_info.size =config_data_table_size;
config_data_table_info.cdt_ptr =config_data_table; //platform id & ddr default parameter
boot_update_config_data_table(&config_data_table_info);
/*put a pointer to the table info into sblshared data so next sbl can access it*/
bl_shared_data->sbl_shared_data->config_data_table_info =&config_data_table_info;
}
LK通过读取smem获取platform infor信息
static void platform_detect()
{
ret= smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
&board_info_v8,
board_info_len);
board.platform= board_info_v8.board_info_v3.msm_id;
board.platform_version= board_info_v8.board_info_v3.msm_version;
board.platform_hw= board_info_v8.board_info_v3.hw_platform;
board.platform_subtype= board_info_v8.platform_subtype;
}
同理,SBL1可通过SMEM将DDR default parameter传递给RPM,当然也可以将OEM定制信息通过SMEM保存,在启动阶段根据不同OEM信息进行相应的特制化。
2 如何在SBL1和LK间通过SMEM传递客制化信息
step1. Add a new enum (i.e SMEM_OEM_MAGIC_INFO = XXX)in smem_mem_type
step 2. After the boot_smem_init() is called, you use smem_alloc() to allocate the SMEM space for your data,i.e:
smem_oem_magic_ptr = (uint32 *) smem_alloc( SMEM_OEM_MAGIC_INFO, sizeof(uint32));
step3. On lk side add a new enum (i.e SMEM_OEM_MAGIC_INFO =XXX) in smem_mem_type_t
step4. In lk code, you can usethe smem_read_alloc_entry() to read data which is passed from SBL1,i.e:
smem_read_alloc_entry( SMEM_OEM_MAGIC_INFO,&apps_oem_magic_info, sizeof( uint32));
1 Platform id信息
SBL1会将board level platform id信息通过SMEM机制保存,LK在启动过程中会自动platform detect,检测当前平台board infor信息,根据检测到的board infor加载相应的device tree
SBL1:从emmc中读取platform id等CDT信息,并保存到约定的smem中
voidboot_config_data_table_init(bl_shared_data_type* bl_shared_data)
{
/*populate configuration data table's info*/
config_data_table_info.size =config_data_table_size;
config_data_table_info.cdt_ptr =config_data_table; //platform id & ddr default parameter
boot_update_config_data_table(&config_data_table_info);
/*put a pointer to the table info into sblshared data so next sbl can access it*/
bl_shared_data->sbl_shared_data->config_data_table_info =&config_data_table_info;
}
LK通过读取smem获取platform infor信息
static void platform_detect()
{
ret= smem_read_alloc_entry(SMEM_BOARD_INFO_LOCATION,
&board_info_v8,
board_info_len);
board.platform= board_info_v8.board_info_v3.msm_id;
board.platform_version= board_info_v8.board_info_v3.msm_version;
board.platform_hw= board_info_v8.board_info_v3.hw_platform;
board.platform_subtype= board_info_v8.platform_subtype;
}
同理,SBL1可通过SMEM将DDR default parameter传递给RPM,当然也可以将OEM定制信息通过SMEM保存,在启动阶段根据不同OEM信息进行相应的特制化。
2 如何在SBL1和LK间通过SMEM传递客制化信息
step1. Add a new enum (i.e SMEM_OEM_MAGIC_INFO = XXX)in smem_mem_type
step 2. After the boot_smem_init() is called, you use smem_alloc() to allocate the SMEM space for your data,i.e:
smem_oem_magic_ptr = (uint32 *) smem_alloc( SMEM_OEM_MAGIC_INFO, sizeof(uint32));
step3. On lk side add a new enum (i.e SMEM_OEM_MAGIC_INFO =XXX) in smem_mem_type_t
step4. In lk code, you can usethe smem_read_alloc_entry() to read data which is passed from SBL1,i.e:
smem_read_alloc_entry( SMEM_OEM_MAGIC_INFO,&apps_oem_magic_info, sizeof( uint32));
相关文章推荐
- 关于深度学习,看这一篇就够了
- ubuntu完全卸载nginx
- Binder机制分析【一】-简介
- Tomcat的类加载体系
- 神经网络与深度学习
- reactNative小demo讲解 对比iOS
- Fragment实现懒加载,让应用更优化
- Android 电话号码及邮箱格式化
- Android学习(一)--第一个项目遇到的一些问题跟解决
- -bash: pod: command not found
- intelliJ idea读取资源文件
- TMS scripter使用心得
- pxe操作系统的批量安装原理以及步骤
- iOS面试题-iOS部分
- 阿里云上搭建网站
- Google带WiFi的热气球或首次商用
- Xcode之修改系统生成的注释模板
- MD5 加密
- Canvas学习笔记
- 常用的正则表达式