zoukankan      html  css  js  c++  java
  • Linux系统环境搭建

    对uboot、Linux、rootfs的深刻理解
    uboot2012改进:
    学习使用cmd,添加cmd_menu.c
    了解U_BOOT_CMD的用法:
        #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
          U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,NULL)
         
       #define U_BOOT_CMD_COMPLETE(name,maxargs,rep,cmd,usage,help,comp)
          cmd_tbl_t __u_boot_cmd_##name Struct_Section =
      U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp)
       
        #define U_BOOT_CMD_MKENT_COMPLETE(name,maxargs,rep,cmd,usage,help,comp)
      {#name, maxargs, rep, cmd, usage, _CMD_HELP(help) _CMD_COMPLETE(comp)}
     
    U_BOOT_CMD(name,maxargs,rep,cmd,usage,help)
    1 name  命令的名字
    2 maxargs  最大命令行参数个数
    3 rep
    4 cmd   命令
    5 usage 用法
    6 帮助
    其实我们只关心前面4个宏参数,U_BOOT_CMD的最终定义是这样的:
    #define U_BOOT_CMD(name,maxargs,rep,cmd,usage,help) cmd_tbl_t __u_boot_cmd_##name Struct_Section =
     {#name, maxargs, rep, cmd, usage, _CMD_HELP(help) _CMD_COMPLETE(comp)}
     
     比如:
      U_BOOT_CMD(
     menu, 3, 1, do_menu,
     "sure you have prepared file by tftp, and press corresponding key",
     "sure you have prepared file by tftp "
     "press corresponding key, the u-boot will help you download file to the suited memory location "
     );
     得到:
     cmd_tbl_t __u_boot_cmd_menu Struct_Section = {"menu", 3, 1, do_menu, ...}
     
     #define Struct_Section  __attribute__((unused, section(".u_boot_cmd"),
      aligned(4)))  //将这个结构体链接到.u_boot_cmd输入段
    __attribute__: 需要了解一下gcc的__attribute__的编绎属性,__attribute__主要用于改变所声明或定义的函数或数据的特性
                   它有很多子项,用于改变作用对象的特性
                  
     struct cmd_tbl_s {
     char  *name;  /* Command Name   */
     int  maxargs; /* maximum number of arguments */
     int  repeatable; /* autorepeat allowed?  */
         /* Implementation function */
     int  (*cmd)(struct cmd_tbl_s *, int, int, char * const []);
     char  *usage;  /* Usage message (short) */
    #ifdef CONFIG_SYS_LONGHELP
     char  *help;  /* Help  message (long) */
    #endif
    #ifdef CONFIG_AUTO_COMPLETE
     /* do auto completion on the arguments */
     int  (*complete)(int argc, char * const argv[], char last_char, int maxv, char *cmdv[]);
    #endif
    };
    typedef struct cmd_tbl_s cmd_tbl_t
    简单一点:
     struct cmd_tbl_s __u_boot_cmd_menu = {
                               .name = "menu",
                               .maxargs = 3,
                               .repeatable = 1,
                               .cmd = do_menu
     }
     
     从int (*cmd)(struct cmd_tbl_s *, int, int, char * const []); 看出do_menu应该有4个参数
     输入 menu 命令应该就会执行do_menu函数      
    为u-boot添加menu菜单:
    在common目录下添加这个程序:https://www.cnblogs.com/zhu-g5may/p/10084942.html
    修改Makefile,编译进内核
    效果:

    CPUID: 32440001
    FCLK:      400 MHz
    HCLK:      100 MHz
    PCLK:       50 MHz
    DRAM:  64 MiB
    WARNING: Caches not enabled
    Flash: 0 KB
    NAND:  256 MiB
    In:    serial
    Out:   serial
    Err:   serial
    Net:   dm9000
    Hit any key to stop autoboot:  0
    SMDK2440 #
    SMDK2440 #
    SMDK2440 #
    SMDK2440 #
    SMDK2440 # menu
    ##### u-boot cmd menu #####
    [o] download u-boot to nor
    [n] download u-boot to nand
    [k] download kernel to nand
    [f] download rootfs to nand
    [b] boot the system
    [q] quit from menu
  • 相关阅读:
    jQuery 选择城市,显示对应的即时时区时间
    HTML5 LocalStorage 本地存储,刷新值还在
    jQuery 鼠标拖拽移动窗口
    css/css3常用收集/笔记
    Linux下删除命令 硬盘空间查看... 常用命令
    linux 下 zip unzip压缩与解压
    js字节转换、字节转换GB等
    jquery 判断网络图片,或网络文件是否存在
    js中substr,substring,indexOf,lastIndexOf,split 的用法
    apktool、dex2jar、jd-gui的区别及详解
  • 原文地址:https://www.cnblogs.com/zhu-g5may/p/10084654.html
Copyright © 2011-2022 走看看