• 从零开始之uboot、移植uboot2017.01(一、移植前的准备)


    手边的是一个S5PV210的开发板,想尝试移植一个比较新的uboot

    下载最新版本uboot2018.

    ftp://ftp.denx.de/pub/u-boot/

    编译器下载

    http://www.veryarm.com/arm-none-linux-gnueabi-gcc

    交叉编译工具链的安装

    在/usr/local/下面创建一个arm的文件夹,把交叉编译工具解压到下面去。

    2.为了方便今后使用,把该路径导入到环境变量中。

    把上面路径添加到run的家目录下的.bashrc文件的最后面

    vi ~/.bashrc export PATH=$PATH:/usr/local/arm/gcc-arm-none-eabi-5_4-2016q3/bin

    3.尝试编译

    3.1.失败,编译器和uboot版本不匹配

    本想移植比较新的uboot2018.05,结果编译器不支持,新版本的uboot要gcc6以上才可以,很尴尬。

    3.2.退而求其次,移植一个2017年的吧。

    下载一个2017年1月版本的uboot

    解压好uboot,添加好架构和交叉编译工具链

    3.3.出现dtc错误

    Your dtc is too old, please upgrade to dtc 1.4 or newer

    安装设备树编译链

     apt-get install device-tree-compiler

    3.4.采用四核,静默编译。一次通过,说明起码编译器没问题,才能考虑接下来的移植。

    4.清理一下前面的编译

    make distclen

    5.因为uboot没有为S5PV210适配相应的单板,所以我们要自己找一个相似的移植。

    其中有两块开发板比较相似,smdkc100和goni,因为smdkc100部分寄存器的基地址和s5pv210的不一样,移植更麻烦一下些,所以我们从goni上开始移植。

    拷贝

    (1)这里拷贝一份s5p_goni_defconfig的配置文件

    cp configs/s5p_goni_defconfig configs/smdkv210_defconfig


    将CONFIG_TARGET_S5P_GONI=y 修改为 CONFIG_TARGET_SMDKV210这个值会指明编译的是哪个开发板

    修改前:

    CONFIG_ARM=y
    CONFIG_ARCH_S5PC1XX=y
    CONFIG_TARGET_S5P_GONI=y
    CONFIG_DEFAULT_DEVICE_TREE="s5pc1xx-goni"
    CONFIG_SYS_CONSOLE_IS_IN_ENV=y
    CONFIG_HUSH_PARSER=y
    CONFIG_SYS_PROMPT="Goni # "

    修改后:

    CONFIG_ARM=y
    CONFIG_ARCH_S5PC1XX=y
    CONFIG_TARGET_SMDKV210=y
    CONFIG_DEFAULT_DEVICE_TREE="s5pc1xx-goni"
    CONFIG_SYS_CONSOLE_IS_IN_ENV=y
    CONFIG_HUSH_PARSER=y
    CONFIG_SYS_PROMPT="Goni # "

    2.拷贝一份配置头文件

    cp include/configs/s5p_goni.h include/configs/smdkv210.h

    3.拷贝一份单板相关的备份,将来我们在这里修改

    cp board/samsung/goni/ board/samsung/smdkv210 -arf


    修改smdkv210目录下面的Kconfig文件


    if TARGET_SMDKV210
     
    config SYS_BOARD
            default "smdkv210"    
     
    config SYS_VENDOR
            default "samsung"
     
    config SYS_SOC
            default "s5pc1xx"
     
    config SYS_CONFIG_NAME
            default "smdkv210"
     
    endif

    SYS_BOARD代表board/目录下的板子类型 (对应第一步)
    SYS_VENDOR代表baord/(代表 board/samsung/smdkv210文件夹)
    SYS_SOC代表SOC类型(因为这里没有我们的s5pv210,只能维持s5pc1xx)
    SYS_CONFIG_NAME代表include/configs/目录下的头文件 (对应第二步)

    4. 配置文件添加

    因为我们的SOC是固定的s5pc1xx,所以到这个目录向下增加我们的smdkv210单板配置


    cd arch/arm/mach-s5pc1xx
    vi Kconfig

    if ARCH_S5PC1XX
     
    choice
            prompt "S5PC1XX board select"
            optional
     
    config TARGET_S5P_GONI
            bool "S5P Goni board"
            select OF_CONTROL
     
    config TARGET_SMDKV210
            bool "SMDKV210 board"
            select OF_CONTROL
     
     
    config TARGET_SMDKC100
            bool "Support smdkc100 board"
            select OF_CONTROL
     
    endchoice
     
    config SYS_SOC
            default "s5pc1xx"
     
    source "board/samsung/smdkv210/Kconfig"
    source "board/samsung/goni/Kconfig"
    source "board/samsung/smdkc100/Kconfig"
     
    endif

    拷贝一份GONI的config文件,改成我们的TARGET_SMDKV210(注意这里的名字和第一步的要一致)

    拷贝一份source,改成我们的smdkv210的目录。


    基本配置完毕。

    先清理掉之前的配置

    make clean
    make distclean
     
    make smdkv210_defconfig
    make

    编译通过,生成了对应的uboot.bin文件说我目前为止我们的修改都ok

    run@hostname:~/work/u-boot-2017.01$ make clean
    run@hostname:~/work/u-boot-2017.01$ make distclean
    run@hostname:~/work/u-boot-2017.01$ make smdkv210_defconfig
      HOSTCC  scripts/basic/fixdep
      HOSTCC  scripts/kconfig/conf.o
      SHIPPED scripts/kconfig/zconf.tab.c
      SHIPPED scripts/kconfig/zconf.lex.c
      SHIPPED scripts/kconfig/zconf.hash.c
      HOSTCC  scripts/kconfig/zconf.tab.o
      HOSTLD  scripts/kconfig/conf
    #
    # configuration written to .config
    #
    run@hostname:~/work/u-boot-2017.01$ make -s -j4
    arch/arm/dts/s5pc1xx-goni.dtb: Warning (unit_address_vs_reg): Node /memory has a reg or ranges property, but no unit name
    arch/arm/dts/s5pc1xx-goni.dtb: Warning (unit_address_vs_reg): Node /pinctrl@e0200000/gph0 has a reg or ranges property, but no unit name
    run@hostname:~/work/u-boot-2017.01$ ls
    api        doc       lib          smdkv210.h       u-boot.cfg.configs
    arch       drivers   Licenses     snapshot.commit  u-boot.dtb
    board      dts       MAINTAINERS  System.map       u-boot-dtb.bin
    cmd        examples  Makefile     test             u-boot.lds
    common     fs        net          tools            u-boot.map
    config.mk  include   post         u-boot           u-boot-nodtb.bin
    configs    Kbuild    README       u-boot.bin       u-boot.srec
    disk       Kconfig   scripts      u-boot.cfg       u-boot.sym
    run@hostname:~/work/u-boot-2017.01$




  • 相关阅读:
    博客开通第77天
    guzzlephp使用教程
    Mac下php70memcache安装
    opcache开启和关闭
    php的getimagesize方法详解
    Yii2框架解剖
    AES加密:PHP与Java互通问题
    公司网页监控到的各种不能识别的浏览器userAgent,都是些什么啊
    document.write
    js模版引擎v6注解
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/11211226.html
Copyright © 2020-2023  润新知