다른 시스템에서 사용하는 하드 드라이브에 grub을 설치합니다.

다른 시스템에서 사용하는 하드 드라이브에 grub을 설치합니다.

따라서 다음과 같은 파티션 테이블이 있는 임베디드 시스템용 512MB 플래시 칩이 있습니다.

p1: 32MB boot partition
p2: 200MB recovery partition
p3: 200MB normal partition

저는 우분투(개발) 머신에서 buildroot를 사용하여 "일반" 파티션의 200MB ext2 이미지를 컴파일하고 있습니다. 이 시점에서 내 개발 상자에서 buildroot에서 생성된 이미지를 플래시 칩에 추가합니다(/dev/sdd의 ide-USB 커넥터를 사용하여 연결됨).

dd if=./output/images/rootfs.ext2 of=/dev/sdd3

좋습니다. /dev/sdd3을 마운트하고 임베디드 장치가 사용할 전체 파일 시스템을 볼 수 있습니다.

이제 이 플래시 칩에 grub을 설치하고 싶지만 어떻게 해야 할지 모르겠습니다. 나는 시도했다:

grub-install /dev/sdd

그러나 내장 장치에 플래시 칩을 삽입하고 전원을 켜면 grub이 로드되지 않습니다(커서가 깜박이는 검은색 화면에만 나타납니다. 오류는 없습니다).

답변1

많은 검색과 추측, 확인 끝에 문제에 대한 해결책을 찾았습니다.

첫 번째 dd rootfs 이미지 buildroot는 다음을 생성합니다.

sudo dd if=./output/images/rootfs.ext2 of=/dev/sdd3

그런 다음 sdd3에서 sdd1로 /boot를 복사하고, menu.lst 파일을 생성하고, bzImage를 복사합니다.

마지막으로 grub을 실행합니다.

sudo grub --device-map=/dev/null
> device (hd0) /dev/sdd
> root (hd0,0)
> setup (hd0)
> quit

드라이브를 시스템에 연결하기만 하면 모든 것이 로드됩니다.

답변2

Grub에게 디스크가 새 시스템의 기본 하드 드라이브가 될 것임을 알리고 부트 섹터에 맞지 않는 부트 로더 부분을 찾을 수 있는 위치를 알려주어야 합니다. Grub은 부팅 시 디스크 이름과 실행 중인 운영 체제의 디스크 이름 간의 대응을 장치 맵으로 참조합니다.

/media/sdd3/boot/grub/device.map포함하도록 편집하면 생각합니다.

(hd0) /dev/sdd

그런 다음 grub-install --root-directory=/media/sdd3/boot/grub/device.map.

관련 정보