u-boot2010.03 配置编译目标分析

发布者:SereneMelody最新更新时间:2024-11-07 来源: cnblogs关键字:u-boot  配置  编译 手机看文章 扫描二维码
随时随地手机看文章

该系列教程会根据uboot的编译过程进程分析,如何编译,那么将会如何分析这些流程
此处我还没有增加6410的支持,先看6400 的过程,因为还没有到增加的地方,分析完整个流程之后,会写如何移植uboot到s3c6410的。知道了工作的流程,再去移植会事半功倍的。

拿到uboot首先会修改编译的目标:

make smdk6400_config

对执行如下的目标

  1. #######################################################  

  2. ## ARM1176 Systems   

  3. #######################################################  

  4. smdk6400_noUSB_config     

  5. smdk6400_config :   unconfig  

  6.     @mkdir -p $(obj)include $(obj)board/samsung/smdk6400  

  7.     @mkdir -p $(obj)nand_spl/board/samsung/smdk6400  

  8.     @echo '#define CONFIG_NAND_U_BOOT' > $(obj)include/config.h  

  9.     @if [ -z '$(findstring smdk6400_noUSB_config,$@)' ]; then      

  10.         echo 'RAM_TEXT = 0x57e00000' >> $(obj)board/samsung/smdk6400/config.tmp;  

  11.         $(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx;    

  12.     else       

  13.         echo 'RAM_TEXT = 0xc7e00000' >> $(obj)board/samsung/smdk6400/config.tmp;  

  14.         $(MKCONFIG) $(@:_noUSB_config=) arm arm1176 smdk6400 samsung s3c64xx;     

  15.     fi  

  16.     @echo 'CONFIG_NAND_U_BOOT = y' >> $(obj)include/config.mk  


这里主要看的是如下2句

  1. echo 'RAM_TEXT = 0x57e00000' >> $(obj)board/samsung/smdk6400/config.tmp;  

  2. $(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx;    

首先会将RAM_TEXT = 0x57e00000 写入到$(obj)board/samsung/smdk6400/config.tmp 这个文件内
$(obj) 是目标的编译生成的路劲或者是当前UBOOT的目录,这就要看你有没有指定编译目录了

重点分析$(MKCONFIG) $(@:_config=) arm arm1176 smdk6400 samsung s3c64xx;
会调用$(MKCONFIG) 而 MKCONFIG := $(SRCTREE)/mkconfig
也就是说最终会变成如下形式
mkconfig smdk6400 arm arm1176 smdk6400 samsung s3c64xx

下面就得进入mkconfig的代码内进行分析。。记录上面的参数,请大家打开对应的文件,一步步的看着然后分析

  1. #!/bin/sh -e   

  2.   

  3. # Script to create header files and links to configure  

  4. # U-Boot for a specific board.   

  5. #   

  6. # Parameters: Target Architecture CPU Board [VENDOR] [SOC]  

  7. #   

  8. # (C) 2002-2006 DENX Software Engineering, Wolfgang Denk   

  9. #  

这里有一句说明了参数的意思Parameters: Target Architecture CPU Board [VENDOR] [SOC]
对应我们传递进来的参数看到为:
Parameters:
1:Target = smdk6400
2:Architecture = arm
3:CPU = arm1176
4:Board = smdk6400
5:[VENDOR] = samsung
6:[SOC] = s3c64xx

  1. APPEND=no   # Default: Create new config file  

  2. BOARD_NAME=''   # Name to print in make output  

  3. TARGETS=''  

  4.   

  5. while [ $# -gt 0 ] ; do  

  6.     case '$1' in  

  7.         --) shift ; break ;;  

  8.         -a) shift ; APPEND=yes ;;  

  9.         -n) shift ; BOARD_NAME='${1%%_config}' ; shift ;;  

  10.         -t) shift ; TARGETS='`echo $1 | sed 's:_: :g'` ${TARGETS}' ; shift ;;  

  11.         *) break ;;  

  12.     esac  

  13. done  

这里显示没有没有特殊的标志,所以就不需要了

  1. [ '${BOARD_NAME}' ] || BOARD_NAME='$1'  

  2.   

  3. [ $# -lt 4 ] && exit 1  

  4. [ $# -gt 6 ] && exit 1  

  5.   

  6. if [ '${ARCH}' -a '${ARCH}' != '$2' ]; then  

  7.     echo 'Failed: $ARCH=${ARCH}, should be '$2' for ${BOARD_NAME}' 1>&2  

  8.     exit 1  

  9. fi  

  10.   

  11. echo 'Configuring for ${BOARD_NAME} board...'  

  12. /*这句就是我们看到的配置信息了*/  


下面开始创建针对目标平台的连接目录了。uboot是这么编译的,将选中的平台相关的文件夹,通过软连接的方式,到一个指定的目录
那么编译的时候,就只要去这个统一的指定目录下找,就能针对不同的平台编译了。具体看下下面的建立过程

  1. #   

  2. # Create link to architecture specific headers  

  3. #   

  4. /* 这里表示目标目录跟源码目录不一致,建立相应的目录,由于我没有指定目标目录,所以执行else部分 */  

  5. if [ '$SRCTREE' != '$OBJTREE' ] ; then  

  6.     mkdir -p ${OBJTREE}/include  

  7.     mkdir -p ${OBJTREE}/include2  

  8.     cd ${OBJTREE}/include2  

  9.     rm -f asm  

  10.     ln -s ${SRCTREE}/include/asm-$2 asm  

  11.     LNPREFIX='../../include2/asm/'  

  12.     cd ../include  

  13.     rm -rf asm-$2  

  14.     rm -f asm  

  15.     mkdir asm-$2  

  16.     ln -s asm-$2 asm  

  17. else  

  18.     cd ./include  

  19.     /* 删除asm目录 */  

  20.     rm -f asm  

  21.     /*  

  22.      * 建立asm指向对应的目录,根据我上面标的,$2就是 2:Architecture = arm  

  23.      * 所以这里就是 ln -s asm-arm asm 

  24.      */  

  25.     ln -s asm-$2 asm  

  26. fi  

  27.   

  28. /* 

  29. * 这里开始建立arch目录,有了上面的asm目录建立,这里就简单多了 

  30. * 删除 rm -f asm-arm/arch 

  31. */  

  32. rm -f asm-$2/arch  

  33.   

  34. if [ -z '$6' -o '$6' = 'NULL' ] ; then  

  35.     ln -s ${LNPREFIX}arch-$3 asm-$2/arch  

  36. else  

  37.     /* 

  38.      * ln -s arch-s3c64xx asm-arm/arch 

  39.      */  

  40.     ln -s ${LNPREFIX}arch-$6 asm-$2/arch  

  41. fi  

  42.   

  43. /* 如果是arm平台,需要多建立一个proc目录 */  

  44. if [ '$2' = 'arm' ] ; then  

  45.     rm -f asm-$2/proc  

  46.     ln -s ${LNPREFIX}proc-armv asm-$2/proc  

  47. fi  

  48.   

  49. #   

  50. # Create include file for Make   

  51. #   

  52. /* 

  53. * 这里为make编译的时候创建一些环境变量,写入到config.mk文件 

  54. */  

  55. echo 'ARCH = $2' > config.mk  

  56. echo 'CPU = $3' >> config.mk  

  57. echo 'BOARD = $4' >> config.mk  

  58.   

  59. [ '$5' ] && [ '$5' != 'NULL' ] && echo 'VENDOR = $5' >> config.mk  

  60.   

  61. [ '$6' ] && [ '$6' != 'NULL' ] && echo 'SOC = $6' >> config.mk  

  62.   

  63. # Assign board directory to BOARDIR variable  

  64. if [ -z '$5' -o '$5' = 'NULL' ] ; then  

  65.     BOARDDIR=$4  

  66. else  

  67.     BOARDDIR=$5/$4  

  68. fi  

  69.   

  70. #   

  71. # Create board specific header file  

  72. #   

  73. /* 

  74. * 开始创建特殊的头文件,被好多文件加载的 

  75. * APPEND = no,于是创建了新的config.h 

  76. */  

  77. if [ '$APPEND' = 'yes' ]    # Append to existing config file  

  78. then  

  79.     echo >> config.h  

  80. else  

  81.     > config.h    # Create new config file  

  82. fi  

  83.   

  84. /* 写入如下信息到该新建的头文件内 */  

  85. echo '/* Automatically generated - do not edit */' >>config.h  

  86.   

  87. for i in ${TARGETS} ; do  

  88.     echo '#define CONFIG_MK_${i} 1' >>config.h ;  

  89. done  

  90.   

  91. cat << EOF >> config.h  

  92. #define CONFIG_BOARDDIR board/$BOARDDIR  

  93. #include   

  94. /* 这里需要注意的是,$1 对应的是smdk6400 正好指定了 include/config/smdk6400.h 配置头文件,也就是为什么移植需要该这个头文件,否则找不到的原因 */  

  95. #include    

  96. #include    

[1] [2]
关键字:u-boot  配置  编译 引用地址:u-boot2010.03 配置编译目标分析

上一篇:u-boot2010.03 移植篇(三)-----进一步修改start.S,smdk6410.h,支持nand启动及配置DM9000网卡
下一篇:uboot移植到6410开发板的过程及环境变量的修改

推荐阅读最新更新时间:2026-02-15 05:38

[JZ2440] 配置编译 U-Boot
一、相关资料获取   我个人在学习 mini2440 开发板时是跟着韦东山老师的视频学习的,视频和资料可以访问百问网论坛获取。   百问网论坛链接: http://www.100ask.net/bbs/forum.php   下载好资料后在 JZ2440资料光盘 文件中 systems 目录下可以获取到 u-boot-1.1.6.tar.bz2(U-Boot 源码包)和 u-boot-1.1.6_jz2440.patch(韦东山老师移植到 S3C2440 处理器的 patch 包)。 二、配置编译 U-Boot   1. 将下载好的 U-Boot 源码包和对应的 Patch 包复制到 Ubuntu 虚拟机
[单片机]
JZ2440--linux下给u-boot打补丁并编译
解压缩 book@book-desktop:~/zhangbing$ tar xjf u-boot-1.1.6.tar.bz2 2.打补丁 进入u-boot-1.1.6并且打补丁 book@book-desktop:~/zhangbing$ cd u-boot-1.1.6/ book@book-desktop:~/zhangbing/u-boot-1.1.6$ patch -p1 ../u-boot-1.1.6_jz2440.patch 3.配置 book@book-desktop:~/zhangbing/u-boot-1.1.6$ make 100ask24x0_config 4.编译 book@boo
[单片机]
【嵌入式】从零开始移植U-boot到mini2440(一)——U-boot编译
U-boot版本:2020/5/2 编译环境:Ubuntu 16.04 arm-none-eabi-gcc version 4.9.3 20150529 (prerelease) (15:4.9.3+svn231177-1) 运行环境:mini2440(s3c2440,arm920t) 代码仓库:git@github.com:JingyeLi/u-boot_2440.git commit hash:45516b370859b022b9bf2c9fb87318b1fa2d34a3 GitHub上下载最新的u-boot git@github.com:u-boot/u-boot.git 实际上最新的u-boot(好像是从2017年开
[单片机]
玩转mini2440开发板之【编译u-boot提示没有规则可以创建“XX.o”需要的目标】
今天继续玩一玩mini2440开发板的u-boot的编译和下载。 首先,交代一下背景,我下载的是tekkamanninja大神于2010.03移植过来的mini2440定制版的u-boot(可以直接去https://github.com/tekkamanninja/u-boot-tekkamanninja/tree/v2010.03_mini2440_tekkamanninja下载,也可以用git clone命令从https://github.com/tekkamanninja/u-boot-tekkamanninja.git处获取)。当然,具体的详细步骤,也可直接参考我另一篇博客的记录:玩转mini2440开发板之【tek
[单片机]
04-S3C2440u-boot学习之u-boot分析(1)编译体验
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。U-Boot的作用是系统引导。 U-Boot从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是根据相应的Linux内核源程序进行简化而形成的,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。 程序执行流程: (1)一上电,运行bootloader (2)读出内核,启动内核--最主要目的 (3)挂接根文件系统,运行里面应用程序 (1)使用 linux-2.6.22.6_jz2440.patch给linux
[单片机]
04-S3C2440u-boot学习之<font color='red'>u-boot</font>分析(1)<font color='red'>编译</font>体验
U-Boot移植(2)修改SDRAM的配置
接着上面的。。 5、从查资料后,可知,BANK6的设置:位宽为32,宏B6_BWSCON刚好为DW32,无需改变。 由于我所用的开发板的HCLK都设为100MHZ,需要根据SDRAM芯片的具体参数重新计算REFCNT寄存器的值。 BANK6对应SDRAM B6_BWSCON 可以看到我已经修改成新的值。。。 对于其它的BANK,比如网卡芯片DM9000所在的BANK4,原来设置刚好匹配,无需更改; 而对于其它的BANK1,BANK2,BANK3,BANK5,BANK7,在U-Boot中并没有使用到它们外接设备,也无需理会。
[单片机]
<font color='red'>U-Boot</font>移植(2)修改SDRAM的<font color='red'>配置</font>
OK6410A 开发板 (三) 7 u-boot-2021.01 boot 解析 u-boot 与linux配置部分
U-boot配置 make O=output ok6410a_mini_defconfig // 在配置的时候 不需要指定 ARCH(因为defconfig有写) 与 CROSS_COMPILE(因为现在并不需要,build的时候才需要) // 如果写了CROSS_COMPILE,会去检查CROSS_COMPILE , 然后build的时候还是需要写 // 第一次用arm-gcc 的时刻, 编译时 的 CC lib/asm-offsets.s make : Entering directory '/home/suws/ok6410/system-new/u-boot/output' HOSTCC scri
[单片机]
【ARM裸机s5pv210 】旧版本交叉编译工具链配置
旧版本交叉编译工具链的安装 1.cd /usr/local/ mkdir arm tar -jxvf arm-2009q3.tar.bz2 cd /usr/local/arm/arm-2009q3/bin bash mk-arm-linux-.sh sudo gedit ~/.bashrc 添加 export PATH=/usr/local/arm/arm-2009q3/bin:$PATH source ~/.bashrc 2.安装32位库 sudo apt-get update apt-get update sudo apt-get install lib32ncurses5-dev 3./usr/local/arm/arm
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved