u-boot移植(三)让u-boot在开发板上跑起来

来源:互联网 发布:迅雷赚钱宝软件 编辑:程序博客网 时间:2024/06/05 21:03
 

1、   分析u-boot的u-boot.lds可知u-boot先从start.O开使链接

a)         进入cpu/arm920t/start.S

修改1:添加时钟寄存器在146行 

146 #  define MPLLCON       0x4c000004

147 #  define UPLLCON       0x4c000008

修改2:

160 # if defined(CONFIG_S3C2410)

161         ldr     r1, =0x3ff

162         ldr     r0, =INTSUBMSK

163         str     r1, [r0]

注:如下表所示,复位时寄存器已设置为0Xffff屏蔽了所有中断源,此段程序只图个心安,可以不要,可以删除本段,也可以改0x3ff为0x7ff

                   修改3:修改168时钟分频比,设置主时钟和USB时钟MPLLCON,UPLLCON寄存器

                                     168         ldr     r0, =CLKDIVN

169         mov     r1, #5

170         str     r1, [r0]

171

172         mrc     p15,0,r1,c1,c0,0

173         orr     r1,r1,#0xc0000000

174         mcr     p15,0,r1,c1,c0,0

175

176         ldr     r0, =MPLLCON

177         mov     r1,#0x7f<<12

178         add     r1,r1,#0x21

179         str     r1,[r0]

180

181         ldr     r0, =MPLLCON

182         mov     r1,#0x38<<12

183         add     r1,r1,#0x22

184         str     r1,[r0]

185        

186 #endif  /* CONFIG_S3C2400 || CONFIG_S3C2410 */

b)         cpu/arm920t/s3c24x0/speed.c

修改1:如果是MPLL,返回值应该乘以2,在69行添加,

69     if (pllreg == MPLL)

70     return 2 * m * (CONFIG_SYS_CLK_FREQ / (p << s));

         修改2:根据CLKDIVN和CAMDIVN寄存器只设置的不同,FCLK,HCLK,PCLK值也不一样,添加如下修改

85 switch ((clk_power->CLKDIVN) & 0x6)

86  {

87         default:

88         case 0:

89                 return get_FCLK();

90         case 2:

        91                 return get_FCLK() / 2;

92         case 4:

93                 return ((clk_power->CAMDIVN) & (1 << 9)) ?

        94                         get_FCLK() / 8 : get_FCLK() / 4;

95         case 6:

96                 return ((clk_power->CAMDIVN) & (1 << 8)) ?

        97                         get_FCLK() / 6 : get_FCLK() / 3;

第100行可以删掉,在/include/s3c24x0.h文件中结构体S3C24X0_CLOCK_POWER添加

129     S3C24X0_REG32   CAMDIVN;

c)          board/samsung/mini2440/mini2440.c

修改1:修改40行和,MPLL值

40              #define M_MDIV                          0x7f

41               #define M_PDIV                            0x2

        42              #define M_SDIV                            0x1

修改2:修改52行,UPLL值

52               #define U_M_MDIV                 0x38

53               #define U_M_PDIV                 0x2

        54              #define U_M_SDIV                 0x2

修改3:第106行,修改如下,此值对应mini2440开发板在linux系统中的机器码,

是uboot向操作系统传递系统参数之一

106          gd->bd->bi_arch_number = MACH_TYPE_MINI2440;

 

d)         cpu/arm920t/s3c24x0/interrupt.c不用修改

e)         cpu/arm920t/s3c24x0/timer.c不用修改

f)          drivers/rtc/ s3c24x0_rtc.c不用修改

g)         drvers/serier/serier_s3c24x0.c不用修改

h)         include/asm/mach-types

i)           在include/configs/目录下建立mini2440.h配置文件

cd  include/configs/

cp     smdk2410.h  mini2440.h

修改1:第37行,暂时先不改S3C2410,这样可以使用很多默认值,加快移植

速度

37 #define CONFIG_S3C2410      1       /* in a SAMSUNG S3C2410 SoC     */

38 #define CONFIG_SMDK2410     1      /* on a SAMSUNG SMDK2410 Board  */

39#define CONFIG_SKIP_LOWLEVEL_INIT   /*在内存中运行必须的,如果要烧在flash中则不要*/

修改2:

115 #define CONFIG_SYS_PROMPT  "MINI2440 # "  /* Monitor Command Prompt*/

编译出错:        arm-linux-gcc: zlib.o: ?????????

arm-linux-gcc: unrecognized option `-MQ'

执行arm-linux-gcc –v

显示是交叉工具链是2.95.3版本,此版本早不能用来支持编译u-boot以前编译vivi是设置,忘了改过来了。改成4.3.2编译生成u-boot.bin下载到板子内存中运行

移植第二步基本完成。

原创粉丝点击