手边的是一个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$

从零开始之uboot、移植uboot2017.01(一、移植前的准备)的更多相关文章

  1. 从零开始之uboot、移植uboot2017.01(二、从入口分析流程)

    原创: To_run_away 从零开始学linux 本节的开始之前,先看一下uboot的链接脚本. 一.链接脚本 /* * Copyright (c) 2004-2008 Texas Instrum ...

  2. 移植u-boot.2012.04.01

    /*************************************************** *u-boot版本:u-boot2012.04.01 *gcc版本:arm-linux-gcc ...

  3. 基于335X平台的UBOOT中交换芯片驱动移植

    基于335X平台的UBOOT中交换芯片驱动移植 一.软硬件平台资料 1.开发板:创龙AM3359核心板,网口采用RMII形式. 2.UBOOT版本:U-Boot-2016.05,采用FDT和DM. 3 ...

  4. ZYNQ Linux 移植:包含petalinux移植和手动移植debian9

    参考: https://electronut.in/workflow-for-using-linux-on-xilinx-zynq/ https://blog.csdn.net/m0_37545528 ...

  5. uboot在s3c2440上的移植(2)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...

  6. uboot在s3c2440上的移植(1)

    一.移植环境 主  机:VMWare--Fedora 9 开发板:Mini2440--64MB Nand,Kernel:2.6.30.4 编译器:arm-linux-gcc-4.3.2.tgz u-b ...

  7. u-boot移植(四)---修改前工作:代码流程分析3---代码重定位

    一.重定位 1.以前版本的重定位 2.新版本 我们的程序不只涉及一个变量和函数,我们若想访问程序里面的地址,则必须使用SDRAM处的新地址,即我们的程序里面的变量和函数必须修改地址.我们要修改地址,则 ...

  8. tiny210(s5pv210)移植u-boot(基于 2014.4 版本号)——移植u-boot.bin(打印串口控制台)

    在之前我们移植的代码中,都没看到明显的效果,这节我们实现控制台的信息打印. 在上节.我们看到调用 relocate_code 重定位.在 u-boot 的帮助文档 doc/README.arm-rel ...

  9. u-boot移植(二)---修改前工作:代码流程分析1

    一.代码执行总体流程图 1.1 代码路径 U-boot.lds (arch\arm\cpu) vectors.S (arch\arm\lib) start.S (arch\arm\cpu\arm920 ...

随机推荐

  1. Primary Key Increase by Trigger

    Oracle Create Table: CREATE TABLE TAB( ID NUMBER(10) NOT NULL PRIMARY KEY, NAME VARCHAR(19) NOT NULL ...

  2. 微信公众号号开发(Java)

    参考:http://www.cnblogs.com/fengzheng/p/5023678.html http://www.cnblogs.com/xdp-gacl/p/5151857.html 一: ...

  3. JavaScript中数组的操作方法总汇

    Array(数组)是JavaScript中最为常用的类型了.ECMAScript中的数组都是数据的有序列表.数组中可以保存任何类型的数据.数组的大小是可以动态调整的,既可以随着数据的添加自动增长以容纳 ...

  4. BUUCTF | [CISCN2019 华北赛区 Day1 Web1]Dropbox

    步骤: 1.运行这个: <?php class User { public $db; } class File { public $filename; } class FileList { pr ...

  5. git commit --amend用法(摘抄)

    适用场景: 比方说,你的代码已经提交到git库,leader审核的时候发现有个Java文件代码有点问题,于是让你修改,通常有2种方法: 方法1:leader 将你提交的所有代码 abandon掉,然后 ...

  6. 微信小程序的事件

    事件,视图层到逻辑层的一种通讯方式,或者将用户的行为返回到逻辑层,当我们在组件绑定事件之后,当我们触发事件,就会执行逻辑层绑定的事件,处理回调函数,当页面的事件触发之后 页面上元素一些额外事件,通过事 ...

  7. 如何获取url里面的参数

    想必大家经常会遇到这样的问题吧,每次获取url参数的时候就一阵头疼,那现在我就教大家一个简单的方法,将url的参数转换成一个对象,用的时候直接用对象点出来就好了.不多说,直接上代码 function ...

  8. 阅读笔记05-架构师必备最全SQL优化方案(1)

    一.优化的哲学 1.优化可能带来的问题? 优化不总是对一个单纯的环境进行,还很可能是一个复杂的已投产的系统: 优化手段本来就有很大的风险,只不过你没能力意识到和预见到: 任何的技术可以解决一个问题,但 ...

  9. Minimum Cost 【POJ - 2516】【网络流最小费用最大流】

    题目链接 题意: 有N个商家它们需要货物源,还有M个货物供应商,N个商家需要K种物品,每种物品都有对应的需求量,M个商家每种物品都是对应的存货,然后再是K个N*M的矩阵表示了K个物品从供货商运送到商家 ...

  10. Git011--分支管理策略

    Git--分支管理策略 一.分支管理策略 通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息. 如果要强制禁用Fast forward模式,G ...