ARM-uboot介绍以及基于uboot编程
1. uboot介绍
是制作bootloader的源码集合,在arm的板子上所有的bootloader都是由uboot做出来的。
2. uboot的作用
引导和加载操作系统内核,本身不属于操作系统,是在操作运行之前执行的一小段代码,为操作系统的运行提供硬件环境。
3. 基于uboot编写helloworld程序
#define printf(...) (((int (*) (const char *, ...))0x43e11a2c)(__VA_ARGS__))
int _start(void)
{
printf("hello world\n");
return 0;
}
- 编译命令:
/*只编译不链接 */
arm-linux-gcc -c hello.c -o hello.o
/*手动链接,指令定程序入口地址 */
arm-linux-ld -Ttext=0x40008000 hello.o -o hello
/*生成纯净的二进制 */
arm-linux-objcopy -O binary hello hello.bin - 编译完成后将hello.bin程序下载到开发板内存40008000的内存地址
执行程序:go 40008000
4. 基于uboot编写的汇编流水灯程序
.global _start
.align 2
.text
_start:
push {r0-r12,lr}
ldr r0, =0x110002e0
ldr r1, =0x1111
str r1, [r0]
mov r3, #0x0
for:
ldr r0, =0x110002e4
mov r1, #0xe
str r1, [r0]
bl delay
mov r1, #0xd
str r1, [r0]
bl delay
mov r1, #0xb
str r1, [r0]
bl delay
mov r1, #0x7
str r1, [r0]
bl delay
cmp r3, #0xff
beq last
addne r3, #0x1
bne for
delay:
mov r2, #0x0
ldr r4, =0xfffffff
loop:
cmp r2, r4
beq end
addne r2, #0x1
bne loop
end:
mov pc, lr
last:
pop {r0-r12,pc}
.end
编译命令:
arm-linux-gcc -c led.S -o led.o
arm-linux-ld -Ttext=0x40008000 led.o -o led
arm-linux-objcopy -O binary led led.bin
下载执行即可。
让我们一起来欣赏优美的流水灯~~~~