这里只简单说说Linux下对ARM11的情况
mmu_init();
led_init();
button_init();
init_irq();
led_on();
while(1);
return 0;
一般最基本的有三个部分 .c/.S
.lds
makefile
这里面.c/.S是源文件,就是我们的想法写在这里面,不一定只有一个,可以有很多个
int main()
{
#ifdef MMU_ON
#endif
}
.lds是脚本文件,用来链接几个源文件编译产生的.o文件,产生可执行的.elf文件
OUTPUT_ARCH(arm)
ENTRY(_start)
SECTIONS {
. = 0x50008000;
. = ALIGN(4);
.text :
{
start.o (.text)
*(.text)
}
. = ALIGN(4);
.data :
{
*(.data)
}
. = ALIGN(4);
bss_start = .;
.bss :
{
*(.bss)
}
bss_end = .;
}
makefile对编译的方便化,在Linux里面就相当于是Windows里面的IDE集成开发环境
这里写上一些规则,把文件怎么处理,在一个源文件里面不需要写上所有函数,可以通过makefile把.o问价链接起来之后再调用,这样每个函数都可以自己写成一个.c/.S文件了
all: start.o mem.o main.o mmu.o led.o button.o interrupt.o
arm-linux-ld -Tgboot.lds -o gboot.elf $^
arm-linux-objcopy -O binary gboot.elf gboot.bin
%.o : %.S
arm-linux-gcc -g -c $^
%.o : %.c
arm-linux-gcc -g -c $^
.PHONY: clean
clean:
rm *.o *.elf *.bin