부트로딩 단계 자체에서 libc가 제공하는 일부 기능을 사용하고 싶습니다. 로딩 단계에서 얻을 수 있나요?
답변1
원하는 함수 버전을 직접 작성해야 할 가능성이 높지만 어떤 경우에는 libc 소스 코드를 시작점으로 사용할 수도 있습니다. libc 자체의 기능은 다음을 포함하여 UNIX 사용자 공간 프로그램의 모든 가정하에 작성되었습니다.
- 커널(또는 더 구체적으로 커널의 시스템 호출 인터페이스)의 존재
- 플랫 메모리 모델
- 동적 연결 인프라(정적 연결 제외)
그리고 부트로더 단계에서는 이들 중 어느 것도 존재하지 않습니다. 대신(기본적으로 Intel에서는) BIOS, 세그먼트화된 메모리 모델, 메모리 보호 없음 및 시스템에 대한 완전한 제어 기능을 갖습니다.
printk()
이는 커널 공간에 적용되지 않는 printf()
가정을 하는 libc 대신 커널 코드에서 사용자 정의 함수를 보는 것과 같은 이유입니다 .printf()
답변2
예. 가장 쉬운 방법은 필요한 코드를 부트로더에 복사하는 것입니다.
이 기능은 무엇입니까? 임무를 수행하기 위해 시스템 호출에 의존하는 경우 이를 사용할 수 없다는 점을 이해해야 합니다.
답변3
그냥 정적 링크를 사용하세요. 현재는 동적 연결이 작동하지 않습니다.