我正在尝试构建一个新内核(稍后会详细介绍)以在 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。如果我有更多的经验,我可能会看到发生了什么,我想自从我看到完成后,那部分就完成了。现在我明白了逻辑,通过点击最后,那就抛出了 exit 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,这与预期的不同。众所周知,Ubuntu 会做这样的事情......