首頁 收藏 QQ群
 網(wǎng)站導(dǎo)航

ZNDS智能電視網(wǎng) 推薦當(dāng)貝市場

TV應(yīng)用下載 / 資源分享區(qū)

軟件下載 | 游戲 | 討論 | 電視計算器

綜合交流 / 評測 / 活動區(qū)

交流區(qū) | 測硬件 | 網(wǎng)站活動 | Z幣中心

新手入門 / 進(jìn)階 / 社區(qū)互助

新手 | 你問我答 | 免費刷機救磚 | ROM固件

查看: 17200|回復(fù): 1
上一主題 下一主題
[其它]

【硬創(chuàng)邦】跟hoowa學(xué)做智能路由(五):熟悉OpenWRT

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2014-5-4 09:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式 | 來自遼寧

從本章開始,我們要更多的了解系統(tǒng)的特性,以及不論是智能路由還是智能家居,我們用路由器的處理器到底能做多少事情。

系統(tǒng)結(jié)構(gòu)

在上一章我們已經(jīng)完成了刷機工作,這個時候系統(tǒng)進(jìn)行了首次啟動,并且格式化了它的”可寫”分區(qū)。那么在設(shè)備里分區(qū)到底是怎么樣進(jìn)行的呢?我們首先需要知道:不同的處理器下OpenWRT分區(qū)是略微有所區(qū)別,不是所有的分區(qū)都完全相同的。在路由器的FLASH上,內(nèi)核中所使用的驅(qū)動是MTD設(shè)備驅(qū)動。

MTD(Memory Technology Devices,內(nèi)存技術(shù)設(shè)備)是用于訪問內(nèi)存類設(shè)備(ROM、FLASH)的Linux驅(qū)動子系統(tǒng)。它的主要目的使FLASH類設(shè)備更加容易被訪問,為此它在硬件和上層提供了一個抽象的接口,使得在操作系統(tǒng)下我們可以像操作硬盤一樣操作這個設(shè)備。仔細(xì)觀察過Linux啟動信息的朋友會看到這么一段話:


[ 0.690000] 5 tp-link partitions found on MTD device spi0.0
[ 0.700000] Creating 5 MTD partitions on “spi0.0″:
[ 0.700000] 0×000000000000-0×000000020000 : “u-boot”
[ 0.710000] 0×000000020000-0x00000012a290 : “kernel”
[ 0.730000] 0x00000012a290-0x0000007f0000 : “rootfs”
[ 0.760000] 0×000000300000-0x0000007f0000 : “rootfs_data”
[ 0.760000] 0x0000007f0000-0×000000800000 : “art”
[ 0.770000] 0×000000020000-0x0000007f0000 : “firmware”


這些信息表示當(dāng)前系統(tǒng)識別到的FLASH分區(qū)。我們可以用電腦中的計算器計算一下,打開計算器,選擇科學(xué)型、十六進(jìn)制,輸入名為art的分區(qū)容量用(800000-7f0000)結(jié)果為10000(十六進(jìn)制),這個時候點擊十進(jìn)制,系統(tǒng)會自動將結(jié)果轉(zhuǎn)換為十進(jìn)制,再除以1024結(jié)果為64(K)表示這個分區(qū)容量為64K。在openwrt的系統(tǒng)中現(xiàn)在對atheros方案實現(xiàn)了自動查找分區(qū)結(jié)尾。

上面的幾個分區(qū),我來說明下(分區(qū)名稱、分區(qū)容量、分區(qū)作用):

  • “u-boot”:128KB,設(shè)備初始化程序+引導(dǎo)程序代碼本身
  • “kernel” :1MB,存放系統(tǒng)內(nèi)核的二進(jìn)制代碼,按照x86下的講法是Raw分區(qū),就是這里只有內(nèi)核的二進(jìn)制,不存在文件系統(tǒng)。
  • “rootfs”:6.7MB,完整的系統(tǒng)文件包含只讀和可寫
  • “rootfs_data”:4.9MB,在rootfs中的可寫部分的位置
  • “art”:64KB,EEPROM分區(qū),在Atheros的方案中這個分區(qū)保存了無線的硬件參數(shù)
  • “firmware”:7.9MB,完整的固件位置包含了除”u-boot”之外全部的內(nèi)容

看的暈了? 這,我馬上畫個簡單的圖給大家看看:

這個是它的分區(qū)邏輯。請不要太在意這個地方,有點暈也沒關(guān)系,繼續(xù)往后面看,這個地方留著后邊慢慢理解。

在系統(tǒng)中,可以執(zhí)行以下指令查看當(dāng)前系統(tǒng)分區(qū):


root@OpenWrt:/tmp# cat /proc/mtd
dev: size erasesize name
mtd0: 00020000 00010000 “u-boot”
mtd1: 0010a290 00010000 “kernel”
mtd2: 006c5d70 00010000 “rootfs”
mtd3: 004f0000 00010000 “rootfs_data”
mtd4: 00010000 00010000 “art”
mtd5: 007d0000 00010000 “firmware”

root@OpenWrt:/tmp# cat /proc/partitions
major minor #blocks name

31 0 128 mtdblock0
31 1 1064 mtdblock1
31 2 6935 mtdblock2
31 3 5056 mtdblock3
31 4 64 mtdblock4
31 5 8000 mtdblock5


每個分區(qū)在flash中的位置是/dev/mtdblockX這樣的位置,比如你想把art分區(qū)里的數(shù)據(jù)讀出來看看,那么就執(zhí)行:


root@OpenWrt:/tmp# dd if=/dev/mtdblock4 of=/tmp/1
128+0 records in
128+0 records out


然后執(zhí)行hexdump -C /tmp/1就可以看到這個分區(qū)的內(nèi)容了。

系統(tǒng)的文件結(jié)構(gòu)

好了,我們這一節(jié)將的非常重要。上一節(jié)說過系統(tǒng)在第一次啟動的時候會格式化”可寫分區(qū)”,這在邏輯上到底是啥關(guān)系呢?

首先uboot啟動了kernel完成之后,由kernel加載”ROM分區(qū)”(就是rootfs減去rootfs_data得到的那一塊分區(qū)),ROM分區(qū)采用的是Linux內(nèi)核支持的squashFS文件系統(tǒng),squashFS文件系統(tǒng)是一種壓縮只讀文件系統(tǒng)。加載完畢后將其掛載到/rom目錄。系統(tǒng)將使用JFFS2文件系統(tǒng)格式化rootfs_data這部分并且將這部分掛載到/overlay目錄。然后將一部分內(nèi)存掛載為/tmp目錄。

這個時候大家一定有一個問題:到底根文件系統(tǒng)是哪個?這個是OpenWRT設(shè)計的一個優(yōu)點,它采用了一種叫Overlay透明掛載技術(shù),首先將/rom掛載為/根文件,然后再用/overlay覆蓋在/之上,這樣,當(dāng)你進(jìn)行文件系統(tǒng)的變更,修改,所做的操作將在overlay中記錄。rom是不改變的。而最簡單的恢復(fù)出廠設(shè)置方法,即是刪除掉/overlay下所有文件。

大致上而言,系統(tǒng)的啟動流程類似CentOS這類x86下的發(fā)行版。由于本文讀者多是熟悉linux的朋友,關(guān)于系統(tǒng)的啟動流程不做詳細(xì)解釋了。

基本指令

OpenWRT下系統(tǒng)的基本指令沒有使用x86下的指令包,因為那些指令包容量太大。它使用的是Busybox項目。

Busybox是一個集成了一百多個常用Linux命令和工具的軟件包(OpenWRT下編譯可以選擇要哪些指令)。除了包含常規(guī)指令之外,Busybox還包含了grep、find、mount以及telnet、http等復(fù)雜工具。其被戲稱為Linux下的瑞士軍刀。

通過列表大家可以看到,在bin下大部分都是軟連接,這些軟連接幾乎都連接到Busybox中。是的,Busybox就是以檢測用戶執(zhí)行的是什么名稱來識別用戶需要啥指令。

hoowa要告訴大家,Busybox在80%的情況下與x86下的標(biāo)準(zhǔn)指令是完全相同的,有20%的情況一些指令的細(xì)節(jié)參數(shù)是不支持的。

常用來需要配置的文件夾和內(nèi)容:


/etc/ 存放著系統(tǒng)全部的配置文件
/etc/init.d/ 存放著啟動的服務(wù)腳本
/etc/config/ 存放著OpenWRT的配置文件包括網(wǎng)絡(luò)等等
/tmp/ 臨時文件之外還存放著動態(tài)的配置文件
/tmp/TZ 就是系統(tǒng)啟動后所使用的時區(qū)參數(shù)
…..


其它還有很多,我們就不一一介紹,用到哪個時再講。

讓設(shè)備連入網(wǎng)絡(luò)

以上已經(jīng)完成后,可以將電腦與設(shè)備之間那根網(wǎng)線可以拔掉了。

將你的外網(wǎng)網(wǎng)線插入M150開發(fā)版的WAN口(WAN口位置請參考之前章節(jié)的介紹),這時系統(tǒng)將通過putty面板刷下屏,信息提示已插入網(wǎng)線。

通過執(zhí)行指令可以看到是否當(dāng)前設(shè)備被分配了IP地址:

其中eth0就是WAN口,其它的暫時不講解。

軟件包管理

在OpenWRT下使用的軟件包管理技術(shù)叫做OPKG,它是一個輕量級的軟件包技術(shù),已經(jīng)成為開源嵌入式的事實標(biāo)準(zhǔn),它類似CentOS下的yum,可以實現(xiàn)對預(yù)編譯的二進(jìn)制軟件下載。

輸入opkg即可看到整個軟件的完整幫助信息。語法格式:opkg [參數(shù)...] 子命令 [子參數(shù)...],參數(shù)有:


update 下載服務(wù)器上可用的軟件包列表
upgrade <包名> 升級軟件包
install <包名> 安裝軟件包
configure <包名> 配置某一個軟件包
remove <包名> 卸載軟件包
info [pkg|regexp] 顯示出指定軟件包的信息


系統(tǒng)命令遠(yuǎn)比我介紹的要多的多,而且這些命令是我們最常用的。本著深入淺出的態(tài)度,大家根據(jù)自己的能力,希望學(xué)更多的童鞋可以自己詳細(xì)查看下opkg的幫助文檔。

接下來我們來安裝一個vmstat。在OpenWRT下如果你要對你的程序進(jìn)行負(fù)載檢測,vmstat是一個非常實用的工具。(由于軟件包列表可能會比較大因此并不保存在系統(tǒng)中,每次啟動需要首先執(zhí)行opkg update取得最新的軟件包。)


root@OpenWrt:/# opkg update
Downloading http://downloads.openwrt.org/sna ... ckages/Packages.gz.
Updated list of available packages in /var/opkg-lists/barrier_breaker.
root@OpenWrt:/# opkg install procps-vmstat
Installing procps-vmstat (3.2.8-1) to root…
Downloading http://downloads.openwrt.org/sna ... 3.2.8-1_ar71xx.ipk.
Installing procps (3.2.8-1) to root…
Downloading http://downloads.openwrt.org/sna ... 3.2.8-1_ar71xx.ipk.
Installing libncurses (5.9-1) to root…
Downloading http://downloads.openwrt.org/sna ... s_5.9-1_ar71xx.ipk.
Installing terminfo (5.9-1) to root…
Downloading http://downloads.openwrt.org/sna ... o_5.9-1_ar71xx.ipk.
Configuring terminfo.
Configuring libncurses.
Configuring procps.
Configuring procps-vmstat.


這樣就安裝完成了,可以執(zhí)行vmstat 1看看效果。別忘了如果要退出vmstat 1,可按鍵盤Ctrl+C中斷。安裝后軟件包會被保存在/overlay的分區(qū)中,不會丟失。

OPKG配置:


root@OpenWrt:/# cat /etc/opkg.conf
src/gz barrier_breaker http://downloads.openwrt.org/snapshots/trunk/ar71xx/packages
dest root /
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay


這里有列表出opkg的配置,第一句那個地址是表示當(dāng)前這臺機器下載的二進(jìn)制包所使用的服務(wù)地址,因為處理器指令集不一樣,所以地址很豐富的。也就是說,你可以自己給自己的智能路由產(chǎn)品搭建一個軟件包服務(wù)器。如果大家想知道有多少軟件可以安裝,就可以用你的瀏覽器直接訪問那個地址,即可列表出全部的可用軟件包。

關(guān)于軟件包

在未來的章節(jié)中,我們將會再次介紹OPKG相關(guān)的內(nèi)容,我們會介紹如何自己制作OPKG軟件包,以及自己搭建OPKG服務(wù)器的步驟和方法。屆時,你可以更容易的移植x86下的軟件到OpenWRT中,也可以選擇哪些軟件包是要打到固件的ROM中、哪些是要動態(tài)安裝的。

本章到這里結(jié)束了,介紹的知識點不多,但是內(nèi)容其實還是挺多的。關(guān)于軟件包部分希望大家能多多練習(xí),還是那句話,不怕弄壞了,壞了就重新刷。



上一篇:無線路由堪稱家中勞模 小技巧延長壽命
下一篇:智能路由器名字太LOW 但其實我還能干很多事
沙發(fā)
發(fā)表于 2015-3-2 21:52 | 只看該作者 | 來自北京
強烈支持樓主ing……
回復(fù) 支持 反對

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

Archiver|新帖|標(biāo)簽|軟件|Sitemap|ZNDS智能電視網(wǎng) ( 蘇ICP備2023012627號 )

網(wǎng)絡(luò)信息服務(wù)信用承諾書 | 增值電信業(yè)務(wù)經(jīng)營許可證:蘇B2-20221768 丨 蘇公網(wǎng)安備 32011402011373號

GMT+8, 2024-11-14 21:42 , Processed in 0.067988 second(s), 13 queries , Redis On.

Powered by Discuz!

監(jiān)督舉報:report#znds.com (請將#替換為@)

© 2007-2024 ZNDS.Com

快速回復(fù) 返回頂部 返回列表