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-13 13:56:54

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_baudra

Android 利用剪切板(clipboardManager )实现数据传递

首先是系统剪切板的调用服务: ClipboardManager ClipboardManager=getSystemService(Context.CLIPBOARD_SERVICE); 然后是写入,取出. 这里需要注意的是,在android版本11之前,利用剪切板传递数据是使用setText和getText方法,但在版本11以后,这两个getText和set方法就被丢弃了,转而代替的是需要用到ClipData对象来传递数据.相比于getText和setText方法,利用ClipData对象来传

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

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

ReactNative入门之android与rn初始化参数的传递

1.基本理念 RN APP本质上也是原生APP,只是在原生APP中加入了React Native视图的支持.因此获取RN APP的启动参数的方法原生APP是一样的,获取启动参数后再通过合适的方法传递给RN视图.如何获得启动参数,不要再搜索RN如何获得启动参数,直接参考原生APP获得启动参数的文章.可以参考这个例子:ndroid中一个APP启动另一个APP并传递参数 本文重点说明如何将启动参数传递给React Native代码. 2.ReactNative的Ativity继承关系 MainActi

Android利用canvas画各种图形

canvas通俗的说就是一张画布,我们可以使用画笔paint,在其上面画任意的图形. 原理: 可以把canvas视为Surface的替身或者接口,图形便是绘制在Surface上的.Canvas封装了所有的绘制调用.通过Canvas, 绘制到Surface上的内容首先存储到一个内存区域(也就是对应的Bitmapz中),该Bitmap最终会呈现到窗口上. 使用: 1.Canvas可以直接new Canvas(): 2.在View中重写OnDraw()方法,里面有一个Canvas,今天讨论的内容. 方

Java基础-继承 利用接口做参数,写个计算器,能完成+-*/运算

38.利用接口做参数,写个计算器,能完成+-*/运算 (1)定义一个接口Compute含有一个方法int computer(int n,int m); (2)设计四个类分别实现此接口,完成+-*/运算 (3)设计一个类UseCompute,含有方法: public void useCom(Compute com, int one, int two) 此方法要求能够:1.用传递过来的对象调用computer方法完成运算 2.输出运算的结果 (4)设计一个测试类,调用UseCompute中的方法us

android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)

写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载   zbarLib编译project  project下载0积分 bug 在2.3的系统中Holder须要设置type,否则会黑屏(感谢网友[(α ⒎待sんа)294439435]) com.example.qu.MainActivity的第50行mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 今天发现 在com.exampl

android 多个notifycation向同一个Actiivity传递不同数据

如果你有这方面的需求,那你实践的时候可能会发现,多个Notifycation点击的时候会传递相同的数据. 通常情况下我们可能这样写. Notification notification = new Notification(R.drawable.ic_launcher_9, name , System.currentTimeMillis()); Intent intent = new Intent(mContext , ThemeInfo.class); Bundle bundle = new

android——利用SharedPreference做引导界面

很久以前就接触过sharedPreference这个android中的存储介质.但是一直没有实际使用过,今天在看之前做的“民用机型大全”的app时,突然想到可以使用sharedPreference类来改进这个app中的一个缺陷. 此前,我先介绍sharedPreference的使用.Android数据总共有四种存储的方式 一.SharePreference 二.SQLite 三.File 四.ContentProvider SharedPreference类是一个轻量级的存储类,特别适合保存软件