设为首页收藏本站
查看: 22856|回复: 2

[Bootloader] 解说Zynq-7000 Uboot如何编译

[复制链接]

231

主题

64

回帖

2145

积分

管理员

积分
2145
玉米糊 发表于 2015-6-17 09:42:09 | 显示全部楼层 |阅读模式
很多人拿到uboot,编译不知如何下手!
其实,这个世界上的万事万物,都有一个“纹理”。庖丁解牛之所以游刃有余,是因为他掌握了牛的纹理,顺着这些纹理就应该很容易。
那么我们的uboot的纹理在哪里呢?

很多初学者,拿到这种代码从来没有去看过它的README或者document这两个文本文件是非常重要的东西,可惜呀!很多人不去看readme而去请教别人,google,baidu,跑图书馆。其实,有些东西当你问到别人的时候,聪明的人也是去看README然后给你解答的。
下面我们就去找uboot的纹理! 本文u-boot版本为Z-Turn板上带的U-Boot。

我们按正常人的思维(智商90)来分析。
首先,要编译,那么编译就要执行命令make,而make实际上就是执行makefile文件。第一次make肯定是不能成功的。听从观音菩萨的教诲“从哪里来就到哪里去”!make 出问题,我们就去makefile里找原因。Makefile里有这样一段话:
[mw_shl_code=bash,true]
# $(obj) and (src) are defined in config.mk but here in main Makefile
# we also need them before config.mk is included which is the case for
# some targets like unconfig, clean, clobber, distclean, etc.
ifneq ($(OBJTREE),$(SRCTREE))
obj := $(OBJTREE)/
src := $(SRCTREE)/
else
obj :=
src :=
endif
export obj src
...
# load ARCH, BOARD, and CPU configuration
include $(obj)include/config.mk
export  ARCH CPU BOARD VENDOR SOC

# set default to nothing for native builds
ifeq ($(HOSTARCH),$(ARCH))
CROSS_COMPILE ?=
endif

# load other configuration
include $(TOPDIR)/config.mk[/mw_shl_code]

这段脚本就是设置交叉编译路径CROSS_COMPILE,在设置这个路径前要判断我们所用的平台是什么,即ARCH是什么。我们这里以ARM为例。那么我们的ARCH从哪里来呢?
上面有这样一段话:
[mw_shl_code=bash,true]export ARCH CPU BOARD VENDOR SOC [/mw_shl_code]
export表示从外部引进的变量。那么ARCH是从哪里引进来的呢? 上面还有一句话:
[mw_shl_code=bash,true]include $(obj)include/config.mk
export  ARCH CPU BOARD VENDOR SOC[/mw_shl_code]
其实已经说的很直观了,是从include/config.mk这个文件中装载ARCH这些变量的。 那么,我们再来看include/config.mk这个文件。 从官方下载的uboot是没有这个文件的。 很多人到这里就傻眼了,不过更多的人还跟不到这里! 没有这个文件怎么办!
还有一个很重要的文件没有看README,在README中有这样一段话:
[mw_shl_code=bash,true]Selection of Processor Architecture and Board Type:
---------------------------------------------------

For all supported boards there are ready-to-use default
configurations available; just type "make <board_name>_config".

Example: For a TQM823L module type:

        cd u-boot
        make TQM823L_config

For the Cogent platform, you need to specify the CPU type as well;
e.g. "make cogent_mpc8xx_config". And also configure the cogent
directory according to the instructions in cogent/README.[/mw_shl_code]
也许你不知道TQM823L_config是什么,但如果你脑子灵活你应该看到了just type "make <board_name>_config"这句话。如果你不能够看到这句话,说明你不怎么适合搞嵌入式。因为嵌入式道路上的难度远不止于此,不过这也算不上难度,这是一个悟性问题。
但如果你看了uboot的整个目录结构和文件结构,并且认真查看这句话“For a TQM823L module type”,就会知道TQM823L是什么。说实话,你在编译uboot之前你应该看一遍uboot的代码,至少目录结构应该清楚,如果你什么都没有看,就来编译,也说明你是一个不善于学习的人,也可以说,你不怎么适合搞嵌入式,因为嵌入式知识面比较广,需要你“博览群书”。

如果我们是z-turn,我们就应该是[mw_shl_code=bash,true]make zturn _config [/mw_shl_code]
这样我们就可以在include下得到config.mk这个配置文件,内容如下:
[mw_shl_code=bash,true]ARCH   = arm
CPU    = armv7
BOARD  = zynq
VENDOR = xilinx
SOC    = zynq[/mw_shl_code]
这样,在makefile中,就可以到board目录下找到zynq目标平台,导出通过
[mw_shl_code=bash,true]export  ARCH CPU BOARD VENDOR SOC[/mw_shl_code]
导出给Makefile所用。

本文仅做抛砖引玉的作用,接下来的事情就靠读者自己去解决了。 祝你好运!



回复

使用道具 举报

0

主题

2

回帖

31

积分

新手上路

积分
31
blackroot 发表于 2015-9-1 17:41:21 | 显示全部楼层
楼主,你好!
请问一下,我现在在zturn板子上能运行linux了,但是我接下来想在zturn上做android开发,应该怎么做呢?有这方面的资料么?请指点一下!谢谢
回复 支持 反对

使用道具 举报

231

主题

64

回帖

2145

积分

管理员

积分
2145
 楼主| 玉米糊 发表于 2015-9-2 09:25:14 | 显示全部楼层
blackroot 发表于 2015-9-1 17:41
楼主,你好!
请问一下,我现在在zturn板子上能运行linux了,但是我接下来想在zturn上做android开发,应该 ...

那么你需要移植一个android系统到板子上,这个可以参考网上的资料,但是不管怎样,你都需要自己改不少代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录

本版积分规则

Archiver|手机版|小黑屋|米尔科技论坛   

GMT+8, 2024-5-8 11:58 , Processed in 0.055770 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表