mini210s是友善之臂公司推出的基于三星s5pv210的cortex a8 平台的开发板,其实很感谢他们对此作出的努力,才使得向我这样的穷孩子能够早些接触a8(当时买的时候不到600)。但是便宜归便宜,有好多东东想仔细的搞明白,还要狠下功夫呀,毕竟知识也是财富呀! uboot是arm平台经常使用的bootloader,友善之臂并没有给用户提供开放的uboot,而且以二进制的形式发布的他们公司自己的superboot,不过说实在的,确实是很好用。但是作为想从底层做起的我来说,熟悉并掌握uboot是我必需要攻克的呀。 万事开头难,关键是找准方法呀。总的来说自己对自己还是有那么的不自信,想在网络上能够找到前辈们留下的财富呀。功夫不负有心人,我在一个git网站上找到了能够移植到mini210的uboot,opencsbc-u-boot-mini210_linaro-2011.10-stable.tar.gz。具体的下载网站我忘记了。 不过大家要注意了,这是移植到mini210的uboot,而不是mini210s上的,起初我编译下载到我的板子上,一直只显示ok,再没有其他信息输出,其中还有好多地方需要修改,我那个晕呀,没办法,自己只能搞个led灯指示程序错误可能出现的地方,结果定位到bl1过程中copy bl2的过程有误,是由于这个版本的uboot中对sdram的配置有误造成的。 这是头文件mini210.h中sdram参数配置的部分,需要将DMC0_MEMCONTROL、DMC0_MEMCONFIG_0、DMC0_MEMCONFIG_1的值进行相应的调整。 #if defined(CONFIG_MCP_SINGLE) #define DMC0_MEMCONTROL 0x00202400 // MemControl BL=4, 1Chip, DDR2 Type, dynamic self refresh, force precharge, dynamic power down off #define DMC0_MEMCONFIG_0 0x20E00323 // MemConfig0 512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed #define DMC0_MEMCONFIG_1 0x00E00323 // MemConfig1 #if 0 #define DMC0_TIMINGA_REF 0x00000618 // TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E) #define DMC0_TIMING_ROW 0x28233287 // TimingRow for @200MHz #define DMC0_TIMING_DATA 0x23240304 // TimingData CL=3 #define DMC0_TIMING_PWR 0x09C80232 // TimingPower #else #define DMC0_TIMINGA_REF 0x00000618 // TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E) #define DMC0_TIMING_ROW 0x2B34438A // TimingRow for @200MHz #define DMC0_TIMING_DATA 0x24240000 // TimingData CL=3 #define DMC0_TIMING_PWR 0x0BDC0343 // TimingPower #endif #define DMC1_MEMCONTROL 0x00202400 // MemControl BL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down off #define DMC1_MEMCONFIG_0 0x40E00323 // MemConfig0 512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed #define DMC1_MEMCONFIG_1 0x00F00323 // MemConfig1 #if 0 #define DMC1_TIMINGA_REF 0x00000618 // TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4 #define DMC1_TIMING_ROW 0x28233289 // TimingRow for @200MHz #define DMC1_TIMING_DATA 0x23240304 // TimingData CL=3 #define DMC1_TIMING_PWR 0x08280232 // TimingPower #else #define DMC1_TIMINGA_REF 0x00000618 // TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E) #define DMC1_TIMING_ROW 0x2B34438A // TimingRow for @200MHz #define DMC1_TIMING_DATA 0x24240000 // TimingData CL=3 #define DMC1_TIMING_PWR 0x0BDC0343 // TimingPower #endif #if defined(CONFIG_CLK_800_100_166_133) || defined(CONFIG_CLK_400_100_166_133) #define DMC0_MEMCONFIG_0 0x20E01323 // MemConfig0 256MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed #define DMC0_MEMCONFIG_1 0x40F01323 // MemConfig1 #define DMC0_TIMINGA_REF 0x0000030C // TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4E) #define DMC0_TIMING_ROW 0x28233287 // TimingRow for @200MHz #define DMC0_TIMING_DATA 0x23240304 // TimingData CL=3 #define DMC0_TIMING_PWR 0x09C80232 // TimingPower #define DMC1_MEMCONTROL 0x00202400 // MemControl BL=4, 2 chip, DDR2 type, dynamic self refresh, force precharge, dynamic power down off #define DMC1_MEMCONFIG_0 0x40C01323 // MemConfig0 512MB config, 8 banks,Mapping Method[12:15]0:linear, 1:linterleaved, 2:Mixed #define DMC1_MEMCONFIG_1 0x00E01323 // MemConfig1 #define DMC1_TIMINGA_REF 0x0000030C // TimingAref 7.8us*133MHz=1038(0x40E), 100MHz=780(0x30C), 20MHz=156(0x9C), 10MHz=78(0x4 #define DMC1_TIMING_ROW 0x28233289 // TimingRow for @200MHz #define DMC1_TIMING_DATA 0x23240304 // TimingData CL=3 #define DMC1_TIMING_PWR 0x08280232 // TimingPower #endif #else #error "You should define memory type (AC type or H type)" #endif 还有需要更改的地方就是 /* MINI210 has 4 bank of DRAM */ 这是最终uboot运行起来的截图,其uboot具体的原理就不说了,网上资料很多的我把自己最新准备的资料都上传上去,供大家参考。 http://dl.vmall.com/c0s5b6a37t http://dl.vmall.com/c06y9nugh5 http://dl.vmall.com/c0acbe6syo |
|
来自: ProgramBird > 《Android》