菜鸟视角的openwrt(一) 初识openwrt

2023-11-06

   作为一只菜鸟, 为了熟悉openwrt系统, 看了很多前辈的文章。 因为写作的角度或者说目标人群不同,侧重点也不同,学到的知识零零碎碎。等积累的知识多了, 回头再来看,才发现“原来如此”, 原来作者已经帮我们总结好了。
 
   这篇文章对老鸟来说,可以直接忽略。 现在物联网很火,出现很多基于openwrt的开发,本文希望帮助和我一样刚接触openwrt的菜鸟,尽快认识openwrt,少走弯路,不至于中途放弃。
   
   我以前因为用703N路由器刷过openwrt系统,做3g上网卡拨号时,接触过一下openwrt,甚至写个一个程序上传到路由器上跑,这些纯粹是从程序员角度,把路由器当成一个“计算机”来用, 除了编译环境要用到交叉编译器环境外, 其他的和计算机上的编程没啥区别。

  感谢恩山论坛,我的703N刷机固件就是从坛子上下载的, 3g拨号脚本也是坛子上提供的,刷机过程全部是照做论坛上的教程来做的。

  openwrt这个linux系统分支广为人知,多亏了各种家用路由器的崛起, 让一般人用很小的代价(便宜的路由器也就几十块钱)就可以接触到这个系统。 现在MTK(联发科)用路由器芯片瞄准物联网应用, 几十块钱就可以从淘宝上弄块开发板, 有的还有技术支持,简直太幸福了。

   废话了这么,目地是体现以一个“菜”, 希望和我有同感的朋友们, 一起努力, 进入openwrt的世界。进入正题:

   我眼中的openwrt:

      1) 它就是一个linux操作系统, 起源就是专门为路由器而生的。 当然, 你也可以把它当成一个普通的linux操作系统来用,着完全取决于你的应用。就像XP的目标是桌面办公系统, 但有人偏要用它来做一个数据库服务器用一样。

      2) 操作系统内核的启动需要进行引导。就像dos,windows需要磁盘的引导分区上的代码进行引导才能启动一样。使用过ghost安装windows系统的人都知道, 有时候安完了, 系统却不能启动,这是使用分区工具修复以下磁盘的引导分区就OK了。所谓“修复”,就是把一小段引导代码重新写入磁盘的引导分区,计算机启动时,操作系统将通过这段代码加载。

    3)openwrt是一个嵌入式linux操作系统。 我理解的嵌入式, 它的硬件资源、内存资源比PC少多了, 通常嵌入式系统会使用一块叫做FLASH的芯片来充当类似于PC机硬盘的角色。如果你了解单片机,就更好理解了。

    4)openwrt的引导由一个叫bootloader的东西来完成。 既然是菜鸟,就不必关心它的具体实现了, 只需要晓得有且必须有这个东西就可以了,它的作用就像2)中介绍的磁盘上的引导分区上的引导代码一样。 而且就像磁盘上的引导分区在磁盘上的特定位置上一样, 这个bootloader也存储在3)中所提到的FLASH芯片的特定区域, 强调一下,是特定区域, 不是随便放置。 至于特定到哪一块,与使用的处理器芯片有关, 既然是“菜鸟”就先不纠缠这个问题了。通常使用的bootloader叫uboot, uboot就是一个名字, 它是bootloadder的一种。就像你要买个东西, 用支付宝可以,用银联也可以。

     5) 通常为了管理方便, 从bootloader的视角看,会把FLASH分成一个个的逻辑区块来管理。 比如block0, block1, block2,..., 每个块存储的东西不一样。 就像磁盘分CDEF四个逻辑盘,C盘你通常用来装操作系统, D盘你用来装数据文件。

     6) 一般来说, 从openwrt的视角看,会把FLASH分成与bootload相同的一个个的逻辑区块, 这样便于统一思想。一切都是为了管理的方便, 没必要标新立异。

     7) 对于刚接触openwrt的菜鸟来说, 一般bootloader和openwrt系统都是用别人现成的, 就不用纠结于块是咋个划分的了, 为什么要这样划分。

     8) 值得一提的是, bootloader和openwrt就是两个独立的程序(只不过bootloader就是为了启动openwrt而生)。bootloader设定某个逻辑区块如block0可以写入数据, 在openwrt系统中,这个这个逻辑区块是不可以写入的。在这点上,bootloader和openwrt这两个系统是独立存在系统, 他们在自己构建的世界里就是“上帝”, 互不干扰。

     9) bootloader除了引导启动openwrt启动外, 还有一个重要的作用就是升级或替换openwrt系统。就是用我说的“刷机”, 其实手机的刷机是一个道理。 这个时候,bootloader的眼中, openwrt程序(通常我们叫它“固件”)就是一段数据。bootloader的作用就是把这些数据写入到FLASH的指定逻辑区块的指定位置。当然也可以把这些数据“备份下来”。当然,bootloader还可以向指定的数据区写入openwrt所需要的小段数据, 前面说过,bootloader就是它构建的世界里的“上帝”, 它要做什么, 完全取决于bootloader的设计人员所赋予它的功能。
     
     10) bootloader如何从我们的计算机上获得“固件”, 通常bootloader会支持网络, 使用者可以在PC机上通过网络的方式与bootloader打交到,也可以通过串口与bootloader打交到, putty工具可以同时支持这两种方式。现在的bootloader内置了web server, 通过PC机上的浏览器连接到bootloader上的webserver, 通过webserver上的cgi程序, 也可以实现用户与bootloader的交互。

      11) 朋友们刷路由器时,经常听到“不死bootloader”的概念, 其实就是说, 只要你刷机时, 不破坏掉bootloaer程序, openwrt固件随时可以刷回来的, 路由器不会变成无用的“砖头”。当然你如果刷bootloader程序, 如果失败了或者新bootloader由问题, 你的系统就永远起不了了。 唯一的办法就是把FLASH芯片从板子上焊下来。用单片机开发常用的编程器向新芯片写入正常的程序,再焊回去。 除了需要必要的工具, 你还要由正常程序的备份。


     总结一下:         
      openwrt是个linux系统,需要使用bootloader来引导启动
      openwrt和bootloader位于同一块FLASH芯片上的不同区域
      bootloader会提供一些方便的手段便于我们开发过程中启用用新的openwrt固件

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

菜鸟视角的openwrt(一) 初识openwrt 的相关文章

  • openwrt下crontab定时任务实现

    openwrt下crontab定时任务实现 我的需求是需要加个定时执行脚本来监控智能网关运行的进程 一旦网关进程异常关闭 就能立即把它拉起来 从而保证网关运行的可靠性 这里我们用到了crontab服务 OpenWRT系统默认已经加入了cro
  • openwrt reboot流程

    openwrt 系统中 当执行了 reboot 命令 系统将会发生什么事情呢 如何进行重启的呢 下面来一起看一下 reboot 应用层操作 首先 reboot 是由busybox 它是一个集成了常用Linux命令和工具的软件 提供的一个Li
  • Buildroot用户指南

    第一章 关于Buildroot Buildroot是一个包含Makefile和修补程序 patch 的集合 这个集合可以使你很容易的为你的目标构建交叉工具链 cross compilationtoolchain 根文件系统 root fil
  • OPENWRT中SSH免密钥登陆(详细步骤)

    通过使用ssh keygen生成公钥 在两台机器之间互相建立新人通道极客 假设本地机器是client 远程机器为server 1 使用ssh keygen生成rsa keygen 在这里会覆盖以前生成的 ssh id rsa文件 请提前做好
  • 启明智显分享

    提示 作为Espressif 乐鑫科技 大中华区合作伙伴及sigmastar 厦门星宸 VAD合作伙伴 启明智显不仅用心整理了你在开发过程中可能会遇到的问题以及快速上手的简明教程供开发小伙伴参考 同时也用心整理了乐鑫及星宸科技的新产品 新方
  • OpenWRT移植EC200A驱动,并实现wifi和lan的上网,及wan和4g的负载均衡(五)

    网卡驱动方式 转载 拨号PPP NDIS RNDIS CDC ECM NCM QMI WWAN GOBINET RMNET MBIM概念介绍 https blog csdn net qlexcel article details 11715
  • 青龙脚本 小黄鸟配合虚拟机抓变量 软件集

    鉴于很多青龙脚本变量 真机很难抓到 需要小黄鸟配合虚拟机抓变量 为方便网友 把相关3个软件分享 以单个文件形式 1 小黄鸟 https wwm lanzouy com i5vWT01qi6na 2 虚拟机 https wwm lanzouy
  • 基于WR703N路由器的WIFI机器人

    可以说 wifi机器人是一个比较成熟作品了 特别是使用wr703制作wifi机器人的有很多例子 因为1 其体积小 2 实时获取视频相比STM32容易 STM32F1系列性能不够 使用OV系列的摄像头较为吃力 3 可以使用路由器连接外网 使用
  • Openwrt GCC 7.5编译sanitizer_internal_defs.h错误

    GCC 7 5 BINUTILS 2 31 1 报错信息 sanitizer internal defs h 72 error size of array assertion failed is negative 解决方法 修改下列文件 删
  • openwrt中计划任务的设置

    寝室的供网规则为周一到周五零点断网 六点开网 双休日通宵供网 故设置一套计划任务提高路由器使用效率 crontab命令常见于Unix和类Unix的操作系统之中 用于设置周期性被执行的指令 操作符号 在一个区域里填写多个数值的方法 逗号 分开
  • Ubuntu16.04下交叉编译适配openwrt(CC版本)的swoole扩展库(swoole-1.10.3)

    Ubuntu16 04下交叉编译适配openwrt CC版本 的swoole扩展库 swoole 1 10 3 文章目录 Ubuntu16 04下交叉编译适配openwrt CC版本 的swoole扩展库 swoole 1 10 3 一 简
  • opkg 更新软件

    opkg 不同的版本存在不同的配置文件 一般常用的是 etc opkg conf etc opkg customfeeds conf 和 etc opkg distfeeds conf三个 这三个配置文件将会影响opkg运行时软件资源的取向
  • openwrt上opkg更新报错"opkg_download: Failed to download ............."

    开始搞op的时候 看到op竟然可以直接安装一些插件 激动坏了 因为这东西对嵌入式的小系统来说简直不敢想 但是op就支持了 就是这么任性 好不容易编译了固件 按照网上的教程 telnet进去 首先opkg update 结果没有想象中的华丽更
  • 1-OpenWrt编译过程-2

    前言 接触 op 已达四年 今年开始梳理整体所学 具体还参考了佐大的视频 对 op 缺乏系统知识的可以尝试 总体而言官方文档和源码是最好的教程 文章目录 编译OpenWrt 概述 1 更新安装所有可选的软件包 2 编译设置 make men
  • 【LEDE】树莓派上玩LEDE终极指南-75-获取CPU温度

    先来说说获取CPU温度的方法 1 通过hwmon获取 2 通过thermal获取 而树莓派就比较蛋疼了 没有额外的传感器 所以sensor detect这些东西完全不起作用 唯独CPU封装内的VideoCore具有温度传感功能 而想要与Vi
  • openwrt利用arp获取局域网设备IP

    openwrt利用arp获取局域网设备IP 文章目录 openwrt利用arp获取局域网设备IP 1 前言 2 ARP概念 3 arp局域网搜索设备实现思路和代码 1 前言 目前我们通过arp协议搜索局域网设备 根据局域网设备地址判断子设备
  • openwrt 缺少 libc.so.6 libm.so.6 libpthread.so.0

    在开发openwrt时 编译内核的时候 自己写的代码在openwrt 编译报错 提示缺少依赖库文件 Package Gateway Auto is missing dependencies for the following librari
  • 获取openwrt wan口ip方法

    2020年7月30日14点39分 更新 之前写的方法 获取的是wan口的ip和网关 使用过程发现 以有线上网模式为例 获取wan口网关时 若网关中出现连续的1 1 会获取失败 表明该正则表达式是有问题的 即下面这个grep oE 之后的内容
  • jshn - 如何解析 json 包

    我想知道如何在openwrt上轻松解析json 我有 jhsn 来解析 json 这是我的程序 sh 脚本 download weather wget api openweathermap org data 2 5 weather id 2
  • OpenWRT git clone fatal:无法找到“http”的远程帮助程序

    我正在尝试将 LINC Switch 安装到 OpenWRT 并遇到以下问题 git clone https github com FlowForwarding LINC Switch git 并得到一个错误 git fatal Unabl

随机推荐

  • 根据文件夹修改时间自动打包ZIP

    Automatically package to zip file based on the modification time of the folder echo off set file dist for A in file do s
  • R-CNN算法详解

    这是一篇比较早的Object Detection算法 发表在2014年的CVPR 也是R CNN系列算法的开山之作 网上可以搜到很多相关的博客讲解 本篇博文没有按论文顺序来讲述 而是结合自己经验来看这个算法 希望给初学者一个直观的感受 细节
  • 普通人如何通过网络实现在家赚钱?

    作者 杨小二 来源 杨小二的小江湖 前言 2020年1月份的时候 在网上看到一则新闻说 2020年底前全面取消事业编制 32种事业工种打破铁饭碗 这件事情 在我们这个IT圈里还引起了大家的一些讨论 本想着考个公务员来养老 看来是没有希望了
  • Redis的哨兵模式以及工作原理

    Redis的哨兵模式以及工作原理 哨兵的作用 通过发送命令 让Redis服务器返回监控其运行状态 包括主服务器和从服务器 当哨兵监测到master宕机 会自动将slave切换成master 然后通过发布订阅模式通知其他的从服务器 修改配置文
  • C#读取硬盘物理序列号-非管理员权限

    using System using System Collections Generic using System Text using System Runtime InteropServices namespace SCBLL Com
  • 服务器(Linux系统)指定目录安装Anaconda教程

    1 下载 通过weg命令下载 Xshell终端输入命令 wget c https repo anaconda com archive Anaconda3 2020 11 Linux x86 64 sh 输入后开始下载 我这里用的pychar
  • VC++如何计算一段代码的执行时间

    单位为毫秒 在程序调试的过程中 VS2010包含
  • java/php/net/python会员健身系统管理设计

    本系统带文档lw万字以上 答辩PPT 查重 如果这个题目不合适 可以去我上传的资源里面找题目 找不到的话 评论留下题目 或者站内私信我 有时间看到机会给您发 本课题要求实现一套会员健身系统管理 系统功能包括会员 个人资料管理 教练信息管理
  • 使用 VS2022 配置 QT 开发环境的步骤

    使用 VS2022 配置 QT 开发环境的步骤 QT 是一个跨平台的 C GUI 库 可以在 Windows Mac Linux 等操作系统上运行 在 Visual Studio 2022 中配置 QT 的开发环境 可以让开发者在 Wind
  • Label Assignment

    前言 今天在研究四点模型的时候 了解到一个新概念 Label Assignment 记录一下 Label assignment 参考文档 目标检测中的Label Assignment Label assignment 主要是指检测算法在训练
  • 文件翻转教学python

    目录 第1关 读文件全部内容到一个字符串 第2关 读文件前n个字符 第3关 逐行读取并输出文件内容 第4关 读取文件到列表中 第5关 读取文件中的数据到二维列表 第6关 将唐诗写入到文件中 第1关 读文件全部内容到一个字符串 任务描述 本关
  • OpenGL学习例程精析(3d纹理)

    OpenGL学习例程精析 3d纹理 代码分析 glPixelStorei 完整代码 最终效果 代码分析 3d纹理的配置要比2d纹理复杂一些 glPixelStorei glPixelStorei GL UNPACK ALIGNMENT 1
  • eclipse的安装和汉化

    eclipse是一个可扩展的开发平台 受到开发人员的欢迎与好评 其安装和汉化的步骤如下 在本文中涉及的网址都是官方网址 确保下载软件的安全 纯净 1 下载jdk1 8 0并安装 网址 http www oracle com technetw
  • 响应式数据大屏构造

    数据大屏构建 需求 UI 实现响应式数据大屏 适配各种屏幕 不允许出现滚动条 方案 rem 实现原理 根据屏幕宽度 计算1rem的宽度 配置根元素的font size 所有的像素单位按照rem计算 优点 实现响应式 根据设计稿和VW的宽度实
  • 海量图片曝光百度新家“搜索框”大厦

    今天陪朋友到百度办事 有幸参观了百度的新办公大楼 搜索框大厦 大厦特别漂亮 内部设计特别炫 功能更是酷啊 海量图片第一时间与大家分享一下 刚到上地环岛 远远就看到气势宏伟的大厦 非常醒目 波浪形的玻璃外墙 相当气派 无论从正面 侧面还是背面
  • fetch使用

    fetch基本使用方法 1 fetch与ajax作用相同 发送请求 2 ajax是使用XMLHttpRequest对象来请求数据 因此需要先new XMLHttpRequest 然后连接发送接收 3 fetch是一个方法 fetch 地址
  • vue中点击按钮关闭当前页面踩坑记录

    vue中关闭当前页面踩坑记录 当前页面直接使用window close不行 必须是新窗口才能使用window close 所以要router跳转时打开新窗口才能关闭 直接使用 不行 window close 先使用下面跳转对应页面 let
  • windows下两种方法通过cmd进入指定目录

    方法一 通过cmd cd命令进入 相同盘符下的目录可直接使用cd 但是windows下不同于linux 不能直接跨盘符cd进入目录 例如 从C盘进入E盘下面的目录 需要两行命令 跨盘符 跨盘符目录 先后顺序都可以 先输入跨盘符目录 再输入跨
  • C语言求班级平均分案例讲解

    我们先看例题 统计3个班成绩情况 每个班有5个同学 求出所有班级的平均分以及各个班级的平均分 从键盘输入成绩 思路分析 1 我们定义一个3行5列的二维数组用来存放学生的成绩 1行表示1个班的学生成绩 总共3行 可以存放3个班的成绩 每行有5
  • 菜鸟视角的openwrt(一) 初识openwrt

    作为一只菜鸟 为了熟悉openwrt系统 看了很多前辈的文章 因为写作的角度或者说目标人群不同 侧重点也不同 学到的知识零零碎碎 等积累的知识多了 回头再来看 才发现 原来如此 原来作者已经帮我们总结好了 这篇文章对老鸟来说 可以直接忽略