1

我最近使用github上的robotest文件在我的DISCO板(stm32f429-disco)上移植了uboot和uclinux。现在我正在尝试将它们移植到我的自定义板上,它使用:

  • UART6 代替 UART3
  • 一个 12 MHz 振荡器,而不是 DISCO 中使用的 8 MHz
  • 一个 128 Mb SDRAM,而不是 DISCO 中使用的那个
  • 使用 SDRAM bank 1 而不是 bank2(起始地址是 0xC0000000 而不是 0xD0000000)。

所以我对uboot树做了一些改变:

  • u-boot-master\board\stm\stm32429-disco\board.c
  • u-boot-master\cpu\arm_cortexm3\stm32\clock.c
  • u-boot-master\cpu\arm_cortexm3\stm32\fmc.c
  • u-boot-master\include\asm-arm\arch-stm32\fmc.h
  • u-boot-master\include\configs\stm32429-disco.h

我还对 ucliux 树进行了一些更改:

  • uclinux-master\config.rubotest
  • uclinux-master\arch\arm\mach-stm32

当我制作图像并将它们加载到我的板上时,我得到了以下结果:

     U-Boot 2010.03 (Jun 09 2017 - 06:48:57)

CPU  : STM32F4 (Cortex-M4)
Freqs: SYSCLK=180MHz,HCLK=180MHz,PCLK1=45MHz,PCLK2=90MHz
Board: STM32F429II-SADR board,Rev 1.0
DRAM:   8 MB
Using default environment

Hit any key to stop autoboot:  0
## Booting kernel from Legacy Image at 08020000 ...
   Image Name:   Linux-2.6.33-arm1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    889248 Bytes = 868.4 kB
   Load Address: 08020040
   Entry Point:  08020041
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...    

内核卡在这里,然后什么也没有发生。我想知道问题是否与uboot或内核有关,它是什么!!!伙计们,我在这个项目上工作已经一个多月了,我真的筋疲力尽。任何帮助将不胜感激。此致。

我将加载地址和输入点更改为 0x08008000 和 0x08008001,结果如下:

    `U-Boot 2010.03 (Jun 09 2017 - 06:48:57)

CPU  : STM32F4 (Cortex-M4)
Freqs: SYSCLK=180MHz,HCLK=180MHz,PCLK1=45MHz,PCLK2=90MHz
Board: STM32F429II-SADR board,Rev 1.0
DRAM:   8 MB
Using default environment

Hit any key to stop autoboot:  0
## Booting kernel from Legacy Image at 08020000 ...
   Image Name:   Linux-2.6.33-arm1
   Image Type:   ARM Linux Kernel Image (uncompressed)
   Data Size:    889312 Bytes = 868.5 kB
   Load Address: 08008000
   Entry Point:  08008001
   Verifying Checksum ... OK
   Loading Kernel Image ... OK
OK

Starting kernel ...

UNHANDLED EXCEPTION: HARD FAULT
  R0    = 00000000  R1  = 0002ec05
  R2    = 0002ec04  R3  = 1ffec3bd
  R12   = 00000030  LR  = 0800c67b
  PC    = 08008074  PSR = 21000000`

这是printenv的结果:

    STM32429-DISCO> printenv
bootcmd=run flashboot
bootdelay=0
baudrate=115200
hostname=stm32429-disco
loadaddr=0xC0000000
addip=setenv bootargs ${bootargs}
flashaddr=08020000
flashboot=run addip;bootm ${flashaddr}
image=uImage
stdin=serial
stdout=serial
stderr=serial
bootargs=stm32_platform=stm32429-disco mem=7M console=ttyS2,115200n8 
consoleblan
k=0 root=/dev/mtdblock0 rdinit=/sbin/init 
video=vfb:enable,fbmem:0x90700000,fbsi
ze:0x100000

Environment size: 412/1020 bytes
STM32429-DISCO>

loadaddr 最初0x90000000,黑客使用memrmp寄存器将其重新映射到0xD000000(在 DISCO 板上0xD0000000是 SDRAM bank 的开始)。我在 fmc.c 中评论了 memrmp 行,并且不再有任何重新映射。我还在include/config/stm32f429 文件中将#define CONFIG_SYS_RAM_BASE0x90000000 更改0xC0000000 。我也在 fmc.h 文件中将SDRAM 组地址从0xD0000000更改为0xC0000000 。

4

0 回答 0