Openwrt+WR703N 折騰筆記

前言

只是個人折騰 Openwrt 的一個流程筆記

過程步驟

Prerequisites

To generate a flashable firmware image file with a size of e.g. 8MB, you need:

	ca. 200 MB of hard disk space for the build system
	ca. 300 MB of hard disk space for the build system + package feeds
	ca. 2.1 GB of hard disk space for source packages downloaded during build from package feeds
	ca. 3-4 GB of available hard disk space to build (i.e. cross-compile) and generate the firmware file
	ca. 1-4 GB of RAM are needed for the compilation stage.(4GB of RAM are required for compilation of x86 firmwares)

網絡配置:

	主路由:192.168.1.1
		二級路由:192.168.10.253
		
			
			6C-E8-73-EC-17-0C	192.168.10.30		開發路由(無線)
				開發路由:
					192.168.100.1					SSH(有線) 

			00-26-C7-8A-F9-F6	192.168.10.10		Y460 無線
			08-00-27-45-0E-1A	192.168.10.20		Ubuntu16.04(橋接)
		
		6C-E8-73-EC-17-0C	192.168.10.30		

ubuntu16.04 編譯環境配置:

    sudo apt-get update
    sudo apt-get install git-core build-essential libssl-dev libncurses5-dev unzip gawk zlib1g-dev
    sudo apt-get install subversion mercurial

    sudo apt-get install build-essential subversion libncurses5-dev zlib1g-dev gawk gcc-multilib flex git-core gettext libssl-dev unzip

下載源碼:

    git clone https://github.com/openwrt/openwrt.git

切換穩定分支:

    git checkout lede-17.01

下載所有可用的 feeds:

    cd openwrt
    ./scripts/feeds update -a
    ./scripts/feeds install -a

    注:安裝模塊後,纔可以通過 makemenuconfig 進行配置,比如本來是沒有
        Tp-link wr720n 的,更新後就有了。

測試下編譯環境,使用命令:

    make defconfig
    make prereq

進行配置編譯:

    Target System——選擇編譯類型(目標系統類型)

    Target Profile——選擇編譯路由型號

    Package selection(軟件包選擇)Buildsystem settings  (編譯系統設置) Kernelmodules  (內核模塊)

    添加功能時儘量依靠依賴包,比如添加 ddns 時,只需要在 luci 選項裏面選擇 luci-app-ddns,編譯管理器會自動加上 ddns-scripts 及其他依賴庫文件。

        Target System (Atheros AR7xxx/AR9xxx)  --->                 
        Subtarget (Generic)  --->                                
        Target Profile (TP-LINK TL-WR720N v4)  ---> 

	重置配置


	選擇配置菜單界面底部的重置菜單項“Reset to Defaults”,恢復默認所有選擇模式;

編譯:

    make -j4 V=99 2>&1 | tee build.log



配置參數
    make menuconfig


根據上面硬件的配置,
    Target System 是芯片系列:Atheros AR7xxx/AR9xxx
    Target Profile 是機型型號:ELINK M-mini
    Kernel Modules 配置:
    Kernel modules —> Native Language Support —> <*> kmod-nls-utf8
    Luci 配置如下:
    LuCI—>Collections—– <*> luci
    LuCI—>Applications —> <*>luci-app-qos
    LuCI—>Themes —> <*>luci-theme-openwrt
    LuCI—>Translations—- <*> luci-i18n-Chinese
    LuCI—>Translations—- <*> luci-i18n-English
    Network配置:
    Network—>Routing and Redirection—- <*> ip
    上面這些配置,板子已經可以正常啓動,我做攝像頭所以有在 kernel 中打開了UVC的編譯選項。如果需要額外功能,添加到編譯選擇即可。

修改代碼
    在這裏我們做的移植中有些可以通過直接修改開發板中的配置文件來實現,而不需要重新編譯固件,
    但是我們要的是一個編出來就是默認配置的固件,所以以下移植都將是在編譯前實現的。
    Wifi 配置,Openwrt 編譯出來的固件,wifi 默認是不開啓的,需要做一些修改讓其上電自動開啓AP模式。
	修改 xxxx/files/lib/wifi/mac80211.sh。
		ssid 就是對應 option ssid,如果名稱有空格需要把名稱放到英文符號’’之內
		option channel 爲默認信道,可將 ${channel} 改爲信道值
		option disabled 爲無線開關1爲關閉0爲開啓
		option mode 爲無線模式默認ap
		option encryption 爲加密方式

編譯 image
    sudo make V=99

    此時電腦需要聯網,從網上自動下載代碼,經過漫長的等待,編譯完成後,會在 bin/ 目錄下產生相應的 bin 文件,
    我這裏是 openwrt-ar71xx-generic-M-mini-squashfs-factory.bin,將這個文件燒到板子上,打開電腦 wifi 會看到 openwrt 的熱點,
    連接,在瀏覽器中輸入 192.168.1.1,輸入默認密碼 admin 就可以登錄了,在裏面修改密碼和設置 SSH,就可以用 SSH 登錄開發板了。

    注意:編譯配額的時候可能有賬戶問題,如果使用的 root 用戶,需要在命令後加 FORCE=1,最好使用非 root 賬戶,就可以直接操作了。

編譯報錯處理:
    Makefile:2203: recipe for target 's-attrtab' failed
		遇見這種問題基本是使用虛擬機,因爲分配的內存小

		1.嘗試使用 make -j1

		2.但不總奏效,因爲腳本可能另外啓用 make,全部修改很難下手,擴大虛擬機使用內存

		make -j4 V=99 2>&1 | tee build.log

	--2018-03-10 15:54:01--  http://downloads.openwrt.org/sources/fuse-2.9.7.tar.gz
	Resolving downloads.openwrt.org (downloads.openwrt.org)... failed: Temporary failure in name resolution.
	wget: unable to resolve host address 'downloads.openwrt.org'	
		用 make -j1 V=s 會自動從頭開始重新走一遍,當遇到致命問題的時候會自動中斷;認真查看帶有failed的提示信息
		(一般一個失敗的操作,會導致後面N多的操作失敗,所以你應該往上查,找到第一個 failed的提示);
		個人經驗,失敗大多數是因下載相關工具失敗造成的,你按照其提示的地址,直接複製到瀏覽器的地址欄,回車,瀏覽器就會將
		文件下載下來了,然後將下載的文件複製到源碼目錄下的 dl 文件夾就行

刷機:
    各機型刷固件方法可能會不太一樣。
    總體上,如在官方固件狀態,就刷 *factory.bin 結尾的固件;
    如在第三方固件狀態,就刷 *sysupgrade.bin 結尾的固件;還可選擇
	在 uboot 的 web 界面刷。
	

	OpenWrt編譯後生成的bin文件:jffs2與squashfs、factory與sysupgrade

		OpenWrt編譯後會生成多個bin文件,比如

			openwrt-ar71xx-generic-tl-wr841nd-jffs2-factory.bin      	8126464 
			openwrt-ar71xx-generic-tl-wr841nd-jffs2-sysupgrade.bin     	4980740
			openwrt-ar71xx-generic-tl-wr841nd-squashfs-factory.bin   	8126464
			openwrt-ar71xx-generic-tl-wr841nd-squashfs-sysupgrade.bin  		3538948

		bin 文件名稱中有兩種不同的格式,jffs2 與 squashfs。這兩種格式的固件區別在於,squashfs 格式的 bin 文件安裝後,會佔用
		一定的空間來存放系統的一些必要文件,這些文件都只是可讀的,其作用是幫助恢復系統。當 OpenWrt 崩潰時,可以基於這些文件,
		使用 firstboot 腳本重建初始系統,而 jffs2 則不會存儲這樣的文件,好處是節省了空間。一般使用 squashfs 格式的固件,方便恢復系統到初始狀態。

		每種格式都有兩個文件,factory 與 sysupgrade,這兩者的區別是,factory 多了一些驗證的東西,用於在原廠固件的基礎上進行升級,
		如果已經是 OpenWrt,直接使用 sysupgrade 文件即可。並且,在原廠固件的基礎上進行升級時,首先使用 factory 文件,然後需要再次使
		用 sysupgrade 文件,選擇不保留原來配置進行升級。

	【在 Breed 上,刷 lede-ar71xx-generic-tl-wr720n-v3-squashfs-sysupgrade.bin 到固件區即可】

	openwrt 的 sysupgrade 和 factory 固件的區別

		openwrt 的固件一般分兩種類型:factory 原廠固件、sysupgrade 固件

		factory 多了一些驗證的東西,用於在原廠固件的基礎上進行升級。

		普通家用路由一般不是openwrt固件,如果要將家用路由升級爲 openwrt 固件,就可以用 factory 刷到路由上。sysupgrade 是在 openwrt 路由基
		礎上升級固件,無論你是原廠固件或者本身就是 openwrt 固件,要升級到 openwrt,factory 都適用,但是 sysupgrade 只能用在升級,TTL 救磚
		的時候就不能用 sysupgrade。sysupgrade 不包含數據分區,factory 帶,factory 預留原廠分區,sysupgrade 只包含 openwrt 分區。

		有一個公式: sysupgrade.bin + 空閒空間 + 系統的配置空間 = factory.bin 的大小

		在 openwrt wiki 中有專門描述 sysupgrade:

			sysupgrade 替換 linux 內核和 squash 文件系統,擦除整個 jffs2 部分。能保留配置文件,但不能保留二進制安裝文件。
			描述了幾種 sysupgrade 方法,但沒有描述在 web 界面的更新,也沒有描述 factory 和 sysupgrade 的區別。
			描述的更新方法爲:
				sysupgrade -v /tmp/openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-sysupgrade.bin
				mtd -r write /tmp/openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-sysupgrade.bin firmware
				nc -l -p 1234 | mtd write – firmware
	
	一、openwrt/bin/ramips/目錄下的固件介紹

		openwrt-ramips-rt305x-mpr-a2-squashfs-sysupgrade.bin 
		
		openwrt 生成的內核和文件系統在一起的鏡像
			openwrt-ramips-rt305x-uImage.bin 
			openwrt-ramips-rt305x-vmlinux.bin 
			openwrt-ramips-rt305x-vmlinux.elf 
		三個都是 openwrt 生成的內核鏡像
			openwrt-ramips-rt305x-root.squashfs 
		openwrt 生成的文件系統鏡像
	
	二、openwrt沒有集成bootloader,只有文件系統和內核


清理編譯

	有的時候我們需要清理掉已經做過的某些編譯操作。

	清理掉包括已編譯好:固件、軟件包

		[hoowa@axwrt_host axwrt]$ make clean


	清理掉包括已編譯好:交叉編譯工具、固件、軟件包

		[hoowa@axwrt_host axwrt]$ make dirclean


	清理掉所有內容(包含 axwrt 定義的軟件包信息,這個清理將返回 OpenWrt 原始狀態)

		[hoowa@axwrt_host axwrt]$ make distclean
		
	命令貼士:

		[openwrt@localhost trunk]$make clean  #清除(刪除 bin 和 build_dir 內容)

		[openwrt@localhost trunk]$make dirclean  #清除目錄[除了刪除 bin 和 build_dir 內容,並且包含 staging_dir(交叉編譯工具)
												和 toolchain (跨平臺編譯的工具,即工具鏈),dirclean 是基本的清除指令]

		[openwrt@localhost trunk]$make distclean  #清除編譯(清除所有相關的東西,包括下載的軟件包,配置文件,feed 內容等,不建議使用)		

OpenWrt 文件夾作用

	文件夾名稱 					作用
	bin/ 				編譯完成後的固件文件以及軟件包
	build_dir/ 			build_dir/host/ 用於編譯支持的宿主系統運行程序
	build_dir/target_xxx 所有軟件包的編譯過程文件夾
	build_dir/toolchain_xxx 	交叉編譯工具
	config/ 			菜單選項的基本菜單
	dl/ 				各類軟件包下載後源代碼存放位置
	docs/ 				OpenWrt 的官方文檔
	feeds/ 				feeds 源的軟件包描述和配置
	include/ 			編譯的參數描述
	package/ 			基本軟件包描述和配置(feeds 源也會軟連接到這裏)
	scripts/ 			用於完成編譯的腳本程序
	staging_dir/ 		存放編譯後的目錄結構,固件通過這裏的結構生成
	target/				存放各類 CPU 和芯片和電路板參數與專有驅動
	tmp/ 				臨時文件
	toolchain/ 			交叉編譯工具的源文件
	tools/	 			用於輔助編譯的各類工具編譯參數

Target/linux下平臺預設文件

	大部分文件夾都是用於參數整個編譯流程的,其中最主要的是target/linux與package/(下章將專門講解軟件包如何製作)。Target/Linux中包含的東西擁有以下作用:
		1.描述廠商芯片標準
		2.描述芯片類型
		3.描述芯片的驅動
		4.描述針對不同的板子所使用的驅動類型
		5.與菜單選項中的Target系列選項有直接對應關係

	AxWRT的Target/linux下內容

		[hoowa@axwrt_host axwrt]$ ls target/linux/
		generic  Makefile  ramips


	AxWRT經過精簡,取消了很多教學用不上的CPU類型支持。所保留的有兩個爲:
	generic/ 通用標準信息
	ramips/ 針對MTK公司的芯片

	各種不同的芯片類型在target/linux/xxx下面具體內容多少都有一定區別,這
	是因爲各芯片廠商的芯片表述都不一致的原因,這裏我們僅以ramips文件夾說明。

	target/linux/ramips
		文件夾名稱 		作用
		base-files/ 用於ramips芯片的固件中的普通文件,這些文件都將
					直接打包到固件中
		dts/ 		Linux系統硬件驅動設備樹文件,這個是 OpenWrt BB 版
					開始爲 MTK 芯片新引進的表達方式
		files/ 		驅動或芯片彙編程序源代碼
		image/ 		針對這個芯片的固件編譯參數
		mt7620a/ 	針對 MT7620A 這款芯片的配置參數以及與其相關的板子說明
		mt7620n/ 	針對 MT7620N 這款芯片的配置參數以及與其相關的板子說明
		mt7621/ 	針對 MT7621 芯片的配置參數(BB 版對 7621 支持還不成熟)
		patches-3.10/  針對內核版本 3.10 的芯片相關補丁,默認 BB 版主內核
		rt288x/ 	針對 RT288x 系列芯片的配置參數以及板子說明
		rt305x/ 	針對 RT305x 系列芯片的配置參數以及板子說明
		rt3883/ 	針對 RT3883 系列芯片的配置參數以及板子說明	

16M 編譯器固件製作: WN703

	Openwrt 分區表:
		root@LEDE:~# cat /proc/mtd
			dev:    size   erasesize  name
			mtd0: 00020000 00010000 "u-boot"
			mtd1: 00141ee0 00010000 "kernel"
			mtd2: 00e8e120 00010000 "rootfs"
			mtd3: 00a70000 00010000 "rootfs_data"
			mtd4: 00010000 00010000 "art"
			mtd5: 00fd0000 00010000 "firmware"

	
	編譯器固件組成:
		Breed(0-0x20000(128K)) + Openwrt(0x20000-0xFF0000(16M-192K)) + art(0xFF0000-0xFFFFFF(64K))	
	
	以 8M 固件爲例,講述 WinHex 工具的使用:

		1. winhex 打開–> new file (CTRL+N 新建8M文件)

			### 快捷鍵:CTRL+N

		2. Fill with Hex values (FF)

			### 快捷鍵:CTRL+A –> CTRAL+L

		3. 打開128K的uboot文件

			### 快捷鍵:CTAL+A –> CTRAL+C

			CTAL+A –> Edit –>Copy Block (複製塊) –> Normally

		4.選擇打開的8M的文件,將光標放置在8M文件頭處位置在(00000000) 
			Edit–> Clipboard Data( CTRAL+B 粘貼數據 ) –> Write(寫入)

		5.打開sysupgrade固件數據

			### 快捷鍵:CTAL+A –> CTRAL+C

			CTAL+A –> Edit –>Copy Block (複製塊) –> Normally

		6.選擇打開的 8M 的文件,將光標放置在8M文件的 20000 處,寫入固件數據 
			Edit–> Clipboard Data( CTRAL+B 粘貼數據 ) –> Write(寫入)

		7.打開64K的ART固件

			### 快捷鍵:CTAL+A –> CTRAL+C

			CTAL+A –> Edit –>Copy Block (複製塊) –> Normally

		8. 選擇打開的8M的文件,將光標放置在8M文件的7F0000處,寫入64K的ART數據 
			Edit–> Clipboard Data( CTRAL+B 粘貼數據 ) –> Write(寫入)

		注: 
			4M 固件應寫在偏移量 3F0000 
			8M 固件應寫在偏移量 7F0000 
			16M 固件應寫在偏移量 FF0000

	如果需要修改 MAC 地址,請修改 8M 文件的 1FC00 位置後的 12 位數值即可。

安裝軟件:

	安裝 luci 配置路由器可連網之後
		opkg update 	//更新軟件包列表
		opkg install  	//在線安裝軟件包
		opkg remove  	//移除軟件包
	
	如安裝 samba 服務:
		opkg update
		opkg install luci-app-samba           #SAMBA網絡共享服務
		/etc/init.d/samba enable              #啓用並開始SAMBA共享
		/etc/init.d/samba restart
        
    安裝報錯:
        Collected errors:
            * satisfy_dependencies_for: Cannot satisfy the following dependencies for luci-app-pptpd:
        
            opkg_install_cmd: Cannot install package luci-app-pptpd.
    
    解決方法一: 沒直接編譯進固件的與內核相關的軟件包安裝都是這樣的,這樣

        opkg install  kmod-ath kmod-ath9k kmod-ath9k-common kmod-ath9k-htc  --force-depends    
     
    解決方法二:
        OpenWrt中文文檔並不完善,國內論壇也不太照顧新人,有時遇到問題無從下手。這裏整理一些常見錯誤提示和解決方法,我也是新手整理的不全有問題可以在評論裏提出。


        satisfy_dependencies_for: Cannot satisfy the following dependencies for xxxx:  
         *      kernel (= xxxx) *        kernel (= xxxx)  

        有時候從網上下別人編譯好的整合固件,想安裝新軟件時會有上面的提示,意思是內核太舊了,這時需要從官網下新的固件更新。

        cd /tmp  
        wget http://downloads.openwrt.org/snapshots/trunk/PLATFORM/xxx-sysupgrade.bin  
        sysupgrade -v /tmp/xxxx-sysupgrade.bin  
        
        把 xxx 替換爲你的固件,重啓後系統就變成最新的了。
    
    明月 openwrt 安裝 ar9271 網上驅動支持:
    
        1. 安裝驅動

            opkg install kmod-usb-core kmod-usb-ohci kmod-usb-uhci kmod-usb2 usbutils kmod-ath kmod-ath9k kmod-ath9k-common kmod-ath9k-htc

        2. 插入網卡,執行以下命令,查看設備

            lsusb

        3. 重啓路由器,開啓無線網卡

            ifconfig wlan1 up

        4. 生成默認無線設置  也就是將USB無線網卡在web界面裏出現radio1

            wifi detect > /etc/config/wireless

        5. 進luci配置無線

啓動流程概覽:

	Breed -> Linux 
				-> /etc/preinit : 主要是掛載一些系統需要的文件系統,例如tmpfs,proc和sysfs
								   並且會準備設備節點和故障恢復(failsafe)的準備
							--> /sbin/init : 啓動 init 程序,在 OpenWrt 上也就是 busybox 的 init 程序
								-> 解析 /etc/inittab 
										/etc/inittab的內容:
											::sysinit:/etc/init.d/rcS S boot
											::shutdown:/etc/init.d/rcS K stop
											tts/0::askfirst:/bin/ash --login
											ttyS0::askfirst:/bin/ash --login
											tty1::askfirst:/bin/ash --login
										
										--> 運行 /etc/init.d/rcS : 將執行/etc/rc.d/S* 這些腳本:
												root@OpenWrt:/# ls /etc/rc.d/S*
													/etc/rc.d/S10boot 
													/etc/rc.d/S50cron 
													/etc/rc.d/S60led
													/etc/rc.d/S20fstab 
													/etc/rc.d/S50dropbear 
													/etc/rc.d/S95done
													/etc/rc.d/S39usb 
													/etc/rc.d/S50uhttpd 
													/etc/rc.d/S97watchdog
													/etc/rc.d/S40network 
													/etc/rc.d/S50telnet 
													/etc/rc.d/S99sysctl
													/etc/rc.d/S45firewall /
													etc/rc.d/S60dnsmasq
												
												按照數字從小到大的順序執行。
							
	
	實現自啓動腳本

		OpenWRT 的啓動腳本放在 /etc/init.d 目錄下,而系統開機時自動運行 
		/etc/rc.d 目錄下的腳本。所以在 rc.d 目錄下、有 init.d 下腳本的鏈接文件。
		整理一下

			05 defconfig //加載默認參數
			10 boot //啓動
			39 usb // 加載usbfs
			40 network // 設置網卡參數
			45 firewall // 防火牆
			50 dropbear // sshd server
			50 cron // .....
			50 telnet // 如果沒有修改root密碼,則啓動telnet server
			60 dnsmasq // DHCP 和 DNS 服務端
			95 done // ..
			96 led // 指示燈
			97 watchdog // ...
			99 sysctl // 最後,進行必要的內核參數調整

		然後,我們加入自己的腳本,實現模塊驅動的加載、應用程序的開機自啓動等。

		首先在 /etc/init.d 裏添加需要啓動的 shell 腳本

		例如:
			vim startCamera
		
		內容:

			#!/bin/sh /etc/rc.common
			# /init.d/startCamera
			START=50
			start()
			{
				./opt/ipnc/system_server &
			}

			stop()
			{
				killallsystem_server
			}
			
		之後還需要在 rc.d 目錄下做一個鏈接,啓動時系統會按順序啓動 rc.d 目
		錄下的腳本鏈接,對應執行 init.d 目錄下的啓動腳本。腳本的命名要符合
		系統規範,init.d 下 telnet 腳本在 rc.d 目錄下的鏈接文件名爲 
		S50telnet。所以鏈接文件要在腳本名前加 S+ 啓動順序數字,啓動順序要
		等系統進行完必要的初始化。所以我們命名爲 S95+ 腳本名。


		命令:ln -s /etc/init.d/startCamera /etc/rc.d/S95startCamera


		重啓,即可


		現在實現了應用程序的開機自啓動。
	
####################################################################################################################

4M 改 16M 位置:

		4M 加載太多東西會報錯:
			/home/wangjun/openwrt/staging_dir/host/bin/mktplinkfw -H 0x07200103 -W 0x1 -F 4Mlzma -N OpenWrt -V r3840-788312c -m 1 -k /home/wangjun/openwrt/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tl-wr720n-v3-kernel.bin -r /home/wangjun/openwrt/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tmp/lede-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin -o /home/wangjun/openwrt/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tmp/lede-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin.new -j -X 0x40000 -a 0x4   && mv /home/wangjun/openwrt/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tmp/lede-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin.new /home/wangjun/openwrt/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tmp/lede-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin || rm -f /home/wangjun/openwrt/build_dir/target-mips_24kc_musl-1.1.16/linux-ar71xx_generic/tmp/lede-ar71xx-generic-tl-wr720n-v3-squashfs-factory.bin
			[mktplinkfw] kernel length aligned to 1318128
			[mktplinkfw] *** error: images are too big by 29194 bytes
			[mktplinkfw] kernel length aligned to 1318128
			[mktplinkfw] *** error: images are too big by 29194 bytes
		
		修改位置:
		openwrt/target/linux/ar71xx/image/tp-link.mk
			define Device/tl-wr720n-v3
				$(Device/tplink-16mlzma)
				DEVICE_TITLE := TP-LINK TL-WR720N v3
				DEVICE_PACKAGES := kmod-usb-core kmod-usb2
				BOARDNAME := TL-WR720N-v3
				DEVICE_PROFILE := TLWR720
				TPLINK_HWID := 0x07200103
				CONSOLE := ttyATH0,115200
			endef

客製化:

    make clean
    
    編譯完成後清除之前的編譯作業(使用這個命令前,記得把編譯好的固件備份出來,不然會被刪除掉,切記)

    其中 make menuconfig 會有一個編譯管理器,在裏面可以選擇型號、OP功能組件,需要用到方向鍵、回車鍵、空格鍵。方向鍵是移動光標,
	回車鍵是確認,空格鍵是選擇(在選項框按下空格鍵,*號是編譯進固件,M是編譯但是不編譯進固件)

    添加功能時儘量依靠依賴包,比如添加 ddns 時,只需要在 luci 選項裏面選擇 luci-app-ddns,編譯
	管理器會自動加上 ddns-scripts 及其他依賴庫文件。 

    #.選擇CPU型號
		Target System—–Atheros AR71xx/AR7240/AR913x/AR934x

    #.選擇路由型號
		Target Profile—-TP-LINK TL-MR3420 v1

    #.添加 luci
		LuCI—>Collections—– <*> luci

		# 添加 luci 的中文/英文語言包
		LuCI—>Modules  --->  Translations—- <*> luci-i18n-chinese
		LuCI—>Modules  --->  Translations—- <*> luci-i18n-English

		# 添加 DDNS
		LuCI—>Applications —> <*>luci-app-ddns.
			  Applications —> <*> luci-app-uhttpd.
		
		# 添加主題
		LuCI—>Themes —> <*>luci-theme-openwrt

		# 編譯 openwrt 支持 USB 自動 mount 功能
			make menuconfig
		1). 添加USB相關支持
			Kernel modules —> USB Support —> <*> kmod-usb-core.  ##默認已經選了
			Kernel modules —> USB Support —> <*> kmod-usb-ohci.  ##默認已選 old usb1.0
			Kernel modules —> USB Support —> <*> kmod-usb-uhci.  ## usb1.1
			Kernel modules —> USB Support —> <*> kmod-usb-storage.
			Kernel modules —> USB Support —> <*> kmod-usb-storage-extras.
			Kernel modules —> USB Support —> <*> kmod-usb2.  ##默認已經選了 usb2.0

		2). 添加USB掛載
			Base system —> <*>block-mount

		3). 添加自動掛載工具
			Utilities —> Filesystem —> <*> badblocks

		4). 添加文件系統支持
			Kernel modules —> Filesystems —> <*> kmod-fs-ext4 (移動硬盤EXT4格式選擇)
			Kernel modules —> Filesystems —> <*> kmod-fs-vfat(FAT16 / FAT32 格式 選擇)

			Utilities —> Filesystem —> <*> ntfs-3g		
									   [*]   use external FUSE library, selects package libfuse
									   
		5). 添加 UTF8 編碼,CP437 編碼,ISO8859-1 編碼
			Kernel modules —> Native Language Support —> <*> kmod-nls-utf8

			Utilities  ---> disc ---> <*> fdisk.................................... manipulate disk partition table
			Utilities  ---> <*> usbutils................................... USB devices listing utilities
	
	# 安裝 samba 服務:
		LuCI  ---> Applications  ---> <*> luci-app-samba 
		
		配置 samba 服務: 
			在 luci 中修改 templet 文件即可:
			root@LEDE:/etc/samba# cat smb.conf
				[global]
						netbios name = Lede
						workgroup = WORKGROUP
						server string = Lede
						syslog = 10
						encrypt passwords = true
						passdb backend = smbpasswd
						obey pam restrictions = yes
						socket options = TCP_NODELAY
						unix charset = utf-8
						preferred master = yes
						os level = 20
						security = user
						guest account = nobody
				# For safety, disable root user
				#        invalid users = root
						smb passwd file = /etc/samba/smbpasswd

				onfig samba
					option name 'Wr720nV3'
					option workgroup 'WORKGROUP'
					option description 'OpenWrt'
					option homes '0'

				[homes]
						comment     = Home Directories
						browsable   = no
						read only   = no
						create mode = 0750

				[openwrt]
						path = /mnt/sda1
						valid users = root
						read only = no
						guest ok = yes
						create mask = 755
						directory mask = 755
						
				注: option name 和 option path, 如果直接使用 'mnt' 和 '/mnt/' 
				會導致服務器對剩餘空間大小判斷錯誤而無法寫入稍微大一點的文件.
				
				然後 /etc/init.d/samba enable 並重啓路由器就可以了 
				添加用戶:smbpasswd  -a root 
				
				
				
				
	#. Network配置:
		Network—>Routing and Redirection—- <*> ip-full
	

    #.添加復位鍵支持
		Utilities —> <*> restorefactory

    #.添加一鍵開關無線
		Utilities —> <*> wifitoggle

	
	#添加 wifidog:

		在項目下終端:vim feeds.conf.default    
		增加這一行:src-git wifidog https://github.com/wifidog/wifidog-gateway.git
		然後重新:
			./scripts/feeds update -a
			./scripts/feeds install -a
		終端執行 make menuconfig     
		在 Network/captive portals/ 下選擇 wifidog 就有選擇 WiFiDog 這一項了。	
				
    最簡單的,只需要選正面兩項,其餘默認即可: 
		1、 Target System—–選擇編譯類型
		2、 Target Profile—-選擇編譯路由型號

    make V=99    	# V表示輸出詳細信息

tp 的 941n 刷完 openwrt,怎麼安裝 web 管理界面

	首先,用ssh登錄路由(可用putty等軟件)。確保路由連上網。

	——————————配置PPPOE上網————————————參考:openwrt命令行配置PPPOE上網的方法:
	1.vi /etc/config/network(編輯network網絡配置文件)
	2.如果無法編輯,按a進入編輯模式。
	3.輸入以下內容:config 'interface' 'wan'option ifname 'wan'option proto 'pppoe'option username 'xxxxxxx' 
	(xxxxxxx表示是你的pppoe帳號)option password 'xxxxxx' (xxxxxx表示是你的密碼)option peerdns '1'option 
	defaultroute '1'
	4.按:(冒號)退出編輯模式,再輸入x,然後回車,保存文件。
	5.輸入 /etc/init.d/network start 並回車。配置PPPOE上網完畢。
	——————————配置PPPOE上網————————————

	輸入opkg update 並回車。(更新軟件包列表)輸入
	opkg install luci 並回車。(安裝Web管理軟件luci)待完成,輸入/etc/init.d/uhttpd start 並回車。
	(啓動Web服務)輸入/etc/init.d/uhttpd enable 並回車。(設爲開機自動啓動)好了,完成,可以通
	過瀏覽器訪問你的路由器並進行配置了。補充一下:如果你需要中文界面,可以
	opkg install luci-i18n-chinese安裝中文語言包。	

選項有很多種大體上作用如下表所描述
    選項 作用
    Target System 	目標設備芯片類型,AxWRT系統只保留了Ralink RT288x/RT3xxx。教學板MT7620芯片就是RT系列的升級版
    Subtarget 		目標子類型,一般是具體板子類型
    Target Profile 	針對不同路由器的版本再做的一個明確選項參數,一般默認即可
    Target Images 	生成的固件文件採用何種分區格式
    Global build settings 	編譯時的一些全局參數,這些參數與Linux內核或GCC編譯器相關
    Advanced configuration options 	高級選項參數,用於OpenWrt開發人員,一般用不上
    Build the OpenWrt Image Builder 除了編譯固件,再編譯一個固件編譯環境,可以分發給團隊中的其他人使用。
            一般是廠商不想開放自己的全部源代碼,給第三方合作伙伴提供這玩意
    Build the OpenWrt SDK 	產生 OpenWrt SDK 環境,就是另外一個開發環境
    Build the OpenWrt based Toolchain 單獨編譯出 OpenWrt 的交叉編譯工具
    Image configuration 	編譯好的固件所附帶的參數信息
    Package features 		一些軟件包特性
    Base system 			基本系統命令軟件包
    Administration 			高級管理命令軟件包
    Boot Loaders 			引導程序,教學板不用固件附帶,所以這裏無選項
    Development 			開發用工具包
    Firmware 		不要被名字混淆了,這個的意思是,固件中是否帶某些其他外圍芯片的固件
    Kernel modules 	內核編譯參數,這裏的參數都來自芯片廠對內核的預設配置
    Languages 		編程語言軟件包
    Libraries 		庫軟件包
    LuCI 			OpenWrt下頂頂大名的LuCI界面包
    Mail 			電子郵件相關的軟件包
    Multimedia 		多媒體軟件包
    Network 		與網絡相關的軟件包
    Sound 			聲音相關的軟件包
    Utilities 		工具軟件包
    Video Streaming 視頻流服務軟件包

    並不是所有軟件包都選上了,實際上如果所有軟件包都選上了一方面編譯時間可能要按天計算,另外一方面用來存放固件的 FLASH 容量也不足以安裝,
    所以 OpenWrt 的選擇菜單在軟件包選上有兩種策略:
        Buildin:綁定,直接將所選擇軟件包綁定到固件中
        Module:模塊,所選擇軟件包不綁定到固件中,以模塊的形式存在,在需要時候使用 opkg 命令安裝

    更換兩種策略的方式很簡單,選中要更換策略的軟件包,按空格鍵,如果顯示爲[*]則表示綁定,如果顯示爲[M]則表示模塊。
    hoowa 推薦第一次編譯不要去調整軟件包,軟件包存在很多依賴關係,先成功一次,然後再去選擇哪些想要,哪些不想要!


之前編譯 OpenWRT 的時候,對於 feeds 都是直接按照教程上給的寫好,也沒有去關注過,都是照葫蘆畫瓢式的,最近和別人交流時用到了src-link的feeds執行方
	式,突然發現自己連這個怎麼用都不知道,趕緊去學習了一下feeds的相關說明。

    Feeds 是 OpenWRT 環境所需要的軟件包套件,比較重要的 feeds 有:

		‘pacakges’:一些額外的基礎路由器特性軟件

		‘LuCI’:OpenWRT默認的GUI

		‘Xwrt’:另一種可選的GUI界面

    如果你之前沒有下載好這些套件,而是選擇在編譯的時候在線下載安裝的話,一定
	要保證編譯的時候是成功連接到互聯網的,否則導致編譯終端,出
	現“No More Mirrors Download”的錯誤很煩人的。爲了避免其他的錯誤,還是在
	連接互聯網的情況下來編譯吧,編譯的過程本來就很長了,再出現這些錯誤會抓狂的。

    下載之前可以通過查看更改 feeds.conf.default 這個文件來查看和選擇相應的軟件包。

    開始下載,使用命令:

		./scripts/feeds update -a

    接下來安裝feeds包,只有安裝之後,在make menuconfig的時候才能夠對相關的配置進行修改:

		./scripts/feeds install -a

    如果更新了 feeds 的配置文件,需要添加新的軟件包用於生成系統,只需要重複執行操作:

		./scripts/feeds update -a

		./scripts/feeds install -a

    將可使用的 feeds 列表配置在 feeds.conf 或者是 feeds.conf.default,這個文件包含了 feeds 的列表,每一行由三個部分組成,feeds 的方法,feeds 的名字和 feeds 的源。

    下面是一個 feeds.conf.default 的例子:

		src-git packages https://github.com/openwrt/packages.git

		src-git luci http://git.openwrt.org/project/luci.git

		src-git routing https://github.com/openwrt-routing/packages.git

		src-git telephony http://git.openwrt.org/feed/telephony.git

		src-git management https://github.com/openwrt-management/packages.git

		src-git oldpackages http://git.openwrt.org/packages.git

		#src-svn xwrt http://x-wrt.googlecode.com/svn/trunk/package

		#src-svn phone svn://svn.openwrt.org/openwrt/feeds/phone

		#src-svn efl svn://svn.openwrt.org/openwrt/feeds/efl

		#src-svn xorg svn://svn.openwrt.org/openwrt/feeds/xorg

		#src-svn desktop svn://svn.openwrt.org/openwrt/feeds/desktop

		#src-svn xfce svn://svn.openwrt.org/openwrt/feeds/xfce

		#src-svn lxde svn://svn.openwrt.org/openwrt/feeds/lxde

		#src-link custom /usr/src/openwrt/custom-feed
		

   下面是feeds支持的方法類型:

		src-bzr 	通過使用 bzr 從數據源的pxiaath/URL下載數據

		src-cpy		通過從數據源 path 拷貝數據

		src-darcs	通過使用 darcs 從數據源 path/URL 下載數據

		src-hg		通過使用hg從數據源 path/URL下載數據

		src-link	創建一個數據源 path 的 symlink

		src-svn		通過使用 svn 從數據源 path/URL 下載數據

    我這裏是學習到 link 類型,這個只需要將你下載好的源文件的位置寫好就行了。其他的幾個按照說明即可,沒有具體去使用過。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章