├── start.o ├── kernel.elf ├── kernel7.img ├── Makefile └── start.s /start.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lowleveltv/raspberry-pi-baremetal/HEAD/start.o -------------------------------------------------------------------------------- /kernel.elf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lowleveltv/raspberry-pi-baremetal/HEAD/kernel.elf -------------------------------------------------------------------------------- /kernel7.img: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lowleveltv/raspberry-pi-baremetal/HEAD/kernel7.img -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | default: 2 | arm-none-eabi-as start.s -o start.o 3 | arm-none-eabi-ld start.o -o kernel.elf 4 | arm-none-eabi-objcopy kernel.elf -O binary kernel7.img -------------------------------------------------------------------------------- /start.s: -------------------------------------------------------------------------------- 1 | .global _start 2 | 3 | .equ GPIO_BASE, 0x3f200000 4 | .equ GPFSEL2, 0x08 5 | 6 | .equ GPIO_21_OUTPUT, 0x8 ;//# 1 << 3 7 | 8 | .equ GPFSET0, 0x1c 9 | .equ GPFCLR0, 0x28 10 | 11 | .equ GPIOVAL, 0x200000 ;//# 1 << 21 12 | 13 | _start: 14 | 15 | ;//# base of our GPIO structure 16 | ldr r0, =GPIO_BASE 17 | 18 | ;//# set the GPIO 21 function as output 19 | ldr r1, =GPIO_21_OUTPUT 20 | str r1, [r0, #GPFSEL2] 21 | 22 | # set counter 23 | ldr r2, =0x800000 24 | 25 | loop: 26 | # turn on the LED 27 | ldr r1, =GPIOVAL ;//# value to write to set register 28 | str r1, [r0, #GPFSET0] ;//# store in set register 29 | 30 | # wait for some time, delay 31 | eor r10, r10, r10 32 | delay1: 33 | add r10, r10, #1 34 | cmp r10, r2 35 | bne delay1 36 | 37 | # turn off the LED 38 | ldr r1, =GPIOVAL ;//# value to write to set register 39 | str r1, [r0, #GPFCLR0] ;//# store in set register 40 | 41 | # wait for some time, delay 42 | eor r10, r10, r10 43 | delay2: 44 | add r10, r10, #1 45 | cmp r10, r2 46 | bne delay2 47 | 48 | b loop 49 | 50 | 51 | 52 | --------------------------------------------------------------------------------