Thanks to advice from folks on the list, I've gotten a little further with
booting the utilite with rawhide, but I'm not there yet.
I ran into problems with the extlinux.conf and boot.scr, so I decided to
try booting manually (addresses were chosen from boot.scr):
ext4load mmc2 2:1 0x14000000 uImage
ext4load mmc2 2:1 0x32000000 uInitrd
ext4load mmc2 2:1 0x12000000 dtb-4.2.0-0.rc0.git4.1.fc23.armv7hl/imx6q-cm-fx6.dtb
bootm 0x14000000 0x32000000 0x12000000
The above results in a "data abort" right after "Loading Kernel Image"
is
printed.
Here is the register dump:
data abort
pc : [<8ff719e6>] lr : [<8ff719cb>]
reloc pc : [<1782d9e6>] lr : [<1782d9cb>]
sp : 8f543c98 ip : 0000001c fp : 00008000
r10: 14000040 r9 : 8f543eb0 r8 : 8f543d0c
r7 : 00800000 r6 : 00008000 r5 : 140fc041 r4 : 00604450
r3 : 14604490 r2 : 00103fff r1 : 000000a6 r0 : 00000024
Flags: Nzcv IRQs off FIQs off Mode SVC_32
Resetting CPU ...
From objdump, the reloc pc is inside memmove (see disassembly below).
I next instrumented memmove() since it is the failing function. It is
called with these arguments:
memmove: 00008000 14000040 00604450
That looks correct - we are trying to relocate the kernel from 14000040
down to 00008000.
Looking at the disassembly, r5 is the source pointer, and r2 is the
destination pointer. I think r3 is the desired "last source address"
because the memmove loop keeps comparing r5 to r3, if I am reading the
disassembly correctly.
But I don't see any reason for the data abort. The memmove has apparently
been running for a while; the source and destination pointers have advanced
roughly 1 MB out of the total 6 MB kernel size. And it doesn't look like
anything is overlapping.
I've also tried some other addresses for the ext4load commands, but I keep
getting the same data abort.
Suggestions greatly appreciated.
Steve
1782d9b4 <memmove>:
1782d9b4: b573 push {r0, r1, r4, r5, r6, lr}
1782d9b6: 460b mov r3, r1
1782d9b8: 4606 mov r6, r0
1782d9ba: 460d mov r5, r1
1782d9bc: 9200 str r2, [sp, #0]
1782d9be: 4614 mov r4, r2
1782d9c0: 490e ldr r1, [pc, #56] ; (1782d9fc <memmove+0x48>)
1782d9c2: 4602 mov r2, r0
1782d9c4: 480e ldr r0, [pc, #56] ; (1782da00 <memmove+0x4c>)
1782d9c6: f7e2 ff17 bl 178107f8 <printf>
1782d9ca: 42ae cmp r6, r5
1782d9cc: d013 beq.n 1782d9f6 <memmove+0x42>
1782d9ce: eb05 0304 add.w r3, r5, r4
1782d9d2: d807 bhi.n 1782d9e4 <memmove+0x30>
1782d9d4: 1e72 subs r2, r6, #1
1782d9d6: 429d cmp r5, r3
1782d9d8: d00d beq.n 1782d9f6 <memmove+0x42>
1782d9da: f815 1b01 ldrb.w r1, [r5], #1
1782d9de: f802 1f01 strb.w r1, [r2, #1]!
1782d9e2: e7f8 b.n 1782d9d6 <memmove+0x22>
1782d9e4: 1932 adds r2, r6, r4
1782d9e6: 1ae4 subs r4, r4, r3
1782d9e8: 42e3 cmn r3, r4
1782d9ea: d004 beq.n 1782d9f6 <memmove+0x42>
1782d9ec: f813 1d01 ldrb.w r1, [r3, #-1]!
1782d9f0: f802 1d01 strb.w r1, [r2, #-1]!
1782d9f4: e7f8 b.n 1782d9e8 <memmove+0x34>
1782d9f6: 4630 mov r0, r6
1782d9f8: b002 add sp, #8
1782d9fa: bd70 pop {r4, r5, r6, pc}
1782d9fc: 178346bc .word 0x178346bc
1782da00: 178428e5 .word 0x178428e5