第一章、Tiny4412 U-BOOT移植一 说明

Exynos4412 Uboot 移植(五)—— Uboot 移植过程 Uboot 版本:u-boot-2013.01 开发板:FS_4412 平台(Exynos4412,可以根据自己的板子修改,只要是4412的过程都是一样的) 一、建立自己的平台 1、下载源码 我们可以在下面这个网站上下载最新的和以前任一版本的uboot ftp://ftp.denx.de/pub/u-boot/ 这里我们使用的是u-boot-2013.01 2、解压u 阅读详情

一、移植前说明:

1、  特别声明:此文档是我的学习文档,里面肯定有错误地方,仅供参考!

2、移植平台:友善之臂Tiny4412SDK1306平台。

3、移植系统:Ubuntu12.04

4、移植原始CODE:平台光盘中由Samsung提供的U-Boot-samsung-dev.tar.bz2。为什么用这个,只能说因为我也菜鸟,我找了u-boot官网最新的代码看了一下,我没有在board\samsung目录下找到与Exynos4412芯片很相关的平台目录,估计是有的,只是由于我很菜,不清楚是那一个,为了省自学时间,还是用三星提供的U-Boot源码。

5、参考文档:各相关手册,主要手册是Exynos4412 RISC Microprocessor Revision 1.0 完整版,其实三星公司资料对个人来讲,挺难弄到手的,没有签署NDA,基本上很难从其官网上找到什么有用的资料,虽然他是为自己公司的种种利益,但对我们这些个人菜鸟来讲,没有找到好的手册,就是个恶梦呀,这里小小的鄙视一下三星!其他有一些芯片厂商的资料提供的好很多。但还好,谢谢网络的发达,有网友分享了一份完整版的手册。

另非常感谢作者:南山一梦的《Tiny210(S5PV210)U-BOOT》的移植说明,我也是刚学UBOOT移植,所有思路过程均参考此博文进行,部分原理说明内容也出自于此,所以,此文档也并非完全原创,本来这也是我自己学习记录的文档,这么多年我都是吸血的,本无意分享的,但网上关于exynos4412的学习资料太少,exynos4412学习起来诸多不易,我自己费了好多时间,走了好多弯路,才走到这一步,我想至少这份文档肯定会有一些参考价值的,整理后发出来仅供学习之用,请务商业化,谢谢!

博文网址:http://blog.youkuaiyun.com/mutemob/article/details/8708401。

汇总网址:http://www.cnblogs.com/cainiaoaixuexi/p/3431586.html。

      

6、备注:以下内容中我说手册的多少页,没有特殊说明手册名称的,一律都指Exynos4412 RISC Microprocessor Revision 1.0完整版手册。很多地方为省时省事,我也比较懒,敲不动中文了,直接就复制手册,上英文吧,大家也当练练英语嘛! 

对应的代码我稍后会整理发出,我会要一两个资源分。我会给出三个版本代码,V0.1对应第一章裁剪后的代码。v0.2对应第二章到第14章的代码。v0.3对应后面增加LCD驱动的代码,主要是第19章代码的变动,发出三个版本来是方便大家学习比较修改点。

V0.1大家可以不用下载吧,你买了tiny4412的板子,里面就有三星公司的源代码了,v0.1我也只是裁剪了一下,你完全可以参考下面的说明完成。


 费话不多说,下面开始吧!说明一下UBOOT代码架构和进行一下简单裁剪。

二、U-BOOT简介

1、U-Boot简介以及源码获取

1.1 、U-Boot简介

这里对U-Boot做简单的介绍,对于新手来说,总不能对这个“敌人”一无所知吧,在此做一个小小的扫盲吧。

U-Boot全称UniversalBootLoader,即通用bootloader。它是德国DENX小组的开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,当前,它还支持NetBSD,VxWorks,QNX,RTEMS,ARTOS,LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS、XScale等诸多常用系列的处理器。

1.2 、U-Boot源码获取以及解压方法

U-Boot的代码可以从官方的FTP服务器上获取,地址是:ftp://ftp.denx.de/pub/U-Boot/。代码是按照一定时间周期更新的,命名方式由以前的数字命名更换为以时间的方式命名,笔者认为这样更直接更简单。当然,可以拿比较新的版本跟以前的老版本比较,结构和代码的具体实现是有很多差异的,笔者认为新版的U-Boot结构更合理,代码更简练,移植更方便。不管工程结构和代码怎么变,不变的是原理和整体框架,只要牢牢抓住这些本质的东西,你就能所向披糜。

下载代码后,在Ubuntu中可以直接鼠标右键,使用归档管理器解压到当前目录下。当然也可以终端中,先使用cd命令切换到代码包的目录下,例如,如果源码包是U-Boot-2013.01.01.tar.bz2,那么应该使用:

sudo tar-xvf U-Boot-2013.01.01.tar.bz2,即可解压到当前目录下。

1.3、U-Boot代码结构介绍

解压后我们看看新版本U-Boot的代码结构,如下图1-6所示。那么我们就来逐一介绍一下各个目录的功能和内容。如果需要更详细的目录介绍信息,请参阅U-Boot根目录下的README文件。


图1-1、U-Boot框架图

1). api:一些系统调用,包含有显示用的api,网络部分的api,和一些跟平台相关但独立出来的api。是一个扩展应用的独立的api库。

2). arch:与特定CPU架构相关目录,每一款Uboot下支持的CPU在该目录下对应一个子目录,比如有子目录arm就是我们开发板上使用的硬件体系目录。而arch/arm/目录下的cpu目录就是对应ARM体系的cpu目录,里边的armv7就是我们此次移植的重点对象,s5pv210就是armv7架构的cpu。

3). board:和一些已有开发板有关的文件.每一个开发板都以一个子目录出现在当前目录中。例如,smdkc100就是官方以s5pc100为核心的开发板的相关文件。该目录和上一个arch目录是严重依赖硬件平台的,移植之初要改动最多的也是这两个目录。

4). common目录:主要实现uboot命令行下支持的命令,每一条命令都对应一个文件。例如bootm命令对应就是cmd_bootm.c。

5). disk:对磁盘的支持。

6). doc:文档目录。Uboot的文档还是比较完善的,推荐大家参考阅读。

7). drivers:Uboot支持的设备驱动程序都放在该目录,比如各种网卡、支持CFI的Flash、串口和USB。

8). dts:从U-Boot的readme文件中获取到的信息,我的理解是dts = device trees ,有兴趣的可以参考U-Boot的readme文件中对ONFIG_OF_IDE_FIXUP和CONFIG_OF_EMBED这两个宏的描述。

9). examples:一些独立运行的应用程序的例子。

10). fs:支持文件系统的文件,U-Boot现在支持cramfs、fat、fdos、jffs2、yaffs和registerfs。

11). Include:头文件,还有对各种硬件平台支持的会变文件,系统的配置文件和对文件系统支持的文件。

12). lib:通用的多功能库函数实现。例如字符串的一些常用函数就在string.c中实

13). nand_spl:支持从nand flash启动,但支持的cpu的种类也不是很

14). net:与网络有关的代码,BOOTP协议、TFTP协议RARP协议和NFS文件系统的实现。

15). post:上电自检程序。

16). spl:镜像分离的实现,一般用在SD卡启动。

17). test:测试命令的实现,测试系统是否运行正常时使用。

18). tools:创建S-Record格式文件和U-BOOT images的工具。

19). boards.cfg:目标板配置参数文件,里边有很多种目标板的配置参数。

20). config.mk:这个文件里面主要定义了交叉编译器及选项和编译规则。

21). COPYING:软件的使用条款声明。

22). CREDITS:U-Boot开发者的联系方式。

23). helper.mk:生成U-Boot.list文件,文件包含程序编译对象信息等。

24). MAINTAINERS:各个硬件架构软件维护者的联系方式。

25). MAKEALL:创建多个目标板的配置,一般用不到。

26). Makeflie:U-Boot的makefile,主要用来编译链接并生成U-Boot镜像。

27). mkconfig:建立工程需要的一些软链接并创建配置文件config.h。

28). README:U-Boot的介绍信息,最好能花点时间看看,多了解一些关于U-Boot的信息。

29). rules.mk:U-Boot工程编译依赖规则。

30). snapshot.commit:U-Boot序列号和发布时间的快照。

2、解压裁剪

解压三星光盘中U-Boot-samsung-dev.tar.bz2,由于U-Boot源码中其实有很多东西我们不需要的,可以适当进行裁剪,把我们不要的代码都给删除,其实不删除也没有什么关系的,U-boot在编译时会根据我们的配置要求,一一编译相应内核的代码,其他不相关的代码是不会被编译的。至少我认为是这样,如果大家能把makefile文件看的明明白白的话,就一定能很清楚的知道针对自己的板子,那些代码是有用的,那些代码是不会被编译进自己的内核的。我也只是简单的看了一下makefile文件,很多地方也不明白,这里不对makefile进行分析了。

我们把不相关的代码裁剪了,有什么的具体的好处呢,我想可能无非就是不碍眼,改起来代码少,拷贝方便等等,废话就此为止,建议删除前先留下个备份,下面删除过程仅供参考,我没有完全按此进行,我只做了第1步、第6步和第7步和第8步。

1、删除:/arch/目录下,与arm无关的代码文件夹,其他文件夹都是与其他内核相关,所以可以删除。

2、进入/arch/arm/目录下,可以删除dts和imx-common两个目录。

3、进入/arch/arm/cpu目录下,可以删除与armv7无关的其他arm内核版本的文件夹,如有其他非文件夹文件留下不要删除。为什么只留下armv7呢,Exynos4412是armv7版本核。

4、进入/arch/arm/cpu/armv7/目录下,留下exynos和s5p-common文件夹和该目录下的文件,其他文件夹可以删除,他们分别是其他厂商生厂的armv7版本的内核。

其实这一步我不是很清楚s5p-common有没有用,不过为了不除错,还是先留着吧。

5、进入/arch/arm/include/asm目录下,留下arch-armv7、arch-exynos和proc-armv文件夹和此文件夹下的文件,其它文件夹可以删除。

6、进入/board/目录下,删除samsung以外的所有目录,因为我们移植的板子是三星的,所以其他的全部可以删除。

7、进入/board/Samsung/目录下,留下smdk4212目录文件,其他的全部可以删除,我们将与这个目录下的文件来进行移植,针对Tiny4412的电路板,我复制了/board/samsung/smdk4212的代码进行移植,为什么用smdk4212文件夹呢,我们知道SMDK4212,SMDK4412是三星自家的评估板,这两个板子都是用这个文件夹下的代码,其评估板所用的CPU也是Exynox4412,这一点可以从UBOOT根目录下的boards.cfg文件可以确定,打开看看下面的截图,可见,用smdk4212这个文件夹进行移植,会相对简单一些。一会大家可以复制一份进行修改移植,也可以直接在此文件上进行修改移植,建议重新复制一份。

如果大家是从uboot官网下载的代码,那么建议留下smdkv310和common。其他的可以删除,我用的是三星公司的一个版的uboot内部文件夹可能不太一样,大家根据自己手上的uboot版本进行修改吧,建议从uboot的官网上下载最新的uboot进行学习移植。

8、进入到/include/configs/目录下后,留下smdk4212.h和smdk4412.h即可,如果是从uboot官网下载,留下smdkv310.h。

3、创建平台

1、进入/board/Samsung/目录下,复制smdk4212为zthtiny4412。进入zthtiny4412进行如下文件名字修改:

clock_init_smdk4212.S  ―――》  clock_init_zthtiny4412.S

mem_init_smdk4212.S  ―――》  mem_init_zthtiny4412.S

smdk4212.c  ―――》  zthtiny4412.c

smdk4212_val.h  ―――》  zthtiny4212_val.h

smdk4412_val.h  ―――》  zthtiny4412_val.h

2、修改clock_init_zthtiny4412.S

定位到16行,修改为:

#ifdef CONFIG_EXYNOS4412

#include"zthtiny4412_val.h"

#else

#include"zthtiny4212_val.h"

#endif

3、修改lowlevel_init.S

定位到17行,修改为:

#include<asm/arch/s5p_nand.h>

#ifdefCONFIG_EXYNOS4412

#include "zthtiny4412_val.h"

#else

#include "zthtiny4212_val.h"

#endif

4、修改zthtiny4212_val.h

定位到13行,修改为:

#ifndef_VAL_ZTHTINY4212_H

#define_VAL_ZTHTINY4212_H

5、修改zthtiny4412_val.h

定位到13行,修改为:

#ifndef_VAL_ZTHTINY4412_H

#define_VAL_ZTHTINY4412_H

6、修改makefile

定位到33到38行,修改为:

COBJS-y   := zthtiny4412.o

COBJS-y   += pmic.o

COBJS-y   += smc.o

SOBJS       := lowlevel_init.o

SOBJS       += mem_init_zthtiny4412.o

SOBJS       += clock_init_zthtiny4412.o

7修改u-boot.lds

定位到40行,修改为:

board/samsung/zthtiny4412/libzthtiny4412.o(.text)

8、复制include/configs/smdk4412.h为zthtiny4412.h

9、修改主目录下的makefile

定位到24行,修改为:

VERSION = 2014

PATCHLEVEL = 01

10、修改根目录下的/boards.cfg的文件,既然是针对自己的板子进行修改,此文件中的其他设置可以不用了,增加自己板子的设置后,删除其他设置。这里我保留了三行,如下图1-2所示。


图1-2 boards.cfg示意图

简要的载剪工作到此为此,下一章说明启动过程。

10、编译

这一步主要是查看我们平台搭建成了没有:进入linux进行编译:

可能用到的命令并列如下以供参考

cp -R /media/sf_sharelinux/test/zhang_new_uboot/u-boot_zth/.

chmod -R 777 /u-boot_zth /

cd /u-boot_zth /

make zthtiny4412_config

make

结果如下图1-3所示,由下图结果所示,已看到了其产生了u-boot.bin文件了,后面的错误是由于目录下的mkbl2执行来产生BL2文件的错误,此错误我们搭建移植平台无关,可以打开主目录下的makefile,定位到350行左右注释了以下代码:

#ifeq ($(CONFIG_S5PC210),y)

#            ./mkbl2u-boot.bin bl2.bin 14336

#endif

 

#ifeq ($(CONFIG_CPU_EXYNOS5250),y)

#            ./mkbl2u-boot.bin bl2.bin 14336

#endif

也可以去include/configs/zthtiny4412.h文件下,把CONFIG_S5PC210和CONFIG_CPU_EXYNOS525给注释了。

下一节,开始分析启动过程。


图1-3 编译结果程序图

tiny4412移植U-Boot 2020.07 基于友善之臂设计的Tiny4412开发板,移植目前最新的U-boot 2020.07版本,实现可以从SD卡启动,从eMMC启动,支持1GB DDR3,支持串口(波特率921600bps) 阅读详情

相关推荐

第三十三天:Tiny4412驱动开发之LED驱动和u-boot移植

从今天开始进入驱动开发的课程的学习,共完成三件事情。一:u-boot的简单移植,二:uboot中编写helloword程序 三:开发板中led灯的驱动编写,包括led点亮,闪烁,跑马,流水。   一:u-boot的简单移植   1.进入开发板提供的源码文件包,解压uboot源码包。   cd /home/bunfly/source_code/       tar xf uboot_tiny

snailr 2492

移植Uboot2017到TINY4412<2>

梦想还是要有的,万一实现了移植相关 硬件: -核心板:Tiny4412 - 1412 -底板: Tiny4412/Super4412SDK 1506 软件: -移植uboot版本: u-boot-2017.05.tar.bz2 -工具链:arm-Linux-gcc 4.5.1 工具链就不介绍如何安装了。 接着上一节内容,前一节中已经实现了调试LED的点亮,接下来对开发板做一些

Deadline_h的博客 2160

移植Uboot2017到TINY4412<1>

移植uboot201705到tiny4412开发板,启用SPL。

Deadline_h的博客 2590

第二章、Tiny4412 U-BOOT移植二 启动分析

一、启动过程说明        讲解启动过程,首先的源头就是打开电源,这个相信没人人不知道。CPU上电后,此时SP指针指向0x0000_0000,从这个地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低(Exynos4412芯片边上有一颗24MHz,一颗27MHz,一颗32.768KHz);CPU的工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没

eshing的专栏 6908

为Exynos4412移植U-Boot-2017.11的步骤(一)——让U-Boot跑起来

为Exynos4412移植U-Boot-2017.11的步骤 通过修改源代码中的origen部分,成功让U-Boot-2017.11在Exynos4412上跑起来。

weixin_42408707的博客 2765

基于Tiny4412开发板的U-Boot移植与实战详解

U-Boot(Universal Boot Loader)是嵌入式系统中应用最广泛的开源引导程序,遵循GPL协议,支持ARM、PowerPC、MIPS、x86等多种处理器架构。其核心作用是在系统上电后初始化关键硬件,并加载操作系统内核(如Linux),完成从裸机环境到高级操作系统的过渡。在实际开发中,经常需要为U-Boot添加私有功能,比如点亮LED、注册新命令或启用专有通信协议。此时需手动定义新的CONFIG_*宏。

weixin_36464343的博客 969

第一章、Tiny4412 U-BOOT移植一 说明【转】

本文转载自:http://blog.youkuaiyun.com/eshing/article/details/37520291 一、移植前说明: 1、 特别声明:此文档是我的学习文档,里面肯定有错误地方,仅供参考! 2、移植平台:友善之臂Tiny4412SDK1306平台。 3、移植系统:Ubuntu12.04 4、移植原始CODE:平台光盘中由Samsung提供的U-Boot-samsung-dev....

zzb2760715357的博客 101

uboot_tiny4412_0726.tar.gz

友善之臂tiny4412(1G+4G)标准版,生产日期为2015.7.26的板子对应的uboot代码!

将u-boot-2016.11移植到TINY4412

个人笔记:将u-boot-2016.11移植到TINY4412

xiaojimmychen的专栏 5815

PMIC可配置高精度电源

FPGA CPU PHY 等高精度,低纹波电源 6种时序配置,电压可调输出,范围0.8-5v

Word公式一键转MathType保姆级教程(附omml2mml.xsl报错终极解决方案)

本文提供Word公式一键转MathType的保姆级教程,重点解决常见的omml2mml.xsl报错问题。通过详细分析报错原因、官方解决方案实操步骤及转换后格式优化技巧,帮助用户高效完成公式转换,适用于科研论文和商业文档编辑。

weixin_30082367的博客 555

tiny4412移植u-boot-2019.01(一)

本文主要参考彭东林大神的博客:https://www.cnblogs.com/pengdonglin137/p/5080309.html 最近打算将最新的u-boot-2019.01移植到tiny4412开发板上。 要移植u-boot到tiny4412上,首先就要对着块板子的启动方式、地址空间分配有清楚的认识。看芯片手册Exynos 4412 SCP_Users Manual_Ver.0.10...

u012830148的博客 2060

海康威视VS互联网大厂:薪资、福利、工作强度全方位对比

本文全面对比了海康威视与互联网大厂在薪资、福利和工作强度等方面的差异。海康威视提供稳定的薪资结构和较低的工作强度,适合追求专业深度的职场人;而互联网大厂则以高薪和快速成长吸引人才,但工作压力较大。文章还分析了职业发展路径和长期价值,帮助求职者做出明智选择。

weixin_29171129的博客 390

[TINY4412移植篇]u-boot-2020.01

一)环境 a)ubuntu18.04 b)arm-linux-gnueabi-gcc 7.5.0 / gcc 7.5.0 b)FriendlyArm tiny4412 标准版 二)目标 a)从SD卡启动linux-5.5 二)步骤 a)Makefile: 1)add "ARCH = arm"; 2)add "CROSS_COMPILE = arm-linux-gnueabi-"; 3...

bouyeizhang的专栏 1462

博图HMI多语言文本列表一键生成攻略:从Excel模板到TIA Portal的完整流程

本文详细介绍了如何利用Excel模板和TIA Portal API实现博图HMI多语言文本列表的一键生成。通过标准化Excel模板设计、解析TIA Portal的XML结构,并结合C#代码实现自动化导入,大幅提升多语言项目的开发效率。特别适用于需要支持多语言版本的自动化设备HMI界面开发。

weixin_26934905的博客 218

tiktok算法协议研究

经过上述分析,可以确定目标字符串来源于一段 JSON 数据,而这段 JSON 数据来自于一个经过加密的本地文件。对字符串 "sdi_v2" 进行 SHA-1 计算,得到 20 字节的结果;将第一步得到的数据进行MD5计算,生成16字节的结果;将第二步的结果转换为十六进制字符串,从而得到 32 字节的密钥。写这种算法分析的帖子真的是太无聊了,就先分析到这里吧,后续有机会再来谈下被加密的本地文件是怎么来的!!自我感觉TT的算法并不难,就是量太大了,所以我想问问有没有感兴趣的朋友来一起分析,欢迎联系。

2503_90751938的博客 2581

tiny4412 uboot 2018移植(三)移植

简介

我将带头加班的博客 3001

Simulink仿真状态空间中状态变量时域响应

起因 今天老师留了一道关于状态空间变量响应的题,于是想用simulink仿真,一开始使用state-space模块,但是发现它只能输出y,没办法显示状态变量的变化情况。然而状态变量之间的关系都可以表示为一阶微分方程组,因此我们考虑在Simulink中搭建微分方程组来求解这个问题。 微分方程组 x1˙=x2x2˙=−4x1−5x2+1(1)\dot{x_1}=x_2\\ \dot{x_2}=-4x_...

ZYunfei的博客 7452

Tiny4412-uBoot移植

一款十年前的开发板,移植uboot

qq_52360914的博客 1523

ElectrolyteGPT:首个电池电解液逆向设计的生成式 AI 系统 —— 算法原理与复现解析

数据驱动的重要性:1100 万→100 万的精心筛选,比单纯增大模型更有效领域适配:fLine 表示法、正则分词、化学感知的数据增强(SMILES randomization)都是关键小模型的力量:6M 参数在特定化学空间的表现,远超通用大模型在相同任务上的零样本能力条件生成的极限:10 维条件导致模型崩溃,提示我们需要更好的条件编码策略(如 diffusion guidance、RLHF-style 偏好优化)未来方向配方实验验证。

ASKCOS博客 123

YOLOv8与UNetV2融合:一种面向目标检测与图像分割的混合方法【附核心代码】

我们提出了一种基于YOLOv8和UNetV2相结合的混合架构。该架构利用YOLOv8作为主干进行目标检测,同时在YOLOv8的特征提取过程中,引入UNetV2来进行图像分割任务的增强。在该架构中,YOLOv8负责大范围目标检测和位置预测,而UNetV2则在检测网络的特征图基础上,通过其高效的上下文信息提取和细节恢复能力,进一步优化分割任务。在本文中,我们提出了一种改进YOLOv8的方法,通过引入图像分割网络UNetV2来提高图像分割检测性能。

一键难忘的博客 3525
上一篇: tiny4412 裸机程序 九、串口排查驱动原因及字符图片显示
下一篇: 第二章、Tiny4412 U-BOOT移植二 启动分析
eshing
博客等级 码龄18年 146粉丝 21原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值