2024-04-27 21:03:20 +08:00
2023-04-11 17:29:54 +08:00
2024-04-27 21:03:20 +08:00
2023-05-10 17:25:36 +08:00
2022-11-26 20:19:18 +08:00
2022-11-26 20:19:18 +08:00
2022-11-26 20:19:18 +08:00
2022-11-27 10:43:05 +08:00
2022-11-29 15:55:29 +08:00
2023-04-04 13:31:23 +08:00
2022-11-26 20:19:18 +08:00
2022-11-26 20:19:18 +08:00
2022-11-26 20:19:18 +08:00
2022-11-26 20:19:18 +08:00
2024-04-19 21:30:10 +08:00
2022-12-12 21:40:30 +08:00
2023-04-11 17:29:54 +08:00

说明

这是一个使用openwrt开发MT7688的例子(仅供测试)。

硬件为HLK-7688A模块,采用MT7688AN作为主芯片具有32M Flash与128M DDR2 RAM。

源代码下载

由于本源代码包含第三方源代码,故直接下载可能有部分源代码缺失,需要通过以下方法解决:

  • 在进行git clone 使用--recurse-submodules参数。

  • 若已通过git clone下载,则在源代码目录中执行以下命令下载子模块:

     git submodule update --init --recursive
    

key-build

采用openwrt的工具usign生成,生成后可在应用中使用公钥校验文件。

在openwrt中使用以下命令生成密钥对

usign -G -c "注释信息" -p key-build.pub -s key-build

软件包

软件包实现目录为 packages/ 。除开第三方软件包其余的软件包均将源代码放在本地目录一般放在该软件包Makefile所在目录。对于C/C++程序一般采用CMake作为构建工具可生成适应各种IDE的工程。

FirstBootInit

软件包实现目录为 packages/FirstBootInit/。第一次启动执行的初始化脚本。可用于初始化某些设置如WIFI

netlib

软件包实现目录为 packages/netlib/ 。网络库,包装一些常用的网络操作。作为库软件包模板。包含部分测试程序(编译完成后在 packages/netlib/src/build/,后缀为.exe测试程序不会安装至openwrt。

netlib

appubus

软件包实现目录为 packages/appubus。使用C++封装常用的ubus客户端功能。

appubus

MQTTDaemon

软件包实现目录为 packages/MQTT/MQTTDaemon/ 。MQTT守护进程可连接MQTT Broker。

MQTTDaemon

luci-MQTTDaemon

软件包实现目录为 packages/MQTT/luci-MQTTDaemon/ 。MQTT守护进程的luci界面。

luci-MQTTDaemon

OneNETDaemon

软件包实现目录为 packages/MQTT/OneNETDaemon 。OneNET网关设备守护进程可连接OneNET平台。

OneNETDaemon

luci-OneNETDaemon

软件包实现目录为 packages/MQTT/luci-OneNETDaemon 。OneNET网关设备守护进程的luci界面。

luci-OneNETDaemon

编译

openwrt编译过程中,需要下载大量的数据尤其是要确保github.com等外网的联通若因下载失败而编译失败请手动下载相应的软件包放入openwrt/dl目录,再重新编译。若网络不好需要编译很多次极为正常。

若在中国境内,建议做以下设置:

#启用go模块代理
export GO111MODULE=on
export GOPROXY=https://goproxy.cn

编译环境

编译环境的设置见https://openwrt.org/docs/guide-developer/start 。通常在编译过程中缺什么就安装什么即可。

除了自行安装工具在Linux下还可直接使用docker(需要自行安装docker)命令直接进入编译环境:

#若一开始使用docker那么需要一直使用docker。否则openwrt做的某些软链接会失效。

#此openwrt-be镜像推荐用于脚本测试除非手动安装环境不成功不推荐直接用于整个openwrt的编译推荐使用ubuntu镜像。
sudo docker run -it --rm -u  `id -u`:`id -g` -v `pwd`:/work -w /work heyahong/openwrt-be:22.03 /bin/bash
#更多关于此docker镜像的说明见https://hub.docker.com/r/heyahong/openwrt-be

#此ubuntu镜像安装了编译所需工具可直接作为编译环境。
sudo docker run -it --rm -u  `id -u`:`id -g` -v `pwd`:/work -w /work heyahong/buildenv-ubuntu22.04:base
#更多关于此docker镜像的说明见https://hub.docker.com/r/heyahong/buildenv-ubuntu22.04

常用操作

所有操作都需要在执行bootstrap.sh后进行。成功执行bootstrap.sh后可进行以下操作

  • 编译

    #直接编译
    make 
    #直接编译(显示详细信息)
    make V=sc
    
  • 配置kconfig

    make menuconfig
    
  • 清理

    #清理生成的文件
    make clean
    #清理所有建议备份好openwrt/dl再清理
    make distclean
    

烧录

编译完成后未报错直接退出所有生成的文件在openwrt/bin目录下,其中用的最多的是用于sysupgrade的bin文件。可采用以下方式安装

  • 通过openwrt的固件升级安装。注意不要保留配置。
  • 通过bootloader如breed模组厂家的uboot安装固件。注意布局需要选公版布局非公版布局将导致mac地址不正确。

调试

串口

串口0为调试串口主要用于调试信息输出参数为57600 8N1。

串口主要有以下用途:

  • uboot阶段输出启动信息。在此阶段也可进行一些其它操作如升级固件openwrt固件损坏救砖方式之一等。
  • linux启动过程中输出内核启动信息。
  • linux启动完成后可通过串口进入控制台(按ENTER)可打开SHELL。
  • 用户程序启动后输出信息(如直接向/dev/ttyS0写入信息,echo 信息 > /dev/ttyS0)。

调试信息

openwrt作为一个完整的linux系统可使用多种方式进行调试。

在本工程中通常采用syslog输出调试信息,可通过以下方式查看输出的syslog:

  • 登陆luci界面后在 状态 -> 系统日志 的WEB界面查看
  • 登陆控制台后通过串口登陆或者ssh登陆使用 logread 命令读取系统日志。
  • 如果在luci界面中设定了其它方式如输出到文件或者外部服务器可使用其它方式查看系统日志。

在用户程序中可通过以下方式输出syslog

  • 在sh脚本中可使用 logger 命令向系统日志写入信息。
  • 在C/C++程序中,可使用 syslog 函数输出系统日志(需要先使用 openlog 打开系统日志)

软件包中用户二进制文件的测试

有时候需要对某个编译后得到的用户二进制程序进行测试除了使用硬件测试使用各种工具上传到开发板中还可以使用qemu测试使用QEMU用户程序模拟器

在ubuntu中可使用以下命令安装QEMU其他平台请自行查找资料安装

sudo apt-get install qemu-user

运行二进制文件

注意:所有的运行操作必须在编译完成后,若未编译完成,可能不可运行。

./qemu_run.sh 待运行的程序及参数

qemu-user-run

Description
No description provided
Readme MIT 1.6 MiB
Languages
C++ 83.7%
Shell 4.1%
CMake 4%
C 3.4%
Makefile 2.6%
Other 2.2%