pxe 부팅에 사용할 새 커널(나중에 자세히 설명)을 빌드하려고 합니다. make를 실행했으므로 이제 필요한 파일을 추출할 수 있도록 make isoimage를 실행하려고 합니다. 내 시도는 다음과 같습니다. 레시피에서 요구하는 사항에 대한 아이디어가 있나요?
bradmin@LinuxDebianLive:/home/kernelbuild/linux-4.12.2$ sudo make isoimage
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
CHK include/generated/bounds.h
CHK include/generated/timeconst.h
CHK include/generated/asm-offsets.h
CALL scripts/checksyscalls.sh
CHK scripts/mod/devicetable-offsets.h
CHK include/generated/compile.h
SKIPPED include/generated/compile.h
LD arch/x86/boot/compressed/vmlinux
ZOFFSET arch/x86/boot/zoffset.h
AS arch/x86/boot/header.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
OBJCOPY arch/x86/boot/vmlinux.bin
BUILD arch/x86/boot/bzImage
Setup is 17692 bytes (padded to 17920 bytes).
System is 4079 kB
CRC 55a16ccf
Kernel: arch/x86/boot/bzImage is ready (#2)
rm -rf arch/x86/boot/isoimage
mkdir arch/x86/boot/isoimage
for i in lib lib64 share end ; do \
if [ -f /usr/$i/syslinux/isolinux.bin ] ; then \
cp /usr/$i/syslinux/isolinux.bin arch/x86/boot/isoimage ; \
if [ -f /usr/$i/syslinux/ldlinux.c32 ]; then \
cp /usr/$i/syslinux/ldlinux.c32 arch/x86/boot/isoimage ; \
fi ; \
break ; \
fi ; \
if [ $i = end ] ; then exit 1 ; fi ; \
done
arch/x86/boot/Makefile:160: recipe for target 'isoimage' failed
make[1]: *** [isoimage] Error 1
arch/x86/Makefile:286: recipe for target 'isoimage' failed
make: *** [isoimage] Error 2
bradmin@LinuxDebianLive:/home/kernelbuild/linux-4.12.2$
추가 정보.. 잘못된 포럼에 질문을 게시했습니다.커널을 빌드하려는 이유에 대한 링크 나는 라이브 Clonezilla iso로 시작했습니다. pxe는 부팅할 때 dhcp를 사용하지 않습니다. 어떤 사람들은 커널이 문제일 수 있다고 제안했습니다. 이것이 내가 지금 있는 곳이다. make .config를 만드는 동안 IP에서 dhcp 지원을 활성화하는 매개변수인 커널 수준 자동 구성을 발견했는데, 이로 인해 어려움을 극복할 수 있었습니다. 그래서 make isoimage를 사용하여 iso를 만들기 시작했을 때 실패했고 그것이 현재의 상태입니다.
업데이트: 일부 진단을 위해 스크립트에 일부 에코를 추가했습니다. isolinux.bin 또는 ldlinux.c32를 찾을 수 없는 것 같습니다. 경험이 더 많았더라면 무슨 일이 일어나고 있는지 볼 수 있었을 텐데, 완성된 걸 본 이후로 그 부분은 완성된 것 같아요. 이제 끝을 클릭하면 종료 1(오류)이 발생하는 논리를 이해합니다.
스크립트 변경
isoimage: $(obj)/bzImage
-rm -rf $(obj)/isoimage
mkdir $(obj)/isoimage
echo Start of loop
for i in lib lib64 share end ; do \
echo $$i; \
if [ -f /usr/$$i/syslinux/isolinux.bin ] ; then \
cp /usr/$$i/syslinux/isolinux.bin $(obj)/isoimage ; \
if [ -f /usr/$$i/syslinux/ldlinux.c32 ]; then \
cp /usr/$$i/syslinux/ldlinux.c32 $(obj)/isoimage ; \
fi ; \
break ; \
fi ; \
if [ $$i = end ] ; then echo "(isolinux.bin or ldlinux.c32) not found"; exit 1 ; fi ; \
done
echo start of copy
cp $(obj)/bzImage $(obj)/isoimage/linux
산출:
Kernel: arch/x86/boot/bzImage is ready (#2)
rm -rf arch/x86/boot/isoimage
mkdir arch/x86/boot/isoimage
echo Start of loop
Start of loop
for i in lib lib64 share end ; do \
echo $i; \
if [ -f /usr/$i/syslinux/isolinux.bin ] ; then \
cp /usr/$i/syslinux/isolinux.bin arch/x86/boot/isoimage ; \
if [ -f /usr/$i/syslinux/ldlinux.c32 ]; then \
cp /usr/$i/syslinux/ldlinux.c32 arch/x86/boot/isoimage ; \
fi ; \
break ; \
fi ; \
if [ $i = end ] ; then echo "(isolinux.bin or ldlinux.c32) not found"; exit 1 ; fi ; \
done
lib
lib64
share
end
(isolinux.bin or ldlinux.c32) not found
arch/x86/boot/Makefile:160: recipe for target 'isoimage' failed
make[1]: *** [isoimage] Error 1
arch/x86/Makefile:286: recipe for target 'isoimage' failed
make: *** [isoimage] Error 2
bradmin@LinuxDebianLive:/home/kernelbuild/linux-4.12.2$
답변1
대신에 syslinux를 다운로드해서 make isoimage
사용 하시면 될 것 같습니다.보세요"ISOLINUX를 사용하여 부팅 가능한 CD를 만드는 방법은 무엇입니까?"더 많은 정보를 알고 싶습니다. 또한 배포판에 따라 genisoimage
대신 사용할 수도 있습니다 mkisofs
(옵션은 정확히 동일하지만).
배포판에 예상과 다른 사용자 정의된 syslinux가 있을 수 있습니다. 우분투는 이런 일을 하는 것으로 알려져 있습니다...