考虑到大家之前没有学习嵌入式相关的基础知识,我下面会先从构建代码环境讲起,如果之后大家觉得感兴趣的,我也会写其他东西给大家看!如果大家之后有什么疑问可以直接来找我。
注: 以下操作均在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源码工程
软件安装及其破解
下面是Source Insight 4.0的软件下载链接:
链接:http://pan.baidu.com/s/1geJWo9d 密码:j9qu
阅读那个 readme.txt 文件来破解
添加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 : 一些工具类的代码
注:本文内容部分来自互联网整理,部分来自个人经验总结。
欢迎留言补充!