C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
분야별 포럼
C++빌더
델파이
파이어몽키
C/C++
프리파스칼
파이어버드
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

자유게시판
세상 살아가는 이야기들을 나누는 사랑방입니다.
[27513] Re:NTFS 지원 안되는 구형 UEFI 몌인보드에서 NTFS 지원
빌더(TWx) [builder] 6062 읽음    2017-09-14 23:03
궁금 님이 쓰신 글 :
: NTFS 지원 안되는 구형 UEFI 몌인보드에서 NTFS 지원 가능하도록
: 바이오스 확장해주 는건 어떻게 만드는 건가요?
: .EFI 파일 만들어서  한다고 하던데 방법이 궁금 합니다



답변:


MS에서 배포하는 손안댄 순정 Windows OS 설치파일을 사용하면
메인보드가 UEFI 펌웨어에서 NTFS 파일시스템을 지원하든 안하든 상관 없습니다.

문제가 되는 경우는...

사용자가 OS 설치 이미지에서 /sources/ 디렉토리의 install.wim 파일을 수정해서
이미지 파일 안에 '프로페셔널/엔터프라이즈/서버 등 여러 OS 패키지를 병합하거나 디바이스 드라이버들 추가 등
install.wim 파일을 커스텀화 해서 사용할 때 인데 (wim 파일구조나 병합 방법은 MSDN 참고하세요)

OS 패키지가 여러 종류가 병합되다보면 install.wim 파일의 크기가 4GB가 넘는 경우가 생길 수 있고
FAT32 파일시스템에선 액세스 할 수 있는 단일파일의 크기가 4GB로 제한 되어서, 메인보드 UEFI 펌웨어가
NTFS 파일시스템을 지원하지 않고 FAT32 파일시스템만 지원하면 OS를 UEFI 모드로 설치 할 수 없게 되죠.

그러나 install.wim 파일이 4GB 크기를 넘더라도, MS에서 제공하는 툴을 이용해서 파일을 분할해주면 되기때문에
문제 될 건 없습니다. 분할 작업 없이 4GB 가 넘는 install.wim 파일을 사용할 수 있으려면 메인보드 UEFI 펌웨어에서
NTFS 파일시스템을 지원하는 경우에만 OS를 UEFI 모드로 설치 할 수 있습니다.

메인보드 UEFI 펌웨어에서 NTFS 파일시스템을 지원하지 않을 때는, NTFS 파일시스템 UEFI 모듈을 만들어서
UEFI 펌웨어에 바인딩 해 주면 됩니다.


확장자 .EFI를 갖는 EFI 모듈은 Windows PE 포맷을 이용합니다. PE 포맷을 확장해서 EFI 모듈정보를 추가로 사용하고 있습니다.
EFI 모듈을 만드는 건, 리눅스에서 GCC를 이용할 수도 있고 Visual Studio C++ 컴파일러를 이용할 수 도 있습니다.

그러나 EFI 모듈이 PE포맷을 기반으로 하기 때문에, GCC를 이용하려면 벡엔드 변경이 필요해서 크로스 컴파일 환경을 셋업해야
합니다. Visual Studio C++ 컴파일러를 사용하는 게 훨씬 편합니다. 개발환경도 뛰어나고.


<Visual C++ 을 이용해서 EFI 모듈 개발. VC++ 컴파일러는 EFI 모듈 빌드를 기본적으로 지원함>


NTFS 파일시스템을 지원하지 않는 메인보드에서 NTFS 파일시스템을 지원하게 하는 방법은...

UEFI용 NTFS 파일시스템 드라이버 모듈을 먼저 컴파일 해서 만들어 놓고...
USB 디스크를 FAT32와 NTFS 파일시스템으로 2개의 파티션을 생성해서, NTFS.EFI 모듈을 로드해서 바인딩 해주는
코드를 구현한 bootx64.efi 만들어서 FAT32 파티션에 넣어주면 UEFI 펌웨어를 NTFS 파일시스템을 지원할 수 있도록
개념적으로 확장 할 수 있게 됩니다.

바인딩 역할을 하도록 사용자가 만든 bootx64.efi 에서 NTFS 파티션에 있는 원래의 OS 이미지로 부팅 과정이 넘어갈 수 있도록
NTFS 파티션의 오리지날 bootx64.efi 로 실행을 넘기면 되죠.

정리하면...

USB 디스크

1. FAT32 파티션
/efi/boot/bootx64.efi (바인딩 역할을 하도록 만든 efi 모듈)
/efi/boot/ntfs.efi (컴파일 한 ntfs efi filesystem driver 모듈)

메인보드의 UEFI 펌웨어가 64비트로 컴파일 되어 있으면
UEFI펌웨어가 /efi/boot/ 디렉토리에서 bootx64.efi 파일명을 갖고있는 모듈을 로드하도록 되어 있음
ntfs.efi 는 다른 디렉토리라도 상관없음. 사용자가 만든 bootx64.efi 에서 해당 디렉토리에서 ntfs.efi 모듈을 로드해서
바인딩 해주면 되므로.

FAT32 파티션엔 사용자가 컴파일한 bootx64.efi와 ntfs.efi 파일, 두 개의 파일만 들어갈 정도로
파티션 크기를 작게 생성하면 됨.


2. NTFS 파티션
iso 이미지를 마운트해서 OS 이미지를 카피해주면 됨.
/boot
/efi/boot/bootx64.efi (OS 오리지날 efi boot 모듈)
/sources
/support
....

위와 같이 런타임 바인딩을 이용해서 UEFI 펌웨어를 개념적으로 확장 할 수 있고...

아예 UEFI 펌웨어를 NTFS를 원래부터 지원하는 것 처럼 하려면
UEFI 펌웨어의 플레쉬 메모리에 ntfs efi 모듈을 컴파일해서 라이트 하는 방법도 있습니다.
UEFI 스펙에서 FV 라고, 플레쉬 메모리를 파일시스템 처럼 다룰 수 있도록 정의해 놓고 있기 때문인데.
이 방법을 쉽게 쓸 건 아니죠. 잘못 건드리면 펌웨어를 망가 뜨릴 수도 있으니.

<NTFS 지원 안되는 UEFI 메인보드에서 NTFS EFI 모듈 바인딩>



메인보드의 UEFI 펌웨어가 64비트로 만들어져 있으면..
OS도 UEFI 모드로 사용할 경우 64비트로 설치해야 하고, 32비트로 설치하는 건 불가능 하다고 말하는 사람들이 있는데
사실상 불가능한 건 아닙니다. 64비트 OS에서 32비트 코드를 사용할 수 있는 것 처럼...
64/32bit 간에 UEFI Thunk 레이어가 있으면 되는데 OS 벤더에서 필요성을 못 느껴서 안하고 있을 뿐 입니다.
시장이 64비트로 컴파일된 UEFI 펌웨어를 갖고있는 하드웨어로 이미 넘어가 있는 상태이므로.


+ -

관련 글 리스트
27512 NTFS 지원 안되는 구형 UEFI 몌인보드에서 NTFS 지원 궁금 4766 2017/09/11
27513     Re:NTFS 지원 안되는 구형 UEFI 몌인보드에서 NTFS 지원 빌더(TWx) 6062 2017/09/14
27514         Re:Re:NTFS 지원 안되는 구형 UEFI 몌인보드에서 NTFS 지원 궁금 5528 2017/09/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.