Застрял в стартовом ядре (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.