树莓皮上的Rodata

时间:2012-12-17 06:54:00

标签: c gcc linker raspberry-pi

我正在尝试在我的裸机操作系统上为Raspberry Pi制作一个简单的printf函数。

此功能现在为空:

int kprintf(const char *string, ...) {
}

目前,我可以绘制到屏幕上。但是,在调用此函数时遇到问题。 作为测试,我在调用kprintf之前在屏幕上绘制了几个字符。

如果我使用:

kprintf ("HELLO");

屏幕空白。但是,如果我使用:

kprintf ("HE");

一切都好。在这一点上我唯一能想到的是链接器脚本一定存在问题。也许是rodata部分。

我正在使用Cambridge RPi教程中修改过的链接器脚本:

STARTUP(crt0.o)

SECTIONS {
    .init 0x8000 : {
        *(.init)
    }

    .text 0x8080 : {
        *(.text)
        *(.rodata)
    }

    .data : {
        *(.data)
    }

    .bss : {
        *(.bss)
        *(COMMON)
    }

    /DISCARD/ : {
        *(*)
    }
}

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

仅供参考,如果我使用此链接描述文件,似乎没问题:

STARTUP(crt0.o)

SECTIONS {
    .init 0x8000 : {
        *(.init)
    }

    .text 0x9000 : {
        *(.text)
        *(.rodata)
        *(COMMON)
    }

    .data : {
        *(.data)
    }

    .bss : {
        *(.bss)
    }

    /DISCARD/ : {
        *(*)
    }
}

希望这对未来的其他人有所帮助