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 类型,这个只需要将你下载好的源文件的位置写好就行了。其他的几个按照说明即可,没有具体去使用过。

你可能感兴趣的:(Openwrt)