Ошибка сегментации при доступе к адресу gpio Raspberry Pi

Я следовал этому руководству 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 

Нет ошибки сегментации, но она ничего не делает, это предполагает, что светодиод загорается, а затем зацикливается навсегда, пожалуйста, помогите, я буду признателен за все, что связано с тем, как получить доступ к gpio с помощью сборки ARM без замены kernel.img.


person Newyo    schedule 12.06.2013    source источник


Ответы (1)


Пример, которому вы следуете, предназначен для автономного («голого железа») программного обеспечения, работающего непосредственно на оборудовании, и вы пытаетесь запустить его под Linux. Управление памятью ядра правильно предотвращает попытки доступа к чему-то, что не отображено в пространство памяти процесса.

Если вы проверите возвращаемое значение вашей команды sudo, вы обнаружите, что она по-прежнему возвращает 139 (ошибка сегментации).

Один из способов добиться того, что вы пытаетесь сделать, — это написать драйвер ядра. Но более практичным может быть использование одной из программных библиотек, уже доступных для Linux на Raspberry Pi. Например что-то вроде (случайный поиск, не использовал) WiringPi.

person unixsmurf    schedule 12.06.2013