花了半天时间,研究怎样在QQ2440上跑裸核程序,针对在NAND FLASH运行和RAM运行.
开发环境:
1: RED HAT 9 Linux
2: QQ2440
开发板
3: 嵌入式应用开发完全手册
针对NAND FLASH运行的源代码
startup.s
.text
.global _start
_start:
LDR R0,=0x53000000
MOV R1,#0x00
STR R1,[R0]
LDR SP,=1024*4
BL main
HALT_LOOP:
B HALT_LOOP
led_c.c
#define GPBCON (*(vola
tile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
int main(void)
{
long i,j;
GPBCON = 0x00000400;
GPBDAT = 0x00;
while(1)
{
GPBDAT ^= (1<<5);
for(i=0;i<50;i++)
{
for(j=0;j<5000;j++);
}
}
return 0;
}
makefile
led_c.dis:led_c_elf
ARM-linux-objdump -D -m arm led_c_elf > led_on.dis
arm-linux-objcopy -O binary -S led_c_elf led_c.bin
led_c_elf:startup.o led_c.o
arm-linux-ld -Ttext 0x00000000 -g startup.o led_c.o -o led_c_elf
led_c.o:led_c.c
arm-linux-gcc -g -c -o led_c.o led_c.c
startup.o:startup.s
arm-linux-gcc -g -c -o startup.o startup.s
clean:
rm -f *.o led_c_elf led_c.bin led_c.dis
其中,通过startup.s中LDR SP,=1024*4语句把栈地址设置好,并且通过makefile中的arm-linux-ld -Ttext 0x00000000 -g startup.o led_c.o -o led_c_elf在编译的时候指定程序地址,因为我用的笔记本没有并口,所以我实用NOR FLASH启动,通过NOR的VIVI把程序下载NAND的0x00地址,使用VIVI下载选项.
针对RAM运行的源代码
startup.s
.text
.global _start
_start:
LDR R0,=0x53000000
MOV R1,#0x00
STR R1,[R0]
LDR SP,=0x40001000
BL main
HALT_LOOP:
B HALT_LOOP
led_c.c
#define GPBCON (*(volatile unsigned long *)0x56000010)
#define GPBDAT (*(volatile unsigned long *)0x56000014)
int main(void)
{
long i,j;
GPBCON = 0x00000400;
GPBDAT = 0x00;
while(1)
{
GPBDAT ^= (1<<5);
for(i=0;i<50;i++)
{
for(j=0;j<5000;j++);
}
}
return 0;
}
makefile
led_c.dis:led_c_elf
arm-linux-objdump -D -m arm led_c_elf > led_on.dis
arm-linux-objcopy -O binary -S led_c_elf led_c.bin
led_c_elf:startup.o led_c.o
arm-linux-ld -Ttext 0x30000000 -g startup.o led_c.o -o led_c_elf
led_c.o:led_c.c
arm-linux-gcc -g -c -o led_c.o led_c.c
startup.o:startup.s
arm-linux-gcc -g -c -o startup.o startup.s
clean:
rm -f *.o led_c_elf led_c.bin led_c.dis
其中,通过startup.s中LDR SP,=0x40001000语句把栈地址设置好,其中0x40001000只是栈指针地址,也可以设置在别的内存地址,只要不是代码段就可以,并且通过makefile中的arm-linux-ld -Ttext 0x30000000 -g startup.o led_c.o -o led_c_elf在编译的时候指定程序地址,因为我用的笔记本没有并口,所以我实用RAM启动,通过NOR的VIVI把程序下载RAM地址,使用DOWNLOAD & RUN下载选项.
我是新手,虽说很简单,但也向作者请教了好久,在此说给大家看看,不知道是否也有人需要.