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值。

时间: 2024-10-11 17:20:42

android 利用cmdline,将參数从preloader传递到kernel的相关文章

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

android利用剪切板来实现数据的传递

在Android开发中我们经常要遇到的一个问题就是数据在不同的Activity之间的共享.在Android开发中有很多种方法可以达到这个目地. 这里介绍一种比较常见.又常用的一种方法就是使用剪切板.我们都有用过Window.Linux上的Copy.这里介绍的就是这种. 调用服务 [java] view plaincopy ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOAR

将參数从PHP传递到JavaScript中

php: //自己定义数组參数 $newarr = array('a1' => 'a1', 'a2' => 'a2', 'a3' => 'a3'); $config = CJavaScript::encode($newarr); Yii::app()->clientScript->registerScript('customConfig', "var customConfig = " . $config . ";", CClientSc

linux kernel的cmdline參数解析原理分析

利用工作之便,今天研究了kernel下cmdline參数解析过程.记录在此.与大家共享.转载请注明出处.谢谢. Kernel 版本:3.4.55 Kernel启动时会解析cmdline,然后依据这些參数如console root来进行配置执行. Cmdline是由bootloader传给kernel.如uboot.将须要传给kernel的參数做成一个tags链表放在ram中,将首地址传给kernel,kernel解析tags来获取cmdline等信息. Uboot传參给kernel以及kerne

我的Spring之旅(二):为请求加入參数

1.前言 在上一篇我的Spring之旅(一)中,我们仅仅是利用不带參数的请求返回一个网页或一段json,在实际的B/S.C/S网络交互中,请求中须要自己定义的參数.本篇将简单地为之前的请求加入參数. 2.參数说明 ①method:API名称,用于区分服务端调用方法 ②name:请求參数名称,将作为method方法的实參 3.改写HelloController.java package com.nextgame.web; import java.io.IOException; import net

管理线程之向线程函数传递參数

向线程函数传递參数在构造线程对象时就可以完毕.可是要记住,默认情况下是把參数复制到线程内部,即使在函数中使用的是引用.比如 void f(int i,std::string const &s); std::thread t(f,3,"hello"); 上面代码中,函数f的第二个參数是std::string,传递的是char const *会转换为string. 当使用指针指向自己主动变量时.要特别注意: void f(int i, std::string const&

java參数传递方式问题

java的參数传递方式到底是值传递还是引用传递,这一直是一个争论不休的问题,一直以来没有形成统一意见. 在这里,我也仅仅是说一说个人见解,不保证是对的,全当是抛砖引玉. 首先我的观点是java採用的是值传递,即使是引用作为实參也仅仅是将引用的值传递给另外一个引用,说白了还是值传递. 1.首先对于java基本类型(如int,double,byte)和不可变类型如(String)做參数一定是值传递,如以下程序: public class Config { public static void mai

C语言函数參数传递原理

C语言中參数的传递方式一般存在两种方式:一种是通过栈的形式传递.还有一种是通过寄存器的方式传递的. 这次.我们仅仅是具体描写叙述一下第一种參数传递方式,第二种方式在这里不做具体介绍. 首先,我们看一下,以下一个简单的调用例程: int Add (int a, int b, int c) { return a+b+c; } void main() { int x =0 , y = 1, z = 2; int result = 0; result = Add(x, y, z); printf("Re

Android 布局学习之——Layout(布局)具体解释二(常见布局和布局參数)

 [Android布局学习系列]   1.Android 布局学习之--Layout(布局)具体解释一   2.Android 布局学习之--Layout(布局)具体解释二(常见布局和布局參数)   3.Android 布局学习之--LinearLayout的layout_weight属性   4.Android 布局学习之--LinearLayout属性baselineAligned的作用及baseline    Layout Parameters(布局參数): 在XML文件里,我们常常看到类