2015年6月

portal为什么选择开源路由器第三方固件 OpenWrt

现在市场上主流固件有DD-WRT ,Openwrt,tomato,为什么有选择使用openwrt 来移植wifidog做无线portal ?

  1. 关于 OpenWrt
    当Linksys 释放 WRT54G/GS 的源码后,网上出现了很多不同版本的 Firmware 去增强原有的功能。大多数的 Firmware 都是99%使用 Linksys的源码,只有1%是加上去的,每一种 Firmware 都是针对特定的市场而设计,这样做有2个缺点,第一个是难以集合各版本Firmware的长处,第二个是这版本距离 Linux 正式发行版越来越远。
    OpenWrt 选择了另一条路,它从零开始,一点一点的把各软件加入去,使其接近 Linksys 版 Firmware的功能,而OpenWrt 的成功之处是它的文件系统是可写的,开发者无需在每一次修改后重新编译,另它更像一个小型的 Linux 电脑系统,也加快了开发速度。
  2. 为什么使用 OpenWrt
    因为 Linux 为我们提供了很多免费的软件,我们可以用一个很低的价钱购买像WRT54G的硬件,做成一个小型的 Linux 系统,现在OpenWrt已经提供了100多个已编译好的软件,而且数量还在不断增加,而 OpenWrt SDK 更简化了开发软件的工序
  3. OpenWrt 的历史
    OpenWrt 项目由 2004 年 1 月开始, 第一个版本是基于 Linksys 提供的 GPL 源码及 uclibc 中的 buildroot 项目, 在网上至今仍有很多项目使用这个版本, 较为有名 Freifunk-Firmware 和 Sip@Home.
    到了2005年初, 一些新的开发人员加入了这项目, 几个月后他们释出了第一个版本, 这和以前版本不同的是, 这版本差不多完全舍弃了 Linksys 的 GPL 源码, 使用了 buildroot2 作为核心技术, 将 OpenWrt 完全模块化,OpenWrt 使用 Linux 正式发行的核心源码(2.4.30),加上了一些补丁和网络驱动,开发队伍更为OpenWrt添加了许多免费的工具,你可以直拉把Image写入 Flash (mtd)里面,设定无线功能和VLAN交换功能,这个版本名为White Russian,而1.0版本大概于2005年底公布。
  4. 为什么是OpenWrt?
    Linksys WRT54G 是一个几乎在任何电脑商场都可以买到的无线路由器, 只需拿出4-5百元, 你就可以拥有一个配备 200MHz CPU, 4MB Flash, 16MB Ram的嵌入式开发系统, 而且在你完成你的开发后, 你还可以应用在生活上, 一点都不浪费。由于它使用 Linux 作为操作系统, 并公开源码及驱动, 在网络上已有很多为它而设计的开源项目, 包括HyperWRT, OpenWRT, SIP Phone等等, 实在是学习嵌入式 Linux 的入门级首选。为什么学习OpenWRT?你不需要对 MIPS 处理器有很深入的了解, 也不用懂得如何去设计一个 MIPS 处理器专用的内核, 因为这些在网上已有人为你做好, 你只需懂得如何安装和使用就行了, 不过你也可以去http://www.linux-mips.org 找到相关的资料。如果你对 Linux 系统有一定的认识, 并想学习或接触嵌入式 Linux 的话, OpenWRT很适合你, 你将学会一些无线路由器的基本知识, 以及一般嵌入式 Linux 的开发过程, 你会发现无论是 ARM, PowerPC 或 MIPS 的处理器, 都必需经过以下的开发过程:1. 创建 Linux 交叉编译环境2. 建立 Bootloader3. 移植 Linux 内核4. 建立 Rootfs (根文件系统)5. 安装驱动程序6. 安装软件7. 调试随着 Linux 的成熟, 大量不同的处理器内核和应用软件相继出现, 当你熟悉这些嵚入式 Linux 的基本开发流程后, 你不再局限于 MIPS 处理器和无线路由器, 你可以尝试在其它处理器, 或者非无线路由器的系统移植嵌入式 Linux, 定制合适自己的应用软件, 并建立一个完整的嵌入式产品。

本文章由 http://www.wifidog.pro/2015/06/29/openwrt%E9%9B%86%E6%88%90wifidog.html 整理编辑,转载请注明出处

Openwrt的feeds添加wifidog

Feeds是OpenWrt环境所需要的软件包套件。最重要的feeds有:

‘packages’一些额外的基础路由器特性软件

‘LuCI’OpenWrt默认的GUI

‘Xwrt’另一种可选的GUI界面

需要能够连接互联网。

在下载之前可以通过查看’feeds.conf.default’文件,来检查哪些文件需要包含在环境中。

开始下载,使用:

[openwrt@localhost trunk]$ ./scripts/feeds update -a

安装feeds包,只有安装之后,在后面的make menuconfig时,才可以对相关配置进行勾选。

[openwrt@localhost trunk]$ ./scripts/feeds install -a

如果更新了feeds的配置文件,需要添加新的软件包用于生成系统。只需进行重复操作:

[openwrt@localhost trunk]$ ./scripts/feeds update -a

[openwrt@localhost trunk]$ ./scripts/feeds install -a

可使用的feeds列表配置在feeds.conf目录下或者feeds.conf.default。这个文件包含了feeds列表,每一行又三部分组成,feed方法,feed 名字和feed源

下面是一个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

下面是feed支持的方法类型:

src-bzr 通过使用bzr从数据源的path/URL下载数据

src-cpy 通过从数据源path拷贝数据

src-darcs 通过使用darcs从数据源path/URL下载数据

src-git 通过使用git从数据源path/URL下载数据

src-hg 通过使用hg从数据源path/URL 下载数据

src-link 创建一个数据源path的symlink

src-svn 通过使用svn从数据源path/URL下载数据

本文章由 http://www.wifidog.pro/2015/06/24/openwrt-feed-%E5%88%86%E6%9E%90.html 整理编辑,转载请注明出处

OpenWRT中添加新设备支持

这里还是向OpenWRT中添加对小度路由的支持
向 target/linux/ramips/image/makefile中写入新设备

image/build/profile/mt7620a_CLZ=$(call buildFirmware/Default8M/$(1),$(1),mt7620a_clz,MT7620a_CLZ)
$(call image/Build/Profile/MT7620a_CLZ,$(1))

base-files中的一些可用配置:

base-files/etc/diag.sh 控制LED在OpenWRT启动时是否闪烁
base-files/lib/upgrade/platform.sh 允许sysupgrade工作
base-files/etc/uci-defaults/network to configure(安装) default network interface(界面) settings, particularly MAC addresses
base-files/etc/uci-defaults/leds if you have configurable(可配置的) LEDs which should default to a behavior(行为), like a WLAN activity LED
base-files/etc/hotplug.d/firmware(固件)/10-rt2x00-eeprom to extract(提取) the firmware image for the wireless(无线的) module
base-files/lib/preinit/06_set_iface_mac to set the MAC addresses of any other interfaces(界面)

编写的小度路由用的dts文件

/dts-v1/;

/include/ "mt7620a.dtsi"

/ {
    compatible = "ralink,mt7620a-eval-board", "ralink,mt7620a-soc";
    model = "Ralink MT7620A xiaodu board";

    palmbus@10000000 {
        sysc@0 {
            ralink,gpiomux = "i2c";
            ralink,uartmux = "gpio";
            ralink,wdtmux = <1>;
        };

        gpio0: gpio@600 {
            status = "okay";
        };

        spi@b00 {
            status = "okay";

            w25q64bv@0 {
                #address-cells = <1>;
                #size-cells = <1>;
                compatible = "w25q64bv";
                reg = <0 0>;
                linux,modalias = "w25q64bv";
                spi-max-frequency = <1000000>;

                partition@0 {
                    label = "u-boot";
                    reg = <0x0 0x30000>;
                    read-only;
                };

                partition@30000 {
                    label = "u-boot-env";
                    reg = <0x30000 0x10000>;
                    read-only;
                };

                factory: partition@40000 {
                    label = "factory";
                    reg = <0x40000 0x10000>;
                    read-only;
                };

                partition@50000 {
                    label = "firmware";
                    reg = <0x50000 0x6b0000>;
                };

                partition@700000 {
                    label = "usercfg";
                    reg = <0x700000 0x100000>;
                };
            };
        };
    };

    ethernet@10100000 {
        status = "okay";

        pinctrl-names = "default";
        pinctrl-0 = <&ephy_pins>;

        ralink,port-map = "llllw";
    };

    gsw@10110000 {
        ralink,port4 = "ephy";
    };

    sdhci@10130000 {
        status = "okay";
    };

    pcie@10140000 {
        status = "okay";
    };

    gpio-keys-polled {
        compatible = "gpio-keys";
        #address-cells = <1>;
        #size-cells = <0>;
        poll-interval = <20>;
        wps {
            label = "wps";
            gpios = <&gpio0 12 1>;
            linux,code = <0x100>;
        };
        reset {
            label = "reset";
            gpios = <&gpio0 13 1>;
            linux,code = <0x101>;
        };
    };
};

添加设备后,最好需要将之前编译产生的临时文件删除,语句如下

 cd trunk
 rm -rf tmp
 make menuconfig

本文章由 http://www.wifidog.pro/2015/06/22/openwrt%E6%B7%BB%E5%8A%A0%E6%96%B0%E8%AE%BE%E5%A4%87.html 整理编辑,转载请注明出处

wifidog交叉编译wifidog安装

不得不亲自进行交叉编译移植的时候,所碰到的一些问题。

(1)下载源码
这个可以到wifidog官方下载。

(2)交叉编译环境
这个需要提前准备好,也不多说了

(3)解压,并进入代码目录
运行./autogen.sh
可能会报错:libtoolize: command not found
这个需要安装一下依赖的工具包:apt-get install libtool

(4)然后执行./configure

./configure –host=mips-openwrt-linux –prefix=$PWD/install

host参数指定的是目的平台,一般情况下,设定了host之后,makefile中的编译器会自动调整为host平台的编译器
prefix参数是指执行make install 之后,程序安装的路径。安装在源代码目录的install文件夹内,是为了不污染主机的环境。

(5)然后把install目录中的文件,都拷贝到目的平台(我这里是openwrt)
但是暂时是无法启动wifidog的,因为还没有配置文件。可以在源代码目录找到,拷贝到目标平台的 /etc/wifidog.conf
具体的配置,请自行google

(6)这里提一点,如果是可以直接安装wifiedog的,就直接在线安装吧,不要折腾。
我是不得不修改wifidog 的源码,增加接口,才自行交叉编译的。
如果像我情况一样的话,建议先在线安装wifidog,然后交叉编译完之后把原来安装的wifidog替换掉就好了。这样子可以省了一些写启动脚本之类的工作。

(7)当然,移植过程中还会遇到其它问题,例如

Reading configuration file ‘/home/mint/workspace/my-wifidog/wifidog-gateway/install/etc/wifidog.conf’ 
Could not open configuration file ‘/home/mint/workspace/my-wifidog/wifidog-gateway/install/etc/wifidog.conf’ 

这里报错是因为,默认把安装路径install下面的/etc作为默认配置文件的目录。需要在wifidog启动的时候指定一下。

在openwrt平台上,wifidog启动的脚本是/usr/bin/wifidog-init
在option那里增加一个 参数 ” -c /etc/wifidog.conf “

本文章由 http://www.wifidog.pro/2015/06/17/wifidog%E7%A7%BB%E6%A4%8D.html 整理编辑,转载请注明出处