gpt4 book ai didi

linux-kernel - Linux编译 |入口点无效

转载 作者:行者123 更新时间:2023-12-04 03:44:02 26 4
gpt4 key购买 nike

我正在编译 linux kernel使用 mipsel 工具链。

除了最后一点声明无效入口点外,一切正常:

sh: 0: Can't open /arch/mips/boot/tools/entry
rm -f arch/mips/boot/vmlinux.bin.gz
gzip -9 arch/mips/boot/vmlinux.bin
mkimage -A mips -O linux -T kernel -C gzip \
-a 0x80010000 -e \
-n 'Linux-2.6.31.3-g29b45174-dirty' \
-d arch/mips/boot/vmlinux.bin.gz arch/mips/boot/uImage
mkimage: invalid entry point -n

现在它提到sh: 0: Can't open/arch/mips/boot/tools/entry

所以我检查了那个文件,它有以下内容:

#!/bin/sh

# grab the kernel_entry address from the vmlinux elf image
entry=`$1 $2 | grep kernel_entry`

fs=`echo $entry | grep ffffffff` # check toolchain output

if [ -n "$fs" ]; then
echo "0x"`$1 $2 | grep kernel_entry | cut -c9- | awk '{print $1}'`
else
echo "0x"`$1 $2 | grep kernel_entry | cut -c1- | awk '{print $1}'`
fi

现在我知道有些东西正在生成内核入口点,但是生成的入口点是无效的。

问题:究竟是什么生成了内核入口点以及可以采取哪些措施来解决该问题?

问题可以通过以下步骤重现:


编译说明:

$ cd
$ wget https://github.com/steward-fu/a320/releases/download/v1.0/mipsel-4.1.2-nopic.tar.bz2
$ tar xvf mipsel-4.1.2-nopic.tar.bz2
$ sudo mv mipsel-4.1.2-nopic /opt/rg300
$ export PATH=$PATH:/opt/rg300/bin
$ git clone https://github.com/rs-97-cfw/rs97-linux-kernel-NoNDA rg300_kernel
$ cd rg300_kernel
$ ARCH=mips make uImage

最佳答案

这看起来像是环境变量值不正确导致的路径问题。
报错信息 sh: 0: Can't open/arch/mips/boot/tools/entry 是相对于 / 的完整路径,即根目录,而不是正确指定内核源代码的实际存储位置,例如/home/your_username/rg300_kernel/arch/mips/boot/tools/entry

Question: What exactly generates kernel entry point and what potentially could be done to fix the issue?

问题不在于脚本本身,而在于如何调用脚本。
您的内核源所在的目录路径指定不正确。
因为从未找到和执行脚本,所以没有为指定入口点的 -e 选项提供任何值。
因此,mkimage 实用程序(错误地)提示一个“无效的入口点”,但实际问题是无法获得任何值,因为脚本从未被定位和执行。


指定脚本路径的显着文本是:

$(KBUILD_SRC)/$(obj)/tools/entry

您的构建输出表明 obj 环境变量已正确设置为 arch/mips/boot
但是 KBUILD_SRC 似乎被错误地设置为 / (根目录)或者是空白的(???!!!)或者是未定义的,而不是像 /home/your_username/rg300_kernel 或任何正确的路径。

对于解决方法,您可以尝试在 arch/mips/boot/Makefile 中将变量 KBUILD_SRC 替换为 srctree:

 uImage: $(VMLINUX) vmlinux.bin
rm -f $(obj)/vmlinux.bin.gz
gzip -9 $(obj)/vmlinux.bin
mkimage -A mips -O linux -T kernel -C gzip \
- -a $(LOADADDR) -e $(shell sh $(KBUILD_SRC)/$(obj)/tools/entry $(NM) $(VMLINUX) ) \
+ -a $(LOADADDR) -e $(shell sh $(srctree)/$(obj)/tools/entry $(NM) $(VMLINUX) ) \
-n 'Linux-$(KERNELRELEASE)' \
-d $(obj)/vmlinux.bin.gz $(obj)/uImage
@echo ' Kernel: arch/mips/boot/$@ is ready'

变量 srctree 似乎是从 KBUILD_SRC 派生的(在顶级内核 Makefile 中),将它用作替代实际上是一种变通方法。< br/>也许某处 KBUILD_SRC 被破坏或未导出,但 makefile(和脚本)不是我的专长,所以我无法解释根本原因。

关于linux-kernel - Linux编译 |入口点无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65461633/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com