您尚未登录。

楼主 # 2021-11-27 14:07:24

mengxp
会员
注册时间: 2021-10-07
已发帖子: 67
积分: 151

全志 R328-S3 fes1 DDR初始化代码逆向工程分享

R328-S3 fes1 逆向工程

工程背景
我这个平台上全志的 boot0 启动性能有些低,其中读取 SPI NAND uboot 的代码耗时有0.5秒以上。
我相信这是通病,而 boot0 是闭源的。Tina SDK 中倒是有一些早期架构的 boot0 代码可以参考。
如果想要重写 boot0 ,我评估下来最难的其实是 DDR 的初始化,也就是 fes1 这部分。
fes1 就是设计用来辅助全志量产工具初始化 PLL 和 DDR 的,且大小非常小,只有 16KB。
把他逆向就可以搞定 DDR 的初始化。

工程目的
1.学习全志的相关底层。
2.提高逆向水平,证明自己拥有力量。
3.通过逆向工程,重新编写处该平台的 DDR 初始化 C 代码。
4.为后续重写 boot0 铺路。

工程准备
IDA Pro 7.5
Visual Studio 2012
GNU ARM NONE Toolchain for windows

工程经验
平时要上班,只能挤出业余时间,全部工程历时5天,终于完成,中间有一些弯路,我可以分享下。
例如复原的 C 代码,看起来已经和原始代码高度吻合,但运行是失败的,无法成功初始化 DDR。
调试了一天后我决定,再逆一遍,仔细比对每个语句。中间确实发现了几处错误,并修正了,但仍然无法成功初始化 DDR。
后来我想到一个办法,把 IDAPro Product ASM file 把代码贴到 .s 文件里然后编译。
将有嫌疑的函数替换为原始的 fes 汇编代码,最终终于排查出来问题。具体是什么问题就不分享了,还是不够仔细……

文件列表
fes1.fex 编译后 OUT 目录中的 fes1.fex 会被打包到烧录镜像中
fes1_sun8iw18p1.bin SDK中的原始 fes1 闭源文件
fes1_sun8iw18p1.bin.idb  IDA 工程
fes1re 逆向工程 Visual Studio

另外 uboot 主线中也有一些平台的 PLL、DDR 代码可以参考
我看了不是官方的代码,应该也是国外先辈们逆向后参考 SDK 代码写出来的
全志平台我是新手,欢迎大家一起交流

mengxp works 2021
QQ: 4003032

r328-s3_fes1_reverse_engineer.zip

离线

#1 2021-11-29 11:49:51

shaoxi2010
会员
注册时间: 2019-06-13
已发帖子: 329
积分: 318

Re: 全志 R328-S3 fes1 DDR初始化代码逆向工程分享

谢谢大佬分享,想请教一个问题,auto_set_timing_para这个函数里面的ddr参数时怎么一个个对应起来的呢?
看起来像参照的主线uboot的代码,不知道能不能分享下思路呢?

离线

楼主 #2 2021-11-29 13:09:26

mengxp
会员
注册时间: 2021-10-07
已发帖子: 67
积分: 151

Re: 全志 R328-S3 fes1 DDR初始化代码逆向工程分享

shaoxi2010 说:

谢谢大佬分享,想请教一个问题,auto_set_timing_para这个函数里面的ddr参数时怎么一个个对应起来的呢?
看起来像参照的主线uboot的代码,不知道能不能分享下思路呢?

所有代码都是全志的,我只是做RE工程。
DRAM控制器的寄存器定义是不开放的,usermanual里面都没有,所以很多dram初始化代码只能抄。

你问的那些时序参数都是DDR的标准,可以查询DDR spec手册。每家的dram颗粒时序可能不一样。
他这个代码应该是比较低配的初始化代码,用来适配绝大多数DRAM时序。

一开始我也以为主线uboot代码是全志的,但其实主线uboot代码也是抄的官方代码,或是参考了sdk中开放的早期soc的boot0代码。
全志并不参与维护主线uboot。

离线

#3 2022-11-22 17:54:09

mfkiwl
会员
注册时间: 2019-02-27
已发帖子: 53
积分: 20

Re: 全志 R328-S3 fes1 DDR初始化代码逆向工程分享

不错不错,DDR部分的代码

离线

#4 2022-11-25 13:02:33

icenowy
会员
注册时间: 2021-07-18
已发帖子: 5
积分: 30

Re: 全志 R328-S3 fes1 DDR初始化代码逆向工程分享

@mengxp
主线 u-boot 里的 DDR 代码的确是基于早期放出来的代码改的,但是因为全志新的 DDR 控制器的代码都没开源,现在代码已经改得没什么相关性了(

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn