今天折腾了一天终于可以可以直接从SD卡启动6410的裸板程序了,这也让我实现了完全在linux下开发裸板代码。详细过程如下:
1.通过查SMDK6410_IROM_APPLICATION NOTE_REV 1.00,可以查到如下
其中BL1是开发板自动运行的固件代码
从上可以知道应将代码烧到最后地址-(1025+1+16)*512字节处
2.测试代码如下:
1 .text
2 .code 32
3 .globl _start
4 _start:
5 ldr r0,=0x70000000
6 orr r0,r0,#0x13
7 mcr p15,0,r0,c15,c2,4 @设置外设地址和大小
8 /*关闭看门狗*/
9 ldr r1,=0x7e004000
10 mov r0,#0
11 str r0,[r1]
12
13 ldr r2,=0x7f008800
14 ldr r0,=0x11110000
15 str r0,[r2]
16 ldr r0,=0xff0f
17 ldr r2,=0x7f008808
18 str r0,[r2]
19 halt:
20 b halt
Makefile代码如下:
1 led.bin:led.S
2 arm-linux-gcc -c -o led.o led.S
3 arm-linux-ld -Ttext 0xc000000 -o led.elf led.o
4 arm-linux-objcopy -O binary led.elf led.bin
5
6 clean:
7 rm led.o led.elf
其中-Ttext 0xc000000是指加载到地址为0xc0000000处执行(查S3C6410_中文手册内存映射部分可以知道:)
3.查看我的SD卡信息如下:
[email protected]:~/ARM_C/led$ sudo fdisk /dev/sdc
[sudo] password for shi:
命令(输入 m 获取帮助): p
Disk /dev/sdc: 7742 MB, 7742685184 bytes
226 heads, 5 sectors/track, 13382 cylinders, total 15122432 sectors
Units = 扇区 of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
设备 启动 起点 终点 块数 Id 系统
/dev/sdc1 2048 14858239 7428096 b W95 FAT32
命令(输入 m 获取帮助): q
4.烧写:
[email protected]:~/ARM_C/led$ sudo dd if=led.bin of=/dev/sdc seek=7742151680 bs=1
记录了72+0 的读入
记录了72+0 的写出
72字节(72 B)已复制,0.92066 秒,0.1 kB/秒
其中seek=7742151680的数据是7742685184-(1042*512)
5.将开发板打到SD卡启动
~
Tiny6410_SMDK从SD卡直接启动裸板代码