programing

LibCOS가 존재합니까?

minimums 2023. 10. 15. 17:12
반응형

LibCOS가 존재합니까?

본질적으로 libc에 불과한 임베디드 OS에 대해 들은 것을 기억합니다(아마도 c++를 지원했을 것입니다).커널이나 파이프, OS에서 기대하는 다른 것들이 없었습니다.위키피디아에서 찾아봤는데 목록이 안 나왔어요.

그런 OS가 존재합니까?VM 외부에서 통신할 수 있도록 터미널 전용 또는 C/C++(tcp) 소켓을 지원하는 OS가 있습니까?그것은 장난감으로서 나에게 유용할 것입니다.

이것에 대한 이름을 찾을 수 없는 이유는 운영 체제가 아니기 때문입니다. 운영 체제가 없기 때문입니다.흔히 이것을 "베어 메탈(bare-metal)" 프로그래밍이라고 부릅니다.

베어 메탈 프로그래밍의 일반적인 개념은 보드 위에 메모리 컨트롤러와 다른 하드웨어를 설정하고 프로그램에 제어권을 전달하는 약간의 범용 코드, 즉 "부트로더"가 있다는 것입니다. (운영 체제에도 부트로더가 있으므로 그런 의미에서 프로그램이 운영 체제를 대체하는 것입니다.)Uboot는 상당히 일반적인 오픈 소스 부트로더이므로 정보를 찾기 시작하는 것이 좋습니다.

베어 메탈 프로그래밍의 까다로운 부분 중 하나는 하드웨어 통신을 처리할 운영 체제가 없기 때문에 "어떤 주변 장치로 데이터가 전달되는지에 대한 인쇄물이 실제로 무엇을 의미하는지", "어떻게 하면 인쇄물을 전송할 수 있는지"에 대해 생각해야 한다는 것입니다.다시 말하지만, 일부 부트로더는 이러한 종류의 작업을 지원합니다. 이 모든 것을 연결하는 것이 항상 사소한 것은 아닙니다.역시 Uboot가 좋은 예입니다.

한편, C 라이브러리 자체는 부트로더가 아닌 당신의 컴파일러에 의해 제공될 것입니다.

(또한 이름표로 덧붙여야 합니다.제가 일하는 회사는 소서리 코드벤치(Sourcery CodeBench)로 알려진 베어메탈 및 리눅스 컴파일러 시리즈를 만듭니다.CodeBench의 경우 베어메탈 버전은 일반적으로 연결 프로그램에 사용하는 ABI 사양에서 따온 이름이기 때문에 "ELF" 또는 "EABI" 버전은 모두 베어메탈 컴파일러이며, 이러한 종류의 것을 지칭하는 일반적인 방식이라고 생각하므로 이러한 이름도 확인할 수 있을 것입니다.)

기본적으로 커널은 필요하지 않지만 최소한의 os를 검색하는 경우 http://wiki.osdev.org/Projects 이 시작할 지점이 될 수 있습니다.기본적인 것들을 지원하고 작은 공간을 가지고 있는 취미와 세미프로 프로젝트들이 많이 있습니다.또한 직접 작성할 수 있는 좋은 튜토리얼도 있습니다.드라이버 등은 네트워크나 시리얼 I/O와 같은 간단한 작업에도 필요하다는 점도 고려해야 합니다.

또한 리눅스 커널은 항상 좋은 시작입니다. (얼마 전에 20MB 정도의 리눅스 배포판이 있었습니다.)

나는 당신의 몇몇 가정에 문제가 있다고 생각합니다.OS에 커널이 필요 없다고 말하는 것은 맞지만, 응용 프로그램을 실행할 수 있는 모든 것은 libc에서 정적으로 컴파일할 수 있습니다.

참조: http://www.superfrink.net/athenaeum/OS-FAQ/os-faq-libc.html

예를 들어, 당신의 os를 위해 그 함수를 컴파일하는 한 printf를 사용하는 것이 가능합니다.그래서 메뉴넷을 이용하시면 됩니다.그것을 위해 libc를 구축하는 한 OS.

이제 일부 임베디드 시스템이 사용할 수 있는 libc의 작은 버전이 http://pdclib.rootdirectory.de/ 에 존재합니다.

이러한 방식으로 어떤 작은 OS라도 libc를 실행하기 위한 OS로 간주될 수 있습니다.

그런 것들이 많이 있습니다.

대부분의 전문 실시간 운영 체제(RTOS)는 C 라이브러리를 어느 정도 완벽하게 구현하고 있으며, C++(예: Keil MDK, µItron)의 경우에도 제공됩니다.실제로는 가용 리소스를 너무 많이 사용하기 때문에 이를 피하는 경향이 있습니다.

RTOS는 일반적으로 파일이나 파이프를 지원하지 않는 매우 작은 커널을 가지고 있습니다.대신 작업, 타이머, 대기열 및 이벤트 플래그를 지원하며 오버헤드는 거의 없습니다.

Libcc는 운영체제가 아닙니다.OS의 정의는 다소 모호하지만 API 이상을 포함하고 있습니다.메모리 관리, 프로세스 스케줄링 등이 필요합니다.

Newlib 최소한 실행 가능한 예제

https://sourceware.org/newlib/

Newlib을 사용하면 베어메탈 플랫폼에 대한 자체 시스템 호출을 구현할 수 있습니다.

여기서는 QEMU arch64에서 실행되는 크로스툴-NG로 구축된 Newlib을 보여주는 고도로 자동화되고 문서화된 예를 제시합니다.

예를 들어, 위의 예에서는 다음과 같은 예제 프로그램이 있습니다.

#include <stdio.h>
#include <stdlib.h>

void main(void) {
    exit(0);
}

그리고 별도의 C 파일에서 우리는 다음을 구현합니다.exitARM 세미호스팅 포함:

void _exit(int status) {
    __asm__ __volatile__ ("mov r0, #0x18; ldr r1, =#0x20026; svc 0x00123456");
}

구현할 다른 일반적인 시스템 호출은 다음과 같습니다.

  • write호스트에 결과를 출력합니다.이 작업은 다음과 같이 수행할 수 있습니다.

    • 더 많은 준호스팅
    • UART 하드웨어
  • brk위해서malloc.

    페이징에 신경 쓸 필요가 없기 때문에 베어메탈 사용이 용이합니다!

TODO Zephyr 또는 FreeRTOS와 같은 완전한 RTOS로 이동하지 않고 선제적인 스케줄링 시스템 실행에 도달하는 것이 현실적인지 궁금합니다.

뉴립의 멋진 점은 다음과 같은 비OS 특정한 것들을 모두 구현한다는 것입니다.string.hOS 스텁만 구현할 수 있습니다.

또한 모든 stub을 구현할 필요는 없고 필요한 stub만 구현할 수 있습니다.예: 프로그램이 필요한 경우exit, 그러면 당신은 당신이 제공할 필요가 없습니다.print. Newlib은 모든 syscall의 더미 do-nothing 구현을 weak 심볼로 제공함으로써 이를 달성합니다.

Newlib 소스 트리에는 에 ARM 세미호스팅 구현을 포함한 일부 구현이 이미 있지만 대부분의 경우에는 자체 구현을 수행해야 합니다.그러나 이는 작업을 위한 확실한 기반을 제공합니다.

뉴립을 설정하는 가장 쉬운 방법은 크로스툴-NG로 자신만의 컴파일러를 구축하는 것입니다. 단지 뉴립을 C 라이브러리로 사용하고 싶다고 말하면 됩니다.내 설정은 에 있는 새로운 lib 구성을 사용하는 이 스크립트를 사용하여 자동으로 이를 처리합니다.

C++도 이론적으로 효과가 있어야 하는데 처음 시도는 실패했습니다.

언급URL : https://stackoverflow.com/questions/13063055/does-a-libc-os-exist

반응형