MTK cmdline传递过程

原创 2015年11月19日 11:37:41
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值。 

MTK bootloader 启动过程

1、bootloader到kernel启动总逻辑流程图 ARM架构中,EL0/EL1是必须实现,EL2/EL3是选配,ELx跟层级对应关系: EL0 -- app EL1 -- Li...
  • u010783226
  • u010783226
  • 2017年07月02日 18:23
  • 372

android 利用cmdline,将参数从preloader传递到kernel [MTK通用]

oooooooooooooooooooooooooooooooooooooooooooo
  • ffmxnjm
  • ffmxnjm
  • 2017年05月05日 17:48
  • 393

MTK的Bootable简单分析

大致的流程图如下: 上电后RESET,ARM核开始执行Boot ROM,具体操作有:(代码固化在ROM中) 1、  初始化内置SRAM堆栈 2、  初始化nand/emmc(手机内置存储...
  • ly601579033
  • ly601579033
  • 2015年09月09日 17:09
  • 1093

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

依据我的思路(时间顺序,如何开始,如何结束),首先看kernel下2种参数的注册。 第一种是kernel通用参数,如console=ttyS0,115200 root=/rdinit/init等。这...
  • skyflying2012
  • skyflying2012
  • 2014年11月15日 09:43
  • 21223

CMDLINE的解析

Linux Kernel中使用最多的处理Kernel的启动参数的函数是:__setup这条宏。当然网上关于此的解释挺多的,我也没看懂,所以也没资格谈论。 简单的讲,这个宏的作用就是解析CMDLINE中...
  • codectq
  • codectq
  • 2013年12月02日 18:55
  • 6694

linux驱动——cmdline原理及利用

最近项目中想要内核qi
  • sgmenghuo
  • sgmenghuo
  • 2014年11月18日 19:25
  • 2493

u-boot 内核同时传递cmdline时的处理

u-boot 内核同时传递cmdline时的处理 默认是内核boot option里面的config_cmdline,如果u-boot也传参数,则会覆盖。 u-boot传参数方法如下:...
  • ruiyiin
  • ruiyiin
  • 2013年04月12日 15:18
  • 1937

linux cmdline学习笔记

内核启动的时候有这样一条打印信息: [ 0.000000]Kernel command line: k3v2_mem=524256K@0x20000000 console=ttyAMA0,115...
  • power1952
  • power1952
  • 2014年03月23日 15:34
  • 1578

【C++】cmdline —— 轻量级的C++命令行解析库

平时用C++写一些命令行工具,需要解析命令行的输入参数,这是一项繁琐并且容易出错的工作,我们不应该将主要精力放在这上面,可以考虑使用开源的库,下面的cmdline就是其中非常好用的一款。cmdline...
  • xiaohui_hubei
  • xiaohui_hubei
  • 2014年10月26日 20:15
  • 5025

深入MTK平台bootloader启动之【 lk -> kernel】分析笔记

接上一篇分析: 《深入MTK平台bootloader启动之【 Pre-loader -> Lk】分析笔记》 Pre-loader 运行在ISRAM,待完成 DRAM 的初始化后,再将lk载入DRA...
  • forever_2015
  • forever_2015
  • 2016年11月05日 22:18
  • 5587
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MTK cmdline传递过程
举报原因:
原因补充:

(最多只允许输入30个字)