在stm32f429自定义板上无法启动内核(uclinux)

在stm32f429自定义板上无法启动内核(uclinux),stm32,uart,u-boot,stm32f4discovery,uclinux,Stm32,Uart,U Boot,Stm32f4discovery,Uclinux,最近,我使用github上的robotest文件在我的迪斯科板(stm32f429迪斯科)上移植了uboot和uclinux。现在,我正在尝试将它们移植到我的自定义板上,该板使用: UART6而不是UART3 一种12兆赫的振荡器,而不是迪斯科舞厅使用的8兆赫振荡器 取代迪斯科舞厅中使用的128 Mb SDRAM 使用SDRAM第1列而不是第2列(起始地址为0xC0000000而不是0xD0000000) 所以我对uboot树做了一些更改: u-boot-master\board\stm\

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

  • UART6而不是UART3
  • 一种12兆赫的振荡器,而不是迪斯科舞厅使用的8兆赫振荡器
  • 取代迪斯科舞厅中使用的128 Mb SDRAM
  • 使用SDRAM第1列而不是第2列(起始地址为0xC0000000而不是0xD0000000)
所以我对uboot树做了一些更改:

  • u-boot-master\board\stm\stm32429 disco\board.c
  • u-boot-master\cpu\arm\u cortexm3\stm32\clock.c
  • u-boot-master\cpu\arm\u 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主机\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还是内核有关,它是什么!!! 伙计们,我做这个项目已经一个多月了,我真的很累。任何帮助都将不胜感激。 致以最良好的祝愿

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

    `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的结果:

loadaddr最初是0x90000000,黑客使用memrmp寄存器将其重新映射到0xD000000(在迪斯科板上0xD0000000是SDRAM库的开始)。我在fmc.c中对memrmp行进行了注释,不再有任何重新映射。我还在include/CONFIG/stm32f429文件中将#define CONFIG_SYS_RAM_BASE从0x90000000更改为0xC0000000。
我也在fmc.h文件中将SDRAM银行地址从0xD0000000更改为0xC0000000。

您如何检查它的堆栈位置?HF,DF还是某种死循环?它显示了错误的内存大小(8而不是12MB)。你的问题如此复杂,恐怕没有办法远程帮助你。您需要设置断点,连接调试器并将其连接到正在运行的目标,或者至少使用某种信号(如LED)来显示一些调试信息。看起来引导加载程序卡住了,可能是您对其进行了编辑并添加了阻止其继续引导过程的行。“开始地址为0xC0000000”--那么mkimage包装器有虚假信息,内核在不存在的内存中,即“加载地址:08020040”。U-Boot环境中有什么(即
printenv
命令)?你在这块板上做过全面的内存测试吗?@GrayCygnus,正如我前面提到的,我对列出的文件做过一些版本,你确定这是因为u-boot吗?如果这是因为uclinux中错误的UART协同配置导致的呢?我不知道如何修复!我的意思是,你对u-boot悬挂有何把握?@sawdust这是图像包装器的内容,它在我的迪斯科板上正常工作:
#/bin/sh rm xipuImage.bin cat tempfile xipImage>xipImage.bin mkimage-x-A arm-O linux-T kernel-C none-A 0x08020040-e 0x08020041-n“linux-2.6.33-arm1”-d xipImage.bin xipuImage.bin rm xipImage.bin
如果没有操作系统,主板工作没有问题!在我的迪斯科板中,我曾经将xipuimage.bin加载到0x08020000,输入点和加载地址如您所见。您如何检查它的堆叠位置?HF,DF还是某种死循环?它显示了错误的内存大小(8而不是12MB)。你的问题如此复杂,恐怕没有办法远程帮助你。您需要设置断点,连接调试器并将其连接到正在运行的目标,或者至少使用某种信号(如LED)来显示一些调试信息。看起来引导加载程序卡住了,可能是您对其进行了编辑并添加了阻止其继续引导过程的行。“开始地址为0xC0000000”--那么mkimage包装器有虚假信息,内核在不存在的内存中,即“加载地址:08020040”。U-Boot环境中有什么(即
printenv
命令)?你在这块板上做过全面的内存测试吗?@GrayCygnus,正如我前面提到的,我对列出的文件做过一些版本,你确定这是因为u-boot吗?如果这是因为uclinux中错误的UART协同配置导致的呢?我不知道如何修复!我的意思是,你对u-boot悬挂有何把握?@sawdust这是图像包装器的内容,它在我的迪斯科板上正常工作:
#/bin/sh rm xipuImage.bin cat tempfile xipImage>xipImage.bin mkimage-x-A arm-O linux-T kernel-C none-A 0x08020040-e 0x08020041-n“linux-2.6.33-arm1”-d xipImage.bin xipuImage.bin rm xipImage.bin
如果没有操作系统,主板工作没有问题!在我的迪斯科板中,我曾将xipuimage.bin加载到0x08020000,输入点和加载地址如您所见。
    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>