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

该函数现在是空的:

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

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

如果我使用:
kprintf ("HELLO");

屏幕一片空白。但是,如果我使用:
kprintf ("HE");

一切都好。此时我唯一能想到的就是链接描述文件肯定有问题。也许是rodata部分。

我正在使用剑桥 RPi 教程中修改过的链接器脚本:
STARTUP(crt0.o)

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

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

    .data : {
        *(.data)
    }

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

    /DISCARD/ : {
        *(*)
    }
}

有任何想法吗?

最佳答案

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

STARTUP(crt0.o)

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

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

    .data : {
        *(.data)
    }

    .bss : {
        *(.bss)
    }

    /DISCARD/ : {
        *(*)
    }
}

希望这有助于将来的其他人

关于c - 树莓派上的rodata,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13909596/

10-11 23:06