沒法生成sysupgrade.bin 及分區結構

1. make menuconfig 後編譯沒有生成openwrt-ar71xx-generic-tl-wr703n-v1-squashfs-sysupgrade.bin ,究其緣由是由於image超出了flash定義的大小,實際的flash是8M的,編譯703N的時候沒有修改配置編譯成4M的了 ,修改下面兩個文件(trunk 版本)linux

1. iphone

vi tools/firmware-utils/src/mktplinkfw.c操作系統

.id = "TL-WR703Nv1",
.hw_id = HWID_TL_WR703N_V1,
.hw_rev = 1,
.layout_id = "4Mlzma",//將4Mlza改成8Mlzma保存便可。設計

 

2.接口

vi target/linux/ar71xx/image/Makefileip

define Device/tl-wr703n-v1
$(Device/tplink-8mlzma)  //將4mIzma 修改成8mIzma
BOARDNAME := TL-WR703N
DEVICE_PROFILE := TLWR703
TPLINK_HWID := 0x07030101
CONSOLE := ttyATH0,115200
endef內存

 

系統結構

在上一章咱們已經完成了刷機工做,這個時候系統進行了首次啓動,而且格式化了它的"可寫"分區。那麼在設備裏分區究竟是怎麼樣進行的呢?咱們首先須要知道:不一樣的處理器下OpenWRT分區是略微有所區別,不是全部的分區都徹底相同的。在路由器的FLASH上,內核中所使用的驅動是MTD設備驅動。路由

MTD(Memory Technology Devices,內存技術設備)是用於訪問內存類設備(ROM、FLASH)的Linux驅動子系統。它的主要目的使FLASH類設備更加容易被訪問,爲此它在硬件和上層提供了一個抽象的接口,使得在操做系統下咱們能夠像操做硬盤同樣操做這個設備。仔細觀察過Linux啓動信息的朋友會看到這麼一段話:get

[ 0.690000] 5 tp-link partitions found on MTD device spi0.0
[ 0.700000] Creating 5 MTD partitions on "spi0.0":
[ 0.700000] 0x000000000000-0x000000020000 : "u-boot"
[ 0.710000] 0x000000020000-0x00000012a290 : "kernel"
[ 0.730000] 0x00000012a290-0x0000007f0000 : "rootfs"
[ 0.760000] 0x000000300000-0x0000007f0000 : "rootfs_data"
[ 0.760000] 0x0000007f0000-0x000000800000 : "art"
[ 0.770000] 0x000000020000-0x0000007f0000 : "firmware"flash

這些信息表示當前系統識別到的FLASH分區。咱們能夠用電腦中的計算器計算一下,打開計算器,選擇科學型、十六進制,輸入名爲art的分區容量用(800000-7f0000)結果爲10000(十六進制),這個時候點擊十進制,系統會自動將結果轉換爲十進制,再除以1024結果爲64(K)表示這個分區容量爲64k。在openwrt的系統中如今對atheros方案實現了自動查找分區結尾。

上面的幾個分區,我來講明下(分區名稱、分區容量、分區做用):

  • "u-boot":128KB,設備初始化程序+引導程序代碼自己
  • "kernel" :1MB,存放系統內核的二進制代碼,按照x86下的講法是Raw分區,就是這裏只有內核的二進制,不存在文件系統。
  • "rootfs":6.7MB,完整的系統文件包含只讀和可寫
  • "rootfs_data":4.9MB,在rootfs中的可寫部分的位置
  • "art":64KB,EEPROM分區,在Atheros的方案中這個分區保存了無線的硬件參數
  • "firmware":7.9MB,完整的固件位置包含了除"u-boot"和"art"以外所有的內容

看的暈了? 這,我立刻畫個簡單的圖給你們看看:

5-a

這個是它的分區邏輯。請不要太在乎這個地方,有點暈也不要緊,繼續日後面看,這個地方留着後邊慢慢理解。

在系統中,能夠執行如下指令查看當前系統分區:

7

每一個分區在flash中的位置是/dev/mtdblockX這樣的位置,好比你想把art分區裏的數據讀出來看看,那麼就執行:

9

而後執行hexdump -C /tmp/1就能夠看到這個分區的內容了。

系統的文件結構

好了,咱們這一節將的很是重要。上一節說過系統在第一次啓動的時候會格式化"可寫分區",這在邏輯上究竟是啥關係呢?

  1. 首先uboot啓動了kernel完成以後,由kernel加載"ROM分區"(就是rootfs減去rootfs_data獲得的那一塊分區)
  2. ROM分區採用的是Linux內核支持的squashFS文件系統(一種壓縮只讀文件系統),加載完畢後將其掛載到/rom目錄(同時也掛載爲根文件系統)。
  3. 系統將使用JFFS2文件系統格式化rootfs_data這部分而且將這部分掛載到/overlay目錄。
  4. 將/overlay透明掛載爲/分區。
  5. 將一部份內存掛載爲/tmp目錄。

這個時候你們必定有一個問題:到底根文件系統是哪一個?這個是OpenWRT設計的一個優勢,它採用了一種叫Overlay透明掛載技術,首先將/rom掛載爲/根文件,而後再用/overlay覆蓋在/之上,這樣,當你進行文件系統的變動,修改,所作的操做將在overlay中記錄。rom是不改變的。而最簡單的恢復出廠設置方法,便是刪除掉/overlay下全部文件。

1

大體上而言,系統的啓動流程相似CentOS這類x86下的發行版。因爲本文讀者可能是熟悉linux的朋友,關於系統的啓動流程不作詳細解釋了。

相關文章
相關標籤/搜索