Você provavelmente terá que escrever suas próprias versões das funções que deseja, embora em alguns casos você possa usar o código-fonte da libc como ponto de partida. As funções na própria libc são escritas sob todas as suposições de um programa de espaço do usuário UNIX, incluindo:
- a presença do kernel (ou mais especificamente, a interface syscall para o kernel)
- um modelo de memória simples
- uma infraestrutura de vinculação dinâmica (a menos que esteja vinculada estaticamente)
e no estágio de bootloader, você não tem nada disso. Em vez disso, (por padrão, sob Intel) você tem o BIOS, um modelo de memória segmentada, sem proteção de memória e o reinado completo da máquina.
É a mesma razão pela qual você vê a função printk()
no código do kernel em vez de printf()
- as suposições que o printf()
da libc faz não se aplicam no espaço do kernel.