uboot编译指南
最后更新于:2022-04-01 23:26:14
# UBOOT编译指南
##开发环境搭建##
### 一.准备开发机 ###
与普通单片机开发使用Windows下的可视化IDE,如 MDK,IAR等不同,Linux下开发嵌入式程序多使用一套工具链开发,如arm-linux-gnueabihf-,arm-linux-gnueabi-,arm-none-linux-gnueabi-等
> \* 工具链的具体定义?前面列出的工具链名字的含义?‘-’分割的各字段的含义?
所以我们需要使用有个Linux开发机来进行开发。具体到全志这颗芯片的SDK,其适合的开发环境是64位linux系统,推荐Ubuntu 1404 64bit系统(桌面版,服务器版均可),预留足够大的硬盘(如果要编译安卓的话,有100G以上最好,单linux的话20G至少)
> \*\* 为什么全志的SDK需要64位系统开发?为什么推荐Ubuntu 1404 64bit系统?
首先我们下载Ubuntu 1404 64bit系统的镜像安装包,对于没有多余实体机的用户可以再下载VMWare等虚拟机软件
> \* 在哪里可以下载?
然后在实体机或者虚拟机上安装好Ubuntu系统,这样开发机就准备完成了
> \* 如何安装Ubuntu系统?
实体机上开发可以直接打开终端,虚拟机的话可以在桌面里开终端,或者使用Xshell等终端软件ssh连接。
> \* 什么叫ssh连接?
> \* 如何设置虚拟机才能让本机在终端里连接上虚拟机?
### 二.准备SDK及相关软件 ###
开源的linux-sunxi比较适合初学者学习,所以我们先开始试用linux-sunxi这个sdk
开发主要用到下面几个工程,请先下载到本地(网速慢的话可以从百度网盘下:)
```
git clone https://github.com/linux-sunxi/linux-sunxi.git
git clone https://github.com/linux-sunxi/u-boot-sunxi.git
git clone https://github.com/linux-sunxi/sunxi-tools.git
```
下的工程有兴趣也都可以浏览下
> \* git的基本操作? 尝试自己建立编辑一个github项目
> \*\* linux-sunxi下的工程大致都是什么功能?
简单说下前面三个工程包含的内容,linux-sunxi是linux内核的工程,u-boot-sunxi就是uboot的工程,sunxi-tools是sunxi芯片相关的的一些工具,如fex2bin,bin2fex
> \* linux内核是什么?uboot是什么?
因为我们要从头开始移植,所以先从u-boot-sunxi这个工程开始
> ** 可以先浏览下目录,看下应该用什么参数编译
首先我们安装一些依赖包
```
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev \
lib32ncurses5-dev gcc-multilib x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev \
g++-multilib mingw32 tofrodos python-markdown libxml2-utils
```
```
sudo apt-get install gcc-arm-linux-gnueabihf
```
> \* 什么叫安装依赖?前面安装的这都是啥?
> \* 安装的时候是不是有个别依赖没装上?怎么解决?
再到本教程所在github工程下的Config_Files里下载荔枝板的配置文件A13-Lichee_defconfig,sun5i-a13-lichee.dts(因为是直播移植,这两个配置文件目前尚未完善,会在以后直播过程中完善),以及修改后的dts的Makefile
拷贝这三个文件到uboot工程的对应位置
```
cp A13-Lichee_defconfig configs/
cp sun5i-a13-lichee.dts arch/arm/dts/
cp Makefile arch/arm/dts/
```
> \*\* 看下这两个文件都是啥配置?
### 三.初次编译尝试 ###
然后先配置成荔枝派的默认配置
```
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- A13-Lichee_config
```
> \* 这个命令的各部分是什么意思?
> \*\* 可以浏览下uboot的Make流程
现在可以打开menuconfig配置菜单来看看uboot的一些选项,如果知道那些参数的意思的话也可以试着修改下
```
make ARCH=arm menuconfig
```
> \* 熟悉下配置菜单的使用,比如查找选项,查看帮助是按什么键?
![](http://7xvwj0.com1.z0.glb.clouddn.com/16-8-12/9844767.jpg)
浏览好后,先退出配置菜单,使用下面的命令来编译一次试试,注意编译前后目录下多了什么文件(如果提示dtc版本低请自行更新):
```
time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log
```
> \* 上面的编译命令是什么意思?
可以看到目录下多了一堆u-boot开头的文件
```
u-boot.cfg u-boot-dtb.bin u-boot.img u-boot.map u-boot.srec u-boot.sym
u-boot.bin u-boot.dtb u-boot-dtb.img u-boot.lds u-boot-nodtb.bin u-boot-sunxi-with-spl.bin
```
> \*\* 这堆文件各是什么用途的文件?
我们这里需要的文件是u-boot-sunxi-with-spl.bin,如果你手上有荔枝派的话,可以使用下面的命令(sdX是对应的tf卡读卡器的设备)往tf卡里烧入u-boot-sunxi-with-spl.bin:
```
sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/sdX bs=1024 seek=8
```
> \* 上面的命令是什么意思?
> \*\* 为什么seek=8?
然后插卡到荔枝派的tf口,上电看看UART1的启动输出
### 四.常见编译错误 ###
Q:
> 在github上下载了uboot。然后按照 2.1.1开发环境搭建.md那样进行编译。但是却提示找不到某些头文件。但是头文件的确存在的。想问一下怎么解决这个问题
> 打印信息如下:
> ~~~
> LDS u-boot.lds
> LD u-boot
> DTC arch/arm/dts/sun5i-a10s-auxtek-t003.dtb
> In file included from arch/arm/dts/sun5i-a10s.dtsi:47:0,
> from arch/arm/dts/sun5i-a10s-auxtek-t003.dts:44:
> arch/arm/dts/sun5i.dtsi:47:46: fatal error: dt-bindings/clock/sun4i-a10-pll2.h: 没有那个文件或目录
> #include
> ^
> compilation terminated.
> make[2]: *** [arch/arm/dts/sun5i-a10s-auxtek-t003.dtb] 错误 1
> make[1]: *** [arch-dtbs] 错误 2
> make: *** [dts/dt.dtb] 错误 2
> ~~~
A:
> 这是由于arch/arm/dts/sun5i.dtsi 找的目录是arch/arm/dts/include/,而这个目录下的dt-bindings 是个失效的软连接文件。
> 实际上你找到的文件位置是在最顶层的include/dt-bindings/下
> 所以只需把arch/arm/dts/include/dt-bindings 做个软连接到顶层的实际目录即可。
>在改软连接时:ln -s 源 目的 这个命令创建的软连接必须在 源 的当前目录下,即进入/u-boot-sunxi-mirror-next/arch/arm/dts/include$目录
执行 ln -s ../../../../include/dt-bindings ./dt-bindings
返回到u-boot-sunxi-mirror-next$目录
执行 time make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 2>&1 | tee build.log
成功。
';