제 개발 환경
- 가상 머신 : 패럴러즈(vmware 혹은 virtualbox(vbox) 등 상관 없음)
- 운영 체제 : Windows 10 64bit(windows 시리즈는 상관 없지만 서적에서는 xp이라는 점 참고.)
한승훈 저자 님의 설치 방법을 따라하고 싶으시면 -> github.com/kkamagui/mint64os-examples
1. Cygwin 설치.
Cygwin은 윈도우 환경에서 리눅스와 같은 환경을 제공해주는 프로그램입니다.
OS 개발에 필요한 GCC나 기타 유틸리티 프로그램들이 모두 들어있습니다.
먼저, www.cygwin.com/ 에 접속하면 아래와 같은 화면이 보입니다.
아래의 이미지에 빨간색 박스를 참고하여, 자신의 운영 체제 환경에 맞춰 64비트 혹은 32비트 실행 파일을 다운로드 해주세요.
1.1
다운로드가 완료되면 실행 파일을 실행하고
"다음" 버튼을 눌러 진행합니다.
1.2
다음과 같은 화면이 보이면 또 "다음" 버튼을 눌러 진행합니다.
1.3
현재 가상 머신에 windows 운영 체제가 실행되고 있기 때문에 "다음" 버튼을 눌러 진행합니다.
만약 Root directory를 변경하고자 하면 아래의 화면에서 변경하시면 됩니다.
1.4
그 다음 Cygwin을 통해 다운로드 받은 패키지들이 어디에 저장될 것인지 지정해 줍니다.
저는 기본으로 설정되어 있는 C:\Users\sean\Downloads 그대로 진행하겠습니다.
1.5
아래의 화면이 나오면 "다음" 버튼을 눌러 그대로 진행합니다.
1.6
이제 어느 곳으로부터 패키지들을 받아올 것인지 미러 사이트를 지정해야 합니다.
서적에서는 FreeBSD 한국 사용자 그룹에서 제공하는 ftp://ftp.kr.freebsd.org/를 추천하기 때문에
서적과 같이 ftp://ftp.kr.freebsd.org/ 를 찾아 선택하고 "다음" 버튼을 눌러줍니다.
1.7
이제 서적에서 다운로드 받으라는 패키지들을 선택하는 화면이 나옵니다.
아래와 같이 빨간색 박스 안에 있는 All 부분을 클릭해줍니다.
1.8
All 부분을 클릭하여 하위 항목들이 보이면 아래의 사진과 같이 Devel과 Interpreters 그리고 Libs가 보이게 됩니다.
패키지를 선택할 때 Devel 항목인지 Interpreters 항목인지 Libs 항목인지 잘 보시고 선택해야 합니다.
1.9
항목들을 하나하나 찾기는 힘들기 때문에 아래의 사진에 보이는 빨간색 박스 부분에
검색 부분을 이용하여 패키지를 검색하고 다운로드 할 수 있겠끔 선택하겠습니다.
항목들이 보이지 않을 때는 아래의 빨간색 박스 중 view 부분이 category로 되어 있는지 확인해보시면 됩니다.
예시를 들자면 다운로드 할 패키지들 중 binutils를 검색 창 부분을 통해 검색을 한 뒤
Devel 항목이 맞는지 확인하고, binutils 패키지를 선택하는데
이 때 선택하는 것은 해당 패키지의 버전을 선택하는 것입니다.
현재 저는 이미 설치가 되어 있는 상태이기 때문에 Current 필드에 버전이 표시되어 있지만
처음 설치하시는 분들은 New 필드에서 버전을 선택하실 수 있습니다.
아래의 사진을 보면 New 부분을 눌렀을 때 나타나는 버전들입니다.
저는 현재 최신 버전인 2.34-1이 설치되어 있기 때문에 유지를 해야해서 New 필드를 Keep 상태로 두었지만
처음 cygwin을 설치하신 분들은 본인이 다운로드하는 시점을 기준으로 최신 버전을 다운로드 하시면 됩니다.
주의할 점은 뒤에 (test) 나 +1git.de9c1b7cfe-1 처럼 이상한 문구가 붙은 것은 제외하고 정상적으로 표기된 버전들 중 최신 버전을 고르세요.
1.10
바로 위의 사진과 설명을 참고하여 아래의 패키지들을 선택하고 "다음" 버튼을 누르면 다운로드가 진행됩니다.
(기재되어 있는 버전은 제가 다운로드할 때의 시점에서 최신 버전입니다.)
그리고 Devel 항목에서 gcc-core 패키지는 소스코드도 함께 설치해줘야 합니다.
소스 코드는 아래의 사진을 보시면 src 체크 박스 부분을 선택해주시면 됩니다.
참고로, 저는 현재 이미 설치가 되어 있기 때문에 Current 부분에 설치된 버전이 보이는 것이며
처음 설치하시는 분들은 Current 부분에 아무것도 안 보이실 것입니다.
Devel 항목
- binutils : 2.34-1
- bison : 3.0.4-1
- gcc-core : 10.2.0-1(소스코드도 함께 다운로드)
- flex : 2.6.4-2
- cygwin32-libiconv : 1.14-2
- libtool : 2.4.6-3
- make : 4.3-1
- patchutils : 0.3.4-1
- cygport : 0.34.0-1
- nasm : 2.13.01-1
Interpreters 항목
- python2 : 2.7.18-1
Libs 항목
- libgmp-devel : 6.2.1-1
- libmpfr-devel : 4.1.0-1
- libmpc-devel : 1.2.1-1
1.11
다운로드가 완료되면 아래의 사진과 같이 바탕화면에 Cygwin Terminal 아이콘이 보일 겁니다.
이제 Cygwin Terminal 이라는 프로그램을 이용하면 크로스 컴파일러를 생성할 수 있습니다.
하지만 아직 실행은 하지 마세요!
1.12
실행 하기 전, 크로스 컴파일러가 생성될 경로를 미리 시스템 환경 변수에 등록하여 실행 파일 경로를 전부 입력하지 않아도 되게 하겠습니다.
가상 머신 위에 있는 Windows 10에서 윈도우키 + r을 누르고, sysdm.cpl을 입력한 뒤 확인을 눌러주세요.
1.13
systdm.cpl을 입력하여 확인을 누르면 아래의 화면이 보일 것입니다.
아래의 사진에서 빨간색 박스 부분에 적힌 "고급" 탭을 눌러 이동해줍니다.
1.14
"고급" 탭으로 들어가면 아래의 사진과 같은 화면이 보일 것입니다.
아래의 사진에 보이는 빨간색 박스 부분 "환경 변수" 버튼을 눌러 환경 변수 설정 창에 들어갑니다.
1.15
환경 변수 설정 창에 들어가면 아래의 사진과 같은 화면이 보일 것입니다.
빨간색 큰 박스 부분에 Path 항목을 찾아서 더블 클릭 혹은 Path 항목을 선택한 후 "편집" 버튼을 눌러주세요.
1.16
시스템 변수 중 Path 항목 편집 창에 들어가서 아래의 사진에서 빨간색 박스 부분을 새로 추가해줘야 합니다.
값을 추가하는 방법으로 아래의 사진에서 주황색 박스 부분에 있는 "새로 만들기" 탭을 누르면 새로운 항목을 추가할 수 있습니다.
"새로만들기" 버튼 클릭 -> C:\Cygwin\bin 입력한 후 엔터 -> "새로만들기" 버튼 클릭 -> C:\Cygwin\usr\cross\bin 입력한 후 엔터
(주의할 점 "/ (슬래시)" 기호가 아닌 "\ (역슬래시)" 기호를 입력해야 합니다.)
그 다음 "확인" 버튼을 눌러 창을 닫아주면 이제 환경 변수 설정은 완료되었습니다.
2. 크로스 컴파일러 만들기 전 binutils 생성하기.
크로스 컴파일러란 자신이 실행되는 플랫폼이 아닌 다른 플랫폼에서 동작하는 실행 파일을 생성하는 컴파일러입니다.
즉, 쉽게 예를 들면 맥 OS에서 윈도우 실행 파일을 만든다던가, 리눅스 환경에서 맥 OS용 실행 파일을 생성할 수 있습니다.
크로스 컴파일러를 생성하기 전 먼저 알려드리자면, 크로스 컴파일러는 시간이 많이 걸리기도 하고 어떠한 오류가 뜰 수도 있습니다.
이제 아까 설치 완료했던 Cygwin Terminal을 실행해 줍니다.
실행하고 나면 아래의 사진과 같은 화면이 나올 것입니다.
2.1
Cygwin Terminal에서 /usr/src 디렉토리로 이동하겠습니다.
cd /usr/src를 입력해주세요.
그리고 ls 를 입력하여 어떤 파일들이 있는지 확인해봅니다.
/usr/src 디렉토리 밑에는 아까 Cygwin을 통해 다운로드 했던 GCC의 소스 코드가 보일 것입니다.
(처음 Cygwin을 설치했다면, 아래의 사진에 있는 빨간색 박스에 적힌 GCC의 소스코드 이외에는 아무것도 없어야 합니다.)
2.2
GCC 소스 코드를 이용하여 크로스 컴파일러를 만들려면 먼저 GNU Binutils를생성해야 합니다.
GNU Binutils는 바이너리와 관련된 유틸리티들이 모여 있습니다.
흔히 컴파일 과정을 거쳐 생성된 오브젝트 파일을 링크하여 실행 파일이나 라이브러리를 생성할 때
이 링크 과정에서 GCC는 Binutils를 사용하게 됩니다.
binutils를 생성하려면 먼저 binutils의 소스코드가 필요합니다.
위의 명령을 잘 따라하셨다면 현재 /usr/src 디렉토리에 위치해 있을 것입니다.
(자신이 위치한 디렉토리 경로를 보려면 pwd 명령어를 입력하시면 됩니다.)
그렇다면 아래의 사진과 같이 wget http://ftp.gnu.org/gnu/binutils/binutils-버전.tar.xz 를 입력합니다.
(주의할 점. 아래의 사진에서 저는 binutils-2.34.tar.xz 파일을 다운로드했지만, 여러분은 자신이 아까 Cygwin을 통해 다운로드했던 binutils 바이너리의 버전과 맞춰서 다운로드해야 합니다.)
다운로드가 성공적으로 완료되면 ls 명령을 입력했을 때
아래의 사진에서 보이는 빨간색 박스 부분 처럼 binutils-자신의 버전.tar.xz 파일이 생겼을 것입니다.
2.3
하지만 저희가 다운로드 받은 파일은 압축 파일이기 때문에 압축 해제 해줘야 합니다.
아래의 사진과 같이 tar -xvf binutils-자신이 다운로드받은 버전.tar.xz 명령을 입력해주세요.
참고.
wget은 웹으로부터 파일을 받아올 때 이용하는 명령어입니다.
tar는 파일 묶음과 압축에 관련된 도구(명령어)이며
-x는 묶음 해제 및 압축 해제
-v는 과정을 보여줍니다.
-f는 완료된 뒤의 파일명을 지정하는 옵션입니다.
2.4
압축 해제가 완료되면 아래의 사진에서와 같이 binutils-자신이 다운로드받은 버전 디렉토리가 생성되었을 것입니다.
2.5
이제 cd binutils-자신이 다운로드받은 버전 명령어를 입력하여 압축 해제한 디렉토리로 이동합니다.
그리고 아래의 사진과 같이
export TARGET=x86_64-pc-linux 와 export PREFIX=/usr/cross 와 같이 입력하여
환경 변수를 설정함으로써 플랫폼 및 경로 설정 작업을 해준 뒤
./configure --target=$TARGET --prefix=$PREFIX --enable-64-bit-bfd --disable-shared --disable-nls 를 입력하여
플랫폼, 디렉토리, 64비트 지원과 관련된 빌드 옵션을 설정합니다.
참고)
export TARGET=x86_64-pc-linux 에서
export : 쉘에 변수를 설정하는 역할
TARGET : binutils가 지원할 플랫폼의 값을 설정하는 변수
export PREFIX=/usr/corss 에서
export : 쉘에 변수를 설정하는 역할
PREFIX: 최종 결과물을 복사할 디렉토리 값을 설정하는 변수
./configure --target=$TARGET --prefix=$PREFIX --enable-64-bit-bfd --disable-shared --disable-nls 에서
./configure (은)는 binutils 소스에 포함된 옵션 설정 스크립트
--target=$TARGET : 플랫폼 관련 옵션, $TARGET을 설정함으로써 쉘 변수의 TARGET 값을 사용한다.
--prefix=$PREFIX : 디렉토리 관련 옵션, $PREFIX를 설정함으로써 쉘 변수의 PREFIX 값을 사용한다.
--enable-64-bit-bfd : 64비트 관련 기능을 활성화 하는 옵션
--disable-shared : 공유 라이브러리 대신 정적 라이브러리를 생성하는 옵션
--disable-nls : 메시지를 영어로 출력하게 하는 옵션
2.6
옵션 설정이 정상적으로 끝나고 나면 config.status 파일과 Makefile 파일이 생성됩니다.
이제 옵션 설정이 끝났으니 빌드를 수행하는 OS에 관련된 정보를 수집해야 합니다.
아래의 사진과 같이 make configure-host를 입력하세요.
2.7
이제 binutils 생성의 거의 대부분이 완료되었습니다.
빌드와 설치만 하고 나면 binutils 생성은 끝이 납니다.
먼저 binutils를 빌드하기 위해 아래의 사진과 같이 make LDFLAGS="-static" 을 입력합니다.
(만약 명령어 오류가 발생한다면 make LDFLAGS="-all-static"을 입력하시면 됩니다)
이 작업은 상당한 시간이 필요로 하기 때문에 명령어를 실행해두고 유튜브 좀 보다보면 완료되어 있을 것입니다.
(화면이 멈춰있어도 끝난 게 아닙니다. 아래의 사진과 같이 명령어를 입력할 수 있는 녹색과 노란색 부분이 나와야 끝이 난 것입니다.)
2.8
이제 빌드까지 끝났다면 대망의 설치 작업! 이것까지 하고 나면 이제 완전히 binutils 생성이 끝나게 됩니다.
2.9
이제 설치가 완료 되고 나면 정상적으로 설치가 되었는지 확인을 해줘야합니다.
/usr/cross/bin/x86_64-pc-linux-ld --help | grep "supported" 를 입력해줍니다.
그리고 아래의 사진처럼 elf64-x86-64와 elf32-i386 문자열이 보인다면 성공적으로 32비트와 64비트를 동시에 지원하는 Binutils가 설치된 것입니다.
하지만 x86_64-pc-linux-ld가 정상적으로 실행되지 않거나 아래와 같은 문자열이 보이지 않다면 설치에 실패한 것입니다.
이 때는 다시 binutils 소스코드 압축 해제부터 해보시면 됩니다.
3. GCC를 이용하여 크로스 컴파일러 만들기.
이제 본격적으로 GCC 소스 코드를 이용하여 크로스 컴파일러를 만들도록 하겠습니다.
이 3번 작업은 2번에서의 작업보다 더 많은 시간이 걸립니다.
위의 2번 binutils 생성 작업을 막 끝낸 상황이라면 이어서 명령어를 입력하시면 되고
2번까지 하고 Cygwin Terminal을 종료하신 분은 다시 Cygwin Terminal을 켜서 명령어를 입력하시면 됩니다.
먼저, cd /usr/src 를 입력하여 디렉토리를 이동합니다.
3.1
디렉토리를 /usr/src로 이동한 뒤 ls 명령어를 통해 파일들을 보면 아래의 사진과 같이 gcc-버전.src 파일이 있을 것입니다.
이 gcc-버전.src 파일 안에 GCC의 소스코드가 압축된 파일로 존재합니다.
그래서 cp 명령어를 이용해서 gcc-버전.src 안에 있는 gcc-버전.tar.xz 파일을 /usr/src 밑에 복사해옵니다.
참고)
cp gcc-버전.src/gcc-버전.tar.xz . 명령에서
cp : 복사하는 명령어
gcc-버전.src/gcc-버전.tar.xz : 복사할 파일
. : 복사할 파일을 어디에 복사할 건지 지정하는 부분인데 리눅스에서 디렉토리 관련하여 ' . (점 혹은 dot) ' 은 현재 디렉토리를 의미하기 때문에 현재 자신이 있는 디렉토리의 경로가 /usr/src 이므로 gcc-버전.src 안에 있는 gcc-버전.tar.xz 파일을 /usr/src 디렉토리 밑에 복사
3.2
파일을 복사 해왔으면 아래의 사진과 같이 gcc-버전.tar.xz 파일이 새로 생겼을 것입니다.
3.3
아래의 사진과 같이 gcc-버전.tar.xz 파일을 압축 해제해 줍니다.
3.4
압축 해제를 완료하면 cd gcc-버전 을 입력하여 디렉토리를 이동해줍니다.
3.5
이제 2번 binutils 생성 때 했던 것과 같이 환경 변수를 설정함으로써 플랫폼 및 경로 설정 작업을 해줘야 합니다.
아래의 명령어를 사진과 같이 차례대로 하나씩 입력해줍니다.
export TARGET=x86_64-pc-linux
export PREFIX=/usr/cross
export PATH=$PREFIX/bin:$PATH
참고)
export TARGET=x86_64-pc-linux 에서
export : 쉘에 변수를 설정
TARGET=x86_64-pc-linux : Binutils가 지원할 플랫폼의 값을 설정하는 함수
export PREFIX=/usr/cross 에서
export : 쉘에 변수를 설정
PREFIX=/usr/cross : 최종 결과물이 복사될 디렉토리 값을 설정하는 변수
export PATH=$PREFIX/bin:$PATH 에서
export : 쉘에 변수를 설정
PATH=$PREFIX/bin:$PATH : 기존에 미리 설정된 PATH 환경 변수 값인 경로 앞에 '/usr/cross/bin' 경로를 추가
3.6
아래의 명령어를 입력하여 플랫폼, 디렉토리, 64비트 지원과 관련된 빌드 옵션을 설정합니다.
./configure --target=$TARGET --prefix=$PREFIX --disable-nls --enable-languages=c --without-headers --disable-shared --enable-multilib
참고)
./configure : GCC 소스에 포함된 옵션 설정 스크립트
--target=$TARGET : 플랫폼 관련 옵션, $TARGET을 설정함으로써 쉘 변수의 TARGET 값을 사용하게 설정
--prefid=$PREFIX : 디렉토리 관련 옵션, $PREFIX를 설정함으로써 쉘 변수의 PREFIX 값을 사용하게 설정
--disable-nls : 메시지를 영어로 출력하게 설정하는 옵션
--enable-languages=c : 빌드 언어를 C언어로 설정하는 옵션
--without-headers : libc에서 헤더 파일을 참조하지 않게 설정하는 옵션
--disable-shared : 공유 라이브러리 대신 정적 라이브러리를 생성하는 옵션
--enable-multilib : 32비트와 64비트 코드를 모두 생성할 수 있도록 하는 옵션
3.7
옵션 설정 부분이 완료되면 config.status 파일과 Makefile 파일이 생성됩니다.
이제 옵션 설정이 끝났으므로 빌드를 수행하는 OS에 관련된 정보를 수집해야 합니다.
make configure-host 를 입력해줍니다.
3.8
OS에 관련된 정보 수집이 끝났다면 이제 빌드와 설치를 하기 전에
빌드 과정에서 사용하는 몇몇 라이브러리를 cp 명령어를 통해 복사해야합니다.
차례대로
cp /lib/gcc/32비트, 64비트에 따라 cygwin지정/버전/libgcc_s.dll.a /lib/gcc/32비트, 64비트에 따라 cygwin지정/버전/libgcc_s.a
cp /lib/libmpfr.dll.a /lib/libmpfr.a
cp /lib/libmpc.dll.a /lib/libmpc.a
cp /lib/libgmp.dll.a /lib/libgmp.a
참고)
아래의 사진에서 첫 번째 명령어 중 x86_64-pc-cygwin 부분은 제가 현재 64bit windows 10에서 진행하기 때문에 cygwin을 64비트 실행 파일을 받았었기 때문입니다.
windows를 32bit로 하고 계시다면 cygwin도 당연히 32비트 실행 파일을 받았을 것이고, 그렇다면 명령어에서 x86_64-pc-cygwin 대신 i686-pc-cygwin을 입력하시면 됩니다.
그리고 아래의 사진에서 첫 번재 명령어 중 10은 저와 다를 수 있습니다.
현재 디렉토리에서 일치하는 문자열을 자동으로 만들어주는 Tab키 기능을 이용하여 자신에게 있는 버전을 10 대신 입력하면 됩니다.
(Tab키 기능은 문자열 중 일부분만 입력하고 tab 키를 누르면 자동으로 완성 시켜 줍니다.)
3.9
이제 대망의 GCC 소스 코드를 빌드해줄 시간입니다.
이 작업은 정말 상당히 지루하도록 많은 시간이 소요됩니다.
그렇기 때문에 밥을 먹든 책을 읽든 게임을 하든 다른 무언가를 하고 있는 것을 추천드립니다.
make all-gcc를 입력하세요.
3.10
이제 길고 긴 빌드가 끝났을 것입니다.
이제는 설치만 해주면 크로스 컴파일러 만들기는 완전히 끝납니다.
이 작업은 그리 오래 걸리지는 않으니 걱정 안하셔도 됩니다.
make install-gcc를 입력하세요.
3.11
마지막으로 설치가 잘 되었는지 확인 작업을 해줘야 합니다.
/usr/cross/bin/x86_64-pc-linux-gcc -dumpspecs | grep -A1 multilib_options 를 입력하여 아래의 사진과 같은 결과가 나오면
크로스 컴파일러 설치가 완벽히 끝납니다.
m32와 m64가 동시에 나타나면 GCC가 32bit와 64bit를 모두 지원한다는 뜻입니다.
4. nasm, eclipse, qemu 설치
4.1
nasm은 윈도우와 리눅스 모두 지원하며 무료로 제공되는 어셈블러입니다.
nasm은 Cygwin에서 이미 설치했기 때문에 따로 설치하지 않아도 됩니다.
설치가 잘 되었는지 확인하고 싶다면, cygwin terminal에서 nasm -v를 입력해보면 됩니다.
아래의 사진처럼 nasm의 버전이 뜬다면 정상적으로 설치되어 있는 것입니다.
4.2
그 다음 Eclipse는 www.eclipse.org/downloads/ 에 접속하셔서 자신의 플랫폼에 맞게 다운로드 하시면 됩니다.
설치하는 과정에서 Eclipse IDE for C/C++ Developers 항목을 선택해주셔서 설치해주시면 됩니다.
만약 Eclipse가 정상적으로 실행되지 않는다면 JRE를 설치해주시면 됩니다.
www.java.com/ko/download/
4.3
Qemu는 오픈 소스 프로세서 에뮬레이터로 다양한 종류의 프로세서를 소프트웨어적으로 구현한 프로그램입니다.
www.qemu.org/download/
단, 서적은 0.10.4 버전에 맞추어 Mint64 OS의 기능을 시험했습니다
그렇기에 0.10.4 버전 혹은 근접한 버전인 0.15.92 버전을 설치하는 것을 추천한다고 합니다.
위의 Qemu 공식 사이트에서 다운로드 받아도 되지만 한승훈 님께서 직접 공유해주시고 계시는 아래의 링크를 통해 받으셔도 됩니다.
Qemu 0.10.4 - github.com/kkamagui/mint64os-examples/blob/master/files/qemu-0.10.4.zip
Qemu 0.15.92 - qemu.weilnetz.de/w32/2011/qemu-20111119-w32.exe
이렇게 OS 개발 준비가 모두 끝났습니다.
성공적으로 설치되었다면 앞으로의 공부를 응원하고
설치에 실패하셨다면 다시 처음부터 진행해보시면서 따로 연락을 주시거나 댓글을 남겨주시면 됩니다.
'시작하지 말았어야 했던 것 > 64비트 멀티코어 OS' 카테고리의 다른 글
64비트 멀티코어 OS[3] - 1. 부팅과 부트로더란 (0) | 2021.02.10 |
---|---|
64비트 멀티코어 OS[2] - 2. 운영 모드와 메모리 관리 기법 (0) | 2021.02.09 |
64비트 멀티코어 OS[2] - 1. 운영 모드와 레지스터 (0) | 2021.02.06 |
64비트 멀티코어 OS[1] - 2. 우분투 개발 환경 구축 (0) | 2021.01.27 |
64비트 멀티코어 OS[0] - OT(참고 자료들) (0) | 2021.01.12 |