섹션 배치와 크기 정렬을 위해 수정한 링커 스크립트가 있는데, 이 책 자체가 윈도우를 기준으로 설명하고 있어서 맥 사용자인 나와는 좀 다르다.
일단 맥에서는 32비트용 링커 스크립트가 어디에 저장되어있는지 확인해보자.
명령어 오류
gcc -melf_i386 -T elf_i386.x -nostdlib Main.o -o Main.elf
위 명령어가 오류가 난다. 확인중
오류 메시지: unknown argument: '-melf_i386'
gcc -m32 -T elf_i386.x -nostdlib Main.o -o Main.elf 이 명령어로 대체할 수 있다. 책에서는 똑같은 설명인데 옵션을 앞에서는 -m32로 주고 뒤에서는 -melf_i386으로 주었다.
그다음오류
ld: unknown option: -T
[220817]
왠지 내가 또 명령어를 맘대로 바꿔서 그런것 같다.
사실 책에는 gcc가 아니라 x86_64-pc-linux-ld.exe로 진행중이다. 찾아보자.
[220821]
책에서 -T 옵션은 내가 만든 커스텀 링커 스크립트를 이용해서 링크를 수행하라는 옵션이라고 한다.
그래서 gcc use linker script command라고 검색했다.
http://korea.gnu.org/manual/release/ld/ld-mahajjh/ld_3.html#SEC6
You may supply your own linker script by using the `-T' command line option. When you do this, your linker script will replace the default linker script.
gnu 설명에도 이게 있는데 왜 안되지..? 애초에 명령어가 gcc로 하면 안되는 건가 싶다.
그래서 use ld in mac으로 검색
https://stackoverflow.com/questions/32531799/ld-command-on-osx
변경한 명령어
ld -dynamic -dylib -arch i386 Main.o -o Main.elf
인데 이제 warning은 뜨지만 파일이 생성되긴 한다. 이제 커스텀으로 만든 링커 스크립트를 통해서 Object 파일을 링크해보자.
참고:
https://www.real-world-systems.com/docs/ld.1.html
https://forum.osdev.org/viewtopic.php?t=19339
위와 같은 글을 보았고, 크로스 컴파일 프로그램으로 다시 검색해봐야겠다.
애플 ls는 크로스 컴파일 안됨
https://github.com/jart/cosmopolitan/issues/80
그래서 이걸 찾음
https://formulae.brew.sh/formula/x86_64-elf-gcc#default
설치 후 오브젝트 파일을 생성하려고 했는데 또 오류가 난다.
cannot find crt0.o: No such file or directory
[220916]
스택오버플로우에서 찾아보는중..
https://stackoverflow.com/questions/41640978/cannot-find-crt0-o-no-such-file-or-directory
맥에서 돌아가는 ld를 다시 설치해보자.
https://stackoverflow.com/questions/39059597/how-to-create-an-elf-executable-on-mac-os-x
와 드디어 elf 파일이 나왔다...
위에서 마지막 덧글을 토대로 설치를 하고, 명령어 ` ~/.local/binutils/bin/i386-unknown-linux-gnu-ld -T ./01.Kernel32/elf_i386.x Main.o -o Main.elf`
나머지는 책을 진행하니까 쭉 진행되었다. 나중에 다시 정리하자...
'개발일지' 카테고리의 다른 글
[OS개발] 10. 64비트 모드로 전환하자 (0) | 2022.10.03 |
---|---|
[OS개발] 5. 32비트 보호 모드로 전환 - 정리중 (0) | 2022.08.08 |
[OS개발] 4.플로피 디스크에서 OS 이미지 로딩 (0) | 2022.08.02 |
[OS개발] 3. 부트로더 만들기 (0) | 2022.08.01 |
[OS개발] 2. 64비트 프로세서 (0) | 2022.07.31 |