портирую линукс на arm926 платформу (есть MMU). U-boot уже перенес - железо инициализируется, далее управление передается ядру (находится тут же на NOR флеше), и тут все и заканчивается:
Код
... здесь сообщения от Юбута
=> bootm
* kernel: default image load address = 0x2c040000
## Booting kernel from Legacy Image at 2c040000 ...
Image Name: Linux-2.6.28-rc8
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 889640 Bytes = 868.8 kB
Load Address: 10008000
Entry Point: 10008000
kernel data at 0x2c040040, len = 0x000d9328 (889640)
Loading Kernel Image ... OK
OK
kernel loaded at 0x10008000, end = 0x100e1328
## No init Ramdisk
ramdisk start = 0x00000000, ramdisk end = 0x00000000
## Transferring control to Linux (at address 10008000) ...
Starting kernel ...
Uncompressing Lin........................................................ done, booting t
=> bootm
* kernel: default image load address = 0x2c040000
## Booting kernel from Legacy Image at 2c040000 ...
Image Name: Linux-2.6.28-rc8
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 889640 Bytes = 868.8 kB
Load Address: 10008000
Entry Point: 10008000
kernel data at 0x2c040040, len = 0x000d9328 (889640)
Loading Kernel Image ... OK
OK
kernel loaded at 0x10008000, end = 0x100e1328
## No init Ramdisk
ramdisk start = 0x00000000, ramdisk end = 0x00000000
## Transferring control to Linux (at address 10008000) ...
Starting kernel ...
Uncompressing Lin........................................................ done, booting t
Именно так и печатает в серийную консоль: "ux" от linux'a кто-то откусил, а вместо "..." печатает кучу точек. Расследования дебагером показали, что падение происходит где-то в недрах $(linux)/arch/arm/kernel/head.S, предположительно в коде включения MMU:
Код
__turn_mmu_on:
mov r0, r0
mcr p15, 0, r0, c1, c0, 0 @ write control reg
mrc p15, 0, r3, c0, c0, 0 @ read id reg
mov r3, r3
mov r3, r3
mov pc, r13
ENDPROC(__turn_mmu_on)
mov r0, r0
mcr p15, 0, r0, c1, c0, 0 @ write control reg
mrc p15, 0, r3, c0, c0, 0 @ read id reg
mov r3, r3
mov r3, r3
mov pc, r13
ENDPROC(__turn_mmu_on)
Есть ли какие-то предположения, что стоит проверить?
Попутно такие вопросы:
1) обязательно ли бутлоадеру выполнять ремап перед передачей управления ядру?
2) сейчас просто пытаюсь грузить и отладить ядро, без RAM-диска. Это нормально, не может же от отсутствия ram-диска ядро падать в самом начале?
Буду признателен за советы!