zoukankan      html  css  js  c++  java
  • 和菜鸟一起学linux之wifi相关应用的移植和使用

    一、 libnl移植

    下载源码:http://www.infradead.org/~tgr/libnl/  libnl-3.2.21.tar.gz

    解压缩后,在libnl-3.2.21当前目录下,新建build.sh,编辑内容如下:

    ---------------------------------------分割线----------------------------------------------------

    #!/bin/sh
    CFLAGS =”-I/home/eastmoon/rootfs/kernel/usr/include” \
    CC=”arm-linux-gcc” \
    ./configure –host=arm-linux \
    --prefix=/home/eastmoon/rootfs/usr

    ---------------------------------------分割线----------------------------------------------------

    设置下build.sh的权限后,./build.sh 配置好以后,make下,再make installok了。

    上面的的脚本简单说明下:

    2行为libnl需要包含的内核的头文件。

    3行为交叉编译的工具指定。

    4行是把需要的库install到相应的rootfs中去。

    然后可以看到在rootfs/usr中就会有include/libnl3 /lib下的一些相关的.so等库了。


    二、 openssl移植

    下载源码:http://www.openssl.org/source/  openssl-1.0.1e.tar.gz

    解压缩后,在openssl-1.0.1e当前目录下,新建build.sh,编辑内容如下:

    ---------------------------------------分割线----------------------------------------------------

    #!/bin/sh
    ./Configure \
    Linux-arm \
    -DL_ENDIAN –fPIC \
    Linux:”arm-linux-gcc” \
    --prefix = “home/eastmoon/rootfs/usr”

    ---------------------------------------分割线----------------------------------------------------

    设置下build.sh的权限后,

    ./build.sh配置好以后,

    make

    make install

    然后可以看到在rootfs/usr中就会有include/openssl /lib下的一些相关.so等库了。


    三、 hostapd移植

    下载源码:http://w1.fi/hostapd/  hostapd-2.0.tar.gz

    解压缩后,在hostapd-2.0目录下

    cp defconfig .config //配置对应的config

    然后进入config中,在.config中需要加上依赖的头文件和库,添加内容如下:

    ---------------------------------------分割线----------------------------------------------------

    CC=arm-linux-gcc
    CFLAGS += -I/home/eastmoon/rootfs/usr/include
    CFLAGS += -I/home/eastmoon/rootfs/usr/include/libnl3
    LDFLAGS += -L/home/eastmoon/rootfs/usr/lib

    ---------------------------------------分割线----------------------------------------------------

    然后编辑makefile

    在开始出添加:

    ---------------------------------------分割线----------------------------------------------------

    DESTDIR = /home/eastmoon/rootfs

    ---------------------------------------分割线----------------------------------------------------

    接着make

    之后就可以生成对应的应用程序。

    make install

    这样对应的程序就会在rootfs/usr下的local/bin下了。


    四、wpa_supplicant移植

    下载源码:http://w1.fi/wpa_supplicant/ wpa_supplicant-2.0.tar.gz

    这个和hostapd比较类似,几乎一样。

    解压缩后,在wpa_supplicant-2.0目录下

    cp defconfig .config //配置对应的config

    然后进入config中,在.config中需要加上依赖的头文件和库,添加内容如下:

    ---------------------------------------分割线----------------------------------------------------

    CC=arm-linux-gcc
    CFLAGS += -I/home/eastmoon/rootfs/usr/include
    CFLAGS += -I/home/eastmoon/rootfs/usr/include/libnl3
    LDFLAGS += -L/home/eastmoon/rootfs/usr/lib

    ---------------------------------------分割线----------------------------------------------------

    然后要选上

    CONFIG_TLS=internal

    CONFIG_INTERNAL_LIBTOMMATH=y

    这两个主要是我编译的不依赖与openssl,所以就编译内部的了。

    接着make

    之后就可以生成对应的应用程序,之后就可以使用了。


    五、dhcp服务端和客户端的移植

        源码是程序员联合网下的。udhcp-0.9.8。

    修改MakefileCROSS_COMPILE=arm-linux-

    make

    然后生成了可执行文件udhcpdudhcpc,其中udhcpd就是dhcp的服务端程序,udhcpc就是dhcp的客户端程序了。


    六、boa移植

    下载源码: http://www.boa.org/ boa-0.94.13.tar.gz

    解压缩后,

    1、进入src目录,执行./configure

    2、接着修改Makefile

    CC = arm-linux-gcc

    CPP = arm-linux-gcc–E

    3、然后将boa.c 文件中以下几行判断去掉即可。

    //if ( setuid ( 0 ) != - 1 ) { 

         // DIE ( "icky Linux kernel bug!" ); 

    //}

    4、修改文件compat.h   P120

    #define TIMEZONE_OFFSET(foo) foo##->tm_gmtoff

    修改成

    #define TIMEZONE_OFFSET(foo) (foo)->tm_gmtoff

    5、把src 文件夹下的config.c 里的if(!server_name){..........} (大概在266 行到286 行之间)注释掉

    6、修改 src/log.c

    注释掉

    //if (dup2(error_log, STDERR_FILENO) == -1) {

    //DIE("unable to dup2 the error log");

    //}

    7make

    之后就可以生成boa这个可执行的简单服务器了。


    七、cgic移植

    下载源码:http://www.boutell.com/cgic/ cgic205.tar.gz

    解压后

    1、 修改CC=arm-linux-gcc

    2、 修改AR=arm-linux-ar

    3、 修改RANLIB=arm-linux-ranlib

    4、 gcc cgictest.o -o cgictest.cgi ${LIBS}

    将其改成 $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}

    5gcc capture.o -o capture ${LIBS} 

       将其改成$(CC) $(CFLAGS) capture.o -o capture ${LIBS}

    6make

    之后就可以生成辅助程序capture 和测试程序cgictest.cgi


    综上,对于以上源码的嵌入式平台的移植就结束了,那么接下来就是如何使用了。


    一、 hostapd使用

    从上面的移植可以得到相应的hostapd的可执行应用程序。那么接下来就是编辑配置文件了,编辑hostapd.conf如下:(这里没有使用密码什么的,要使用密码的话,可以百度去找)

    ---------------------------------------分割线----------------------------------------------------

    ssid=my_hostapd
    channel=10
    interface=wlan0
    bridge=br0 
    driver=nl80211
    ignore_broadcast_ssid=0
    macaddr_acl=0
    #accept_mac_file=/etc/hostapd.accept
    #deny_mac_file=/etc/hostapd.deny

    ---------------------------------------分割线----------------------------------------------------

    接着要在etc下新建个mine.types的文件。

    接着,就可以hostapd hostapd.conf

    然后用手机或者PC机就可以搜索到对应的ssidmy_hostapd的路由器了。

    然后别的wifi设备连接上后,通过静态分配ip就可以连接上这个路由器了。如果要用dhcp动态获取ip。可参考下面的方法。


    二、 wpa_supplicant使用

    从上面的移植可以得到相应的wpa_supplicant可执行应用程序。

    运行wpa_supplicant –Dnl80211 –iwlan0 –c/etc/wifi/wpa_supplicant.conf&,后台中就启动了wpa_supplicant了。

    这里要在/etc/下新建wifi目录,其中放入enropy.bin softap.conf wpa_supplicant.conf

    其中wpa_supplicant.conf内容如下:

    ctrl_interface=wlan0
    updata_config=1


    三、 dhcp使用

    为了可以让pc机或者手机自动获取ip地址,所以需要dhcp的服务器。从上面的移植,可以得到udhcpd的可执行应用程序。那么接下来就是配置文件了,编辑dhcpd.conf如下:

    ---------------------------------------分割线----------------------------------------------------

    interface wlan0
    subnet 192.168.0.1 netmask 255.255.255.0{
    range 192.168.0.10 192.168.0.250
    }

    ---------------------------------------分割线----------------------------------------------------

    接下来就只要udhcpd dhcod.conf就会在后台运行了。如果手机或者pc机去连接的话,这个dhcpd服务器就会分配ip给手机或者PC机了。


    四、 wpa_cli使用

    从上面的移植可以得到相应的wpa_cli可执行应用程序。这里,wpa_cli/wpa这个目录下。

    运行wpa_cli –iwlan0 –p/wpa/wlan0/wlan0

    然后就进入了,wpaclient控制了。接着就可以进行扫描,连接等工作了。

    scan
    scan_results
    add_network
    set_network 0 ssid “要连接的路由”
    set_network 0 key_mgmt NONE   //无密码
    set_network 1 key_mgmt NONE   //wep密码
    set_network 1 wep_key0 “your ap passwork”
    set_network 0 key_mgmt WPA-PSK  //wpa密码
    set_network 0 psk "12345678"
    set_network 0 priority 0
    list_net
    save_config
    enable_net 0


    五、 boa使用

    从上面的移植可以得到相应的boa的可执行应用程序。那么接下来就是编辑配置文件了,在etc下建立boa文件夹,并且新建boa.conf文件,编辑boa.conf如下:(个人配置,供参考)

    ---------------------------------------分割线----------------------------------------------------

    Port 80
    User 0
    Group 0
    ErrorLog /mnt/log/boa/error_log
    ServerName www.eastmoon.com
    DocumentRoot /mnt/www
    UserDir public_html
    DirectoruIndex index.html
    KeepAliveMax 1000
    KeepAliveTimeout 10
    MimeTypes /etc/mime.types
    DefaultType text/plain
    CGIPath /bin:/usr/bin:/usr/local/bin
    Alias /doc /usr/doc
    ScriptAlias /cgi-bin/ /mnt/www/cgi-bin/

    ---------------------------------------分割线----------------------------------------------------

    然后只要运行boa就可以后台启动这个简单的web服务器了。


    六、 cgic使用

    从上面的移植可以得到相应的可执行应用程序。将capture cgictest.cgi 拷贝到主机的/tmp/www/cgi-bin 目录下。在工作站的浏览器地址栏输入

    http://192.168.0.1/cgi-bin/cgictest.cgi ,可以看到页面,CGIC 库和测试脚本都移植成功。

    然后就可以写cgic程序,放到那个目录下,就可以用了。

  • 相关阅读:
    关于学习
    两个有序链表序列的合并
    谜题 UVA227
    周期串(Periodic Strings, UVa455)
    数数字(Digit Counting,ACM/ICPC Danang 2007,UVa1225)
    得分(Score, ACM/ICPC Seoul 2005,UVa 1585)
    201505061055_《Javascript编码规范笔记》
    201505031734_《JavaScript中的函数》
    201505030956_《Javascript变量整理》
    201505022013_《js好的坏的》
  • 原文地址:https://www.cnblogs.com/wuyida/p/6300006.html
Copyright © 2011-2022 走看看