韦东山Linux嵌入式课程社区
直播中

丛聪

7年用户 286经验值
私信 关注

移植stdio到裸机遇到问题

最近写裸机的程序,移植stdio到裸机遇到的问题。
描述:复制了1期代码的lib和include文件夹,以及Makefile文件,在Makefile的基础上做了修改。又实现了串口的putc和getc函数
遇到的问题1:编译出来的二进制文件过大(700多M),修改连接器脚本文件,加入rodata段的描述之后编译出来的文件约8k
遇到的问题2:不能调用printf和scanf函数,一旦调用之后程序就死掉。但是可以sprintf函数正确,并且实验之后的现象正常。
用的编译环境是老师提供的ubuntu9,编译器是ARM-linux-gcc3

回帖(4)

夏焕丽

2019-4-23 08:57:34
新人不知道在那儿上传代码压缩包和实验截图
举报

尹星

2019-4-23 09:08:18
int main(void)
{
        char buff[100];

        /* 点亮LED */
        GPFCON &= ~(GPF4_MSK | GPF5_MSK | GPF6_MSK);
        GPFCON |= (GPF4_OUT | GPF5_OUT | GPF6_OUT);

        printf("jiangsunr");                                //使用串口uart_putc函数追踪,出错
        //sprintf(buff, "uart_putsnr");
        //uart_puts(buff);                                //测试正常

        while(1)
        {
                uart_putc(uart_getc());
        }

        return 0;
}
举报

王丽娟

2019-4-23 09:18:21
连接器脚本:
ENTRY(_start)
SECTIONS
{
         . = 0x30000000;

         . = ALIGN(4);
         .text :
         {
                start.o (.text)
                *(.text)
         }

         . = ALIGN(4);
         .data :
         {
                 *(.rodata*)
                *(.data)
         }

         . = ALIGN(4);
         .bss :
         {
                *(.bss)
         }
}
举报

杨超

2019-4-23 09:26:27
顶层Makefile:
CC      = arm-linux-gcc
LD      = arm-linux-ld
AR      = arm-linux-ar
OBJCOPY = arm-linux-objcopy
OBJDUMP = arm-linux-objdump

INCLUDEDIR         := $(shell pwd)/include
CFLAGS                 := -Wall -O2
CPPFLAGS           := -nostdinc -I$(INCLUDEDIR)

export         CC LD AR OBJCOPY OBJDUMP INCLUDEDIR CFLAGS CPPFLAGS

objs := start.o main.o init.o uart.o nand.o lib/libc.a

lcd.bin: $(objs)
        ${LD} -Tnand.lds -o lcd_elf $^
        ${OBJCOPY} -O binary -S lcd_elf $@
        ${OBJDUMP} -D -m arm lcd_elf > lcd.dis

.PHONY : lib/libc.a
lib/libc.a:
        cd lib; make; cd ..
       
%.o:%.c
        ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

%.o:%.S
        ${CC} $(CPPFLAGS) $(CFLAGS) -c -o $@ $<

clean:
        make  clean -C lib
        rm -f lcd.bin lcd_elf lcd.dis *.o
       
举报

更多回帖

发帖
×
20
完善资料,
赚取积分