Uboot前期准备

考虑到大家之前没有学习嵌入式相关的基础知识,我下面会先从构建代码环境讲起,如果之后大家觉得感兴趣的,我也会写其他东西给大家看!如果大家之后有什么疑问可以直接来找我。

注: 以下操作均在Windows平台

Uboot源码文件

源码获取

  • 拿到老师给的光盘镜像之后,进入bootloader文件
  • 可以看到uboot_TQ210_1.3.4_V1.7.tar.bz2,分别解压两次会得到opt这个文件夹,在解压第二次的时候解压器会报出一些错误,可以忽略它(因为里面有Linux平台下的link类型文件与Windows不兼容)
  • 按路径 opt\EmbedSky\TQ210\uboot_TQ210_1.3.4 依次进入到 uboot_TQ210_1.3.4 文件中,此目录在之后的代码分析中,我们称之为uboot的根目录

Source Insight 4.0添加uboot源码工程

软件安装及其破解

添加uboot源码工程

  • 现在uboot根目录下创建一个文件夹 SI_Project ,名字随便起都行,用于存放等下Source Insight创建工程的文件
  • 打开Source Insight软件,在菜单栏点击Project-> New Project
  • 标号1是输入将要创建的工程名Uboot1.3.4(自己设置),标号2是选择你电脑uboot的根目录所在的文件夹,然后点击OK
  • 标号1是找到刚才在uboot的根目录所创建的文件夹,我刚才创建了文件夹 SI_Project,然后点击OK
  • 在Directory栏选择uboot根目录,然后在右边点击 Add ALL
  • 把第二个勾上,意思是递归添加子目录文件,然后点击OK
  • 等待一下,就可以点击右上角的Close按钮
  • 点击标号1右侧打开文件目录,点击标号2,在标号3找到uboot根目录,可以看到右侧的文件就是源码文件及其文件夹

一些设置

  • 因为之后需要浏览.S文件的汇编代码,所以需要在source insight中进行文件类型的关联
  • 依次在菜单栏点击Options->File Type Options,在出现的窗口左边选择C Source File,在File filterd下添加 *.S,最后点击Close

Uboot根目录文件介绍

  • arm_config.mk : 后缀为.mk,是一个Makefile文件,将来在某个Makefile中会调用它
  • 3个Changelog文件 : 修改记录文件,该文件记录了这个uboot项目的版本变迁以及每个版本较上一个版本修改的记录。
  • config.mk : 性质同arm_config.mk
  • COPYING : 版权声明,uboot本身是GPL许可证的
  • CREDITS : 鸣谢,记录了对uboot有贡献的人
  • image_split : 一个脚本
  • MAINTAINERS : 维护者,当前参与维护uboot源码的社区工作者
  • MAKEALL : 一个脚本
  • Makefile : 用于编译整个uboot
  • mk : 快速编译的脚本,即先清理后配置再编译
  • mkconfig : uboot配置阶段的只要配置脚本,uboot的可移植性很大程度就是靠这个配置脚本在维护
  • mkmovi : 一个脚本,和inand/SD卡启动有关
  • README : 使用说明书
  • rules.mk : uboot中Makefile使用的规则

Uboot根文件夹介绍

  • api : 硬件无关功能函数,uboot移植时不用管
  • api_examples : API相关的测试示例代码
  • board : 存放各种开发板相关的配置文件
  • common : 用于存放一些与具体硬件无关的普遍适用的一些代码。譬如控制台实现、crc校验。但是更多的主要是两类:一类是cmd开头的,是用来实现uboot的命令系统的;另一类是env开头的,是用来实现环境变量的
  • cpu : 与SOC相关的,里面存放的代码都是SOC相关初始化和控制代码(如:CPU的、中断的、串口的等内部外设,包括起始代码start.S)
  • disk : 磁盘有关
  • doc : 文档目录,英文原档,帮助理解uboot
  • drivers : 存放Linux源代码中扣出来原封不动的Linux设备驱动,用于uboot的运行,主要是开发板上一些必须用到的驱动
  • examples : 示例代码
  • fs : filesystem文件系统,从Linux源代码中移植过来的,用于管理flash等资源
  • include : 头文件目录
  • lib开头的文件夹 : 架构相关的库文件 lib_arm(arm架构使用的一些库文件)、lib_generic(所有架构通用的库文件)
  • libfdt : 设备树有关的,使用设备树来进行启动传参,进行硬件信息的描述
  • nand_spl : nand相关代码
  • net : 网络相关的代码
  • onenand开头 : onenand相关的代码
  • tools : 一些工具类的代码

:本文内容部分来自互联网整理,部分来自个人经验总结。

欢迎留言补充!

要是觉得不错,就鼓励一下吧!