android 利用cmdline,将參数从preloader传递到kernel
以定义參数 cus_param 为例。int型变量。
1. Preloader部分
Platform.h(mediatek\platform\[$platform]\preloader\src\drivers\inc\platform.h)
在例如以下结构体中加cus_param变量。假设是char型,请注意4byte对其:
typedef struct {
u32 magic;
boot_mode_t mode;
u32 e_flag;
u32 log_port;
u32 log_baudrate;
u8 log_enable;
u8 part_num;
u8 reserved[2];
u32 dram_rank_num;
u32 dram_rank_size[4];
u32 boot_reason;
u32 meta_com_type;
u32 meta_com_id;
u32 boot_time;
da_info_t da_info;
SEC_LIMIT sec_limit;
part_hdr_t *part_info;
u8 md_type[4];
u32 ddr_reserve_enable;
u32 ddr_reserve_success;
u32 cus_param; //mediatek add
} boot_arg_t;
Platform.c(mediatek\platform\[$platform]\preloader\src\drivers\platform.c)
在此函数中加入对cus_param的赋值。通过函数,或者直接写入所需的值:
void platform_set_boot_args()
{
#if CFG_BOOT_ARGUMENT
bootarg.magic = BOOT_ARGUMENT_MAGIC;
bootarg.mode = g_boot_mode;
bootarg.e_flag = sp_check_platform();
bootarg.log_port = CFG_UART_LOG;
bootarg.log_baudrate = CFG_LOG_BAUDRATE;
bootarg.log_enable = (u8)log_status();
bootarg.dram_rank_num = get_dram_rank_nr();
get_dram_rank_size(bootarg.dram_rank_size);
bootarg.boot_reason = g_boot_reason;
bootarg.meta_com_type = (u32)g_meta_com_type;
bootarg.meta_com_id = g_meta_com_id;
bootarg.boot_time = get_timer(g_boot_time);
bootarg.part_num = g_dram_buf->part_num;
bootarg.part_info = g_dram_buf->part_info;
bootarg.ddr_reserve_enable = g_ddr_reserve_enable;
bootarg.ddr_reserve_success= g_ddr_reserve_success;
//mediatek add,mt_get_cus_param这个函数是客制化得到cus_param的函数,请自行实现
bootarg.cus_param = mt_get_cus_param();
2.LK 部分
Boot_mode.h(mediatek\platform\[$platform]\lk\include\platform\boot_mode.h)
在例如以下结构体中相同加入cus_param变量。假设是char型,请注意4byte对其:
typedef struct {
u32 maggic_number;
BOOTMODE boot_mode;
u32 e_flag;
u32 log_port;
u32 log_baudrate;
u8 log_enable;
u8 part_num;
u8 reserved[2];
u32 dram_rank_num;
u32 dram_rank_size[4];
u32 boot_reason;
META_COM_TYPE meta_com_type;
u32 meta_com_id;
u32 boot_time;
da_info_t da_info;
SEC_LIMIT sec_limit;
part_hdr_t *part_info;
u8 md_type[4];
u32 ddr_reserve_enable;
u32 ddr_reserve_success;
u32 cus_param; //mediatek add。和preloader部分同样,两个结构体要一样
} BOOT_ARGUMENT;
Mt_boot.c(bootable\bootloader\lk\app\mt_boot\mt_boot.c)
在此函数中,将cus_param的信息加入到cmdline上:
int boot_linux_from_storage(void)
{
.....
strlen += sprintf(commanline, "%s fps=%1d", commanline, mt_disp_get_lcd_time());
strlen += sprintf(commanline, "%s cus_param=%1d", commanline, g_boot_arg->cus_param); //mediatek add
3.Kernel部分
saved_command_line 这是一个全局变量,在您所须要此參数的driver文件里。extern saved_command_line变量。
通过查找 cus_param 的字符串就可以:
char * ptr;
int cus_param;
ptr = strstr(saved_command_line, "cus_param=");
ptr += strlen("cus_param=");
cus_param = simple_strtol(ptr, NULL, 10);
此时 cus_param就是最初的int值。
android 利用cmdline,将參数从preloader传递到kernel的更多相关文章
- 菜鸟学习Spring——60s利用JoinPoint获取參数的值和方法名称
一.概述 AOP的实现方法在上两篇博客中已经用了两种方法来实现如今的问题来了尽管我们利用AOP,那么client怎样信息传递?利用JoinPoint接口来实现client给详细实现类的传递參数. 二. ...
- 将參数从PHP传递到JavaScript中
php: //自己定义数组參数 $newarr = array('a1' => 'a1', 'a2' => 'a2', 'a3' => 'a3'); $config = CJavaS ...
- android利用剪切板来实现数据的传递
在Android开发中我们经常要遇到的一个问题就是数据在不同的Activity之间的共享.在Android开发中有很多种方法可以达到这个目地. 这里介绍一种比较常见.又常用的一种方法就是使用剪切板.我 ...
- linux kernel的cmdline參数解析原理分析
利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參 ...
- android意图传參数(四)
一.依照向导创建一个project,layout的activity_main.xml文件内容例如以下: <RelativeLayout xmlns:android="http://sc ...
- Scala入门到精通——第十九节 隐式转换与隐式參数(二)
作者:摇摆少年梦 配套视频地址:http://www.xuetuwuyou.com/course/12 本节主要内容 隐式參数中的隐式转换 函数中隐式參数使用概要 隐式转换问题梳理 1. 隐式參数中的 ...
- 关于mybatis中,批量增删改查以及參数传递的问题
1.參数传递的问题 大多数情况下,我们都是利用map作为參数,而且大部分情况下都是仅仅有一个參数. 可是,我们也能够利用@param注解,来传入多个參数,此时,mybatis会自己主动将參数封装成ma ...
- 我的Spring之旅(二):为请求加入參数
1.前言 在上一篇我的Spring之旅(一)中,我们仅仅是利用不带參数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中须要自己定义的參数.本篇将简单地为之前的请求加入參数. ...
- java參数传递方式问题
java的參数传递方式到底是值传递还是引用传递,这一直是一个争论不休的问题,一直以来没有形成统一意见. 在这里,我也仅仅是说一说个人见解,不保证是对的,全当是抛砖引玉. 首先我的观点是java採用的是 ...
随机推荐
- Android背后的设计思想——功能共享机制
Android的系统设计,与别的智能手机操作系统有很大区别,甚至在以往的任何操作系统里,很难找到像Android这样进行全面地系统级创新的操作系统.从创新层面上来说,Android编程上的思想和支持这 ...
- Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟
A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...
- django 获取 POST 请求值的几种方法(转)
转载请注明出处:http://hi.baidu.com/leejun_2005/blog/item/9a37a22238f35c5bac34de54.html from:http://stackove ...
- Windows用WinDbg分析蓝屏dump文件查找原因(转)
WinDbg官方下载: http://msdl.microsoft.com/download/symbols/debuggers/dbg_x86_6.11.1.404.msi http://msdl. ...
- POJ 3384 Feng Shui (半平面交)
Feng Shui Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3743 Accepted: 1150 Speci ...
- GNU诞生三十周年
1983年9月27日,MIT人工智能实验室的Richard Stallman在新闻组宣布了雄 心勃勃的GNU(Gnu's Not Unix)操作系统计划,他计划创造一个Unix兼容的自由软件系统,包含 ...
- Spring bean配置继承
在 Spring,继承是用为支持bean设置一个 bean 来分享共同的值,属性或配置. 一个子 bean 或继承的bean可以继承其父 bean 的配置,属性和一些属性.另外,子 Bean 允许覆盖 ...
- JAVAssist---动态改动注解
ITOOV3.0開始了,须要研究一些技术难点,先来说一个我认为比較有趣的技术点吧.需求是这种.我们须要动态的切换数据源,又因为我们是通过实体单元的注入来完毕的.实体单元是通过注解的形式注入的.这样假 ...
- Appium+python自动化55-appium desktop每次启动安装Unlock和Appium Setting问题
前言 部分真机可能会出现每次运行代码,启动app之前都会重复安装Unlock和Appium Setting这两个小工具,有的手机会自动安装,这个还好. 有的手机每次都会弹出一个安装确认框(如部分小米和 ...
- nose的测试报告
有时候我们要让报告整洁美观点,以html展示测试结果,我们可以借助pip install nosehtmloutput插件输出html格式报告 from nose.plugins.plugintest ...