• android 利用cmdline,将參数从preloader传递到kernel


    以定义參数 cus_param 为例。int型变量。


     
    1. Preloader部分
    Platform.h(mediatekplatform[$platform]preloadersrcdriversincplatform.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(mediatekplatform[$platform]preloadersrcdriversplatform.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(mediatekplatform[$platform]lkincludeplatformoot_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(bootableootloaderlkappmt_bootmt_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值。


     

  • 相关阅读:
    无法识别的USB设备:跟这台计算机连接的一个USB设备运行不正常,WINDOWS无法识别
    优化大师修复IE右键
    毕业了,醉得一塌糊涂
    [转]关于CAD绘图过程中“旋转(Rotate)”命令的参照方式用法
    MDS 7.0 使用中的问题
    推荐一个3D台球游戏
    [推荐]零件公差、偏差查询软件
    铁路用热轧钢轨的截面尺寸
    删除windows隐藏的本地连接
    (转)网页加速的14条优化法则
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/7291414.html
Copyright © 2020-2023  润新知