准备分析
资源工具
着手写程序
(1) 在工程目录添加一个新目录名字为BL1。
(2) 将mkv210_image.c移动到BL1目录中。
(3) BL1.bin需要的目标文件有start.o nand_cp.o以及uart.o。
(4) 由于BL1中将不再链接main.o,那么start.o在链接时候就会找不到“main”这个在main.c中的符号。这里可以在nand_cp.c中以弱符号的方式在nand_cp.c添加一个空的main函数,内容如下:
// BL1 main()
void main(void) __attribute__((weak, alias("__main")));
void __main(void) {};
这个程序不会被执行,所以没有任何的影响。
(5) BL1标中添加Makefile,内容如下:
(6) 在工程目录中的Makefile中去掉对mkv210的操作,将可执行文件统一命名为210.bin,这样在BL1目录中的Makefile中会自动将BL1.bin和210.bin制作在一起命名为BL1210.bin。Makefile内容如下:
all: BL1.bin
BL1.bin: start.bingcc mkv210_image.c -o mkv210./mkv210 start.bin BL1.bincat BL1.bin ../210.bin > ../BL1210.binstart.bin:cp ../start.o ../nand_cp.o ../uart.o ./arm-linux-ld -o start.elf start.o nand_cp.o uart.oarm-linux-objcopy -O binary start.elf start.binarm-linux-objdump -D start.elf > start_elf.dis
clean:rm *.o *.elf *.bin *.dis mkv210 -f
all:210.binmake -C ./BL1
led.bin: start.o main.o nand_cp.o uart.oarm-linux-ld -Ttext $(CONFIG_SYS_TEXT_BASE) -o led.elf $^arm-linux-objcopy -O binary led.elf led.binarm-linux-objdump -D led.elf > led_elf.dis
210.bin: led.bincp led.bin 210.bin%.o : %.Sarm-linux-gcc -o $@ $< -c -fno-builtin
%.o : %.carm-linux-gcc -DCONFIG_SYS_TEXT_BASE=$(CONFIG_SYS_TEXT_BASE) -o $@ $< -c -fno-builtin
clean:rm *.o *.elf *.bin *.dis mkv210 -fmake clean -C ./BL1/
下载运行
同《
S5PV210的LED应用(一)》
下载文件:BL1210.bin
运行调试
程序可以运行起来了,如图所示:
代码目录结构清晰很多:
遗留问题
1.这个BL1也算是V1.0版本的,日后再丰富一点,让其更通用一点。
2.COPY_BL2_SIZE的大小不统一,目前是8k。
3.还没有涉及到DRAM。