【openwrt】openwrt-21.02 基于MWAN3实现策略路由操作说明

openwrt版本信息

DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='21.02-SNAPSHOT'
DISTRIB_REVISION='r0-6bf6af1d5'
DISTRIB_TARGET='mediatek/mt7981'
DISTRIB_ARCH='aarch64_cortex-a53'
DISTRIB_DESCRIPTION='OpenWrt 21.02-SNAPSHOT r0-6bf6af1d5'
DISTRIB_TAINTS='no-all busybox override'

openwrt-21.02 mwan3配置

make menuconfig-->Network

Routing and Redirection  ---> 

<think> 我们之前遇到了`dtc: Command not found`的错误,并且你已经使用`find`命令找到了多个`dtc`文件或目录。为了解决这个问题,我们需要将其中一个可执行的`dtc`程序添加到系统的`PATH`环境变量中,这样在命令行中就可以直接调用`dtc`命令了。 步骤分解: 1. **确认找到的`dtc`是否为可执行文件**: 使用`find`命令找到的可能是目录或文件,我们需要确认其中哪些是真正的可执行程序(通常是二进制文件或脚本)。例如,你提到的路径`./openwrt-21.02/uboot-7981/uboot/include/config/mkimage/dtc`,我们需要检查这个路径是否是一个可执行文件。 2. **选择要使用的`dtc`路径**: 通常,在编译过程中生成的`dtc`可能位于编译输出的目录中。但为了确保兼容性,建议使用系统安装的`dtc`,或者使用OpenWRT工具链中自带的`dtc`。不过,如果你希望使用编译工具链中的`dtc`,也可以将其路径加入`PATH`。 3. **将`dtc`所在目录添加到`PATH`**: 假设我们确认了某个`dtc`的完整路径,例如`/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc/dtc`(这个路径是常见的U-Boot编译生成的dtc位置,但具体以你的find结果为准),那么我们可以将该文件所在的目录(比如`/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc`)添加到环境变量`PATH`中。 4. **临时添加(仅当前终端有效)**: ```bash export PATH="/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc:$PATH" ``` 5. **永久添加(推荐在编译期间使用)**: 可以将上面的`export`命令添加到你的shell配置文件中(例如`~/.bashrc`或`~/.bash_profile`),然后执行`source ~/.bashrc`使其立即生效。 6. **验证**: 执行`dtc --version`,应该能够输出版本信息。 但是,请注意:在OpenWRT的编译环境中,通常我们不需要手动设置,因为编译脚本会自动设置好工具链的环境变量。所以,出现这个错误可能是因为你的编译环境没有正确设置。因此,更推荐的做法是确保你已经按照OpenWRT的编译要求安装了所有依赖,并且正确设置了编译环境(例如执行了`make menuconfig`并保存,然后执行`make`)。 然而,由于你已经进入到了编译阶段并且报错,我们也可以临时将找到的`dtc`路径添加到环境变量中,然后重新编译。 另外,我们也可以考虑安装系统级的`dtc`: ```bash sudo apt install device-tree-compiler ``` 这样安装后,系统中就有了`dtc`命令,一般位于`/usr/bin/dtc`,它已经在系统的`PATH`中,所以不需要额外设置。 **总结解决方案**: 方案一(推荐):安装系统级的dtc ```bash sudo apt update sudo apt install device-tree-compiler ``` 方案二:将你找到的本地dtc路径添加到PATH(假设路径为`/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc`) ```bash export PATH="/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc:$PATH" ``` 然后重新运行之前的编译命令。 注意:在编译OpenWRT时,建议使用其工具链自带的dtc,因为不同版本的dtc可能有兼容性问题。但是,如果系统安装的dtc版本符合要求,那么安装系统级的dtc是最方便的。 最后,请根据你的实际情况选择解决方案。如果问题仍然存在,请检查编译日志以获取更多线索。 相关问题: 1. 如何正确设置OpenWRT编译环境? 2. 设备树编译器(dtc)版本不兼容会导致什么问题? 3. 如何在Linux中永久添加环境变量? 4. 如何确定一个可执行文件的完整路径? </think> ### 解决dtc命令找不到的问题(找到多个dtc文件后) 当使用`find`命令找到多个dtc文件后,需要通过以下步骤正确配置环境变量: #### 步骤1:识别有效的dtc可执行文件 ```bash # 在find结果中查找实际可执行文件(排除目录和文本文件) find . -name dtc -type f -executable -ls ``` 输出示例: ``` 12345 100 -rwxr-xr-x 1 user group /home/lxx/.../uboot/scripts/dtc/dtc ``` #### 步骤2:选择最优dtc路径 优先选择以下路径中的dtc: - U-Boot工具链中的dtc:`uboot/scripts/dtc/dtc` - OpenWRT工具链中的dtc:`openwrt/staging_dir/host/bin/dtc` #### 步骤3:临时添加到PATH(当前会话有效) ```bash # 假设找到的最佳路径是uboot中的dtc export PATH="/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc:$PATH" # 验证是否生效 which dtc && dtc --version ``` #### 步骤4:永久添加到PATH(推荐) ```bash # 编辑bash配置文件 echo &#39;export PATH="/home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/uboot/scripts/dtc:$PATH"&#39; >> ~/.bashrc # 立即生效 source ~/.bashrc ``` #### 步骤5:创建符号链接(备选方案) ```bash # 将dtc链接到系统路径 sudo ln -s /home/lxx/.../uboot/scripts/dtc/dtc /usr/local/bin/dtc # 验证链接 ls -l /usr/local/bin/dtc ``` #### 步骤6:重新编译测试 ```bash cd /home/lxx/3012_code_group/mtk798x/openwrt-21.02/uboot-7981/atf make clean make -j$(nproc) ``` > **原理说明**:Linux通过`PATH`环境变量查找可执行文件,优先级为: > $$ \text{当前目录} \rightarrow \text{/usr/local/bin} \rightarrow \text{/usr/bin} \rightarrow \text{/bin} $$ > 自定义路径需显式添加到`PATH`前端确保优先使用[^1]。 ### 相关问题 1. 如何永久设置Linux环境变量PATH? 2. 编译嵌入式系统时如何管理工具链路径? 3. Linux符号链接(symlink)的工作原理是什么? 4. 当系统存在多个同名工具时如何指定使用版本? 5. OpenWRT编译环境的最佳配置实践有哪些?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wellnw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值