访问raspberry pi的gpio地址时出现分段错误

时间:2013-06-12 13:32:11

标签: assembly arm raspberry-pi raspbian gpio

我一直在关注本教程 http://www.cl.cam.ac.uk/projects/raspberrypi/tutorials/os/ok01.html 因为我想在不更换操作系统的情况下控制gpio,我只想编译汇编代码,然后像程序一样运行它,

我已经改变了程序的开始,

.global main
.func main

ldr r0,=0x20200000

mov r1,#1
lsl r1,#18


str r1,[r0,#4]

mov r1,#1
lsl r1,#16


str r1,[r0,#40]


loop: 
b loop

然后在Pi上做这些

as -o gpio.o main.s
gcc -o gpio gpio.o

但是当我做的时候

./gpio 

我有分段错误

当我做的时候

sudo ./gpio 

没有分段错误,但它没有做任何事情,它假设led灯然后循环,请帮忙 我将非常感谢有关如何使用ARM程序集访问gpio而不替换kernel.img。

1 个答案:

答案 0 :(得分:4)

您所遵循的示例是直接在硬件上运行的独立(“裸机”)软件,并且您正尝试在Linux下运行它。内核内存管理正确地阻止您尝试访问未映射到进程内存空间的内容。

如果检查sudo命令的返回值,您会发现它仍然返回139(分段错误)。

实现您尝试的方法的一种方法是编写内核驱动程序。 但更实际的可能是在raspberry pi上使用已经可用于Linux的软件库之一。例如(随机搜索,尚未使用它)WiringPi