1、U-Boot 基本编译教程此教程为入门教程只讲解如何编译 U-Boot,不讲解代码修改及排错等。此教程适用于 AR 及 QCA 系列的 ar71xx 平台。若有疑问,或看不懂,请直接回帖,以便楼主修改教程。准备工作:Linux 系统:32 位 / 64 位均可。楼主使用的是 Ubuntu 12.10 amd64。64 位环境下需要安装 32 位库。如 Ubuntu 下是运行 sudo apt-get install libc6:i386 libgcc1:i38 libstdc+5:i386 libstdc+6:i386。基础编译环境:一般来说每个发行版的 Linux 系统都有包管理器。例如在
2、Ubuntu 的 Shell 里运行 sudo apt-get install build-essential 就可安装好编译环境。其他的系统请自行百度。基本的 Linux Shell 基础:这个只能自己想办法解决了。入门级:入门级使用现成的工具链和编译脚本,使用最少的命令完成代码编译。使用 TL-MR3420 v1 的代码进行讲解。1. 下载源代码打开 http:/www.tp- 3G/4G Routers,然后在列表中选择 TL-MR3420 V1 的代码进行下载。2. 解压代码这个就随便了,一般解压在主目录。将下载的 mr3420_3220v1.tar.gz 移动到主目录。注意:这里压缩
3、包扩展名有误,实际上是 bzip2 压缩的。打开终端,此时终端应该默认在主目录下,若不在主目录下,就运行 cd 命令进入主目录。运行命令 tar -jxvf mr3420_3220v1.tar.gz 以解压代码。3. 编译代码运行命令 cd mr3420_3220v1/build 进入代码编译目录。运行命令 make BOARD_TYPE=ap99 fs_prep 以创建编译过程所需的目录。运行命令 make BOARD_TYPE=ap99 uboot 以开始编译 U-Boot。4. 刷机测试如果没有意外,那么编译结束后的输出应该是这样的:生成的 u-boot.bin 位于 mr3420_32
4、20v1/images/ap99/ 目录下。此文件未被填充到 128K,需要手动填充。填充后的文件就可以进行刷机测试了。此文件是未压缩版,因此本身体积很大。此代码也不能生成压缩版的 U-Boot。5. 说明操作说明请参阅代码根目录下的 readme.txt。入门级的操作就这么简单 。进阶级:进阶级依然使用 TL-MR3420 v1 的代码。进阶级将分离 U-Boot 代码及现成的工具链,搭建基本的交叉编译环境。1. 分离 U-Boot 代码U-Boot 代码位于 mr3420_3220v1/ap99/boot/u-boot 。将整个 u-boot 目录复制到一个地方,如用户主目录。此 u-bo
5、ot 目录里的代码就是全部所需的代码了。之后的所有操作都在这里面完成。2. 复制工具链此工具链即为编译器,但是是针对 mips 架构的交叉编译器。工具链位于 mr3420_3220v1/build/gcc-3.4.4-2.16.1/build_mips。将整个 build_mips 复制到一个地方,如主目录。3. 搭建编译环境现在,mr3420_3220v1 目录已经没有用,可以删掉,因为所有需要的文件都已复制出来了。设置环境变量以让 Shell 能够访问到工具链。运行命令 export PATH=$PATH:/build_mips/bin 即可。此设置只在当前的 Shell 里有效。关于如何
6、设置永久的环境变量,请自行百度。4. 清理代码此操作用于清理上次编译产生的临时文件及配置文件,为下次配置及编译做准备。进入 u-boot 目录:运行命令 cd /u-boot 。运行命令 make distclean 以执行完全清理。5. 编译代码这里是一个完整的编译步骤。a. 指定开发板类型此操作表示我们要编译哪个开发板。AR7241 的开发板(这里其实叫参考板,reference board)名称为 ap99,因此运行 make ap99_config 以进行配置。所有的开发板定义都写在 Makefile 里。其中以 *_config: 开头的行,* 就是开发板名称。AR 及 QCA 系列
7、的参考板名称会在最后列出。有些开发板还有额外的参数可以定义,这里暂不讲解。b. 编译运行命令 make CROSS_COMPILE=mips-linux- 进行编译。CROSS_COMPILE=mips-linux- 指定了交叉编译器的文件名前缀为 mips-linux-。例如,要使用工具链中的 gcc 程序,那么就运行 mips-linux-gcc。这个可以看一下 build_mips/bin 目录下的文件名。由于之前运行了 export PATH=$PATH:/build_mips/bin 命令,所以 Shell 能够直接找到相关程序的位置。否则,CROSS_COMPILE= 需要指定为
8、/build_mips/bin/mips-linux-。c. 测试编译成功后,u-boot 目录下会生成 u-boot.bin,这就是未填充到 128K 的文件。6. 常用编译命令。make *_config 配置生成为指定的开发板(* 为开发板名称)。make CROSS_COMPILE=* 编译代码,并指定交叉编译器文件名前缀为 *。make clean 清理上次编译生成的临时文件。此命令不会删除开发板配置,下次编译可以直接运行 make 命令。make distclean 清理编译生成的临时文件及开发板配置。运行此命令后,需要再次指定开发板后才能进行编译。其它说明:这里使用的 MR342
9、0 v1 代码不能生成压缩代码。其他的,如 AR9331 AR934x 等代码需要在编译时加入 COMPRESSED_UBOOT=1 来进行编译,如 make CROSS_COMPILE=mips-linux- COMPRESSED_UBOOT=1 。编译 AR934x QCA95xx 的代码需要指定使用的以太网交换机 PHY 类型,即在编译时加入 ETH_CONFIG=_s27 或 ETH_CONFIG=_s17 。其中 _s27 为内置百兆 PHY,_s17 为外部千兆 PHY。具体路由型号的 GPL 代码里都有说明文件,可以根据说明文件来进行编译,并了解参考板名称。常见参考板名称:AR7240 - ap91AR7241 - ap99AR9331 - ap121AR9341 - ap123AR9342 - mi124AR9344 - db12xQCA953x - ap143QCA9558 - ap135其它的请在 https:/ 及 https:/ 上进行查找。