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

   作为一只菜鸟, 为了熟悉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固件

猜你喜欢

转载自blog.csdn.net/twd_1991/article/details/80220943
今日推荐