IMX6Q Uboot 从零开始编译

时间:2022-11-01 15:37:00
Imx6Q Uboot 从零开始编译

作为一个比较新的平台,freescale的这个四核的平台IMX6Q在很多方面的开发都很难下手,国内资源稀少,转载转发较多,且大多数的开发都是基于freescale官方的板子或者官方合作伙伴的板子。他们都统一使用官方的Ltib构建工具,对于一些厂商在官方板子上扩展后或者做了一些细微修改的板子,资料少之又少,修改部分几乎没有说明文档,这个实际应用带了的麻烦说起来都伤心呀.
    好了废话少说,开始Uboot的编译。拿到一块板子,最先的是要启动起来,要启动起来就得有Uboot这个bootload工具。我的开发主机是Ubuntu12.04.4。

通过参考网上无数的文字信息,最后得到了如下的过程
1、请现在你的host 主机上安装一些必要的开发工具 Insert following content into the host-setup.sh

下面这个脚本文件中使用了aptitude 工具,如果想使用ubuntu自己的apt-get 工具,只要进行简单的替换就可以了,但是如果不想看到一大堆错误输出的话,建议你还是在使用下面的代码之前:sudo apt-get install aptitude -y吧。

#!/bin/bash
#
Install packages needed by LTIB
sudo
aptitude -y install gettext libgtk2.0-dev rpm bison m4 libfreetype6-dev
sudo
aptitude -y install libdbus-glib-1-dev liborbit2-dev intltool
sudo
aptitude -y install ccache ncurses-dev zlib1g zlib1g-dev gcc g++ libtool
sudo
aptitude -y install uuid-dev liblzo2-dev
sudo
aptitude -y install tcl dpkg
sudo
aptitude -y install asciidoc texlive-latex-base dblatex xutils-dev
#
Packages required for 64-bit Ubuntu
#
Do "uname -a" and see if the word "x86_64" shows up.
if
uname -a|grep -sq 'x86_64'; then
sudo
aptitude -y install ia32-libs libc6-dev-i386 lib32z1
fi
#
The following recommended for Linux development.
#
They are not required by LTIB.
sudo
aptitude -y install gparted emacs22-nox openssh-server
sudo
aptitude -y install nfs-common nfs-kernel-server lintian
sudo
aptitude -y install git-core git-doc git-email git-gui gitk
sudo
aptitude -y install diffstat indent tofrodos fakeroot doxygen uboot-mkimage
这都是些嵌入式开发的基础库,也是官方参考手册Setting_Up_LTIB_Host.pdf 中提供的,虽然官方的host是ubuntu 9.04,但这些在12.04.4中工作依然良好。
        有了这些基础性的东西,你现在还需要两样东西 
2、源码:
                1、适合你这块板子的Uboot源代码。
                2、交叉编译工具。
我想若果连这两个东西,厂商都没提供给你,我想你还不如自己拿起电烙铁自己焊一块板子。或则买官方的板子。其实交叉编译工具,和freescale官方提供的是一样的。如果这个都不一样,说明制造这块板子的厂家有替代freescale的能力了。而我想Uboot源码你一定是需要厂商提供的,他们会根据自己设计的硬件做一些基础性的适配工作。不然,我想你自己需要干的活可能多了去了。 有了这两样的东西,你可以开始配置编译脚本了。将上面两个工具包解压到你准备好的目录里: 我在Uboot源码的根目录【即最顶层的makefile目录下】建立了这样的一个脚本: build_u-boot.sh
(主要就是指定makefile调用的交叉编译工具)其实还是linux下编译的老套路make clean ; config__;make 不同之处在于,这是为arm板子编译的,所以要指定交叉编译的一些参数而已.
里面的内容如下:
#!/bin/bash
make
ARCH=arm CROSS_COMPILE=/home/dev/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- distclean
make
ARCH=arm CROSS_COMPILE=/home/dev/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi- mx6q_sabresd_config
make
ARCH=arm CROSS_COMPILE=/home/dev/fsl-linaro-toolchain/bin/arm-none-linux-gnueabi-

3、构建compile Uboot

这样,如果你在host下拥有相应文件的权限的情况下,就可以看是编译你Uboot了。执行以下sh脚本;

$sh
./build_u-boot.sh
        最后,如果没有错误的话,你就能看到在你的脚本目录【根目录】等到 u-boot.bin文件。这样你就可以烧写到你的板子里去了,之后调试相应的功能,出现问题就修改相应的uboot源代码来解决。其实很多嵌入式的开发套路都差不多,但是,前进的路上磕磕碰碰的事情那块板子都很多呀.何况自己还是个菜鸟.