mbedtls-2.6.0 arm linux交叉编译

本文介绍如何使用armlinuxgcc进行mbedtls 2.6.0的交叉编译,包括设置环境变量、指定配置文件等关键步骤。

README for mbed TLS

### arm linux gcc 交叉编译mbedtls 2.6.0方法:

build

下载源代码:mbedtls-2.6.0

====================

编译方法

====================

cd mbedtls-2.6.0
export CC=arm-linux-gcc
export SHARED=1
export CFLAGS="-I$PWD/configs -DMBEDTLS_CONFIG_FILE='<config-thread.h>'"
make
make[4]: Entering directory '/home/wuyilun/Desktop/CAMEOS/platform/package/libs/mbedtls' . /home/wuyilun/Desktop/CAMEOS/platform/include/shell.sh; gzip -dc /home/wuyilun/Desktop/CAMEOS/platform/dl/mbedtls-2.6.0-apache.tgz | tar -C /home/wuyilun/Desktop/CAMEOS/platform/build_dir/target-arm-sigmastar-linux-uclibcgnueabihf/mbedtls-"3.6.1"/.. -xf - Applying 3.6.1_patches/001.patch using plaintext: can't find file to patch at input line 3 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |--- a/include/mbedtls/check_config.h |+++ b/include/mbedtls/check_config.h -------------------------- No file to patch. Skipping patch. 10 out of 10 hunks ignored Patch failed! Please fix 3.6.1_patches/001.patch! make[4]: *** [Makefile:109: /home/wuyilun/Desktop/CAMEOS/platform/build_dir/target-arm-sigmastar-linux-uclibcgnueabihf/mbedtls-"3.6.1"/.prepared_a5533839cd27a28e07a1efe742059062] Error 1 make[4]: Leaving directory '/home/wuyilun/Desktop/CAMEOS/platform/package/libs/mbedtls' make[3]: *** [package/Makefile:228: package/libs/mbedtls/compile] Error 2 make[3]: Leaving directory '/home/wuyilun/Desktop/CAMEOS/platform' make[2]: *** [package/Makefile:224: /home/wuyilun/Desktop/CAMEOS/platform/staging_dir/target-arm-sigmastar-linux-uclibcgnueabihf/stamp/.package_compile] Error 2 make[2]: Leaving directory '/home/wuyilun/Desktop/CAMEOS/platform' make[1]: *** [/home/wuyilun/Desktop/CAMEOS/platform/include/toplevel.mk:184: world] Error 2 make[1]: Leaving directory '/home/wuyilun/Desktop/CAMEOS/platform' make: *** [Makefile:104: iplatform_world] Error 2
09-13
<think> 我们正在处理一个构建错误,该错误发生在应用补丁时。错误信息显示: - 尝试应用 `3.6.1_patches/001.patch` 补丁时失败。 - 补丁文件期望修改的文件 `include/mbedtls/check_config.h` 在源码目录中不存在。 - 错误原因是“找不到要修补的文件”,并且跳过了整个补丁(10个hunk都被忽略)。 ### 问题分析 1. **补丁路径问题**: - 补丁文件 `001.patch` 是基于某个目录结构生成的,但当前解压的源码目录结构可能与之不符。 - 注意:构建系统尝试将补丁应用于 `mbedtls-"3.6.1"` 目录,但实际解压的源码目录可能是 `mbedtls-2.6.0-apache`(因为下载的是`mbedtls-2.6.0-apache.tgz`,而用户选择的是3.6.1版本,这里存在版本不一致)。 2. **版本冲突**: - 从日志中可以看到,下载的是 `mbedtls-2.6.0-apache.tgz`(默认版本),但构建目录却是 `mbedtls-"3.6.1"`。这是因为用户通过menuconfig选择了3.6.1版本,但Makefile中对于3.6.1版本的源码包设置可能未正确覆盖。 - 在之前的Makefile中,当选择3.6.1版本时,设置了: ```makefile PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 ``` 但是,实际下载的却是默认的 `mbedtls-2.6.0-apache.tgz`。这说明版本覆盖可能没有生效,或者下载步骤仍然使用了默认设置。 3. **补丁目录设置**: - Makefile中设置了 `PATCH_DIR:=$(PKG_VERSION)_patches`,即补丁目录为 `3.6.1_patches`。 - 但是,构建系统在解压后的源码目录(应该是 `mbedtls-3.6.1`)中应用补丁,而实际解压的是2.6.0版本的源码,目录结构不同,导致补丁无法应用。 ### 解决方案 1. **确保版本覆盖生效**: - 检查Makefile中版本覆盖的逻辑,确保当 `CONFIG_PACKAGE_libmbedtls_version` 被设置为3.6.1时,`PKG_SOURCE` 和 `PKG_MD5SUM` 被正确覆盖。 - 当前Makefile中,覆盖发生在 `ifdef CONFIG_PACKAGE_libmbedtls_version` 块内,但需要确保在下载步骤之前生效。 2. **补丁兼容性**: - 补丁目录 `3.6.1_patches` 中的补丁是为3.6.1版本设计的,如果源码包版本不对(比如还是2.6.0),那么补丁自然无法应用。 - 因此,必须先确保下载了正确版本的源码包。 3. **构建目录命名**: - 构建目录的命名是 `mbedtls-"$(PKG_VERSION)"`,例如 `mbedtls-3.6.1`。但实际解压的源码包目录名可能不是这个(比如3.6.1版本的源码包解压后目录名可能是 `mbedtls-3.6.1`,而不是带引号的 `mbedtls-"3.6.1"`)。注意日志中构建目录为 `mbedtls-"3.6.1"`,这可能是导致路径问题的原因之一。 ### 具体修正建议 - **修正版本覆盖逻辑**:确保在下载步骤之前,版本覆盖已经完成。检查Makefile中变量覆盖的位置是否足够靠前。 - **检查源码包下载**:确保选择了3.6.1版本后,下载的是 `mbedtls-3.6.1.tar.bz2`(而不是2.6.0的包)。 - **补丁目录匹配**:确保补丁目录中的补丁是为对应版本设计的,并且补丁文件中的路径与解压后的源码目录结构一致。 - **构建目录问题**:检查构建目录的命名,确保没有多余的引号。在Makefile中,构建目录通常由`PKG_BUILD_DIR`定义,默认是`$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)`。注意`PKG_VERSION`中不应该包含引号。 ### 错误日志中的关键点 - 下载的包:`mbedtls-2.6.0-apache.tgz`(默认版本) - 构建目录:`mbedtls-"3.6.1"`(注意这里的引号可能是问题,因为解压2.6.0的包会生成类似`mbedtls-2.6.0-apache`的目录,而构建系统期望的是`mbedtls-3.6.1`,这会导致解压的源码被放在错误的目录,进而补丁应用失败) ### 根本原因 用户选择了3.6.1版本,但构建系统仍然下载了默认的2.6.0版本的源码包,导致后续步骤(如应用补丁)失败。因此,需要确保版本覆盖逻辑正确,并且下载步骤使用了覆盖后的`PKG_SOURCE`。 ### 如何避免 在Makefile中,确保版本覆盖逻辑在下载步骤之前执行,并且覆盖变量(如`PKG_SOURCE`)被正确设置。 §§相关问题§§ 1. 在OpenWrt Makefile中,如何确保版本覆盖变量(如PKG_SOURCE)在下载步骤之前生效? 2. 当补丁文件中的路径与解压后的源码目录结构不匹配时,有哪些调试方法可以定位问题? 3. 如何为不同版本的软件包设计补丁系统,以避免版本混淆导致的补丁应用失败? 4. Makefile中构建目录(PKG_BUILD_DIR)的命名规则是什么,如何避免因版本字符串格式不一致导致的目录不存在问题? 5. 在OpenWrt构建过程中,如果下载的源码包版本与配置的PKG_VERSION不一致,应如何强制重新下载正确版本的源码包? </think> ### 构建错误分析与解决方案 #### **错误原因诊断** 1. **版本路径冲突** - 日志显示构建目录为 `mbedtls-"3.6.1"`,但下载的源码包是 `mbedtls-2.6.0-apache.tgz` - **根本矛盾**:Makefile 中 `PKG_VERSION` 被覆盖为 `3.6.1`,但 `PKG_SOURCE` 变量未生效(仍指向 `2.6.0` 版本源码包) ```makefile # 问题代码示例 ifeq ($(CONFIG_PACKAGE_libmbedtls_version),3.6.1) PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 # 应生效但实际未执行 endif ``` 2. **补丁应用失败** - 补丁 `001.patch` 预期修改 `include/mbedtls/check_config.h` - **路径不匹配**:解压后的源码目录结构为 `mbedtls-2.6.0-apache/include/...`,但补丁期望 `mbedtls-3.6.1/include/...` 3. **版本标识异常** - 构建目录含引号:`mbedtls-"3.6.1"`(正常应为 `mbedtls-3.6.1`) - 导致路径解析失败:`No file to patch` --- #### **解决方案** ##### 步骤1: 修复版本覆盖逻辑 修改 Makefile 确保 **版本选择完全覆盖**: ```makefile # 修正版本覆盖逻辑 (确保在条件判断前清空默认值) PKG_SOURCE:= ifdef CONFIG_PACKAGE_libmbedtls_version ifeq ($(CONFIG_PACKAGE_libmbedtls_version),3.6.1) PKG_SOURCE:=$(PKG_NAME)-3.6.1.tar.bz2 PKG_MD5SUM:=23291b92b1a8a57e4b7b848c8201b48f else ifeq ($(CONFIG_PACKAGE_libmbedtls_version),2.28.1) PKG_SOURCE:=$(PKG_NAME)-2.28.1.tar.gz PKG_MD5SUM:=c546ba363a39ed7baec698759fcbc199 endif else PKG_SOURCE:=$(PKG_NAME)-2.6.0-apache.tgz # 保留默认值 endif ``` ##### 步骤2: 标准化构建目录命名 移除版本号引号: ```makefile # 在 include $(INCLUDE_DIR)/package.mk 后添加 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) ``` ##### 步骤3: 修正补丁路径 确保补丁目录与源码版本严格对应: ```makefile # 在版本选择逻辑中同步设置补丁目录 ifeq ($(CONFIG_PACKAGE_libmbedtls_version),3.6.1) PATCH_DIR:=./patches-3.6.1 # 明确指定版本化补丁目录 endif ``` --- #### **验证修复** 1. **清理历史构建** ```bash make package/libs/mbedtls/clean rm -rf build_dir/target-*/mbedtls-* ``` 2. **重新构建** ```bash make package/libs/mbedtls/compile V=s ``` - 检查日志关键词: `Downloading https://tls.mbed.org/download/mbedtls-3.6.1.tar.bz2`(确认下载正确版本) `Applying patches from ./patches-3.6.1`(确认加载正确补丁) ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值