OpenWrt-Eclipse环境搭建

开发环境

yaml 复制代码
Debian 10.3
Eclipse 2023
OpenWrt 22.03.5
MT7620

环境搭建参考了一个非常稳定的Docker构建项目:docker-openwrt-build-env ,它帮助我太多,真的感谢。

下面给出软件来源

Eclipse安装插件

按照官网教程《Using Eclipse for C/C++ Programming and Debugging》 ,我们需要首先安装插件,插件就是如下四个:

sql 复制代码
C/C++ Remote Launch Developer Resources
Remote System Explorer End-User Runtime
Remote Launch Targets Developer Resources
Terminal (Console) View Developer Resources

安装方式为 Help->Install New Software... ,在逐个搜索时注意两个地方:一是站点选全部,二是去掉对于 Contact all update sites during install to find required software 的勾选。

下载 OpenWrt

这一部分对于新手和老手来说都不难,我简要介绍一下。在下载源码之前,我们先安装一些必要的包到 Debian 上面:

shell 复制代码
sudo apt-get update
sudo apt-get install -y time git-core subversion build-essential g++ bash make libssl-dev patch libncurses5 libncurses5-dev zlib1g-dev gawk flex gettext wget unzip xz-utils python python-distutils-extra python3 python3-distutils-extra python3-setuptools swig rsync curl libsnmp-dev liblzma-dev libpam0g-dev cpio rsync gcc-multilib
apt-get clean

好,现在我们可以下载OpenWrt的源码了,这里我们选一个稳定的版本:

shell 复制代码
git clone --branch v22.03.5 https://git.openwrt.org/openwrt/openwrt.git

然后我们就可以执行官方推荐的 feeds 安装操作:

shell 复制代码
cd openwrt
./scripts/feeds update -a
./scripts/feeds install -a

这一步需要注意的是,有可能 feeds updatefeeds install 单次执行不完全成功,记得多执行几次,看到比较稳定的输出了,再继续编译。

首次编译 OpenWrt

首次编译 OpenWrt 时,我们只需要确定到板子的型号即可,不需要勾选各种其它组件。

我们执行命令:

go 复制代码
make menuconfig

在交互界面中,我们只需要配置:

  • Target System
  • Subtarget
  • Target Profile

其它的都不需要,然后我们就按照提示,按两次ESC,然后YES,保存退出,并执行编译指令:

ini 复制代码
make V=99

添加 OpenWrt 开发所需组件

大家可以根据自身情况酌情添加如下组件:

C或C++开发

如果进行 C++ 开发,至少勾选上 libstdcpp ,我们有太多内容依赖它。

LuCI

一个良好的交互界面肯定是需要的,这里我建议 built-in

  • LuCI -> Collections -> luci

SFTP

传输文件是很难避免的事情,这里我建议 built-in

  • Network -> SSH -> openssh-sftp-server
  • File Transfer -> vsftpd

这里说一句题外话,大家不必按上下左右键去找,直接看界面里蓝色的字母,比如 SSH ,按下S就过去了。

gdbserver

调试程序的时候,是需要在 OpenWrt路由器 上启动一个 gdbserver 程序的,所以我推荐 built-in

  • Development -> gdbserver

以上所有配置完毕后,执行

ini 复制代码
make -j4 V=99

bin固件误区提醒

然后我们就编译成功了,这里有一个误区啊,就是到底选择什么bin文件。一般情况,你会看到两类bin文件,一种是以-initramfs-kernel 结尾,另一种是以 -squashfs-sysupgrade 结尾的。请选择后一种,因为前者是无法保存配置的,听网友们介绍是一种临时文件。

Eclipse 创建C++项目

按照官方教程,我们需要创建 C++ Managed Build 项目:

由于我们是交叉编译,肯定是选择 Cross GCC ,为了方便打出你好世界,我们左边也是选到 Hello World C++ Project

一直下一步到这个交叉编译前缀和路径的配置界面,这里有需要注意的地方:

Eclipse 远程调试

此时我们通过 Eclipse 的 Debug 的 Debug Configurations 新建一个 C/C++ Remote Spplication ,在这里,我们强调几个爱出错的地方:

1. C/C++ Application 选到可执行文件

一般来讲,这一栏可以直接生成,如果没有选上也无法找到 Debug 目录下有文件,请检查自己是否编译了项目。编译非常简单,就是点击一下左上角的锤子按钮。

2. Connection 要使用 SSH

这里官方也是推荐使用SSH,不推荐用串口,因为你终有一天会使用云服务器编译它,你咋加串口?

3. Remote Absolute File Path for C/C++ Application 必须写绝对路径

4. GDB debugger 必须使用 OpenWrt 提供的

这一块选择的gdb就是官方推荐的,它的路径类似于:openwrt/staging_dir/toolchain-mipsel_24kc_gcc-11.2.0_musl/bin/mipsel-openwrt-linux-musl-gdb

5.网络问题

如果你遇到了一些网络问题,请不要着急,积极探索 OpenWrt 路由器的界面的网络配置。再有就是在eclipse中,可以 File -> New -> Other -> Remote System Explore -> Connection 选择连接 Linux ,查看Eclipse是否已经能正常连接OpenWrt路由器了。

致谢

最后,感谢探索过程中遇到的所有乐于助人的网友们,你们才是最棒的。

包括但不仅限于如下列表:

相关推荐
委员2 天前
Arduino中借助LU-ASR01实现语音识别
单片机·嵌入式·语音识别·arduino·nodemcu·lu-asr01·天问block
憧憬一下3 天前
RK3399 PCIe 中断处理与映射分析(INTx中断机制源码分析)
arm开发·嵌入式硬件·嵌入式·linux驱动开发·pci/pcie
7yewh7 天前
Linux驱动开发 IIC I2C驱动 编写APP访问EEPROM AT24C02
linux·arm开发·驱动开发·嵌入式硬件·嵌入式
Wanliang Li8 天前
Linux电源管理——CPU Hotplug 流程
linux·嵌入式硬件·嵌入式·armv8·电源管理·cpuhotplug
憧憬一下8 天前
PCI/PCIe设备INTx中断机制和MSI中断机制
arm开发·嵌入式硬件·嵌入式·linux驱动开发·pci/pcie
委员10 天前
基于NodeMCU的物联网电灯控制系统设计
单片机·物联网·嵌入式·nodemcu··lu_asr01·gy-302
憧憬一下11 天前
PCIe_Host驱动分析_设备枚举
arm开发·嵌入式硬件·嵌入式·pcie·linux驱动开发
憧憬一下13 天前
PCIe_Host驱动分析_地址映射
arm开发·嵌入式硬件·嵌入式·linux驱动开发·pci/pcie
aspirestro三水哥18 天前
Linux: 通过/proc/pid/stack查看程序卡在内核的什么地方
linux·运维·服务器·嵌入式
@启智森18 天前
【C语言】浮点数的原理、整型如何转换成浮点数
c语言·开发语言·嵌入式·float·int·浮点数