U-BOOT的移植与分析(第一阶段配置过程)(1)

早过忘川 提交于 2020-03-07 19:17:09

U-BOOT配置

  补丁文件中修改代码的表示方法:(1)“---” 表示是 原来代码 (2)“+++”表示修改后的代码

补丁要补的位置

diff -urN u-boot-1.1.6/board/100ask24x0/100ask24x0.c u-boot-1.1.6_jz2440/board/100ask24x0/100ask24x0.c
--- u-boot-1.1.6/board/100ask24x0/100ask24x0.c    1970-01-01 07:00:00.000000000 +0700
+++ u-boot-1.1.6_jz2440/board/100ask24x0/100ask24x0.c    2010-11-26 12:54:37.034090906 +0800


@@ -0,0 +1,96 @@

“-”表示没有修改过的代码;“+”表示修改后的代码

原来的代码是从第0行开始共有0行(补丁产生新文件)修改过的代码从第1行开始向下共有96行。

补丁的详细过程

解压U-BOOT文件

 

tar xjif u-boot-1.1.6.tar.bz2

打补丁

打补丁时一般 已经是进到“u-boot-1.1.6”这个目录下,所以 patch时便忽略去目录“u-boot-1.1.6”。用到参数 -p1 。是指忽略去第一 个“/”。  

 

启动内核

1.先配置 make xx_config:在 Makefile 中搜索 100ask24x0_config

2.make

配置100ask24x0_config

首先打开u-boot-1.1.6/Makefile文件:

  配置make 100ask24x0_config

 make 100ask24x0_config 时相当于执行: @$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0

SRCTREE    := $(CURDIR)                             *CURDIR是make的内嵌变量, 为当前目录
MKCONFIG    := $(SRCTREE)/mkconfig

MKCONFIG就是当前目录下的mkconfig文件,$(@:_config=)的结果就是将100ask24x0_config中的_config去掉为100ask24x故实际就是执行命令 ./mkconfig arm arm920t 100ask24x0 NULL s3c24x0

打开mkconfig

 

mkconfig 100ask24x0 arm arm920t 100ask24x0 NULL s3c24x0
    $0                 $1         $2      $3           $4               $5         $6

 

 这是分析它(指 mkconfig 传进来的参数)传入的参数 1,有没有--,-a,-n 或*。 参看脚本命令和参数发现都没有,则这 8 行可以去掉。

相当于 BOARD_NAME=100ask24x0 如果“BOARD_NAME”已经定义了。就不执行 BOARD_NAME="$1"。若没定义则执行 BOARD_NAME="$1 “或”的关系。在此之前LINUX 脚本中,用$1 表示第一个参数或命令。

 

 

 $#表示参数的个数。这里除去命令外,看上面参数是 6 个($1-6).这里是说参数小于 4 个 则 退出,参数大于 6 个也是退出。接着打印

 

在终端处也可以看到

 

 

 

 

 

 在Makefile中有这么几行代码

BUILD_DIR := $(O)

OBJTREE        := $(if $(BUILD_DIR),$(BUILD_DIR),$(CURDIR))   * 若$(BUILD_DIR)大于0为真OBJTREE=$(BUILD_DIR),
SRCTREE        := $(CURDIR)
TOPDIR        := $(SRCTREE)
LNDIR        := $(OBJTREE)

 可以推断出 $(CURDIR)等于0,所以OBJTREE=$(CURDIR), SRCTREE := $(CURDIR)   所以$SRCTREE" == "$OBJTREE故执行else分支。  打开include目录删除asm文件建立新文件asm连接文件,指向asm-arm文件(表示选择使用arm架构文件)

在中断出也可以看出

 

继续向下分析:rm -f asm-$2/arch

 

 if [ -z "$6" -o "$6" = "NULL" ] ; then  (-z)为空 (-o)=NULL 判断为假

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

 

if [ "$2" = "arm" ] ; then      判断为真
    rm -f asm-$2/proc
    ln -s ${LNPREFIX}proc-armv asm-$2/proc
fi

#
# Create include file for Make
#
echo "ARCH   = $2" >  config.mk  ">":新建config.mk文件,里面内容为ARCH = arm
echo "CPU    = $3" >> config.mk   ">>"追加新内容
echo "BOARD  = $4" >> config.mk

[ "$5" ] && [ "$5" != "NULL" ] && echo "VENDOR = $5" >> config.mk  判断$5存在且不等于NULL

[ "$6" ] && [ "$6" != "NULL" ] && echo "SOC    = $6" >> config.mk    判断$6存在且不等于NULL

得出结论:

ARCH=ARM

CPU = ARM920T

BOARD = 100ASK24x0

SOC = S3C24x0

 

 

if [ "$APPEND" = "yes" ]    # Append to existing config file  在mkconfig第11行中,APPEND=no,所以执行else语句创建config.h
then
    echo >> config.h
else
    > config.h        # Create new config file
fi
echo "/* Automatically generated - do not edit */" >>config.h
echo "#include <configs/$1.h>" >>config.h   追加内容#include<configs/100ask24x0.h>
exit 0  退出

 总结:1.先创建了链接文件

    ln -s asm-$2 asm

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

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

     2.创建 config.mk 这个文件

     3.创建开发板相关的头文件

    include/config.h

自此第一阶段make 100ask24x0.config结束。

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!