cmd_bootm.c //传递给内核的参数
     int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
          do_bootm_linux  (cmdtp, flag, argc, argv,  addr, len_ptr, verify);
          原型:void do_bootm_linux (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],  ulong addr, ulong *len_ptr, int verify)
               char *commandline = getenv ("bootargs");
               void (*theKernel)(int zero, int arch, uint params); //函数指针
               theKernel = (void (*)(int, int, uint))ntohl(hdr->ih_ep);     //跳转到内核的位置ntohl(hdr->ih_ep)
               setup_start_tag     //tag分为tag_header、union.u两部分组成
params->hdr.tag =  0x54410001     //tag_header为先size后tag组成
                    params->hdr.size = tag_size(tag_core) = 5     //union.u由很多部分组成,详见源文件asm-arm/setup.h
                         #define tag_size(type)    ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
                              struct tag_header { u32 size;u32 tag;};   //8字节
                              struct tag_core     { u32 flags;u32 pagesize;u32 rootdev;};     //12字节
                              >> 2 //除以4等于5
                    params->u.core.flags = 0;               //struct tag->union.u.tag_core.flags
                    params->u.core.pagesize = 0;         //struct tag->union.u.tag_core.pagesize
                    params->u.core.rootdev = 0;          //struct tag->union.u.tag_core.rootdev
                    params = tag_next(params);            //当前地址修改为下一个tag始地址
                         #define tag_next(t)    ((struct tag *)((u32 *)(t) + (t)->hdr.size))params地址+tag大小(此处大小为unsigned int 所以一个大小为4字节)=20字节
               setup_serial_tag
               setup_revision_tag
               setup_memory_tags
                    params->hdr.tag = 0x54410002     //tag标记
                    params->hdr.size =  tag_size(tag_mem32) = 4     //tag参数个数
                         #define tag_size(type)    ((sizeof(struct tag_header) + sizeof(struct type)) >> 2)
                              struct tag_header { u32 size;u32 tag;};   //8字节
                              struct tag_mem32 { u32    size; u32    start; };     //8字节
                              >> 2 //除以4等于4
                    params->u.mem.start = 0x30000000;
                    params->u.mem.size  = 64*1024*1024;
                    params = tag_next(params);            //当前地址修改为下一个tag始地址
               setup_commandline_tag(char *cmdline)
                    params->hdr.tag = 0x54410009      //tag标记
                    params->hdr.size =  (sizeof (struct tag_header) + strlen(cmdline) + 1 + 3) >> 2 = 未知     //tag参数个数
                        struct tag_header { u32 size;u32 tag;};   //8字节
                        int strlen(char *str){int i = 0; while(str[i]) { i++;} return i;}     //字符串的大小 未知
                        >> 2 //除以4等于未知
                    strcpy(params->u.cmdline.cmdline, cmdline);     //将命令拷贝进结构体存储
                    params = tag_next(params);          //当前地址修改为下一个tag始地址
               setup_videolfb_tag
               setup_end_tag
                    params->hdr.tag = 0x00000000      //tag标记
                    params->hdr.size = 0    //tag参数个数

step2 uboot tag存储主要部分代码的更多相关文章

  1. uboot tag存储主要部分代码

    https://www.cnblogs.com/pokerface/p/5217106.html     cmd_bootm.c //传递给内核的参数      int do_bootm (cmd_t ...

  2. u-boot移植(八)---代码修改---存储控制器--MMU

    一.MMU介绍 1.1 虚拟地址与物理地址 建立两个应用程序,hello1.c和hello2.c,然后运行: hello1.c hello2.c 运行结果如下: 可以看到两个结果打印的地址是一样的,都 ...

  3. u-boot移植(七)---代码修改---存储控制器

    一.CPU访问芯片的条件 CPU通过访问存储控制器,来读取外部设备的数据. CPU想访问一个芯片,需要如下条件(配置信息): 地址线 数据线:8位/16位/32位数据宽度 时钟/频率 其他芯片相关的特 ...

  4. u-boot移植(五)---代码修改---时钟修改、SDRAM

    最开始已经建立了新单板以及配置文件,现在就需要做的是代码的修改,配置成适合目标板使用的u-boot. 一.时钟修改 在代码流程分析中,我们知道,系统的启动是: 设置 CPU 为管理员模式 关闭看门狗 ...

  5. u-boot移植(十)---代码修改---支持nor flash

    一.问题定位 开发板重启后打印了2个提醒和一个错误,caches的提醒先不看,看看flash和nand下面的提醒,bad CRC,Using default enviroment,我们可以定位Usin ...

  6. Git-命令行-使用 Tag 标记你的代码

    前言 正文开始之前,我想我们需要弄明白几个问题: 1.tag 是什么? 2.使用tag 的好处? 3.tag 和 branch 的区别以及使用场景? tag 是什么? tag , 翻译过来是标签的意思 ...

  7. u-boot移植(九)---代码修改---NAND

    一.NAND原理 NAND 无地址空间,地址和数据的发送都依赖于LDATA[0:7]这一串数据总线. 不看随机页编程,看到从高位到低位的页,总共分为64个页面,每个页的组成是2K + 64  个byt ...

  8. u-boot移植(六)---代码修改---串口

    一.代码流程 1.1 串口代码 程序流程图如下: default_serial_console 执行的代码如下: 在JZ2440.H中有如下定义: 则执行结构体s3c24xx_serial0_devi ...

  9. u-boot移植(十三)---代码修改---裁剪及环境变量 二

    一.错误处理 上一节遇到一个错误: print一下: 发现我们在jz2440.h中静态写的网络参数都没有写进去. dm9000 address not set. dm9000的地址未设置. 这里对应两 ...

随机推荐

  1. [wikioi]最长严格上升子序列

    http://wikioi.com/problem/1576/ 经典的动态规划.我写了个o(n^2)的DP方法. PPT:http://wenku.baidu.com/view/bd290294dd8 ...

  2. Qt浅谈之三十九圆形进度条(已经有50篇了)

    http://blog.csdn.net/taiyang1987912/article/category/2314763

  3. 行为树实现AI逻辑

    http://blog.csdn.net/kenkao/article/details/6099966 http://www.aisharing.com/archives/99 http://www. ...

  4. FishEye简介

    前言     在项目开发过程中,随着开发的进行,将有大量的代码编写提交到代码仓库,如何能全面准确的了解源代码的变化,提交的频率,代码量的趋势,发现代码的缺陷,将是控制源代码质量的重要指标,这个时候一个 ...

  5. HDU-2550 百步穿杨

    百步穿杨 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  6. 开发服务器端——工程配置

    概述:    服务器开发,一般分为 主程序类Project(主函数main) 流程控制类Kernel(处理收到的数据) 网络类Network(数据的收发) 公共类Common(定义一些常量和结构体,自 ...

  7. Branch management

    Branch management */--> pre { background-color: #2f4f4f;line-height: 1.6; FONT: 10.5pt Consola,&q ...

  8. 兼容的placeholder属性

    作为一个.net后台开发的程序猿,博客里既然大多都是前端相关的博文.是不是该考虑换方向了,转前端开发得了 ... 小小吐槽一下,近期受该不该跳槽所困惑,我有选择困难症! 继续前端,这次说一下输入框 p ...

  9. Java集合类操作优化经验总结

    本文首先针对 Java 集合接口进行了一些介绍,并对这些接口的实现类进行详细描述,包括 LinkedList.ArrayList.Vector.Stack.Hashtable.HashMap.Weak ...

  10. canvas绘制简单小铅笔

    对应HTML <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <ti ...