乐鑫技术交流
直播中

徐伟

7年用户 924经验值
私信 关注
[问答]

构建esp-open-lwip失败了怎么解决?

我目前正在使用来自 crosstool-ng/crosstool-ng 的最新 crosstool-ng 为最新的 gcc 编译器 (6.3.0) 和 Cygwin64 构建 esp-open-sdk。
我发现我以前记录的许多问题现在都消失了。我之前使用 64 位 Cygwin 和插件时遇到的问题现在都消失了,启用预编译头文件并包含 GDB 的 TUI 界面时出现的问题也消失了。这些不再需要在 crosstool 构建覆盖中定义出来,为了获得几乎可以工作的构建,我所要做的就是将叠加层、样本和本地补丁复制到当前的 crosstool-NG 树中。
最后,我只需要稍微调整一下 0003-xtensa-add-HW-FPU-sequences-for-DIV-SQRT-RECIP-RSQRT 补丁,工具链就构建好了,似乎可以正常工作。然后我开始构建 open-sdk 的其余部分,这是我遇到了几个障碍的地方。
首先对于任何使用 Cygwin 的人来说,他们已经对实现 Posix 文件权限的方式和 Windows 下的权限顺序进行了一些更改,这会导致一些奇怪的事情发生。结合这一点,我认为 crosstool-ng 现在在最终构建的工具链上添加了更严格的文件和目录权限,结果是在将 esptool、libcirom 和其他库安装到树中时会出现文件访问错误。我必须将 chmod u+w 命令添加到主要 Makefile 的部分,它会在其中复制或创建文件。
其次,我现在有一个关于创建基于 sysroot 的工具链的 crosstool-NG 的未解决问题 - 似乎 CT_USE_SYSROOT 的默认选项设置不正确,结果是没有创建 sysroot 目录系统。当您正在寻找或创建 libc 或 libhal 等时,这会导致 Makefile 的其他部分失败。我不得不手动将 CT_USE_SYSROOT=y 添加到覆盖中,问题自行解决。
最后,构建 esp-open-lwip 失败了,因为它使用了 -mforce-l32 并且这个补丁没有添加到我的 gcc6.3.0 构建中。我没有删除此编译器选项,而是调整了 Makefile 以查看它是否适用,而且它几乎适用,只有几行被拒绝。但是,仔细查看被拒绝的补丁,似乎 -mauto-litpools 选项现在是代码的一部分,这可能会发生冲突。
所以想知道-mforce-l32是什么状态,能不能调整一下和后面的代码共存?
这是来自 xtensa.md 的被拒绝的补丁。另一个被拒绝的是针对 xtensa.opt 的并且是微不足道的,但是这个看起来有点繁琐。所有其他补丁应用完美。
代码:全选xtensa.md.rej
--- gcc/config/xtensa/xtensa.md
+++ gcc/config/xtensa/xtensa.md
@@ -799,8 +802,8 @@
})

(define_insn "movhi_internal"
-  [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,U,*a,*A")
-   (match_operand:HI 1 "move_operand" "M,d,r,I,U,r,*A,*r"))]
+  [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A")
+   (match_operand:HI 1 "move_operand" "M,d,r,I,Y,Z,r,*A,*r"))]
   "xtensa_valid_move (HImode, operands)"
   "@
    movi.n\t%0, %x1
@@ -808,12 +811,13 @@
    mov\t%0, %1
    movi\t%0, %x1
    %v1l16ui\t%0, %1
+   ssa8l\t%B1 ; srli\t%0, %B1, 2 ; slli\t%0, %0, 2 ; %v1l32i\t%0, %0, 0 ; srl\t%0, %0 ; extui\t%0, %0, 0, 16
    %v0s16i\t%1, %0
    rsr\t%0, ACCLO
    wsr\t%1, ACCLO"
-  [(set_attr "type"   "move,move,move,move,load,store,rsr,wsr")
+  [(set_attr "type"   "move,move,move,move,load,load,store,rsr,wsr")
    (set_attr "mode"   "HI")
-   (set_attr "length"   "2,2,3,3,3,3,3,3")])
+   (set_attr "length"   "2,2,3,3,3,18,3,3,3")])

;; 8-bit Integer moves



xtensa.md的相关部分
代码:全选xtensa.md
})

(define_insn "movhi_internal"
  [(set (match_operand:HI 0 "nonimmed_operand" "=D,D,a,a,a,a,U,*a,*A")
   (match_operand:HI 1 "move_operand" "M,d,r,I,Y,U,r,*A,*r"))]
  "xtensa_valid_move (HImode, operands)"
  "@
   movi.n\t%0, %x1
   mov.n\t%0, %1
   mov\t%0, %1
   movi\t%0, %x1
   movi\t%0, %1
   %v1l16ui\t%0, %1
   %v0s16i\t%1, %0
   rsr\t%0, ACCLO
   wsr\t%1, ACCLO"
  [(set_attr "type"   "move,move,move,move,move,load,store,rsr,wsr")
   (set_attr "mode"   "HI")
   (set_attr "length"   "2,2,3,3,3,3,3,3,3")])

;; 8-bit Integer moves



               


回帖(1)

杨福林

2024-6-4 16:53:27
如果你遇到了构建 esp-open-lwip 失败的问题,可以尝试以下解决方法:

1. 确保你已经正确配置了 crosstool-ng 和 Cygwin64,并且你的系统环境变量和路径都已经设置好。

2. 确认你的 esp-open-lwip 源代码没有出现错误或者缺失文件的情况,并下载并尝试最新的版本。

3. 检查你的交叉编译器和依赖库是否都为最新版本,并使用命令 make clean 清除旧的编译结果和中间文件。

4. 确保你的编译器选项和链接选项都正确配置,比如需要手动指定 Xtensa 架构和链接器脚本文件等。

5. 尝试在构建时添加调试选项,以便定位编译错误和异常情况,并根据错误提示进行相应的调整和修复。

如果以上方法都无法解决问题,你可能需要更换其他的编译器或者寻求专业的技术支持。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分