原创 从庖丁解牛说uboot如何编译

2011-5-9 22:10 6177 16 22 分类: 消费电子

作者:下家山

很多人拿到uboot,编译不知如何下手!

其实,这个世界上的万事万物,都有一个“纹理”。我读中学的时候劈柴,如果顺着木头的纹理劈下去很轻易的就劈开了,但如果反其道而行之不但劈不开而且斧头还会弹回来伤人!呵呵,城里出生的孩子是没这个体会,即使现在农村的孩子因为家里都烧液化气也没有这个机会体验了。

庖丁解牛之所以游刃有余,是因为他掌握了牛的纹理,顺着这些纹理就应该很容易。

那么我们的uboot的纹理在哪里呢?

很多初学者,拿到这种代码从来没有去看过它的readme或者document!这两个文本文件是非常重要的东西,可惜呀!很多人不去看readme而去请教别人,googlebaidu,跑图书馆。其实,有些东西当你问到别人的时候,聪明的人也是去看readme然后给你解答的。

下面我们就去找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 SOCmakefile所用。

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

祝你好运!

                   2010-8-18 11:06  写于上海.松江

 (请尊重原创,转载请注明:作者,下家山)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

文章评论6条评论)

登录后参与讨论

lee_yorknj_306572839 2014-10-27 14:32

真实的感悟比啥理论都强。

用户1678053 2014-7-1 10:27

收下

用户1122492 2011-7-23 11:38

ding

用户1505864 2011-7-18 10:15

还有呢?

用户1037328 2011-6-7 14:08

没有图片哦

用户1430885 2011-5-30 18:53

我看过u-boot 的read me文件 受益匪浅。。。

用户1049428 2011-5-12 22:52

good

用户1526661 2011-5-12 21:40

也也有

用户1261931 2011-5-12 08:53

It is a good start of u-boot.

用户1602177 2011-5-10 15:57

文章下面有一片空地,请问是上了图片显示不了吗?
相关推荐阅读
用户1037328 2016-04-17 17:59
好的理论可以避免犯错——读《丈量世界》有感!
     《丈量世界》,早就因为仰慕高斯而想看这本书      1.殊途同归      这本书写的是高斯和洪堡两个人,为什么要把这两个人放在一起写呢?因为高斯是一个宅男,不喜欢什么旅游,考察!他觉得...
用户1037328 2016-04-05 09:10
叛逆在爱因斯坦性格中的重要性(一)
叛逆在爱因斯坦性格中的重要性(一) 《爱因斯坦传》读书笔记      昨天晚上,读完了2016年书单的第二部书,《爱因斯坦传》。我想梳理一下自己读这本书的收获,或者说感悟!在读这...
用户1037328 2016-04-05 09:09
叛逆在爱因斯坦性格中的重要性(二)
叛逆在爱因斯坦性格中的重要性(二) 《爱因斯坦传》读书笔记                                四  叛逆性 在爱因斯坦的同时期科学家中,我想比他IQ...
用户1037328 2014-07-09 19:55
RTEMS系统时钟原理
作者,下家山(转载请注明作者及出处,请尊重原创)   专注嵌入式(ARM7,Cortex-M0,Cortex-M3,ARM9,linux)培训 一:从应用看原理      每个...
用户1037328 2014-07-09 19:47
RTEMS在S3C2410上的移植(一)
作者:下家山(转载,请注明) 1:RTEMS开发环境建立 1.1开发环境建立前的准备工作 因为RTEMS开发环境主要用的是GNU的工具链,所以需要一台装有Linux的HOST. 1.2...
用户1037328 2014-07-09 19:45
深入浅出学Makefile<三,如何自动生成Makefile>
(请尊重原创,转载请注明,作者:下家山) 五: 运行make编译得到可执行文件 root@parson-desktop:/home/parson/tmp/automk# make gcc ...
我要评论
6
16
关闭 站长推荐上一条 /2 下一条