Застрял в стартовом ядре (uclinux) на пользовательской плате stm32f429

Я недавно перенес uboot и uclinux на свою плату DISCO (stm32f429-disco), используя файлы robotest на github. Теперь я пытаюсь перенести их на свою пользовательскую плату, которая использует:

  • UART6 вместо UART3
  • генератор 12 МГц вместо 8 МГц, используемых в DISCO
  • 128 МБ SDRAM вместо той, которая используется в DISCO
  • использует банк памяти SDRAM 1 вместо банка 2(начальный адрес 0xC0000000 вместо 0xD0000000).

Поэтому я сделал некоторые изменения в дереве загрузок:

  • U-Boot-мастер \ совет \ STM \stm32429-диско \ board.c
  • U-Boot-мастер \ процессор \arm_cortexm3\ STM32\clock.c
  • U-Boot-мастер \ процессор \arm_cortexm3\ STM32\fmc.c
  • U-Boot-мастер \ включить \ ASM-рука \ арка-STM32\fmc.h
  • U-Boot-мастер \ Include \ конфиги \stm32429-disco.h

А также я сделал некоторые изменения в дереве ucliux:

  • uclinux-мастер \ config.rubotest
  • uclinux-мастер \ арка \ рука \ маш-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). Я прокомментировал строку memrmp в fmc.c, и переопределения больше не было. Я также изменил #define CONFIG_SYS_RAM_BASE с 0x90000000 до 0xC0000000 в файле include/config/stm32f429. Я изменил адрес банка SDRAM с 0xD0000000 на 0xC0000000 в файле fmc.h.

0 ответов

Другие вопросы по тегам