查看: 6518|回复: 7
收起左侧

[系统与软件] 来吧,省点钱,把PI当做无线路由的方法!(制作以及编译步骤教程)

2013-4-24 00:17:41 | 显示全部楼层 |阅读模式
之前发的512,256M基本是通用的系统,因为兼容原因还是比较大的。
这次写个教程,教你如何编译一个只适合自己的小系统,怎样把pi当做路由来用。
【现在把2个玩意合并发出来】
【以下前面带#号的是命令,不带的不是命令,输入命令的时候不要输那个井号】
【交叉编译环境ubuntu 12.04 + 官方提供的工具(可以用自己装的arm-gcc)】
【最重要的一步,确认你的网卡有ap功能,并且你能找到的你网卡的驱动又AP支持】
【使用rtl8192cu驱动的网卡,基本都没问题,其它的我没有查询和测试】
【如果你使用多核心加速编译,有时候会产生错误,出现错误的时候,可以直接make】
【打开终端,先确认CCPREFIX路径是否正确,否则也会出现错误】
【所有软件均编译为动态,否则会出现各种奇怪的问题,令人毛骨悚然!!!这是编译器和libc等库的问题】

--------------------------------------------------------------------------------------------------------------
建立目录比如我的用户为xin,我的用户根目录为/home/xin/
#cd ~
#mkdir raspi_build
#cd raspi_build
现在目录为/home/xin/raspi_build

下载源码和必要工具到raspi_build目录
3.6.y: https://github.com/raspberrypi/linux (内核源码)
tools: https://github.com/raspberrypi/tools (编译工具和制作工具)
boot loader: https://github.com/raspberrypi/firmware (引导)
--------------------------------------------------------------------------------------------------------------
解压tools,解出来应该是tools-master ( 别管它是什么,把解出来的目录改为tools)
设置环境变量,注意你自己的路径(如果手指头痒痒,你认为你是男人中的男人,你可以不射!)
export CCPREFIX="/home/xin/raspi_build/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-"

解压内核源码(用UI的解压,命令的会出个错)
#cd kernel   (注意,解压后我把目录名改为了kernel,你要cd你自己的目录)
--------------------------------------------------------------------------------------------------------------
#make mrproper (清理一下,不必每次都做,如果你需要完全重新编译时才做这个)
--------------------------------------------------------------------------------------------------------------
arch/arm/configs这个目录中有几个pi的配置.
bcmrpi_cutdown_defconfig     (裁剪.选这个,垃圾选项少,重要选项默认都选着呢)
bcmrpi_defconfig                     (原始,一般我们用的都是原始的,垃圾选项一大堆.至少50%是你死之前用不到的)
bcmrpi_emergency_defconfig (紧急,不需要)
bcmrpi_quick_defconfig          (快速,没用过)
--------------------------------------------------------------------------------------------------------------
拷贝那个配置文件
#cp arch/arm/configs/bcmrpi_cutdown_defconfig    .config
(oldconfig这一步只有你完全重新编译的时候才做,否则它会还原到上一次的老配置)
#sudo ARCH=arm CROSS_COMPILE=${CCPREFIX} make oldconfig

(对内核进行配置,这里我不多说,网上有大把的教程,我没必要再重复,即使你不配置也可以)
(我简单的说几点,如果你嫌麻烦,下面带中括号除了第一个,其它都可以跳过)
--------------------------------------------------------------------------------------------------------------
#sudo ARCH=arm CROSS_COMPILE=${CCPREFIX} make menuconfig

【General setup->Cross-compiler里填刚才的环境变量的值/home/xin/raspi_build/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-】
--------------------------------------------------------------------------------------------------------------
【一个是filesystem里的文件系统选项,除了ext2,ext4,dos,vfat,其余都可以不要】
【Cryptographic API 里你能看到的<*> <M>的,全都干掉,{M},*,{*}的不要动】
【Enable the block layer 里2T最好选上,不然做镜像的时候还得去掉ext4的大文件标记】
【Networking support里,除了Wireless全干掉】
【Networking support->Networking options里要选上<*>Network packet filtering framework】
【Network packet filtering framework里Advanced netfilter configuration选上】
【Core Netfilter Configuration里,你就全选上,不一个个的说了,能M的就选M,IPTABLES要用】
【IP: Netfilter Configuration里,一样,能M就M,不能M就*】
【Device Drivers里】
【Network device support->Wireless LAN里只选你无线网卡的驱动和IEEE 802.11 for Host AP (M就行)】
【Network device support->Ethernet driver support里只选SMC (SMSC)/Western Digital devices,要<*>】
【Input device support里除了Event interface,Keyboards,和Hardware I/O ports里带Serial的要选,其余干掉,如果你不想用串口,Serial的也不要选了】
--------------------------------------------------------------------------------------------------------------
如果你不需要显示器以及多媒体,声音之类的,则按下面的设置。
【Multimedia support 直接干掉,我又不需要FM,我也不需要摄像头,有需要的别干】
【Sound card support 直接干掉,我不需要听到PI那恶心的单声道,我也不需要它发出声音】
【Graphics support里,把Bootup logo干掉,那图标占屏幕!Backlight & LCD device support干掉,有用LCD屏的别干】
【USB support里,留以下几个选项
      <*>   Support for Host-side USB
      
  •      USB announce new devices
          <M>   USB Monitor
          <*>   Synopsis DWC host support
          <*>   USB Mass Storage support
          
  •    The shared table of common (or usual) storage devices】
    【MMC/SD/SDIO card support里选上<*>   SDIO UART/GPS class support】
    --------------------------------------------------------------------------------------------------------------
    齐活,现在可以保存退出编译了。其它选项和需要,可以查阅网上的资料,实在太多,说不过来。
    (加-j 2,我是双核,所以我用2个核心加速编译)
    #sudo ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j 2
    大约12分钟过后....编译完成了!内核完事。(后面还会用到,制作内核镜像和模块安装)
    --------------------------------------------------------------------------------------------------------------
    这里补充一下512MB和256MB的rootfs制作方法.之前我发的帖子里有网友需要制作过程
    最简单的是的是用qemu-debootstrap去下载rootfs,这个方法论坛里有人说过了。
    #wget http://archive.raspbian.org/raspbian.public.key -O - | sudo apt-key add -
    下面include里填上你需要的软件.--variant=minbase是最小最基本的应用.
    #sudo qemu-debootstrap --arch armhf --variant=minbase --no-check-gpg --include=openssh-server,wpasupplicant,net-tools,isc-dhcp-client --keyring /usr/share/keyrings/raspbian-archive-keyring.gpg wheezy rootfs/ http://archive.raspbian.org/raspbian
    等待过程完成后,rootfs就做好了。具体方法可以查阅其它网友的帖子,本贴不详细说明。
    --------------------------------------------------------------------------------------------------------------
    从kernel源码目录出来
    #cd ..

    下面我们要编译busybox,我们不要拖着qemu-debootstrap这个胖子做出来的rootfs
    下载busybox-1.20.2源码,无论你从哪下载。
    解压后把busybox-1.20.2目录名称改为 busybox
    #cd busybox (当前目录为/home/xin/raspi_build/busybox)

    sudo ARCH=arm TARGET_ARCH=arm CROSS_COMPILE=${CCPREFIX} make menuconfig

    Busybox Settings  --->  General Configuration  --->
  • Don't use /usr
                            Build Options  --->
                                    [ ] Build BusyBox as a static binary (no shared libs)
                                   
  • Build shared libbusybox                                                                              │ │  
                                   
  •    Produce a binary for each applet, linked against libbusybox                                        │ │  
                                   
  •    Produce additional busybox binary linked against libbusybox                                        │ │  
                                   
  • Build with Large File Support (for accessing files > 2 GB)

                                    Cross Compiler prefix 里输入环境变量里的交叉编译器
                                    /home/xin/raspi_build/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/bin/arm-bcm2708hardfp-linux-gnueabi-

                                    Path to sysroot 里输入工具和lib的目录
                                    /home/xin/raspi_build/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot

    Networking Utilities --> [ ] inetd (不干掉编译会出错,而且你也不需要这个玩意)
                            telnet, tftp, ftp选不选都行,都是鸡肋。后面会编译ssh,scp,sftp这样的工具。

    Shells  ---> Choose which shell is aliased to 'bash' name
                    这项里要选择 ash

    保存,退出,编译, 安装
    #sudo ARCH=arm TARGET_ARCH=arm CROSS_COMPILE=${CCPREFIX} make -j 2
    下面这条命令会在当前目录下生成一个_install文件夹,编译好的东西都安装在这里了
    #sudo ARCH=arm make install
    出去
    #cd ..
    --------------------------------------------------------------------------------------------------------------
    编译zlib(openssh会用到)
    下载zlib-1.2.7,解压改名zlib。
    #cd zlib
    #mkdir _install
    #./configure --prefix=/home/xin/raspi_build/zlib/_install
    修改Makefile里的CC,AR,RUNLIB为下面那样。
    #vim Makefile
            CC=${CCPREFIX}gcc
            AR=${CCPREFIX}ar
            RUNLIB=${CCPREFIX}runlib

    #make -j 2
    #make install
    出去
    #cd ..
    --------------------------------------------------------------------------------------------------------------
    编译libnl
    下载libnl-3.2.7.tar.gz,解压改名,libnl
    #cd libnl
    #mkdir _install
    #CC=${CCPREFIX}gcc NM=${CCPREFIX}nm AR=${CCPREFIX}ar LD=${CCPREFIX}ld OBJDUMP=${CCPREFIX}objdump RANLIB=${CCPREFIX}ranlib STRIP=${CCPREFIX}strip ./configure --build=i386-linux --host=arm-linux --prefix=/home/xin/raspi_build/libnl/_install
    make -j 2
    make install
    --------------------------------------------------------------------------------------------------------------
    编译openssl
    下载openssl-1.0.1d.tar.gz,解压改名, openssl
    #cd openssl
    #mkdir _install
    #NM=${CCPREFIX}nm AR=${CCPREFIX}ar LD=${CCPREFIX}ld OBJDUMP=${CCPREFIX}objdump RANLIB=${CCPREFIX}ranlib STRIP=${CCPREFIX}strip ./Configure --prefix=/home/xin/raspi_build/openssl/_install -lcrypto shared no-asm os/compiler{CCPREFIX}gcc
    #vim Makefile
        进去确认NM,AR,LD,OBJDUMP,RANLIB,STRIP都是我们的交叉编译器路径
    #make -j 2
    #make install
    出去
    #cd ..
    --------------------------------------------------------------------------------------------------------------
    编译openssh
    下载openssh-6.2p1.tar.gz,解压改名,openssh
    #cd openssh
    ./configure --host=arm-linux --prefix=/usr/local/openssh --with-zlib=/home/xin/raspi_build/zlib/_install --with-ssl-dir=/home/xin/raspi_build/openssl/_install --disable-etc-default-login --disable-strip CC=${CCPREFIX}gcc AR=${CCPREFIX}ar RANLIB=${CCPREFIX}ranlib
    #vim Makefile
        进去确认NM,AR,LD,OBJDUMP,RANLIB,STRIP都是我们的交叉编译器路径
    #make
    【千万别make install,将下列命令保存成脚本,直接执行也行】
    --------------------------------------------------------------------------------------------------------------
    mkdir -pv _install/usr/local/openssh
    mkdir -pv _install/usr/local/openssh/{etc,bin}
    mkdir -pv _install/{sbin,bin}
    mkdir -pv _install/var/run/sshd
    mkdir -pv _install/var/empty/sshd
    chmod 755 _install/var/empty
    mkdir -pv _install/usr/local/openssh/libexec
    mkdir -pv _install/etc/ssh

    cp scp  sftp  ssh  ssh-add  ssh-agent  ssh-keygen  ssh-keyscan _install/usr/local/openssh/bin/
    cp sshd_config ssh_config _install/usr/local/openssh/etc/
    cp sshd _install/sbin/

    cd _install/bin
    ln -s ../usr/local/openssh/bin/scp
    ln -s ../usr/local/openssh/bin/sftp
    ln -s ../usr/local/openssh/bin/ssh
    ln -s ../usr/local/openssh/bin/ssh-add
    ln -s ../usr/local/openssh/bin/ssh-agent
    ln -s ../usr/local/openssh/bin/ssh-keygen
    ln -s ../usr/local/openssh/bin/ssh-keyscan
    cd ../../


    cp sftp-server ssh-keysign _install/usr/local/openssh/libexec/
    --------------------------------------------------------------------------------------------------------------
    脚本头加上 #!/bin/bash,保存退出。执行。
    完事后会出现 _install文件夹。
    出去
    #cd ..

    --------------------------------------------------------------------------------------------------------------
    最重要的一步,确认你的网卡有ap功能,并且你这个网卡的驱动支持AP。
    #sudo apt-get install iw
    #iw list
    会出现 support interface mode的字样,这个下面如果有* AP,表示你的网卡支持AP。
    然后查询你的网卡驱动是否支持AP,这个你只能到网上去查了。
    不过大部分人的网卡都是rtl芯片rtl的驱动,这里就以rtl8192cu为例。(wn725n,nw362都是这个驱动)
    如果你不知道你的网卡要用什么驱动
    则 #sudo apt-get install ethtool
       #ethtool -i wlan0   (wlan0,后面数字具体是几,用ifconfig -a查询)
       会显示你当前无线网卡所用的驱动叫什么。或者你lsmod一下,也可以发现。

    【这里要特别注意,rtl的驱动已经不再使用nl80211这接口了,我废了好久,都没找到文档】
    【这个需要到realtek下载对应的linux驱动,下载下来以后,里面有RTL专用hostapd和wpa】
    【如果你不用这里面的hostapd, 你无论怎么弄,都不会成功,我吃了大亏好几天。。。】
    【我的网卡使用8192cu的驱动,我从官方下载RTL8192xC_USB_linux_v3.4.4_4749.20121105】
    --------------------------------------------------------------------------------------------------------------
    将RTL官方的驱动包里的hostapd解压出来,改名。
    编译hostapd, 改名,hostapd
    #cd hostapd
    #cp defconfig .config
    如果不加libnl32,会提示找不到libnl的错误.
    #echo "CONFIG_LIBNL32=y" >> .config


    在MakeFile中加入
    原CC的下面:
    CC=${CCPREFIX}gcc -L/home/xin/raspi_build/openssl/_install/lib -L/home/xin/raspi_build/libnl/_install/lib

    原CFLAGS的下面:
    CFLAGS += -I/home/xin/raspi_build/openssl/_install/include
    CFLAGS += -I/home/xin/raspi_build/libnl/_install/include/libnl3
    LIBS += -L/home/xin/raspi_build/openssl/_install/lib
    LIBS += -L/home/xin/raspi_build/libnl/_install/lib

    #make -j 2
    【千万别make install】
    出去
    #cd ..
    --------------------------------------------------------------------------------------------------------------
    编译iptables
    下载iptables-1.4.18.tar.bz2,解压改名,iptables
    #cd iptables
    #mkdir _install
    #CC=${CCPREFIX}gcc NM=${CCPREFIX}nm AR=${CCPREFIX}ar LD=${CCPREFIX}ld OBJDUMP=${CCPREFIX}objdump RANLIB=${CCPREFIX}ranlib STRIP=${CCPREFIX}strip ./configure --host=arm-linux --disable-ipv6 --prefix=/usr/local/iptables --with-ksource=/home/xin/raspi_build/kernel
    #vim Makefile
        进去确认NM,AR,LD,OBJDUMP,RANLIB,STRIP都是我们的交叉编译器路径
    make -j 2
    【千万不要make install,将下面的命令保存成脚本,或者直接执行】

    --------------------------------------------------------------------------------------------------------------
    mkdir _install
    mkdir _install/{bin,sbin,lib,libexec}
    mkdir _install/lib/xtables
    mkdir _install/libexec/xtables
    cp -d libiptc/.libs/*.so* _install/libexec/xtables/
    cp -d libxtables/.libs/libxtables.so* _install/libexec/xtables/

    cp -d extensions/.libs/*.so* _install/lib/xtables
    cp iptables/.libs/xtables-multi _install/sbin/
    cd _install/bin/
    ln -s ../sbin/xtables-multi iptables-xml
    cd ../sbin/
    ln -s xtables-multi iptables
    ln -s xtables-multi iptables-restore
    ln -s xtables-multi iptables-save
    cd ../../

    出去
    cd ..
    --------------------------------------------------------------------------------------------------------------
    到此,所有需要的软件就都编译完成了。
    开始安装。
    给SD卡分区。我不详细说了,你可以直接用UBUNTU自带的磁盘工具进行分区。
    第一个分区为vfat  (16MB足以)
    第二个分区为ext2 (128MB足以)(可以是ext4,但是ext4有日志机制,如果你想让你的SD卡多活几天,你就别用ext4)

    fdisk -l查看下你SD卡的设备文件是什么。
    我的是/dev/sdb
    分2个区之后会多出2个分区的设备文件。数量是跟你分区有关系
    /dev/sdb /dev/sdb1 /dev/sdb2
    如果你用UBUNTU的工具,直接点挂载就行了。

    如果你用命令,那就mount -o offset=,sizelimit= ...


    把下载来的firmware解压,会出现firmware-master文件夹,里面有个boot文件夹,里面的文件全部拷贝到第一分区
    修改cmdline.txt启动参数里的ext4,改为ext2

    进入tools/mkimage
    #./imagetool-uncompressed.py /home/xin/raspi_build/kernel/arch/arm/boot/zImage
    当前目录下回出现 kernel.img,把它拷贝到第一分区(确切的说是覆盖).

    提出官方镜像的mbr。
    dd if=rasbian.img of=mbr bs=446 count=1
    写入到SD卡
    dd if=mbr of=/dev/sdb bs=446 count=1
    --------------------------------------------------------------------------------------------------------------
    我挂载的第二分区为 /mnt/sd_part2, 你得进入你挂载的目录
    cd /mnt/sd_part2

    mkdir var run mnt dev etc bin sbin home root boot lib sys tmp
    mkdir var/{log,run}

    dev目录下的东西,可以拷贝官方镜像里的.也可以一条条的敲。。。
    其实都一样,没必要再敲了,直接拷贝进来。
    拷贝你/etc/目录下的 shadow group passwd文件到/mnt/sd_part2/etc/下

    建立/mnt/sd_part2/etc/fstab, 内容为
    proc    /proc   proc    defaults                        0   0
    sysfs   /sys    sysfs   defaults                        0   0

    建立/mnt/sd_part2/etc/inittab, 内容为
    ::sysinit:/etc/init.d/rcS
    tty1::respawn:/sbin/getty 38400 tty1
    tty2::respawn:/sbin/getty 38400 tty2
    ::restart:/sbin/init
    ::ctrlaltdel:/sbin/reboot
    ::shutdown:/sbin/swapoff -a
    ::shutdown:/bin/umount -a -r
    ::respawn:/sbin/getty -L ttyAMA0 115200 vt100

    建立/mnt/sd_part2/etc/mdev.conf, 内容为
    mmcblk0p1 0:0 660 @/bin/mount -t vfat /dev/mmcblk0p1 /boot
    mmcblk0p2 0:0 660 @/bin/mount -t ext2 /dev/mmcblk0p2 /

    建立/mnt/sd_part2/etc/hostname, 内容为 (主机名,自己随便改)
    raspi

    建立/mnt/sd_part2/etc/profile, 内容为
    if [ "`id -u`" -eq 0 ]; then
      PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    else
      PATH="/usr/local/bin:/usr/bin:/bin"
    fi

    u=`whoami`

    if [ "$PS1" ]; then
      if [ "$BASH" ]; then
        PS1='[$u@\h \W]\$ '
      else
        if [ "`id -u`" -eq 0 ]; then
          PS1='# '
        else
          PS1='$ '
        fi
      fi
    fi

    export PATH

    alias ll='ls -l'
    alias la='ls -A'
    alias l='ls -CF'

    umask 022



    建立init.d文件夹
    建立/mnt/sd_part2/etc/init.d/rcS, 内容为

    mkdir /dev/pts
    /bin/mknod /dev/pts/0 c 136 0
    /bin/mknod /dev/pts/1 c 136 1
    /bin/mknod /dev/pts/2 c 136 2
    /bin/mknod /dev/pts/3 c 136 3
    /bin/mknod /dev/pts/4 c 136 4
    /bin/mknod /dev/pts/5 c 136 5
    /bin/mount -t devpts devpts /dev/pts

    /bin/mount -av
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    /sbin/mdev -s
    /bin/hostname -F /etc/hostname

    建立/mnt/sd_part2/etc/hosts, 内容为
    127.0.0.1 localhost

    建立/mnt/sd_part2/etc/network目录
    建立/mnt/sd_part2/etc/network/interfaces, 内容为
    auto lo
    iface lo inet loopback

    建立/mnt/sd_part2/etc/resolv.conf, 内容是DNS服务器地址,填你自己的
    nameserver 202.106.195.68
    nameserver 202.106.46.151

    建立/mnt/sd_part2/etc/udhcpd.conf, 内容为
    start 192.168.0.10
    end 192.168.0.254
    interface wlan0
    option subnet 255.255.255.0
    opt router 192.168.0.1
    option dns 202.106.195.68
    option domain local
    option lease 864000

    建立/mnt/sd_part2/etc/sysctl.conf
    net.ipv4.conf.default.rp_filter = 1


    到busybox目录的_install目录下。拷贝所有文件到你第二分区(覆盖)
    注意cp的时候要加-d,否则链接会被拷贝成目标文件。
    cp -d _install/* /mnt/sd_part2/
    cp examples/udhcp/simple.script /mnt/sd_part2/usr/share/udhcpc/default.script (没有目录,自己创建)

    到内核源码目录(安装目录为你挂载的第二分区)
    sudo make ARCH=arm INSTALL_MOD_PATH=/mnt/sd_part2 modules_install

    到zlib目录, 拷贝_install/lib/下的库到第二分区/lib下
    cp -d _install/lib/libz.so* /mnt/sd_part2/lib/

    拷贝libc等库。到交叉编译器目录里(其实里面有些是不需要的,如果嫌多,自己用readelf去读你每个编译过的软件,
    反正我全拷贝,万一以后编译个新软件少了个库,还得去找)
    cd /home/xin/raspi_build/tools/arm-bcm2708/arm-bcm2708hardfp-linux-gnueabi/arm-bcm2708hardfp-linux-gnueabi/sysroot/lib
    cp -d ./* /mnt/sd_part2/lib/

    到libnl目录里 拷贝 _install/lib 下的2个库就够了。
    cp -d _install/lib/libnl-3.so* /mnt/sd_part2/lib/
    cp -d _install/lib/libnl-genl-3.so* /mnt/sd_part2/lib/

    到openssh目录下拷贝_install所有到第二分区(覆盖)
    cp -d -r _install/* /mnt/sd_part2/

    到hostapd目录,hostapd下的hostapd和hostapd_cli拷贝到第二分区的/sbin/里
    cp hostapd hostapd_cli /mnt/sd_part2/sbin/

    拷贝官方驱动里的rtl_hostapd_2G.conf这个文件到/mnt/sd_part2/etc/hostapd/下 (没有这个目录自己创建)
    具体修改方法,看你怎么配置,查网上配置方法,这里不做详细介绍。
    改里面的interface为wlan0
    ssid你自己起个名
    channel=6 (这个频道数根据你无线网卡而定,一般是6~11,也有6~13)
    wpa=2
    wpa_passphrase=密码


    到iptables目录, _install
    cp -d _install/bin/* /mnt/sd_part2/bin/
    cp -d _install/sbin/* /mnt/sd_part2/sbin/
    cp -d _install/libexec/xtables/* /mnt/sd_part2/lib/
    cp -d -r _install /mnt/sd_part2/usr/local/
    mv /mnt/sd_part2/usr/local/_install /mnt/sd_part2/usr/local/iptables
    --------------------------------------------------------------------------------------------------------------
    sync,让缓存的内容全部刷新。
    安全移除SD卡。插到PI上运行吧。

    第一次需要进入/usr/local/openssh/etc/下进行key的创建
    cd /usr/local/openssh/etc/
    ssh-keygen -t rsa1 -f ssh_host_key -N ""
    ssh-keygen -t dsa -f ssh_host_dsa_key -N ""
    ssh-keygen -t rsa -f ssh_host_rsa_key -N ""
    ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N ""

    如果想启动ssh服务,/sbin/sshd, 可以加入到/etc/init.d/rcS中.


    打开无线AP
    ifconfig wlan0 192.168.0.1 up
    udhcpd -fS &
    /sbin/hostapd -d -B -P /var/run/hostapd.pid /etc/hostapd/rtl_hostapd_2G.conf

    把eth0打开。自动获取IP。
    udhcpc -f -i eth0 -p /var/run/udhcpc.pid -s /usr/share/udhcpc/default.script

    开启NAT功能, 让wlan0的数据转发到eth0
    iptables --flush
    iptables --table nat --flush
    iptables --delete-chain
    iptables --table nat --delete-chain
    iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
    iptables --append FORWARD --in-interface wlan0 -j ACCEPT
    echo 1 > /proc/sys/net/ipv4/ip_forward



    最后用IPTABLES的NAT功能转发到有线我还没测试,
    理论上可行,我定的网线快到货了,到货了就测试。
    前面的我都已经配置好了,测试是成功的。可以创建热点。
    测试完,它就是一个无线路由了。

    市面上3,5百块钱的路由,CPU是500Mhz, 内存16M~32M, FLASH 4MB~16MB。
    它们使用的是openwrt,也是linux+iptables+hostapd+dhcp+busybox

    但是PI的性能要远远超过市面上500块钱的路由,你把它弄成路由,何乐而不为呢。
    主要是找一款可以穿墙的无线网卡,不带天线的基本免谈。

    我的nw362,在一个室内,信号全满。只要一关门,信号全无。
    不过我买了一款带5DBI增益天线的网卡,和网线一起到货,希望它能给点面子。。。




    补充内容 (2013-4-24 12:04):
    我的微薄 http://pgdhh.blog.163.com/
  • 回复

    使用道具 举报

    2013-4-24 09:43:59 | 显示全部楼层
    强人啊,前来支持。
    回复 支持 反对

    使用道具 举报

     楼主| 2013-4-24 09:45:05 | 显示全部楼层
    树老大 发表于 2013-4-24 09:43
    强人啊,前来支持。

    谢谢老大支持!
    回复 支持 反对

    使用道具 举报

    2013-4-24 10:21:16 | 显示全部楼层
    试过了  不太稳定  不清楚原因   ~
    回复 支持 反对

    使用道具 举报

     楼主| 2013-4-24 10:29:55 | 显示全部楼层
    chen1324 发表于 2013-4-24 10:21
    试过了  不太稳定  不清楚原因   ~

    我有一块725n的迷你WIFI,也不稳定。换个大点的,就稳定了。
    回复 支持 反对

    使用道具 举报

    2013-4-24 11:09:22 | 显示全部楼层
    kapaqi 发表于 2013-4-24 10:29
    我有一块725n的迷你WIFI,也不稳定。换个大点的,就稳定了。

    巧了 我也是tp-725n  v1  我想 换个稳定点的  但是不知道什么芯片的好用~   同样的芯片 产品倒是不少~
    回复 支持 反对

    使用道具 举报

     楼主| 2013-4-24 11:55:45 | 显示全部楼层
    本帖最后由 kapaqi 于 2013-4-24 11:57 编辑
    chen1324 发表于 2013-4-24 11:09
    巧了 我也是tp-725n  v1  我想 换个稳定点的  但是不知道什么芯片的好用~   同样的芯片 产品倒是不少~

    我有3块网卡,725n是最不稳定的一块。另外两块大网卡就很稳定!选网卡的时候不要买迷你的!迷你的太操蛋了!
    回复 支持 反对

    使用道具 举报

    2013-4-26 08:15:41 | 显示全部楼层
    都弄成固件了,以后升级的工程量就浩大了!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    关注我们,了解更多

    官方微信

    服务时间:10:00-16:00

    13714503811

    公司地址:深圳市龙岗区南湾街道东门头路8号

    Copyright © 2012-2020 Powered by 树莓派论坛 2019.4  粤ICP备15075382号-1
    快速回复 返回列表 返回顶部