十四.linux开发之uboot移植(十四)——从UBOOT官方下载uboot移植详解

本文详细介绍了将UBOOT官方版本2013.10移植到S5PV210开发板的过程,包括选择官方版本、配置Makefile、烧录运行问题分析与解决、start.S文件移植、DDR初始化、SD/MMC驱动移植以及环境变量和网络驱动的移植。内容涵盖了移植的每个步骤、代码修改、错误排查与解决方案,提供了移植过程中的代码实践和分析。

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

官方uboot2013.10版本的移植流程图(包括有道云笔记地址)

http://note.youdao.com/noteshare?id=d78fd7030db099c8a1bed0f6b948bf75&sub=1287D105BC284AD887BC4E2A2A097C87

  1. uboot官方版本下载地址:ftp://ftp.denx.de/pub/u-boot/
  2. uboot下载版本:u-boot-2013.10.tar.bz2

一.选择官方原版uboot

1、官方原版uboot的版本

(1)版本号。刚开始是1.3.4,后来变成2009.08

(2)新版和旧版的差别。uboot的架构很早就定下来了,然后里面普遍公用的东西(common目录下、drivers目录下、fs目录下等···)在各个版本之间几乎是完全一样的。差别最大的是board和cpu目录,这两个目录正是单板(开发板)相关的。越新的uboot版本支持越多的开发板(CPU),所以越新的uboot越庞大。

(3)我们选择uboot 2013.10版本进行实验移植

2、注意:实践工作中一般是从SoC厂商的uboot出发移植的

(1)在工作中一般是不需要从uboot官方版本出发去做移植的,而是从SoC厂商提供的开发板配套的uboot去做移植的。

3.先初步浏览官方原版uboot

前提:使用SourceInsight 建立工程及添加文件

工程项目文件和工程中管理的源代码文件目录可以不同,但是我一般习惯放在一起。放在:E:\Linux\winshare\u-boot-2013.10\u-boot-2013.10\SI_Proj

SI_Proj是自己建的工程目录

4、主Makefile浏览及boards.cfg文件

(1)2013.10版本的uboot的Makefile中使用了boards.cfg文件,因此在配置uboot时make xxx_config,这个xxx要到boards.cfg文件中查找。

(2)其实就相当于把以前的版本的uboot中各种开发板的配置部分规则抽离出来写到了Makefile中,然后把配置信息部分写到了一个独立文件boards.cfg。

(1)参照物开发板为:55p_goni

(2)配置对应的cpu、board文件夹分别为:

cpu: u-boot-2013.10\arch\arm\cpu\armv7

board: u-boot-2013.10\board\samsung\goni

拷贝UBOOT官方修改后的u-boot-2013.10.zip到ubuntu

使用tar命令解压包出现问题

原因是因为对只有一个压缩内容的文件来解压的时候才用tar, 而如果压缩包里有多个文件被压缩了,tar命令不能继续工作。可以采用unzip命令去解压。

使用命令:unzip u-boot-2013.10.zip ,解压成功

二、主mkconfig脚本分析

1、脚本功能浏览

(1)首先我们在命令行配置uboot时,是:make s5p_goni_config,对应Makefile中的一个目标。其中 make s5p_goni_config是 s5pc1xx这个单板的一个目标名称

要针对某个单板进行配置,需要执行: makeNAME_config,其中 NAME 在 boards.cfg 中列出。

(2)新版本的Makefile中:

%_config:: unconfig

@$(MKCONFIG) -A $(@:_config=)

从这里分析得出结论,实际配置时是调用mkconfig脚本,然后传参2个:-A和s5p_goni

(3)

到了mkconfig脚本中,如果参数个数等于 2,而且第 1 个参数等于“ -A”,则执行:

line=`awk '($0 !~ /^#/ && $7 ~ /^'"$2"'$/) { print $1, $2, $3, $4, $5, $6, $7, $8 }' $srctree/boards.cfg`

awk 是一个非常强大的文本处理工具, $srctree 被替换为 u-boot-2014.04,即 u-boot 源码树目录, awk

会读取 u-boot-2014.04/boards.cfg 中的每一行,如果和前面的表达式($0 !~ /^#/ && $7 ~ /^'"$2"'$/)相匹配,

则执行{ print $1, $2, $3, $4, $5, $6, $7, $8 }

boards.cfg 保存了各种单板的相关信息,其格式为:

Active  arm         armv7          s5pc1xx     samsung    smdkc100    smdkc100          -              Minkyu Kang           <mk7.kang@samsung.com>

awk 在执行过程中, $0 代表当前整行, 同时将第一个字段存入$1,将第 2 个字段存入$2, 依此类推,

awk 缺省按空格分段,可以通过-F 指定分隔符。

若果当前行不以#开头,而且第 7 个字段和 mkconfig 传进来的第 2 个参数( s5p_goni) 相等,则分别将字段 1~字段 8 输出到 line 中保存,最终得到:

line= Active    arm   armv7    s5pc1xx    samsung    goni  s5p_goni   –

(4)注意在解析完boards.cfg之后,$1到$8就有了新的值。

$#=8

$1=Active          状态

$2=arm              架构

$3=armv7          CPU

$4=s5pc1xx       SOC

$5=samsung      厂商

$6=goni     单板名称

$7=s5p_goni   配置目标

$8=-                    选项

(5)

${7%_config}表示去掉${7}的后缀_config,这里${7}=s5p_goni ,得到

CONFIG_NAME=s5p_goni

BOARD_NAME=s5p_goni

2、几个传参和其含义

(1)几个很重要的变量

arch=arm    体系架构

cpu=armv7   cpu 类型

vendor=samsung 厂商名称

soc=s5pc1xx     片上系统

然后在ubuntu中,make s5p_goni_config

3、符号链接

(1)include/asm  -> arch/arm/include/asm

(2)include/asm/arch -> include/asm/arch-s5pc1xx

(3)include/asm/proc -> include/asm/proc-armv

最后创建了include/config.h文件。

4、Makefile中添加交叉编译工具链

(1)官方原版的uboot中CROSS_COMPLIE是没有定义的,需要自己去定义。如果没定义就直接去编译,就会用gcc编译。

(2)在Makefile中添加一行:

CROSS_COMPILE = /usr/local/arm/arm-2009q3/bin/arm-none-linux-gnueabi-

5、配置编译测试

(1)编译过程:

make distclean

make s5p_goni_config

make

(2)结果:得到u-boot.bin即可

三.先解决官方版本uboot的烧录运行

1.在linux下用烧录脚本来烧录(实质是dd命令进行sd卡扇区写入)

(1)移植原来的版本的uboot中的sd_fusing文件夹到官方uboot版本中,使用这个文件夹中的sd_fusing.sh脚本来进行烧录。烧录启动开发板,串口显示如下

2、分析:为什么烧录运行不正确?

(1)串口接串口2,串口有输出。但是这个串口输出不是uboot输出的,而是内部iROM中的BL0运行时输出的。

(2)输出错误信息分析:

第一个SD checksum Error:是第一顺序启动设备SD0(iNand)启动时校验和失败打印出来的;

第二个SD checksum Error:是第二顺序启动设备SD2(外部SD卡)启动时校验和失败打印出来的;

剩下的是串口启动和usb启动的东西,可以不管。

总结:从两个SD checksum Error,可以看出:外部SD卡校验和失败了。

分析:SD卡烧录出错了,导致SD卡校验和会失败

3、解决方案分析

(1)为什么SD卡烧录会出错?可能原因:烧录方法错误、烧录原材料错误。

(2)经过分析,sd_fusing这个文件夹下的mkbl1这个程序肯定没错,上一层目录下的u-boot.bin是存在的,校验和失败不失败和u-boot.bin无关。

(3)经过分析和查找,发现是mkbl1程序和start.S中前16个字节校验和的处理上面不匹配造成的,解决方法是在start.S最前面加上16个字节的占位。(查看之前移植三星uboot文件中的start.S中是有16个字节的占位的这里拷贝到我们的源码中即可

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值