从零开始移植linux内核,从零开始之uboot、移植uboot2017.01(一、移植前的准备)...

本文详细记录了将U-Boot 2017.01版本移植到S5PV210开发板的过程,包括交叉编译工具链的安装、设备树编译器的升级、配置文件的修改以及遇到的不兼容和错误处理。最终成功编译并生成了uboot.bin文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

下载最新版本uboot2018.

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

编译器下载

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

交叉编译工具链的安装

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

752f4c741c5af12997cc6c04014cc4b0.png

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

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

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

3.尝试编译

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

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

054e7b5b42913b92ba2d95dfd7c4e1a0.png

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

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

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

ba4d3d0ef8edc63216e3675ab1a8b7ec.png

3.3.出现dtc错误

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

安装设备树编译链

apt-get install device-tree-compiler

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

7310aa90655de8d714daf82898f74f34.png

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$

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值