三星soc平台Exynos4412平台裸机开发介绍(五)之uboot介绍及基于uboot编程(汇编流水灯程序)

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
下载执行即可。

让我们一起来欣赏优美的流水灯~~~~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章