首先,我在这里学习本教程(http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/)。
在第一个练习中,您将了解如何处理负责打开绿色 OK LED 的 GPIO 引脚。我有 Raspberry pi 的 rev C,据我所知,它使用 Broadcom (BCM2835) 微处理器,其外围设备具有以下数据表:( http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials /os/downloads/SoC-Peripherals.pdf)。
我已经阅读了数据表的第 89 页到第 104 页,但我仍然迷路了。作者提供的程序即使使用提供的交叉编译器构建链似乎也无法运行。从作者提供的来源中删除评论我有:
.section .init
.global _start
_start:
ldr r0, =0x20200000
/* Enable output on the 16th pin */
mov r1, #1
lsl r1, #18
str r1, [r0, #4]
/* Turn the pin off to turn LED light on */
mov r1,#1
lsl r1,#16
str r1, [r0, #40]
loop$:
/* Keep the system running */
b loop$
我被卡住的地方是,在数据表中我看不到地址 0x20200000。从表 6-2 中的第 91 页开始,我们看到了描述前 32 位的表。在表 6-1 中,我们看到了寄存器描述。第一个寄存器的地址是 0x7E200000。我试图用这个地址代替它,但我仍然没有运气让灯亮起来。
底线 LED 灯不亮,所以我可以学习,我应该去哪里获取有关如何调试的信息?其次,我错过了什么?
如果有用,这里是我正在添加到 SD 卡的 img 文件的 hexdump。
mehoggan@mehoggan-desktop:~/Devel/scripts/assembly/raspberry-pi-mini-os/example1$ make clean all
rm -f build/*.o
rm -f build/output.elf
rm -f kernel.img
rm -f kernel.list
rm -f kernel.map
../arm-2008q3/bin/arm-none-eabi-as -I source/ source/main.s -o build/main.o
../arm-2008q3/bin/arm-none-eabi-ld --no-undefined build/main.o -Map kernel.map -o build/output.elf -T kernel.ld
../arm-2008q3/bin/arm-none-eabi-objcopy build/output.elf -O binary kernel.img
../arm-2008q3/bin/arm-none-eabi-objdump -d build/output.elf > kernel.list
mehoggan@mehoggan-desktop:~/Devel/scripts/assembly/raspberry-pi-mini-os/example1$
hexdump -C ./kernel.img
00000000 18 00 9f e5 01 10 a0 e3 01 19 a0 e1 04 10 80 e5 |................|
00000010 01 10 a0 e3 01 18 a0 e1 28 10 80 e5 fe ff ff ea |........(.......|
00000020 00 00 20 20 |.. |
编辑
这是 .list 文件
00000000 <_start>:
0: e59f0018 ldr r0, [pc, #24] ; 20 <loop$+0x4>
4: e3a01001 mov r1, #1 ; 0x1
8: e1a01901 lsl r1, r1, #18
c: e5801004 str r1, [r0, #4]
10: e3a01001 mov r1, #1 ; 0x1
14: e1a01801 lsl r1, r1, #16
18: e5801028 str r1, [r0, #40]
0000001c <loop$>:
1c: eafffffe b 1c <loop$>
20: 20200000 .word 0x20200000
如果您反转 hexdump 的字节序,您会看到它与 .list 文件对齐。
e59f0018
e3a01001
e1a01901
e5801004
e3a01001
e1a01801
e5801028
eafffffe
20200000