蜗窝讨论区

慢下来,享受技术

您尚未登录。

#1 2016-08-06 15:19:29

ooonebook
会员
注册时间: 2016-04-29
帖子: 36

[tiny210 uboot移植]移植进度

本次移植基于project-x使用的uboot来进行移植。


感谢wowo以及各位大神的指导。
发这个移植进度是觉得希望能有更多有tiny210的板子的同学能一起参与进来,一个人搞的进度确实巨慢。
一起努力让tiny210的移植代码也合入到project-x的主分支中。

有tiny210板子的同学,我们一起搞起来吧。

网上已经有很多tiny210移植uboot的资料了。
关于kangear已经完成tiny210的uboot的移植,可以参考http://arm9home.net/read.php?tid-80476.html


我的移植进度。

7月23日以前。
前期做一些准备工作,包括搭ubuntu环境,弄板子,下project-x的代码,找一些相关资料。git库操作的学习。
尝试在ubuntu环境下编译过project-x的代码。
第一次添加tiny210 board支持失败,在wowo的指导下发现关于tiny210的一些CPU配置搞错了,应该是armv7并且可以使用machine s5pv1xx.
进展:环境和代码都已经搞定,板子也已经到位。
后续任务:继续尝试添加tiny210 board并且编译成功。(7.23-7.27完成)


7.23-7.27——需要整理文档
第二次添加tiny210 board支持,使用arm-linux-gcc4.5编译器,逐步解决编译问题(有一部分修改内容是参考kangear的代码)。
上传到自己的git hub分支上。
注意:目前的修改有一些纯粹就是为了解决编译错误,不管代码的内容,后续移植过程中需要对这些内容进行fix。
进展:初步添加到tiny210 board支持到project-x的项目上,并且编译成功。创建了一个tiny210的分支专门用于维护tiny210的代码。
后续任务:
    1、测试板子,安装好各种驱动,用kangear的uboot测试能否正常启动。熟悉一下sdcard启动uboot的步骤。(7.30完成)
    2、搞清楚s5pv210的启动流程,BL0-BL1(uboot-spl)-BL2(uboot)。(7.29完成)
    3、uboot-spl的流程,需要结合代码


7.29——需要整理文档
根据文档和资料搞清楚了s5pv210的启动流程,简单结合文档看了一下arrmv7的uboot-spl的流程。
http://blog.csdn.net/linuxarmsummary/ar … s/44836293
http://www.cnblogs.com/zhangpengshou/p/3617800.html
注意:上述网站代码和project-x中armv7的代码有差异,需要结合代码自己整理一遍流程,思考一下uboot-spl“点LED灯”的代码应该加在什么位置。
进展:大致整明白了armv7-uboot-spl的流程。(armv7的uboot-spl使用位置无关代码的方式)
后续任务:
    1、结合project-x的代码来分析uboot-spl的流程。
    2、让自己编译的uboot-spl也可以正常在tiny210中跑起来,通过点亮LED来观察是否跑起来了。(7.30完成)


7.30
测试tiny210板子,安装好各种驱动,编译了kangear的uboot,在tiny210的板子上测试kangear的uboot正常启动。
熟悉一下sdcard启动uboot的步骤。
进展:
    1、kangear的uboot可以正常在tiny210中启动,后续在在tiny210上移植uboot,可以参考kangear的uboot来进行。
    2、成功的让project-x项目的uboot-spl在tiny210中跑起来了,很残暴的在_main中直接去点亮LED测试了一下。
后续任务:
    1、在正常的board.c中去点亮LED。(8.3完成)
    2、实现串口输出log。(放在uboot的时候去实现)


7.31
因为该版本uboot上已经添加了s5pv210的gpio的一些配置的API,在s5p_gpio.c。
但是要编译通过这个函数需要使能FIT的部分,也就是要打开device_tree的功能。
所以就先简单移植tiny210的device tree.
进展:
    1、移植device tree成功。


8.3
uboot-spl太小,无法编译进s5pc110原来的gpio.o。所以无法使用标准的gpio_cfg_pin来点亮LED。只能直接操作GPIO的寄存器来实现。
进展:在board.c中点亮LED。完善通过LED实现的tiny210_early_debug操作。
后续:
    因为在spl中实现串口输出意义不大。先移植DRAM的代码。
    1、研究kangear中DRAM的初始化和BL2的img的copy过程。
    2、实现DRAM的初始化
    3、实现BL2的img的copy过程
几个重点关注问题
(0)可以先尝试把kangear关于ddr的部分先移植过去再说。(8.6完成)
(1)BL1中DRAM初始化的过程
    _start——》reset——》cpu_init_crit——》lowlevel_init——》实现一些底层的初始化,包括DDR的初始化。(8.4完成)
(2)BL1中copy BL2到DRAM的流程
(3)如何验证是否初始化成功?是否copy成功?
    初始化完DDR之后尝试往DDR写入一个值,然后再读出来,如果读出来的值和写入的值一样,就说明初始化成功。(8.6完成)


8.6
直接移植kangear的ddr初始化代码成功。
进展:移植kangear的ddr代码到project-x项目中,使用直接写一个DDR地址之后再从这个地址里面读出来,发现值是对的。所以DDR的初始化应该是成功的。


8.7-8.10——需要整理文档(已整理)
进展:研究了s5pv210的DDR硬件结构,地址映射方法,初始化流程以及一些参数的设置
        根据原理图、datasheet和代码整理了文档《tiny210 ddr文档》。


8.11——需要整理文档(已整理)
进展:参考kangear的代码实现了BL1中copy BL2到DRAM的流程。
        并且用kangear可以正常使用的uboot测试了一下。
        弄清楚了整个copy的流程和原理。并整理了文档《从SDCARD加载到dram中》。
后续:
    1、研究uboot的编译过程和运行过程(可以从Makefile入手)(8.12完成)。
    2、使用自己编译通过的uboot,可以成功在DRAM上面跑起来(8.11完成)。
        通过在_start点亮三个灯并用b xys_loop死循环之后,可以判断uboot.bin已经开始执行了。


8.12——需要整理文档
进展:1、大致搞清楚了uboot的启动和uboot-spl的启动的差异。
                弄明白了global data的原理、地址和使用等等。
                uboot和uboot-spl的堆栈的设置。
          2、定位到serial_init导致程序uboot不断重启,屏蔽掉之后就没事了
疑问:uboot-spl中把sp设置错了(也就是堆栈设置错了),但是C函数还是可以正常调用。
    原因:因为编译器对于C函数的汇编进行了优化,没有使用push和pop指令,所以不需要使用到堆栈。
后续:1、解决掉serial_init导致重启的问题(8.15完成)
            2、使串口正常使用(8.15完成)


8.15
进展:1、解决开机过程中不断重启问题。
            两个原因导致,1、dts节点中serial的配置问题 2、CONFIG_OF_TRANSLATE使能之后导致的DTS解析错误的问题。
        2、串口已经可以正常打印log了。
后续:1、研究一下s5pv210的串口驱动代码。
        2、继续完善一些初始化的东西,包括dram_init等等(08.18完成)
        3、启动到命令行的位置(08.18完成)


8.18——需要整理文档
进展:1、学习了下relocation过程uboot大小的计算(bss_end-_start)
                学习了下relocation的过程
        2、使能DEBUG来打印debug()函数的log
        3、对dram_init的补充
        4、屏蔽掉一些函数之后uboot正常启动到了命令行模式。
            屏蔽了nand_init(); initr_nand, initr_mmc,initr_env,
后续:1、文档的整理《relocation》、《board_init_f》、《board_init_r》等等
            2、对上述屏蔽掉的函数进行补充和修正(08.20完成)。
         

8.20
进展:1、修正屏蔽了nand_init(); initr_nand, initr_mmc,initr_env的问题
            2、看project-x中移植kernel的方法,学习研究中。
            3、查找了一下后续在tiny210中移植kernel的文档,以便后面学习参考。
后续:1、针对tiny210添加一个配置,使其能够编译通过。


目前任务:针对tiny210添加一个配置,使其能够编译通过。
目前问题:
目前的一些想法:因为uboot做得比较简陋,nand flash还不支持,可以直接在SD卡中刷入kernel。另外,可以直接使用一个没有压缩的kernel,暂时不考虑参数的问题,直接将其拷贝到RAM上,然后直接跳转过去进行点灯。先保证kernel可以正常跑入。



希望有tiny210的板子的同学一起参与进来啊。

最近编辑记录 ooonebook (2016-08-20 15:17:05)

离线

#2 2016-08-06 20:08:46

wowo
管理员
注册时间: 2016-04-18
帖子: 221

Re: [tiny210 uboot移植]移植进度

Good job!!!!
加油!!!
cool

离线

#3 2016-10-16 01:35:19

zmnqaz
会员
注册时间: 2016-10-16
帖子: 7

Re: [tiny210 uboot移植]移植进度

上班的时候看到这个项目,挺有兴趣的。目前手上有2440和tiny4412的板子。

看到任务2是USB下载,本来以为4412是有希望的。查了很多资料,记得两年前这块板子几乎没什么资料的。

一开始看到分支上有s5p210的板瞄了一眼启动机制差不多,看了半天感觉也没有很充足理由实现的依据。

iROM usb将BL1(uboot-spl)关键是BL1不到8K的空间能否解决问题?剩下USB读功能需要BL1完成。

离线

#4 2016-10-16 21:59:33

wowo
管理员
注册时间: 2016-04-18
帖子: 221

Re: [tiny210 uboot移植]移植进度

zmnqaz 说:

上班的时候看到这个项目,挺有兴趣的。目前手上有2440和tiny4412的板子。

看到任务2是USB下载,本来以为4412是有希望的。查了很多资料,记得两年前这块板子几乎没什么资料的。

一开始看到分支上有s5p210的板瞄了一眼启动机制差不多,看了半天感觉也没有很充足理由实现的依据。

iROM usb将BL1(uboot-spl)关键是BL1不到8K的空间能否解决问题?剩下USB读功能需要BL1完成。

ooonebook同学在主题里面给的一个链接,提到了几份资料:
S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf
S5PV210_UM_REV1.1.pdf
再加上三星的DNW工具,完成任务一、任务二,是没有问题的。建议你先用USB download的方式,完成任务一。
至于BL1只有8K,肯定没有问题。其实我们使用的bubblegum平台,如果是NAND或者MMC启动的话,BL只能2K(再减去512的header),这也足够了。
可以通过链接脚本,将u-boot-SPL最重要的一点点代码,放到2K(或者8K内),这点代码起来之后,再去copy后面的代码(其实是同一个BIN文件)。因为很多平台都在ROM中内置了NAND、MMC等驱动,可以直接调用那些代码进行copy,因此2K的空间也是足够了。
如果有一些业余时间,一起做吧,边做边交流。 smile

离线

#5 2016-10-16 23:45:31

zmnqaz
会员
注册时间: 2016-10-16
帖子: 7

Re: [tiny210 uboot移植]移植进度

wowo 说:
zmnqaz 说:

上班的时候看到这个项目,挺有兴趣的。目前手上有2440和tiny4412的板子。

看到任务2是USB下载,本来以为4412是有希望的。查了很多资料,记得两年前这块板子几乎没什么资料的。

一开始看到分支上有s5p210的板瞄了一眼启动机制差不多,看了半天感觉也没有很充足理由实现的依据。

iROM usb将BL1(uboot-spl)关键是BL1不到8K的空间能否解决问题?剩下USB读功能需要BL1完成。

ooonebook同学在主题里面给的一个链接,提到了几份资料:
S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf
S5PV210_UM_REV1.1.pdf
再加上三星的DNW工具,完成任务一、任务二,是没有问题的。建议你先用USB download的方式,完成任务一。
至于BL1只有8K,肯定没有问题。其实我们使用的bubblegum平台,如果是NAND或者MMC启动的话,BL只能2K(再减去512的header),这也足够了。
可以通过链接脚本,将u-boot-SPL最重要的一点点代码,放到2K(或者8K内),这点代码起来之后,再去copy后面的代码(其实是同一个BIN文件)。因为很多平台都在ROM中内置了NAND、MMC等驱动,可以直接调用那些代码进行copy,因此2K的空间也是足够了。
如果有一些业余时间,一起做吧,边做边交流。 smile


试试看吧。

离线

页脚