u-boot分析之编译体验(零)

目录

u-boot分析之编译体验

1. 嵌入式系统与pc系统的启动对比概述

2.如何应用补丁文件生成uboot.bin文件,步骤:

3. uboot里要实现的功能

3.1 uboot最终目的是启动内核

3.2 为达到最终目的uboot要实现的功能(核心目的):

3.3 虽然uboot最终目的是启动内核,但是在开发阶段我们想增加更多的功能方便开发(次要目的):

4.u-boot功能,结构,结合Makefile进行分析

4.1.分析配置过程make 100ask24x0_config 命令

4.2.分析编译过程make all命令



u-boot分析之编译体验

 

1. 嵌入式系统与pc系统的启动对比概述

2.如何应用补丁文件生成uboot.bin文件,步骤:

①解压缩      

            tar -xjvf u-boot-1.1.6.tar.bz2

②打补丁     

            cd u-boot-1.1.6/

            patch -p1 < ../u-boot-1.1.6_jz2440.patch  //patch -p? <  ../补丁文件

③配置

            make 100ask24x0_config

④编译

            make all

在编译得到u-boot.bin文件之后,我们就可以将文件下载到开发板nor flash上去,启动板子串口3秒内按任意键输出界面如下,出现的命令菜单选项并非uboot自带,而是后续添加上去的,如何添加命令菜单后续有介绍。uboot支持很多的命令,输入'q'退出菜单模式,进入命令行模式,在命令行输入?或者help查看支持的所有命令。特别的,输入menu回到菜单模式。菜单的功能是通过usb(usb device线)下载uboot,内核,文件系统。

3. uboot里要实现的功能

3.1 uboot最终目的是启动内核

1.从flash读出内核放到sdram

2.启动内核

3.2 为达到最终目的uboot要实现的功能(核心目的):

1.关看门狗

2.初始化时钟(开发板上电,时钟的运行频率是12M,2440最大的频率是400M)

3.初始化SDRAM

4.从读Flash读出内核

5.启动内核

其中1,2,3等步是硬件相关初始化。

3.3 虽然uboot最终目的是启动内核,但是在开发阶段我们想增加更多的功能方便开发次要目的):

1.初始化串口

2.烧写flash(这样就可以通过网络,串口下载将uboot,kenel,filesystem下载到flash上去)

3.网卡,usb等等

4.u-boot功能,结构,结合Makefile进行分析

4.1.分析配置过程make 100ask24x0_config 命令

1.在uboot顶层目录下的makefile中搜索100ask24x0_config 结果如下

100ask24x0_config   :   unconfig

100ask24x0_config   :   unconfig
    @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

MKCONFIG定义为

MKCONFIG    := $(SRCTREE)/mkconfig

所以输入make 100ask24x0_config命令相当于执行:

./mkconfig   100ask24x0   arm   arm920t   100ask24x0   NULL    s3c24x0

#   $0              $1             $2       $3                $4              $5         $6

mkconfig的作用,在mkconfig文件开头第六行给出了它的用法:

06 # Parameters: Target   Architecture   CPU   Board   [VENDOR]   [SOC]

分步骤分析mkconfig的作用:

(1)确定开发板名称BOARD_NAME

     BOARD_NAME等于$1

(2)创建到平台/开发板相关的头文件的链接

      ln -s asm-$2 asm

      ln -s arch-$6 asm-$2/arch

      ln -s proc-armv asm-$2/proc        #如果$2不是arm的话,此行没有

(3)创建顶层Makefile包含的文件include/config.mk,内容追加为:

        ARCH   = $2
        CPU    = $3
        BOARD  = $4

        VENDOR = $5                   #$5为空,或者是NULL的话,此行没有
        SOC    = $6                        #$6为空,或者是NULL的话,此行没有

(4)创建开发板相关的头文件include/config.h,内容追加为:

/* Automatically generated - do not edit */
#include <configs/100ask24x0.h>

从这4个结果可以知道,如果要在board目录下新建一个开发板<board_name>的目录,则在include/configs目录下也要建立一个文件<board_name>.h,里面存放的就是开发板<board_name>的配置信息。

-----------------------------------------------------------------------------------------------------------------------

扩展: Shell脚本中$?、$!、$$、$*、$#、$@、$-、$0、$1~$n等的意义说明

$?

最后运行的命令的结束代码(返回值)。

$!

Shell最后运行的后台Process的PID(后台运行的最后一个进程的进程ID号)。

$$

Shell本身的PID(ProcessID,即脚本运行的当前进程ID号)。

$*

所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数,此选项参数可超过9个。

$#

添加到Shell的参数个数。

$@

所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数。$@ 跟$*类似,但是可以当作数组用。

$-

显示shell使用的当前选项,与set命令功能相同。

$0

Shell本身的文件名。

$1~$n

添加到Shell的各参数值。$1是第1参数、$2是第2参数…。

-----------------------------------------------------------------------------------------------------------------------

4.2.分析编译过程make all命令

1.incldue $(OBJTREE)/include/config.mk

2.ifeq($(ARCH),arm) CROSS_COMPLIE = arm-linux-

3.include $(TOPDIR)/config.mk

4.OBJS、OBJS、LIBS等变量:

OBJS = cpu/arm920t/start.o

OBJS = lib_genertic/libgeneric.a

LIBS+=board/100ask24x0/lib100ask24x0.a

LIBS+=cpu/arm920t/libarm920t.a

5.在执行make 的时候如果不指定目标,他就执行第一个目标

       (1)  all: $(ALL)                # all依赖于ALL
       (2)  ALL = (obj)u−boot.srec(obj)u-boot.bin(obj)System.map(U_BOOT_NAND)
       (3)  我们的目的是生成u-boot.bin
       (4)  (obj)u−boot.bin:(obj)u-boot       #u-boot.bin又依赖于elf格式的u-boot
       (5) (obj)u−boot:dependversion(SUBDIRS) (OBJS)(LIBS)$(LDSCRIPT)……   #u-boot又依赖于OBJS, LIBS,链接脚本等
6.不想那么麻烦的分析makefile,可以输入make命令后查看最后面的打印信息

7.通过查看打印信息,可以看到这样一句话。arm-linux-ld -Bstatic -T /work/sysytem/u-boot-1.1.6/board/100ask24x0/u-boot.lds -Ttext 0x33f80000 $UNDEF_SYM cpu/arm920t/start.o #链接的时候依赖两个东西,原材料和链接脚本。链接脚本指示映像文件的组织结构。

8.分析u-boot.lds文件(.=0x00000000 0x00000000要加上0x33f80000=uboot运行地址)一开始运行的文件是cpu/arm920t/start.o文件

9.链接地址(运行地址)由连接文件board/100ask24x0/u-boot.lds和board/100ask24x0/config.mk TEXT_BASE共同指定,TEXT_BASE在顶层目录的config.mk LDFLAGS中被引用。

 

转载:https://blog.csdn.net/wenxiHuang/article/details/72510243

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值