小米路由核心支持包

来自Jack's Lab
2014年7月31日 (四) 19:23Comcat (讨论 | 贡献)的版本

跳转到: 导航, 搜索

1 概述

5月底拿到带硬盘版的路由,想想也就放家里 7x24 搜集各种智能设备的数据合适。

对于一个好动手的极客,没有内核代码、不能定制、控制自己的路由器是不能容忍的。


手头有原来用perl写的用于服务传感器数据推送 (REST) 的进程,部署需要catalyst和MySql,很自然地想到内核源码搞定后,在原ROM系统里叠加一个Debian 核心系统还是很爽的


于是仔细分析了其硬件实现,借助社区公开的代码,修修改改,6月6日有了一个可启动的内核代码版本

然后断断续续完善到7月底,总算有了一个高度可用的版本


现有的核心支持包包括一个2.6的内核源码包,一个工具链和一个叠加了 Debian 核心系统的混合系统 (ROOT FS)

系统除支持原ROM的核心功能外,自带 Debian 核心环境,可用apt-get install 直接安装你想要的软件包,相当方便


核心包编译出的 rootfs 可直接部署在路由内硬盘的第四个分区上,亦可部署在 NFS server 上,详情参考源码目录的README

核心包源码置于个人的github帐号下: http://github.com/comcat/miwifi



2 使用

以下在 Ubuntu 12.04 验证通过:

1. 源码下载编译

  $ sudo apt-get install lzma
  $ git clone git://github.com/comcat/miwifi.git
  $ cd miwifi/
  $ make

vmlinuz 为可直接被 CFE 加载的内核镜像(内含ramfs)

jarvis-rootfs.tgz 为 rootfs 包。用户 'root' 的默认密码为 'admin',WiFi 的SSID 为 Jarvis 和 Jarvis_5G,密码为 'qwer1234'


2. 部署内核和文件系统

初次尝试建议使用 tftp 加载内核,挂载 NFS 文件系统,内核和rootfs都在PC上,不会改变原路由的结构,测试、调试方便


2.0 配置网络

我们在PC上部署 tftp server 和 NFS server,因此需要一根网线连接路由WAN口边上的LAN口到PC网口连接的HUB上,保证PC和路由在局域网内能通信

小米路由启动时,CFE (bootloader) 会检测 nvram 中的 flag_tftp_bootup 这个参数,如果其值为 on,其会首先尝试tftp加载 192.168.1.2:/vmlinuz 这个路径。因此我们要为 PC 配一个 192.168.1.2 的IP:

$ sudo ifconfig eth0:0 192.168.1.2


另,路由启动后,其为LAN口配的地址为 192.168.31.1 ,为保证PC能访问其 web 配置界面,也为 PC 配一个 192.168.31.2 的IP:

$ sudo ifconfig eth0:1 192.168.31.2



2.1 安装配置 tftp 服务器

$ sudo apt-get install tftpd tftp

$ cat /etc/xinetd.d/tftp
service tftp
{
    socket_type = dgram
    protocol = udp
    wait = yes
    user = root
    server = /usr/sbin/in.tftpd
    server_args = -s /tftpboot
    disable = no
    per_source = 11
    cps = 100 2
    flags = IPv4
}

$ sudo mkdir /tftpboot
$ sudo chmod 777 /tftpboot

$ sudo /etc/init.d/xinetd restart


到此 tftp Server 安装成功,把编译好的内核 vmlinuz 拷到 /tftpboot 目录下:

$ cp /path/to/miwifi/vmlinuz /tftpboot/


用 tftp 测试 tftp server 是否正常:

$ tftp
> connect 192.168.1.2
> get vmlinuz           # 获取tftp server 上的根目录下的 vmlinuz 文件



2.2 安装配置 NFS 服务器










2.3 加载内核

root@XiaoQiang:/# nvram get flag_tftp_bootup
off
root@XiaoQiang:/# nvram set flag_tftp_bootup=on
root@XiaoQiang:/# nvram set rootfs=nfs              # 指示内核从NFS启动
root@XiaoQiang:/# nvram commit
root@XiaoQiang:/# reboot
 
...........
CFE version v1.0.4
BSP: 6.37.14.34 (r415984) based on BBP 1.0.37 for BCM947XX (32bit,SP,)
Build Date: Wed Apr 30 18:03:21 CST 2014 (szy@shenzhiyong-ct)
 
...........
 
Device eth0:  hwaddr 8C-BE-BE-20-B7-48, ipaddr 192.168.1.1, mask 255.255.255.0
        gateway not set, nameserver not set
********** flag_tftp_bootup=on **********
tftp network: ifconfig eth0 -addr=192.168.1.1 -mask=255.255.255.0 -gw=192.168.1.1
Device eth0:  hwaddr 8C-BE-BE-20-B7-48, ipaddr 192.168.1.1, mask 255.255.255.0
        gateway 192.168.1.1, nameserver not set
kernel: boot -raw -z -addr=0x8000 -max=0x800000 192.168.1.2:vmlinuz
Loader:raw Filesys:tftp Dev:eth0 File:192.168.1.2:vmlinuz Options:(null)
Loading: ........ 5704544 bytes read
Entry at 0x00008000
Closing network.
Starting program at 0x00008000
......
......































个人工具
名字空间

变换
操作
导航
工具箱