zoukankan      html  css  js  c++  java
  • uboot移植之迷雾解码

    按照蜗窝科技的步骤执行

    一、有关硬件描述的填空题

    1)CPU上电后,从哪种设备(       BOOTROM         )的哪个地址(        0x0000_0000       )开始执行。

    2)用(                )方式,可以让CPU进入USB download(或者UART download)模式。 no

    3)进入USB download之后,设备使用哪个USB接口(        )和主机通信。no

    4)进入download模式后,哪一段地址范围(通常为SRAM)可以用来执行程序:(                )~(                ),size有多大(                )。

    5)用什么协议(                )可以通过USB将bin文件上传到指定的地址。no

    6)用什么协议(                )可以让CPU跳转到到指定地址继续执行。no

     二、基本符号的定义

    Board                ->  ql10_demo
    Vendor              ->  fmxx
    Machine(SoC)    ->  fmql10
    Arch                  ->  arm
    CPU                  ->  armv7

    三、目录结构及K从Kconfig的确定

    1)在board/目录中创建“fmxx/ql10_demo” 目录,并提供Kconfig和Makefile文件

    mkdir -p board/fmxx/ql10_demo
    touch board/fmxx/ql10_demo/Kconfig
    touch board/fmxx/ql10_demo/Makefile

    2)在arch/arm/Kconfig中,添加配置菜单
    config TARGET_QL10_DEMO
           bool "Support fmxx ql10 demo board"
           select CPU_V7A
           select SUPPORT_SPL
           select SPL
           help
             Support for ql10 demo board platform based on fmxx  ql10 Psoc,
             with 4xA7 CPU, 1GB DDR.

    endchoice


     source "board/fmxx/ql10_demo/Kconfig"

    3)根据符号定义,在board/fmxx/ql10_demo/Kconfig中,添加如下配置项:
    if TARGET_QL10_DEMO

    config SYS_BOARD
        default "ql10_demo"

    config SYS_VENDOR
        default "fmxx"

    config SYS_SOC
        default "fmql10"

    config SYS_CONFIG_NAME
        default "ql10_demo"
    endif

     

    vi doc/README.kconfig
    以上README中有大致的流程

    Conversion from boards.cfg to Kconfig
    -------------------------------------

    Prior to Kconfig, boards.cfg was a primary database that contained Arch, CPU,
    SoC, etc. of all the supported boards.  It was deleted when switching to
    Kconfig.  Each field of boards.cfg was converted as follows:

     Status      ->  "S:" entry of MAINTAINERS
     Arch        ->  CONFIG_SYS_ARCH defined by Kconfig  
     CPU         ->  CONFIG_SYS_CPU defined by Kconfig
     SoC         ->  CONFIG_SYS_SOC defined by Kconfig
     Vendor      ->  CONFIG_SYS_VENDOR defined by Kconfig
     Board       ->  CONFIG_SYS_BOARD defined by Kconfig
     Target      ->  File name of defconfig (configs/<target>_defconfig)
     Options     ->  CONFIG_SYS_EXTRA_OPTIONS defined by Kconfig
     Maintainers ->  "M:" entry of MAINTAINERS

    ################# tips ####################

    1.Arch       arm

    arch/arm/Kconfig中

    config SYS_ARCH
        default "arm"

    2.CPU        armv7

    arch/arm/Kconfig

    config SYS_CPU
        default "armv7" if CPU_V7A

    3.SoC        fmql10

    Define CONFIG_SYS_SOC="soc" to compile arch/<arch>/cpu/<cpu>/<soc> 其实并没有这个目录

    4.Vendor     fmxx

    Define CONFIG_SYS_VENDOR="vendor" to compile board/<vendor>/common/*
             and board/<vendor>/<board>/*

    5.Board      ql10_demo

    Define CONFIG_SYS_BOARD="board" to compile board/<board>/*
             (or board/<vendor>/<board>/* if CONFIG_SYS_VENDOR is defined)

    6.Target     ql10_demo

    Define CONFIG_SYS_CONFIG_NAME="target" to include
             include/configs/<target>.h

    Add configs/<target>_defconfig



    Tips to add/remove boards
    -------------------------

    When adding a new board, the following steps are generally needed:

     [1] Add a header file include/configs/<target>.h
     [2] Make sure to define necessary CONFIG_SYS_* in Kconfig:
           Define CONFIG_SYS_CPU="cpu" to compile arch/<arch>/cpu/<cpu>
           Define CONFIG_SYS_SOC="soc" to compile arch/<arch>/cpu/<cpu>/<soc>
           Define CONFIG_SYS_VENDOR="vendor" to compile board/<vendor>/common/*
             and board/<vendor>/<board>/*
           Define CONFIG_SYS_BOARD="board" to compile board/<board>/*
             (or board/<vendor>/<board>/* if CONFIG_SYS_VENDOR is defined)
           Define CONFIG_SYS_CONFIG_NAME="target" to include
             include/configs/<target>.h
     [3] Add a new entry to the board select menu in Kconfig.
         The board select menu is located in arch/<arch>/Kconfig or
         arch/<arch>/*/Kconfig.
     [4] Add a MAINTAINERS file
         It is generally placed at board/<board>/MAINTAINERS or
         board/<vendor>/<board>/MAINTAINERS
     [5] Add configs/<target>_defconfig

    When removing an obsolete board, the following steps are generally needed:

     [1] Remove configs/<target>_defconfig
     [2] Remove include/configs/<target>.h if it is not used by any other boards
     [3] Remove board/<vendor>/<board>/* or board/<board>/* if it is not used
         by any other boards
     [4] Update MAINTAINERS if necessary
     [5] Remove the unused entry from the board select menu in Kconfig
     [6] Add an entry to doc/README.scrapyard


    根据README的描述,定义上述配置项之后,u-boot会编译如下的目录:

    Define CONFIG_SYS_CPU="cpu" to compile arch//cpu/
            arch/arm/cpu/armv8
            Q:并没有看到CONFIG_SYS_CPU的定义?
            A:在“arm/Kconfig”中定义,“default "armv8" if ARM64”,这就是为什么在上面Target定义中“select ARM64”的原因。

    Define CONFIG_SYS_SOC="soc" to compile arch//cpu//
            arch/arm/cpu/armv8/s900
            Q:如果该目录不存在,是否还会编译?
            A:应该不会。

    Define CONFIG_SYS_VENDOR="vendor" to compile board//common/* and board///*
            board/actions/common/*
            board/actions/bubblegum/*

    Define CONFIG_SYS_CONFIG_NAME="target" to include include/configs/.h
            include/configs/bubblegum.h

     4)创建该板子有关的配置头文件

    include/configs/ql10_demo.h

    #ifndef __QL10_DEMO_H
    #define __QL10_DEMO_H

    #endif

    5)使用menuconfig,生成.config,并保存为ql10_demo_defconfig

    cd ~/work/x_project/u-boot

    make menuconfig

    配置Architecture和Target:

    Architecture select (ARM architecture)  --->

    ARM architecture  --->
        Target select (Support Bubblegum 96Board)  --->

    关闭Command line interface配置项下面所有的内容:

    Command line interface  --->

    其它暂时用默认值,保存退出,得到.config文件,然后另存为ql10_demo_defconfig

    cp .config configs/ql10_demo_defconfig

     

    四、尝试编译一次
  • 相关阅读:
    PIE SDK 基于Dot net bar实现比例尺控件
    PIE SDK 监督分类对话框类(SupervisedClassificaitonDialog)使用经验
    图层树右键菜单结合Command操作过程
    PIE 插件式开发小笔记__PIESDK学习体会
    [转]sqlserver收缩文件没效果的解决办法
    efcore 输出显示sql语句
    Linux 常见的进程调度算法
    Linux 配置 vimrc
    排序 选择排序&&堆排序
    C/C++ 内存管理 (《高质量C++》-- 整理笔记)
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/11377395.html
Copyright © 2011-2022 走看看