2011-08-29 5 views
6

답변하기에 좋은 빠른 질문입니다.취미 운영 체제를 만들기위한 가장 존경받는 언어와 무료 컴파일러는 무엇입니까?

hobbyish 운영 체제를 처음부터 작성하는 데있어 defacto 언어로 간주되는 언어는 512 바이트 부트 섹터 생성을 지원합니까? 나는 C++을 사용할 수 있다는 모호한 개념을 내 머리 속에서 가지고 있지만 일반 C가 대답이라고 가정하고 있습니다. 시간이 흐르면서 대체 언어이지만 잠재적으로 우수한 언어에 대한 의견이 있습니까? 다른 사람들은 평범한 오래된 어셈블러를 강력하게 제안합니까?

그리고 답변에 따라, 소스 코드를 바이너리로 컴파일하기 위해 어떤 무료 (또는 심지어 오픈 소스) 컴파일러를 권하고 싶습니까?

추신 : 나는 OS를 작성하는 것이 매우 힘든 일이며 완전히 마무리하지 않을 것이라고 확신합니다. 나는 개인적 관심 연구 과제를 수행 중이며 간단한 콘솔 IO로 MBR과 아주 기본적인 커널을 만들고 싶다.

+1

[표준 참조] (http://wiki.osdev.org/C%2B%2B_Bare_Bones) ... 부트 로딩을 위해 약간의 어셈블러가 필요하며 사용자 정의 링커 스크립트가 필요합니다 모든 것이 제자리에 있지만 원칙적으로 C++을 주요 개발 언어로 사용하는 것을 방해하는 것은 없습니다. 도서관을 가지고 있지는 않지만, 염두에 두십시오. –

+1

이 새로운 운영 체제에서 작동하도록 컴파일러의 런타임 지원 라이브러리 (예 : CRT)를 포팅합니다. 먼저 C 버전을 이식하는 것이 현명합니다. 그것은 훨씬 작습니다. 그리고 예, 닭고기와 달걀 문제는 대개 이러한 프로젝트를 일찍 끝냅니다. –

+0

마스터 부트 레코드의 내용을 빌드 할 때 C (혼자서도 * shudder * C++) 컴파일러를 사용할 수 있다면 놀랄 것입니다. 공간의 양은 작고 당신은 그것의 모든 인치가 필요합니다. 이것이 하나님이 조립 자들을 창조하신 이유입니다. MBR이 임의로 큰 덩어리를 디스크에서 읽을 수 있다면, 그 덩어리를 원하는대로 만들 수 있습니다. 읽어 와서 초기화 점으로 이동하십시오. –

답변

3

C 및 어셈블리.

C 컴파일러의 경우 gcc 컴파일러를 사용하는 것이 좋습니다. X86 어셈블리의 경우 nasm assmebler를 권장합니다. 인텔 문법보다 AT & T 문법을 선호하는 경우 gcc와 함께 제공되는 가스를 사용할 수도 있습니다.

부팅 섹터는 어셈블리로 작성해야합니다.

커널은 모든 언어로 작성할 수 있습니다. 거기에 어셈블리가 필요할 수도 있지만 원한다면 C와 같은 고급 언어를 사용할 수도 있습니다.

아주 간단한 것을 원할 경우 어셈블리에 모두 쓸 수 있습니다.

자세한 내용은

: http://wiki.osdev.org/Main_Page

+1

gas는 Intel 문법 (.intel_syntax 지시어 포함)을 이해합니다. – dimitri

+0

매우 간단한 모든 내용이 OSDEV 및 다른 이전 사이트의 자습서로 게시되었습니다 (잊어 버렸습니다). 이러한 기능은 간략한 기능을 제공 한 직후에 gclib 또는 newlib과 같은 표준 라이브러리를 구현하기 전에 마이그레이션됩니다. – John

4

I (특히와 GCC) C라고 말하고 싶지만는이 목적을 위해 가장 일반적으로 사용되는 컴파일러입니다.

대부분의 최신 컴파일러는 "세그먼트 16 비트"를 더 이상 지원하지 않으며 "이 코드는 512 바이트에 맞아야합니다"또는 CPU 모드 스위치 및 비정상적인 상황을 처리하는 것과 같은 제한 사항을 처리하는 데 실제로 유용하지 않습니다. 이러한 이유로 "PC BIOS"(GRUB과 같은 것을 사용하는 것과 반대)를위한 자체 부트 로더를 작성하는 사람들은 방언의 방언 (NASM, FASM, GAS)을 사용하는 경향이 있습니다.

다른 언어 (및 다른 컴파일러)를 사용할 수 없다는 의미는 아닙니다. 사람들이 다양한 언어 (파스칼, C++, C# 등)로 커널을 작성하는 것을 보았습니다. 또한 하위 수준 코드 (예 : 부팅 코드 및 커널)로 제한됩니다. 그 이상으로 벗어나면, 높은 부분 (드라이버, 파일 시스템, GUI, 응용 프로그램)을 위해 거의 모든 것을 사용할 수 있습니다. 또한 커널 및/또는 OS의 상위 부분에 사용할 언어를 고안하는 사람들이 있습니다.

나는 대체적이지만 더 우수한 언어에 대한 의견이 있습니다. 필자가 생각하기에 "잠재적으로 우월한"것은 많은 다른 언어의 존재가 IT 업계에서 가지고있는 높은 "바벨탑"비용 (대부분의 프로그래머가 언어 차이로 인해 대부분의 소스 코드를 읽을 수없는)을 정당화하지 않는다는 것입니다. 전체. OS 프로젝트의 경우 대체 언어는 이론적 인 이점이 있지만 실제적으로 이러한 장점은 언어에 익숙한 사람들의 수를 줄이거 나 자원하여 도움을 줄 수 있다는 단점을 능가합니다 (장애가되어 도움을 필요로 할 때 버그 등), 또는 나중에 자원 봉사자가 수천 명의 운전자에게 기여해야하는 경우).

(예 : 부팅 코드, 커널 코드, 드라이버 등) 일반 오래된 어셈블러를 사용합니다. 나는 그것을 추천하지 않는다; 다른 언어보다 어셈블리에 대한 경험이 풍부하고 상위 언어를 사용하지 않는 다른 이유가 있고 이식성이 문제가되지 않는 한.

OS 프로젝트를 구성하는 대부분의 다른/별도 바이너리를 컴파일하는 데 사용할 수있는 무료 및 오픈 소스 컴파일러로서 GCC를 사용하는 것이 좋습니다. 그러나 비표준 언어 확장과 "구현 정의"비헤이비어 (어떤 언어와 어떤 컴파일러를 사용하든 상관없이)의 사용을 피하는 것이 좋습니다. 그러면 언제든지 다른 컴파일러로 전환 할 수 있습니다. 이유).

1

기본 기능을 포팅해야 할 오픈 소스가 많기 때문에 리눅스에서 시작하겠다.

내가 지금까지 다음이 gclib보다 쉽게 ​​구현하지만 좋은하지 않기 때문에, http://sources.redhat.com/newlib/을 newlib에를 받고있어 리눅스 다시 내가 오전 건물, 생각과 '다른 사람을 사용하여 전환.

무료 컴파일러는 리눅스에서 거의 모두 무료입니다. 다른 사람들은 가스 나 어셈블러를 언급했지만 크로스 컴파일을 설정하고 실행 가능한 형식을 선택하는 것은 최종 툴 세트에 정착되기 전에 성취되어야 할 필요가 있습니다. 신뢰성, 속도 및 타사 응용 프로그램을 포팅하는 이유 때문에 사용자 지정 OS에서 빌드 환경을 구현하는 것이 목표였습니다. 따라서 상위 수준의 코딩 도구가 앞설 수 없게 될 수 있습니다. 따라서 소스 코드에서 직접 빌드 할 수있는 도구를 실제로 찾아야합니다. Linux를 스크래치 (http://www.linuxfromscratch.org/lfs/)는 크로스 컴파일 - 동일한 아키텍처, 다른 (교차) 환경에 대한 훌륭한 소개입니다.

스크래치 내장 OS에서 gclib을 구현하는 데 심각한 장애물이 있었지만 약 3 년 전의 경험 이었기 때문에 상황이 바뀌었을 수 있으며 이식 가능한 코드의 대상을 확실히 늘릴 필요가 있습니다.

+0

기본적으로 lib (newlib 또는 gclib)는 취미 OS에서 빌드 환경을 설정하고 유용하게 사용할 수 있기 때문에 생각해야합니다. – John

관련 문제