为了节省空间,我在编译xboot时设置了如下编译选项,来去掉没有用到的函数和数据
CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections
结果发现F1C100S不能启动,看map文件发现,在start.s中调用的system_xx函数全部被优化掉,没有被放到image的最前面
.text 0x0000000080000000 0x780 build/xboot/src/arch/arm32/mach-f1c100s/start.o
0x0000000080000000 _start
0x0000000080000214 return_to_fel
build/xboot/src/arch/arm32/lib/memcpy.o(.text)
.text 0x0000000080000780 0x490 build/xboot/src/arch/arm32/lib/memcpy.o
0x0000000080000780 memcpy
build/xboot/src/arch/arm32/lib/memset.o(.text)
.text 0x0000000080000c10 0xb0 build/xboot/src/arch/arm32/lib/memset.o
0x0000000080000c10 memset
build/xboot/src/arch/arm32/mach-f1c100s/sys-uart.o(.text)
build/xboot/src/arch/arm32/mach-f1c100s/sys-clock.o(.text)
build/xboot/src/arch/arm32/mach-f1c100s/sys-dram.o(.text)
build/xboot/src/arch/arm32/mach-f1c100s/sys-mmu.o(.text)
build/xboot/src/arch/arm32/mach-f1c100s/sys-decompress.o(.text)
build/xboot/src/arch/arm32/mach-f1c100s/sys-spi-flash.o(.text)
build/xboot/src/arch/arm32/mach-f1c100s/sys-copyself.o(.text)
0x0000000080000cc0 PROVIDE (__bootloader_end, .)
0x0000000000000cc0 __bootloader_size = SIZEOF (.bootloader)
请问这是何故?
离线
我大概知道怎么回事了,看了map文件,--fffunction-sections 选项把所有函数编译成.text.functionname段了
所以链接文件中.text 要换成.text.*
离线
已经OK了,4MB优化到2MB size。最终 链接文件对几个boot相关函数改成.text*(不是.text.*)。另外-fdata-sections不能加,否则会把romdisk优化掉
离线
能优化掉这么多吗?这么才优化掉不到1M,是加在makefile里面吧?能说详细点吗?
离线
能优化掉这么多吗?这么才优化掉不到1M,是加在makefile里面吧?能说详细点吗?
最新xboot已经集成了这个,你去看它的makefile
离线