很多人拿到uboot,编译不知如何下手!
其实,这个世界上的万事万物,都有一个“纹理”。我读中学的时候劈柴,如果顺着木头的纹理劈下去很轻易的就劈开了,但如果反其道而行之不但劈不开而且斧头还会弹回来伤人!呵呵,城里出生的孩子是没这个体会,即使现在农村的孩子因为家里都烧液化气也没有这个机会体验了。
庖丁解牛之所以游刃有余,是因为他掌握了牛的纹理,顺着这些纹理就应该很容易。
那么我们的uboot的纹理在哪里呢?
下面我们就去找uboot的纹理!
本文u-boot版本U-Boot 1.1.4
我们按正常人的思维(智商90)来分析。
首先,是要编译,那么编译就要执行命令make,而make实际上就是执行makefile文件。第一次make肯定是不能成功的。听从观音菩萨的教诲“从哪里来就到哪里去”!make 出问题,我们就去makefile里找原因。Makefile里有这样一段话:
TOPDIR := $(shell if [ "$$PWD" != "" ]; then echo $$PWD; else pwd; fi)
export TOPDIR
ifeq (include/config.mk,$(wildcard include/config.mk))
# load ARCH, BOARD, and CPU configuration
include include/config.mk
export ARCH CPU BOARD VENDOR SOC
# load other configuration
include $(TOPDIR)/config.mk
ifndef CROSS_COMPILE
ifeq ($(HOSTARCH),ppc)
CROSS_COMPILE =
else
ifeq ($(ARCH),ppc)
CROSS_COMPILE = powerpc-linux-
endif
ifeq ($(ARCH),arm)
CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-
endif
ifeq ($(ARCH),i386)
ifeq ($(HOSTARCH),i386)
CROSS_COMPILE =
else
CROSS_COMPILE = i386-linux-
endif
endif
ifeq ($(ARCH),mips)
CROSS_COMPILE = mips_4KC-
endif
ifeq ($(ARCH),nios)
CROSS_COMPILE = nios-elf-
endif
ifeq ($(ARCH),nios2)
CROSS_COMPILE = nios2-elf-
endif
ifeq ($(ARCH),m68k)
CROSS_COMPILE = m68k-elf-
endif
ifeq ($(ARCH),microblaze)
CROSS_COMPILE = mb-
endif
endif
endif
export CROSS_COMPILE
这段脚本就是设置交叉编译路径CROSS_COMPILE,在设置这个路径前要判断我们所用的平台是什么,即ARCH是什么。我们这里以ARM为例。那么我们的ARCH从哪里来呢?
上面有这样一段话:
export ARCH CPU BOARD VENDOR SOC
export表示从外部引进的变量。那么ARCH是从哪里引进来的呢?
上面还有一句话:
ifeq (include/config.mk,$(wildcard include/config.mk))
# load ARCH, BOARD, and CPU configuration
include include/config.mk
其实已经说的很直观了,是从include/config.mk这个文件中装载ARCH这些变量的。
那么,我们再来看include/config.mk这个文件。
从官方下载的uboot是没有这个文件的。
很多人到这里就傻眼了,不过更多的人还跟不到这里!
没有这个文件怎么办!
还有一个很重要的文件没有看readme。
在readme中有这样一段话
Selection of Processor Architecture and Board Type:
---------------------------------------------------
For all supported boards there are ready-to-use default
configurations available; just type "make _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.
也许你不知道TQM823L_config是什么,但如果你脑子灵活你应该看到了configurations available; just type "make _config".这句话。如果你不能够看到这句话,说明你不怎么适合搞嵌入式。因为嵌入式道路上的难度远不止于此,不过这也算不上难度,这是一个悟性问题。
但如果你看了uboot的整个目录结构和文件结构也许会知道TQM823L是什么。说实话,你在编译uboot之前你应该看一遍uboot的代码,至少目录结构应该清楚,如果你什么都没有看,就来编译,也说明你是一个不善于学习的人,也可以说,你不怎么适合搞嵌入式,因为嵌入式知识面比较广,需要你“博览群书”。
TQM823L是我们uboot目录board下的一个文件夹名称,board下面是uboot所有所支持的BSP。
如果我们是smdk2410,我们就应该是
Make smdk2410 _config
这样我们就可以在include下得到config.mk这个配置文件,内容如下:
ARCH = arm
CPU = arm920t
BOARD = smdk2410
SOC = s3c24x0
这样,在makefile中,就可以导出
export ARCH CPU BOARD VENDOR SOC给makefile所用。
本文仅做抛砖引玉的作用,接下来的事情就靠读者自己去解决了。
祝你好运!
2010-8-18 11:06 写于上海.松江
(请尊重原创,转载请注明:作者,下家山)
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
三相电源相序缺相检测器
2010全球电子峰会:Lattice公司
从PACE到PQC:安全电子护照的未来
A类耳机放大器电路图
利用 ISE Design Suite 11 内的 Base System Builder
英特尔将在利润丰厚的ASIC业务中与博通和Marvell竞争
升压型DC-DC转换器SP6644(SP6645)及其应用
三端稳压器TL431
多路输入可编程增益放大电路 PGA204/205
前地平线VP张玉峰创业:具身智能公司无界动力获首轮3亿元融资
分立元件制作的耳机放大器
2010全球电子峰会:QuickLogic公司
三相电动机用单相电源供电的方法
埃安UT super发布:租电池4.99万 京东独家销售
带有反相和同相输出的施密特触发器电路图
解开宽带网死结
欧盟委员会推动高铁扩建和清洁燃料投资
恩智浦通过收购扩展汽车连接和边缘人工智能产品组合
新松:注重人形机器人实用化探索
一款噪声足够小的开关电源,可直接为噪声敏感型器件供电
台湾光通讯技术发展现况与展望
由PGA205构成的二进制增益步长电路图
聚焦新的SHARC处理器系列
利用 ISE Design Suite 11 内的 Xilinx Platform Studio
互联网的未来在“应用”
AI服务器电源大革命!BBU搭载超级电容成现在进行式
ADSL盈利模式探讨
三端稳压器78、79系列管脚序号判断
OpenAI呼吁将CHIPS法案税收抵免扩展到 AI 数据中心
流媒体:改造传统互联网的面貌