当前位置: 首页 > news >正文

OpenWrt系统开发笔记

  openWrt英文官网: https://openwrt.org/ 中文官网: http://www.openwrt.org.cn/

一、开发环境及编译

  在github上有两个源码使用的比较多
  一个是lede,地址为:https://github.com/coolsnowwolf/lede
  另一个为OpenWrt的官方源码:https://github.com/lede-project
  下载lede的源码方法为:

git clone https://github.com/coolsnowwolf/lede

  下载OpenWrt的官方源码方法为:

git clone https://github.com/openwrt/openwrt.git

二、编译模块

  单独编译一个模块,以myapp_test为例

make package/myapp_test/clean          // 清除编译生成的文件  
make package/myapp_test/prepare        // 编译准备,下载、解压缩、打补丁  
make package/myapp_test/configure      // 根据设置选项配置生成Makefile  
make package/myapp_test/compile        // 根据Makefile进行编译  
make package/myapp_test/install        // 生成安装包  

三、源码目录

  openWrt顶层目录含义:

config/         // 编译选项配置文件  
docs/           // 文档目录  
include/        // 包含准备环境脚本、下载脚本、编译Makefile以及编译指令  
package/        // 各种功能的安装包  
scripts/        // 包含准备环境脚本、下载脚本、编译Makefile以及编译指令  
target/         // 嵌入式平台  
toolchain/      // 编译器和C库等  
tools/          // 通用命令,用来生成固件的辅助工具  

  在openWrt固件中,几乎所有的东西都是软件包(package),可以编译为 .ipk 结尾的安装包,这样就可以很方便的安装、升级和卸载。
  openWrt编译生成目录含义:

dl/             // 编译时下载软件代码包临时目录  
feeds/          // 扩展软件包目录  
bin/            // 编译完成后的最终成果目录  
build_dir/      // 编译中间文件目录  
staging_dir/    // 编译安装目录  
log/            // 如果打开了log选项,则编译log保存在该目录下  

四、openWrt系统包管理

  安装并进入openWrt系统后,openWrt包管理方法为:

4.1、软件包管理

opkg update		// 更新可以安装的软件包列表
opkg install	// 安装软件包,需要第三个参数传递一个软件包的名称。如 opkg install file
opkg remove		// 卸载安装包,需要第三个参数传递一个软件包的名称。autoremove可以将不需要的安装包也删除。如 opkg remove file --autoremove
opkg upgrade	// 升级软件包,需要第三个参数传递一个软件包的名称。一般只用来升级应用(非内核软件)。

4.2、查询信息:

opkg list					// 列出所有可使用的软件包
opkg list-installed			// 列出系统中已经安装的软件包
opkg list-changed-conffiles	// 列出用户修改过的配置文件
opkg files <pkg>			// 列出属于这个软件包中的所有文件
opkg search <file>			// 列出提供file的软件包,需要传递文件的绝对路径
opkg find <regexp>			// 列出软件包名称和regexp匹配的软件包
opkg info [pkg]				// 显示已安装pkg软件包的信息
opkg download <pkg>			// 将软件包pkg下载到当前目录
opkg print-architecture		// 列出安装包的架构
opkg whardepends [-A] [pkg]	// 针对已安装的软件包,输出依赖这个软件包的软件包

  opkg命令选项:
  -A 查询所有软件包
  -d <dest_name> 使用dest_name作为软件包安装的根目录
  -f <conf_file> 使用conf_file作为opkg的配置文件
  --nodeps 不按照依赖来安装,只安装软件包自己
  --autoremove 卸载软件包时自动卸载不再使用的软件包
  --force-reinstall 强制重新安装软件包

五、openWrt系统配置(UCI接口)

  MVC(Model-View-Control)模式是经典的Web开发编程模式。openWrt也是采用该设计模式,模型层采用统一配置接口 UCI (Unified Configuration Interface)。
  openWrt系统的核心配置文件,都位于 /etc/config/ 目录下。
  例如修改网络ip:

uci set network.lan.ipaddr=192.168.6.1
uci commit network

  通过运行以下命令修改生效:

/etc/init.d/network restart

  如图所示:
在这里插入图片描述
在这里插入图片描述
  常用功能配置文件含义:

/etc/config/dhcp        // dnsmasq软件包配置,包含dhcp和dns设置  
/etc/config/dropbear    // SSH服务器选项  
/etc/config/firewall    // 防火墙设置,包含网络地址转换、包过滤、端口转发等  
/etc/config/network     // 网络配置,包含桥接、接口、路由配置  
/etc/config/system      // 系统配置,包含主机名称、网络时间同步等  
/etc/config/timeserver  // rdate的时间服务列表  
/etc/config/luci        // 基本的LuCI配置  
/etc/config/wireless    // 无限设置和wifi网络定义  
/etc/config/uhttpd      // web服务器选项配置  
/etc/config/upnpd       // miniupnpd UPnP服务设置  
/etc/config/qos         // 网络服务质量的配置文件定义  

六、openWrt内核配置

6.1、sysctl

  sysctl.conf 是系统启动预加载的内核配置文件,sysctl.conf的文件位置在openwrt源码文件的目录为: package/base-files/files/etc/sysctl.conf。通过编译,在openwrt系统中生成/etc/sysctl.d/* 。
  在openwrt系统中可以通过sysctl命令去读和设置。例如:

/sbin/sysctl -a								# 显示所有的内核配置
/sbin/sysctl -n kernel.hostname				# 查询kernel.hostname的值
/sbin/sysctl -w kernel.hostname="zhangsan"	# 修改系统主机名称为zhangsan
/sbin/sysctl -p /etc/sysctl.conf			# 加载配置

在这里插入图片描述

6.2、/proc/sys/ 目录

  大部分可用的内核参数均在 /proc/sys/ 目录下。例如:
  查询是否打开路由转发:

cat /proc/sys/net/ipv4/ip_forward

  打开路由转发设置:

echo "1" > /proc/sys/net/ipv4/ip_forward

6.3、系统配置文件

  系统配置文件介绍:

/etc/rc.local       // 想要在开机后就执行的命令可以写入该文件  
/etc/profile        // 为系统的每个登陆用户设置环境变量  
/etc/shells         // openWrt采用的shell是 /bin/ash  
/etc/fstab          // 各种文件系统的描述信息  
/etc/services       // 互联网网络服务类型列表  
/etc/protocols      // 协议定义描述文件 

相关文章:

OpenWrt系统开发笔记

openWrt英文官网&#xff1a; https://openwrt.org/ 中文官网&#xff1a; http://www.openwrt.org.cn/ 一、开发环境及编译 在github上有两个源码使用的比较多   一个是lede,地址为&#xff1a;https://github.com/coolsnowwolf/lede   另一个为OpenWrt的官方源码&#…...

实战 - Restful APi 格式规范

文章目录 1. 特征2. 优点3. 动作1. GET 获取资源2. POST 创建资源3. PUT 整体替换4. PATCH 部分替换5. DELETE 删除资源 4. 示例 RESTful是一种API的设计风格&#xff0c;他和GraphQL &#xff0c;JSON-RPC&#xff0c;WebService类似&#xff0c;用于定义在CS、BS架构下暴露服…...

《Linux从练气到飞升》No.21 Linux简单实现一个shell

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…...

【iVX】iVX的低代码未来发展趋势:加速应用开发的创新之路

简介&#xff1a; 随着数字化转型的飞速发展&#xff0c;企业和组织对快速开发和交付高质量应用的需求越来越迫切。低代码开发平台作为一种创新的解决方案&#xff0c;极大地简化了应用程序的开发过程。在这一领域&#xff0c;iVX低代码平台作为领先的创业公司&#xff0c;正在…...

zookee 安装

1、下载安装包 weget https://downloads.apache.org/zookeeper/zookeeper-3.6.3/apache-zookeeper-3.6.3-bin.tar.gz 方案1&#xff1a;wget是一个下载指令&#xff0c;后面可以跟下载连接去从服务器上下载东西。 方案2&#xff1a;也可以先下载到windows上&#xff0c;再通…...

OpenWrt编译自己的应用程序

编译OpenWrt的应用程序可以参考OpenWrt内部其他应用程序的例程&#xff0c;来编写成自己的应用程序 一、OpenWrt源代码获取与编译 1.1、搭建环境 下载OpenWrt的官方源码&#xff1a; git clone https://github.com/openwrt/openwrt.git1.2、安装编译依赖项 sudo apt update…...

MySQL 50 题。

MySQL 50 题。 文章目录 MySQL 50 题。数据库。sql。 数据库。 CREATE SCHEMA new_schema DEFAULT CHARACTER SET utf8mb4 ;Operation failed: There was an error while applying the SQL script to the database. Executing: CREATE SCHEMA new_schema DEFAULT CHARACTER SE…...

强化学习算法总结 (1)

强化学习算法总结 (1) 1.综述 强化学习是通过与环境进行交互&#xff0c;来实现目标的一种计算方法。 s − a 1 − r − s ′ s - a_1 - r- s s−a1​−r−s′ 1.1强化学习优化目标 p o l i c y a r g m a x p o l i c y E ( a , s ) [ r e w a r d ( s , a ) ] policy ar…...

Qt应用开发(基础篇)——向导对话框 QWizard

一、前言 QWizard类继承于QDialog&#xff0c;为有向导界面需求的应用环境提供了一个框架。 对话框窗口 QDialog QWizard向导对话框是一个拥有队列界面的特殊对话框&#xff0c;向导的目的是引导用户一步一步的完成预设的流程。向导常用于软件安装界面向导、硬件线路安装向导、…...

Python类的方法

Python类的方法主要分为实例方法、类方法和静态方法三种。 1 实例方法 以self作为第一个参数的方法&#xff0c;就是类的实例方法。该方法由类的实例调用&#xff0c;Python会把调用该方法的实例对象传递给self。 如下代码定义了一个名为A的类。 class A:def __init__(self…...

变电站自动化监控系统

力安科技变电站自动化监控系统是以箱式变电站为管理对象&#xff0c;加装箱变网关&#xff0c;在完成箱变智能化改造的基础上&#xff0c;依托电易云&#xff0c;构建一体化智慧箱变及运维系统。智能箱式变电站被广泛应用于住宅小区、城市公用变压器、工厂、商场、机场、电站等…...

MySql学习笔记11——DBA命令介绍

DBA命令 数据导入 要进入Mysql 创建数据库 create database database_name;使用数据库 use database_name;初始化数据库 source .sql文件地址&#xff0c;不能加双引号&#xff1b;数据导出 要在windows的dos环境下进行 导出数据库 mysqldump database_name > 存放…...

Webpack 复习小结

nodejs学习参考 node常用命令&#xff1a; node xxx.js 执行js文件 npm init -y 初始化package.json npm i 软件包名 下载软件包到本地 npm i 软件包名 -g 下载软件包到全局 npm uni 软件包名 删除软件包 系统优化CDN使用 CDN for free 需求&#xff1a;开发模式使用本地第三…...

Laravel chunk和chunkById的坑

在编写定时任务脚本的时候&#xff0c;经常会用到chunk和chunkById的API。 一、前言 数据库引擎为innodb。 表结构简述&#xff0c;只列出了本文用到的字段。 字段类型注释idint(11)IDtypeint(11)类型mark_timeint(10)标注时间&#xff08;时间戳&#xff09; 索引&#x…...

从零开始学习 Java:简单易懂的入门指南之泛型及set集合(二十二)

泛型及set集合扩展 1.泛型1.1泛型概述 2.Set集合2.1Set集合概述和特点【应用】2.2Set集合的使用【应用】 3.TreeSet集合3.1TreeSet集合概述和特点【应用】3.2TreeSet集合基本使用【应用】3.3自然排序Comparable的使用【应用】3.4比较器排序Comparator的使用【应用】3.5两种比较…...

JVM----GC(垃圾回收)详解

一、Automatic Garbage Collection&#xff08;垃圾回收&#xff09;简介 Automatic Garbage Collection &#xff08;自动垃圾回收&#xff09;是JVM的一个特性&#xff0c;JVM会启动相关的线程&#xff0c;该线程会轮训检查heap memeory&#xff0c;并确定哪些是未被引用的(…...

数据库的三个范式

数据库的三个范式是关系数据库设计中的一组规范&#xff0c;用于确保数据的有效性和一致性。这三个范式分别是&#xff1a; 第一范式&#xff08;1NF&#xff09;&#xff1a;要求数据库表中的每一列都是不可分割的原子值。换句话说&#xff0c;每个表中的每个字段不能包含多个…...

谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行

环境&#xff1a; Win10 专业版 谷歌浏览器 版本 116.0.5845.141&#xff08;正式版本&#xff09; &#xff08;64 位&#xff09; L盾加密终端 问题描述&#xff1a; 谷歌浏览器打开白屏 后台还有还有很多google chrome进程在运行&#xff0c;要全部结束谷歌浏览器进程&…...

Java EE 突击 15 - Spring Boot 统一功能处理

Spring Boot 统一功能处理 一 . 统一功能的处理1.1 初级阶段 : 不断重复1.2 中级阶段 : 集成方法1.3 高级阶段 : Spring AOP1.4 超高级阶段 : Spring 拦截器准备工作实现拦截器自定义拦截器将自定义拦截器加入到系统配置 拦截器实现原理扩展 : 统一访问前缀添加 二 . 统一异常的…...

JasperReport定义变量后打印PDF变量为null以及整个pdf文件为空白

问题1: JasperReport打印出来的整个pdf文件为空白文件&#xff1b; 问题2&#xff1a;JasperReport定义变量后打印PDF变量为null&#xff1b; 问题1原因是因为缺少数据源JRDataSource JasperFillManager.fillReport(jasperReport, params,new JREmptyDataSource());如果你打印…...

Wand-Enhancer终极指南:免费解锁WeMod专业功能的完整解决方案

Wand-Enhancer终极指南&#xff1a;免费解锁WeMod专业功能的完整解决方案 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 还在为WeMod专业版的高昂订阅费…...

Forge模组开发效率提升:Gradle插件自动化构建与热部署实践

1. 项目概述&#xff1a;一个为Forge模组开发者准备的“瑞士军刀”如果你是一名Minecraft Forge模组的开发者&#xff0c;或者你正打算踏入这个充满创造力的领域&#xff0c;那么你大概率经历过这样的场景&#xff1a;为了测试一个简单的功能改动&#xff0c;你需要反复地执行g…...

AI驱动代码审查:Cursor与Git工作流融合实践

1. 项目概述&#xff1a;当AI代码助手遇上代码审查最近在GitHub上看到一个挺有意思的项目&#xff0c;叫guinacio/cursor-review。光看名字&#xff0c;你可能会觉得这又是一个普通的代码审查工具&#xff0c;但点进去仔细研究&#xff0c;你会发现它的核心思路非常巧妙&#x…...

基于Helm Chart的JupyterHub生产级部署与运维实战指南

1. 项目概述&#xff1a;为什么我们需要一个可扩展的JupyterHub部署方案&#xff1f;如果你在团队里负责过数据科学或机器学习平台的搭建&#xff0c;大概率会为Jupyter Notebook的部署和管理头疼过。单个Jupyter Notebook服务给一两个人用还行&#xff0c;一旦团队规模扩大到十…...

AI编程助手CodeBuddy:VS Code扩展的架构、部署与高效使用指南

1. 项目概述&#xff1a;CodeBuddy&#xff0c;你的AI编程伙伴最近在GitHub上看到一个挺有意思的项目&#xff0c;叫codebuddy&#xff0c;作者是olasunkanmi-SE。光看名字就能猜个大概——“代码伙伴”&#xff0c;这显然是一个旨在辅助编程的工具。作为一个在开发一线摸爬滚打…...

基于Nginx-Lua镜像构建高性能可编程网关的实践指南

1. 项目概述&#xff1a;一个为现代Web架构而生的Nginx镜像如果你和我一样&#xff0c;长期在容器化环境中部署和管理Web服务&#xff0c;那么你一定对Nginx的灵活性和Lua脚本的强大能力印象深刻。但将这两者结合&#xff0c;并打包成一个稳定、安全、功能齐全的Docker镜像&…...

从零构建Next.js全栈应用:实战解析服务端渲染与API路由

1. 项目概述与核心价值最近在社区里看到不少朋友在讨论一个叫“panaverse/learn-nextjs”的项目&#xff0c;作为一个在Web开发领域摸爬滚打了十多年的老码农&#xff0c;我立刻来了兴趣。这个项目名直译过来就是“Panaverse的Next.js学习项目”&#xff0c;听起来像是一个学习…...

基于WebSocket的机械爪远程控制桥接系统设计与实战

1. 项目概述&#xff1a;一个连接物理世界与数字世界的“机械爪”远程控制桥最近在捣鼓一个挺有意思的开源项目&#xff0c;叫lucas-jo/openclaw-bridge-remote。光看名字&#xff0c;你可能觉得这又是一个关于机器人或者机械臂的遥控项目&#xff0c;但实际深入进去&#xff0…...

如何用FontForge从零设计专业字体?揭秘字体编辑器的核心玩法

如何用FontForge从零设计专业字体&#xff1f;揭秘字体编辑器的核心玩法 【免费下载链接】fontforge Free (libre) font editor for Windows, Mac OS X and GNULinux 项目地址: https://gitcode.com/gh_mirrors/fo/fontforge 想象一下&#xff0c;你手写的签名、设计的l…...

为什么你的ElevenLabs马拉雅拉姆文输出失真?5步诊断法+3个预处理Python脚本立即修复

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;ElevenLabs马拉雅拉姆文输出失真的根本成因 马拉雅拉姆语&#xff08;Malayalam&#xff09;作为印度喀拉拉邦的官方语言&#xff0c;拥有高度复杂的音节结构、连字规则&#xff08;conjunct consonant…...