菜鸟视角的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
  • (N1盒子) Openwrt 下 docker 容器访问互联网故障排除

    环境 硬件 N1盒子 Openwrt版本 openwrt flippy 60 o 情况描述 先是跑了个运行php的docker容器 日志里报错信息为 cURL error 7 Failed to connect to 域名 port 端口号
  • luci的国际化(多语言)

    语言的选择在dispatch函数入口出完成 如果配置文件 etc config luci中配置的lang为auto 则根据浏览器所带的信息选择一个合适的语言 否则就使用lang定义的语言 然后使用i18n lua中的setlanguage设
  • openwrt squashfs固件解包打包与签名方法

    我们有时没有时间重新编译整个固件 但是却又想修改其中的某个功能 这时就涉及到了固件的解包与打包 下面提供一个简单的解包打包脚本 openwrt固件修改 squashfs jffs2格式固件 bin sh sudo echo Starting
  • 编译 openwrt 及初始配置-及部分排错

    主机为 ubuntu 14 x64 硬件 优酷土豆宝 cpuMT7620A 内存128M flash 32M 有2个源 用哪个也可以 git clone https github com openwrt openwrt git git cl
  • 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
  • 取消GL.iNet路由器视频的密码

    每次路由器访问192 168 8 1 8083 action stream时总是无法访问 但是先进入192 168 8 1登录以后再去刷新视频就可以出来 即使取消外网登录验证也还是没效果 最后发现广大网友的意见是重新刷固件 先去GL iNe
  • OpenWRT路由器中监控网络服务并重启的脚本

    转载地址 http jamesqi com E5 8D 9A E5 AE A2 OpenWRT E8 B7 AF E7 94 B1 E5 99 A8 E4 B8 AD E7 9B 91 E6 8E A7 E7 BD 91 E7 BB 9C
  • UCI常用说明

    UCI常用函数说明 结构体 API函数 参考文章 安装完成后在 加粗样式 usr local include 目录下存放UCI h文件可以进行参考 结构体 1 struct uci package 包结构体 它对应一个配置文件内容 stru
  • 【openwrt学习笔记】dnsmasq源码阅读

    目录 一 DHCP Dynamic Host Configuration Protocol 1 1 前置知识 1 2 参考链接 1 3 IP地址分配代码分析 rfc2131 c dhcp common c dhcp c 1 4 几个小问题
  • opkg 更新软件

    opkg 不同的版本存在不同的配置文件 一般常用的是 etc opkg conf etc opkg customfeeds conf 和 etc opkg distfeeds conf三个 这三个配置文件将会影响opkg运行时软件资源的取向
  • 红米ac2100 刷openwrt以及刷回记录

    redmiac2100 刷机 参考 手动升级漏洞固件 https wwx lanzoux com i6iqxhqp98f 或者百度网盘链接 https pan baidu com s 1H355Ym9p TLrVOux2w2b7Q 提取码
  • OpenWrt的SR9000有线网卡驱动

    SR9000芯片的有线网卡驱动可以直接使用kmod usb net CDC ether 若为编译 可采取如下措施 make menuconfig kernel module usb support kmod usb net CDC ethe
  • UCI提供给shell和lua使用的配置接口

    转自 http m blog csdn net article details id 47989493 1 uci提供给shell使用的配置借口有两套 1 config get用来读取一个config值 命令格式如下 config getv
  • make menuconfig报错:Build dependency: Please install Git (git-core) >= 1.6.5

    版本号为chaos calmer 15 05 1 注意 在执行make menuconfig的时候 会报一个错误 如下 Build dependency Please install Git git core gt 1 6 5 这是open
  • 获取openwrt wan口ip方法

    2020年7月30日14点39分 更新 之前写的方法 获取的是wan口的ip和网关 使用过程发现 以有线上网模式为例 获取wan口网关时 若网关中出现连续的1 1 会获取失败 表明该正则表达式是有问题的 即下面这个grep oE 之后的内容
  • [转载]解决PPPOE宽带拨号经常掉线的一种方法(适合刷了第三方固件的无线路由)

    文章作者 姜南 Slyar 文章来源 Slyar Home www slyar com 转载请注明 谢谢合作 最近在进行下载或看视频等大量占用网络带宽的行为时 宽带PPPOE连接非常不稳定 经常自动掉线 严重影响我的下载进程和看视频的乐趣
  • jshn - 如何解析 json 包

    我想知道如何在openwrt上轻松解析json 我有 jhsn 来解析 json 这是我的程序 sh 脚本 download weather wget api openweathermap org data 2 5 weather id 2
  • 通过 SNMP 访问路由表

    如果我尝试查找安装了 openWRT 的 Linksys WRT54G 的路由表 我需要哪个 MIB 那应该是MIB II SNMP 对象 ID OID 为 1 3 6 1 2 1 4 21 可转换为ip ipRouteTable 这对我在
  • 为 OpenWrt 编写和编译程序

    我有一个在 OpenWRT 下运行的具有 MIPS 架构的嵌入式设备 系统类型 MediaTek MT7628AN ver 1 eco 2机器 WRTnode2P 处理器 0CPU型号 MIPS 24KEc V5 5 我想通过我的电脑 ub

随机推荐

  • 根据文件夹修改时间自动打包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系统 看了很多前辈的文章 因为写作的角度或者说目标人群不同 侧重点也不同 学到的知识零零碎碎 等积累的知识多了 回头再来看 才发现 原来如此 原来作者已经帮我们总结好了 这篇文章对老鸟来说 可以直接忽略