刚开始接触U-Boot时都是别人编译好的bin文件,拿来直接刷入就可以用,第一次从官网下载了一个U-Boot时瞬间被它的代码量吓住了,虽然代码量不足linux内核的5%,但它也完全有自己的分层结构,如果适度改造完全就是一个单进程的小系统,启动系统内核可能只是它功能的一小部分。从源代码级别修改U-Boot和拿别人编译好的U-Boot直接刷从技术层面上讲还是有很大差距的,在这里呼吁在论坛上发布各种U-Boot改造版本的大神发布bin文件时附带上源文件,这样可以方便学习者更好的学习,在开源的大环境里,大家互相分享才能共同提高。

在分析U-Boot的工作原理之前,我们先要准备查看代码的环境,没有好的工具是非常影响学习效率的,U-Boot的复杂程度原超过普通教科书中的示例程序,所以有必要引入IDE开发工具把U-Boot当作一个project管理起来,U-Boot的编译环境需要linux所以还是直接在linux环境下阅读代码吧,如果对代码进行修改可以随时编译,直接就能看到结果。我这里使用了两种开发环境,一种是eclipse_cdt,另一种是vim+ctags,前者是重度的解决方案,后者是轻量级的解决方案。下面是两种IDE开发环境的截图:

具体IDE环境怎么安装可以到网上找到很多教程,而且这是个非常个性化的过程,你可以根据自己的喜好打造属于自己的IDE风格,eclipse和vim都是基于插件的拓展方式,非常适合个性化改装。
        任何事情的入手都要找到切入点,要不然大海捞针的感觉实在是太茫然了,我结合自己走过的弯路总结出了一套雨伞模型的分析方法,在这里给大家分享一下,先看下面这张图:

U-Boot的分析路线用图画出来像一把雨伞,所以我把它叫做雨伞分析法。上图中红色的原点是起始位置,U-Boot首先执行cpu/Ralink_soc/start.S里的代码,是基于mips架构的汇编语法,有兴趣可以系统学习一下,从起点沿着箭头方向一直分析直到进入main_loop循环,U-Boot的初始化过程就已结束,这时候U-Boot开始以命令的方式提供服务,实现的任何功能都是通过命令的方法进行调用,这些命令大体上呈水平分布,也就是雨伞的弧线结构,当把初始化的主线研究明白后就可以逐个的研究U-Boot命令的实现原理,当然也可以以自己的兴趣选几个命令进行研究,这些命令的实现会调用一些库函数,这些函数的实现都在雨伞内部蓝色方框命名的文件夹下。
        U-Boot相关的信息在互联网可以找到很多,这里就不一一赘述,我的中心思想是提供一个可以参考的分析方法,初学者可以参考我这种方法去发散学习,关于U-Boot的很多小细节都是可以在互联网上面搜索到的,只要你有明确的前进方向,慢慢的积累就能把U-Boot分析透彻,我属于比较愚钝的,大约一年才开窍。
        U-Boot分析的一个难点就是U-Boot为了兼容各种硬件平台在代码中加入了很多条件编译,比如#ifdef S3C24X0 ........ #endif ,如果不是对应的平台或者配置时没有选择此项,条件编译内的代码就会在预编译的环节被省略掉,这对于阅读代码确实带来很大障碍,有时候一分神读了半天发现根本就是其它平台的或者不相关的代码,这里我推荐使用eclipse_cdt进行分析,eclipse会分析包含文件内的定义信息对条件编译进行处理,条件编译不成立的代码会被显示为灰色,非常方便阅读。
        这一期的重点就是上面的雨伞模型,通过它可以拓展出非常多非常多的小细节,但作为以兴趣驱动的U-Boot学习方式,我希望大家自己去细细的发掘和体会U-Boot里面各种精彩的小细节。

---------------------------------------------------------------------------

SDK下载地址:   https://github.com/aggresss/RFDemo

第十二期 U-Boot工作原理 《路由器就是开发板》相关推荐

  1. 第十四节 OSAL工作原理

    第十四节  OSAL工作原理     蓝牙为了实现同多个设备相连,或实现多功能,也实现了功能扩充,这就产生了调度问题.因为,虽然软件和协议栈可扩充,但终究最底层的执行部门只有一个.为了实现多事件和多任 ...

  2. 网站的工作原理:网络开发新手(或任何人)入门

    网站的工作原理:网络开发新手(或任何人)入门 如果您刚接触Web开发,您认为自己知道网络的工作原理 - 至少在基本层面上. ...但是,当您尝试解释一个网站为什么出现空白. 什么是IP地址? &quo ...

  3. 第十期 路由器调试之HelloWorld 《路由器就是开发板》

            前面几期都是在做准备工作,这一期我们开始实际操作.很多教程的开始都喜欢用HelloWorld来先做个演示,我也不例外,在硬件开发板教程里流水灯就是一种HelloWorld,程序简单,只 ...

  4. 第二十五期 总结《路由器就是开发板》

    在读<人人都是产品经理>这本书时,我最大的收获就是:不光要低头拉车,还要抬头看路.研究技术为了一个问题不吃不睡是经常的,但为了一个超出个人挑战能力的问题浪费时间而影响到团队的进度是万万不可 ...

  5. 第一期 前言 《路由器就是开发板》

    大家好,路由器就是开发板这个提议最早是在2010年的时候在逛一个国外的论坛时看到有人提到的,那时我还处在一个从论坛上下载一个固件刷成功后兴奋不已的阶段.上大学时WIFI刚刚兴起,还是802.11b的年 ...

  6. 第二期 开发板选型 《路由器就是开发板》

            首先说明一下我为什么要用路由器作开发板.         第一,路由器是一件成熟的商品,它经历了厂商和消费者的考验,其设计肯定是相对成熟的,我们用它作开发板是在这个路由器经历了完整的产 ...

  7. 计算机路由器工作原理,路由器工作原理

    导读:路由器是工作在OSI参考模型的网络层,它的主要作用就是为数据包选择最佳路由路径,最终送达目的地,那么路由器工作原理是怎样的呢?下面为大家讲解.本文引用地址:http://www.eepw.com ...

  8. 孔板流量计计算公式_十二种流量计工作原理

    流量计根据工作原理有很多种,选型时需要根据实际工况来选择随适合的流量计.下面,就为大家汇总了各种流量计的工作原理,希望能对大家有所帮助. 1 差压式流量计 差压式流量计是根据安装于管道中流量检测件产生 ...

  9. 第十三期 U-Boot编译原理《路由器就是开发板》

    大体了解了U-Boot的源码结构后有一个问题必须得掌握透彻,那就是U-Boot的源码是怎么生成可执行文件的,如果把这个问题搞明白,就可以对U-Boot的全局有一个把控能力.这一期我们来分析Ralink ...

最新文章

  1. 3rd_party/flatbuffers/tmp/flatc: No such file or directory
  2. android jar 加密
  3. 数学专业毕业,不去做人工智能简直就是在犯罪!
  4. 跨域技术(JSONP与CROS)
  5. Java基础学习总结(59)——30 个java编程技巧
  6. C语言把文件空格删去,关于文件操作,碰到空格就换行
  7. LeetCode 28. Implement strStr()
  8. 树莓派引脚介绍与GPIO的初步认识与应用
  9. 彻底理解线性代数; 特征值,特征向量; 线性代数的本质 矩阵的逆矩阵的实质: 行列式值为0的实质: Essense Of Linear Algebra的理解
  10. 4-9 Python对象的自省机制
  11. 记一次烧毁AO3400的过程
  12. 031_onetab
  13. 检测和识别机动车驾驶证信息OCR
  14. sql trim函数_SQL TRIM函数
  15. CF1740H MEX Tree Manipulation
  16. 基于优化的多核局部费舍尔判别分析的故障分类
  17. “工赋”三问:从青岛到德阳,卡奥斯如何实现跨区域复制?
  18. vc6创建dll文件的步骤_创建真正有用的产品支持页面的6步骤计划
  19. C++ AO读取shapefile的属性值
  20. JavaScript基础-form表单验证

热门文章

  1. MySQL数据库管理(五)日志管理、备份与恢复
  2. 亲测:一加手机3刷机OxygenOS详细教程
  3. w7计算机配置在哪里打开,win7的运行在哪里打开 win7打开运行的方法【图文】
  4. java丐帮_java多线程学习笔记(三)
  5. java实训西游记人物实现_学习练习 java编写西游记人物类
  6. 论文翻译:2021_Low-Delay Speech Enhancement Using Perceptually Motivated Target and Loss
  7. vmware黑苹果安装vmware tools方法
  8. 0、PIC系列参考手册中文版文档汇总
  9. js 笔记-LHS RHS 作用域
  10. Excel数字转大写数字(含小数点)