2018-09-12 19:53:25 lqijlyy 阅读数 618
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4901 人正在学习 去看看 韦东山

1.将要添加的wifi模块放入内核目录下的drivers文件夹下,在你的wifi模块文件夹下会有Konfig和Makefile文件

2.我这里的wifi文件夹的名字为wilc,在drivers目录下的Makefile中加入该模块:

  在Konfig文件夹中加入对应的wilc目录下的Konfig

只有将这两个文件同时添加上之后,才能在make Menuconfig中找到。

3.在到内核主目录下执行make Menuconfig

在对应的driver下的network下找到

这里使用的是SDIO 通信故选择WILC SDIO

4.选中保存退出重新编译内核。

2019-05-08 09:08:03 hceng_linux 阅读数 438
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4901 人正在学习 去看看 韦东山

CSDN仅用于增加百度收录权重,排版未优化,日常不维护。请访问:www.hceng.cn 查看、评论。
本博文对应地址: https://hceng.cn/2018/06/21/嵌入式Linux——WIFI网卡/#more

如何在嵌入式Linux中,使用WIFI无线网卡。

嵌入式中设备想要联网,无非就 有线和无线 两种方式。
有线就插上网线,没什么好说的;无线的话一种是将WIFI模块集成焊接在板子上,另一种是WIFI模块以USB的方式接到板子上。
本次使用的就是USB接口的WIFI无线网卡,实现开发板使用WIFI无线网卡访问互联网和作为个人热点。

1.准备工作

1.2 WIFI基础知识

WIFI网卡有两种工作模式,
一种是无线终端模式(STA),也就是手机日常使用的模式,通过该模式连接网络上网;
一种是无线热点模式(AP),也就是手机的个人热点模式,通过该模式提供热点供其它设备上网;

无线网络的安全性由两部分组成:认证加密
** 认证:**使得只有允许的设备才能连接到无线网络;
** 加密:**确保数据的保密性和完整性,即数据在传输过程中不会被篡改;

  • 常用的认证算法有:开放认证、共享秘钥认证、802.11x认证、PSK认证
    其中802.11x认证和PSK认证安全性较高,分别应用于企业和个人的环境;

  • 常用的加密算法有:WEB加密、TKIP加密、CCMP加密算法
    其中WEB加密和TKIP加密都是RC4的加密算法,安全性较低;CCMP加密采用AES对称加密算法,安全性较高。

安全策略认证方式加密方式备注
Openopenopen开放WiFi,无任何加密
openWEP开放WiFi,仅数据加密
WEPWEPWEP共享密钥认证,容易破解
WPA802.11XTKIP/WEP比较安全,用于企业
PSKTKIP/WEP比较安全,用于个人
WPA2802.11XCCMP/TKIP/WEP目前最安全,用于个人
PSKCCMP/TKIP/WEP目前最安全,用于个人

连入超市、商场等公共WIFI的时候,不需要输入密码,但要通过网页输入手机号,使用验证码验证,也就是采用802.11X进行的验证,通过服务器完成的验证。
使用手机开个人热点的时候,可以选择安全性OPEN、WEP、WPA、WPA2,也就对应不同的安全等级。

我手里的MIX2S,MIUI10个人热点里面就仅OPEN和WPA2两个选项,感觉这是个趋势,要么最简单的OPEN,要么就最安全的WPA2(WPA2是向下兼容的),逐渐扔掉历史的包袱。

1.2 选择无线网卡

首先是选择合适的无线网卡,选取的原则是根据WIFI无线网卡的VIDPID判断内核是否支持该无线网卡。

  • 1.获取无线网卡ID
    将无线网卡插入Windows电脑,打开设备管理器,选中无线网卡,右键“属性”,切换到“详细信”息选项卡,在“属性”下拉栏中选择"硬件ld",即可得到无线网卡的ID:
我的无线网卡`VID`是`0x148F`,`PID`是`0x3070`;
  • 2.查询内核是否支持
    可以从wireless.kernel.org得到支持的设备列表
    可以从列表中搜到前面的VIDPID,因此说明内核是支持现在使用的无线网卡。此外,还可以得知对应的驱动应该为rt2800usbrt2870sta
  ## 1.3 移植WIFI驱动 ## - 前面根据ID得到了对应的网卡驱动名字,但还不是很靠谱,建议直接在驱动中搜索ID,更靠谱: ``` grep "0x3070" drivers/net/wireless/ -nr ``` 得到:`drivers/net/wireless/ralink/rt2x00/rt2800usb.c:1091: { USB_DEVICE(0x148f, 0x3070) },`,知道了对应的驱动文件是`rt2800usb.c`;   - 再查看对应路径的Makfeile: ``` cat drivers/net/wireless/ralink/rt2x00/Makefile ``` 得到:`obj-$(CONFIG_RT2800USB) += rt2800usb.o`,知道了对应的宏是`CONFIG_RT2800USB`;   - 进入内核目录,执行: ``` make menuconfig ``` 搜索`CONFIG_RT2800USB`,得知其依赖:`Depends on: NETDEVICES [=y] && WLAN [=y] && WLAN_VENDOR_RALINK [=y] && RT2X00 [=n] && USB [=y]`,可以知道`RT2X00 [=n]`没有打开,再搜索它,如此循环,直到`RT2800USB [=y]`。

这里有个注意的就是,当开启的上层的某个依赖,下层的某个选项可能会多出来许多选项,而这些选项原来是没有的,不要固化思维。

最后重新编译内核即可。

1.4 使用buildroot移植应用

想要使用无线网卡,需要用到四个软件:

  • iw:可用于OPEN、WEP这两种"认证/加密",以及扫描WIFI热点等;
  • wpa_supplicant:可用于前面4种"认证/加密";
  • hostapd:能够使得无线网卡切换为AP模式;
  • dhcp:STA模式使WIFI网卡动态获取IP,AP模式分配IP;

也就是需要移植这四个软件,目前的方法有:
1.逐个下载源码,交叉编译,配置,可以还需要相关依赖库,缺点是费时费力;
2.使用Yocto等工具,制作发行版的根文件系统,例如Ubuntu16.04,里面有apt-get,可以自动下载安装,缺点是制作发行版根文件系统比较麻烦,且体积较大;
3.使用buildroot制作根文件系统,选择需要的软件,自动生成根文件系统,相对简单,体积也较小;

本次就以buildroot为例,制作含需要应用程序的根文件系统。

  • 首先从GitHub下载针对Tiny4412修改后的buidroot
git clone -b board_tiny4412 https://github.com/hceng/buildroot.git
  • 查看支持的board
cd buildroot/
make list-defconfigs

得知tiny4412对应的配置文件:tiny4412_defconfig - Build for tiny4412

  • 配置提供的配置文件
make tiny4412_defconfig
  • 添加自己所需软件
    执行:
make menuconfig

对应勾选所需软件:

Target packages  --->
    Networking applications  --->
        [*] dhcp (ISC)                                                
            [*]   dhcp server                                      
                [*]     Enable delayed ACK feature                     
            [*]   dhcp relay                                       
            [*]   dhcp client 
        ……
        [*] hostapd                                                     
            [*]   Enable ACS (NEW)                                      
            [*]   Enable EAP                                            
            [*]   Enable WPS 
        ……
        [*] iw
        ……
        [*] wpa_supplicant                                               
            [*]   Enable nl80211 support                                  
            [*]   Enable AP mode                                           
            [ ]   Enable EAP                                                  
            [ ]   Enable HS20                                                 
            [ ]   Enable syslog support                                       
            [ ]   Enable WPS                                                  
            [*]   Install wpa_cli binary                                      
            [*]   Install wpa_client shared library                           
            [*]   Install wpa_passphrase binary     
        
  • 修改主机名、欢迎语、root密码等
System configuration  --->
    (tiny_4412) System hostname  
    (Welcome to hceng's board.) System banner  
    ……
    [*] Enable root login with password
    (123456) Root password 
  • 生成根文件系统
    执行:
make

buildroot会自动下载相关源码包,整个过程时间比较久,最后生成buildroot/output/images/rootfs.tar,解压到SD卡rootfs分区即可。

1.5 添加firmware

此时开发板启动Linux后,使用ifconfig wlan0 up启动无线网卡,提示:

ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
rt2800usb 2-2.2:1.0: Direct firmware load for rt2870.bin failed with error -2
ieee80211 phy0: rt2x00lib_request_firmware: Error - Failed to request Firmware
ifconfig: SIOCSIFFLAGS: No such file or directory

提示需要firmware文件rt2870.bin

继续通过网站wireless.wiki.kernel.org去下载该固件

得到rt2870.bin后,拷贝到单板/lib/firmware/下即可。

1.6 启动WIFI网卡

注意:
双网卡的单板的两个网卡IP不能设置为同一网段,原因参考这里

也就是先把有线网卡IP设置为其它网段,比如:

ifconfig eth0 192.168.2.220

然后启动WIFI网卡,并设置IP(路由器IP为192.168.1.1):

ifconfig wlan0 up
ifconfig wlan0 192.168.1.220

此时效果如下:

2.无线终端模式——STA

完成前面的准备工作后,就可以通过软件使用无线网卡了。

2.1 iw的使用

  • 列出WIFI网卡的性能:
iw list 
  • 扫描WIFI热点
iw dev wlan0 scan 
iw dev wlan0 scan | grep SSID:
  • 连接到开放AP
iw wlan0 connect hceng
  • 查看连接状态
iw dev wlan0 link
  • 断开WIFI连接
 iw wlan0 disconnect

还可以连接加密的WEP,这里就不研究了。

注意:
1.如果连接的不是路由器(IP为192.168.1.1),而是Android手机热点(IP一般为192.168.43.1),那么要将WIFI网卡IP设置为43网段,如:192.168.43.10,才能ping通192.168.43.1
 
2.此时只能ping路由器和局域网设备,如果要联外网,还需要如下操作:
①修改/etc/resolv.conf,添加DNS:nameserver 192.168.1.1,如果是手机热点为nameserver 192.168.43.1
②设置网关,输入命令:route add default gw 192.168.1.1,如果是手机热点为route add default gw 192.168.43.1

2.2 wpa_supplicant的使用

wpa_supplicant本是开源项目,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的。
wpa_supplicant是一个连接、配置WIFI的工具,它主要包含wpa_supplicant(命令行模式)与wpa_cli(交互模式)两个程序。
通常情况下,可以通过wpa_cli来进行WIFI的配置与连接,如果有特殊的需要,可以编写应用程序直接调用wpa_supplicant的接口直接开发。

记得以前想查看Android手机连接过的WIFI热点密码时,就直接使用RE文件管理器查看/data/misc/wifi/wpa_supplicant.conf即可(需ROOT),里面有所有连接过的WIFI名字和密码。
从这里可以看出,最后WIFI名字和密码,都会被保存到一个配置文件里,在Linux中,路径就是/etc/wpa_supplicant.conf

  • 连接开放网络
    /etc/wpa_supplicant.conf加入:
network={
    ssid="hceng"
    key_mgmt=NONE
}

初始化wpa_supplicant,执行:

wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf  

查看连接状态:

wpa_cli -iwlan0 status  

断开连接:

wpa_cli -iwlan0 disconnect

killall wpa_supplicant

重新连接:

wpa_cli -iwlan0 reconnect
  • 连接加密网络(WAP2)
    /etc/wpa_supplicant.conf加入:
network={
    ssid="hceng_test"
    psk="12345678"
}

初始化wpa_supplicant,执行:

wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf  

至于WEP和WAP方式,也就是配置文件的不同,这里就不去深究了,以后遇到了再说。

2.3 dhclient的使用

至此,已经可以连接WIFI了,但还有一些问题。
就如前面,需要手动设置设备的IP,且要根据热点的网段设置,还可能与同网段的设备IP冲突。
为了解决这个问题,引入了DHCP,自动分配IP地址。

就像家里的设备连接到路由器一样,除了输入名字,密码,其它都不用操作,而且还不会出现IP冲突的情况。

连接好WIFI后,输入:

dhclient wlan0

实现自动获取分配的IP,并设置。

2.4 自动脚本

现在已经从功能上实现了WIFI无线网卡的使用,但使用过程步骤比较多,相对麻烦。
理想的效果无论何时插上WIFI无线网卡,都自动连接WIFI,且自动获取IP地址。

这就要用到USB的热拔插机制,很久以前写过一篇U盘自动挂载的文章,用的就是这个机制。

  • 1.首先修改/etc/mdev.conf配置文件
    加入WIFI无线网卡的热拔插事件:
# hceng add for wifi
wlan0           root:root 660 * /sbin/auto_wifi.sh

其中*表示插拔都执行后面的脚本。

  • 2.自动连接脚本/sbin/auto_wifi.sh
    但检测到USB网卡插拔后,就会执行该脚本:
    {% codeblock lang:bash [auto_wifi.sh] https://github.com/hceng/learn/blob/master/tiny4412/10_usb_wifi/rootfs/sbin/auto_wifi.sh %}
    #!/bin/sh
    if [ $ACTION = “add” ];
    then
    echo --------usb wifi connect--------- > /dev/console
    wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf
    wpa_cli -B -i wlan0 -a/sbin/auto_dhcp.sh
    else
    echo --------usb wifi disconnect--------- > /dev/console
    killall wpa_supplicant
    killall wpa_cli
    killall dhclient
    fi
    {% endcodeblock %}

如果是插入USB无线网卡,将执行wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf连接wifi,再执行wpa_cli -B -i wlan0 -a/sbin/auto_dhcp.sh调用dhcp的脚本;

如果是拔出USB无线网卡,将清除所有相关进程;

  • 3.自动dhcp脚本/sbin/auto_dhcp.sh
    {% codeblock lang:bash [auto_dhcp.sh] https://github.com/hceng/learn/blob/master/tiny4412/10_usb_wifi/rootfs/sbin/auto_dhcp.sh %}
    #!/bin/sh
    IFNAME=$1
    CMD=2if["2 if [ "CMD" = “CONNECTED” ]; then
    echo ==connect $IFNAME, dhclient for it= > /dev/console
    dhclient IFNAMEfiif["IFNAME fi if [ "CMD" = “DISCONNECTED” ]; then
    echo ==disconnect $IFNAME, kill dhclient for it= > /dev/console
    killall dhclient
    fi
    {% endcodeblock %}

如果是连接,将调用dhclient分配IP,反之清除dhclient进程。

  • 4.为脚本加上可执行权限
chmod +x /sbin/auto_wifi.sh
chmod +x /sbin/auto_dhcp.sh

最后便可实现自动连接WIFI,且自动获取IP地址。

3.无线热点模式——AP

无线热点模式共需要两步操作,先使用hostapd将无线网卡切换成AP模式,再使用dhcpd分配IP。

3.1 hostapd的使用

先清除前面STA模式的所有操作,重新启动单板。

  • 创建/etc/hostapd.conf配置文件

1.OPEN模式:

ctrl_interface=/var/run/hostapd

ssid=hceng
channel=1
interface=wlan0
driver=nl80211

2.WAP/WAP2模式:

ctrl_interface=/var/run/hostapd

ssid=hceng
#hw_mode=g
channel=1
interface=wlan0
#bridge=br0
driver=nl80211
macaddr_acl=0
#accept_mac_file=/etc/hostapd.accept
#deny_mac_file=/etc/hostapd.deny

auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

注释
ctrl_interface:为了后面hostapd_cli链接上hostapd
ssid:无线热点名字;
hw_mode:指定802.11协议,其中a=IEEE 802.11ab=IEEE 802.11bg=IEEE 802.11g
channel:设定无线信道
interface:指定使用哪一个无线网卡;
bridge:指定所处网桥,对于一个同时接入公网、提供内部网和无线接入的路由器来说,设定网桥很有必要;
driver:指定无线驱动;
macaddr_acl:指定MAC地址过滤规则:
       0表示允许除禁止列表外的设备;
       1表示只允许在允许列表的设备;
       2表示使用外部RADIUS服务器;
accept_mac_file:指定允许MAC列表文件所在路径;
deny_mac_file:指定禁止MAC列表文件所在路径;
auth_algs:指定采用哪种认证算法,采用位域(bit fields)方式来制定;
      1表示使用WPA;
      2表示使用WEP;
      3表示使用WPA/WEP;
wpa:指定WPA类型,采用位域(bit fields)方式来制定;
   1表示使用WPA;
   2表示使用WPA2;
   3表示使用WPA2/WPA;
wpa_passphrase:WIFI的密钥;
wpa_key_mgmt:PSK为个人AP,不使用服务器认证;
wpa_pairwise:指定WPA的加密方式;
rsn_pairwise:指定WPA2的加密方式;

3.2 dhcpd的使用

如果此时启动热点,实测手机一直卡在获取IP地址,无法连接到热点,因此热点还需自动分配IP地址。

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.10 192.168.2.100;
  option domain-name-servers 192.168.2.1;
  option routers 192.168.2.1;
}

指定了子网IP起始地址、子网掩码、动态分配的IP范围、DNS服务器、路由。

3.3 启动热点

  • 1.启动无线网卡,并设置IP
ifconfig wlan0 up
ifconfig wlan0 192.168.2.1
  • 2.启动AP和DHCP
    启动命令:
hostapd -B /etc/hostapd.conf
dhcpd -cf /etc/dhcpcd.conf wlan0

对应的停止命令:

killall hostapd
killall dhcpd
  • 3.其它操作
    查看热点状态:
hostapd_cli all_sta

查看热点配置:

hostapd_cli get_config

查看已连接的设备:

iw dev wlan0 station dump

3.4 自动脚本

和前面的一样,假如希望实现USB无线网卡的热拔插,自动进入AP模式,只需如下操作:

  • 1.首先修改/etc/mdev.conf配置文件
    加入WIFI无线网卡的热拔插事件:
# hceng add for wifi
#wlan0           root:root 660 * /sbin/auto_wifi.sh
wlan0           root:root 660 * /sbin/auto_wifi_ap.sh

else
echo --------usb wifi disconnect--------- > /dev/console
killall hostapd
killall dhcpd
fi
{% endcodeblock %}

  • 3.为脚本添加可执行权限
    执行:
chmod +x /sbin/auto_wifi_ap.sh

之后就插上无线网卡,就自动启动了热点;拔掉无线网卡,就自动关闭热点。

2017-05-25 21:53:18 wsj_wsj_123 阅读数 534
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4901 人正在学习 去看看 韦东山

1、在Linux下用ifconfig命令查看是否有wlan0模块,如果没有首先需要启动wlan0模块
2、配置文件
sudo vim /etc/wpa_supplicant/wpa_supplicant.conf

在文件的底部添加下面内容:

network={
    ssid="The_ESSID_from_earlier"    #无线网名称
    psk="Your_wifi_password"         #无线网密码
}

注意:上面的设置一定要用双引号,我写Python习惯了,双引号和单引号不分,导致我之前怎么搞不行。

2018-08-01 11:04:19 thisway_diy 阅读数 5507
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4901 人正在学习 去看看 韦东山

本文所用开发板:tiny4412,当然也可以在jz2440上实现。

嵌入式中设备想要联网,无非就 有线和无线 两种方式。

有线就插上网线,没什么好说的;无线的话一种是将WIFI模块集成焊接在板子上,另一种是WIFI模块以USB的方式接到板子上。

本次使用的就是USB接口的WIFI无线网卡,实现开发板使用WIFI无线网卡访问互联网和作为个人热点。

1.准备工作

1.2 WIFI基础知识

WIFI网卡有两种工作模式,
一种是无线终端模式(STA),也就是手机日常使用的模式,通过该模式连接网络上网;
一种是无线热点模式(AP),也就是手机的个人热点模式,通过该模式提供热点供其它设备上网;

无线网络的安全性由两部分组成:认证加密

认证: 使得只有允许的设备才能连接到无线网络;
加密: 确保数据的保密性和完整性,即数据在传输过程中不会被篡改;

  • 常用的认证算法有:开放认证、共享秘钥认证、802.11x认证、PSK认证
    其中802.11x认证和PSK认证安全性较高,分别应用于企业和个人的环境;

  • 常用的加密算法有:WEB加密、TKIP加密、CCMP加密算法
    其中WEB加密和TKIP加密都是RC4的加密算法,安全性较低;CCMP加密采用AES对称加密算法,安全性较高。

安全策略认证方式加密方式备注
Openopenopen开放WiFi,无任何加密
openWEP开放WiFi,仅数据加密
WEPWEPWEP共享密钥认证,容易破解
WAP802.11XTKIP/WEP比较安全,用于企业
PSKTKIP/WEP比较安全,用于个人
WAP2802.11XCCMP/TKIP/WEP目前最安全,用于个人
PSKCCMP/TKIP/WEP目前最安全,用于个人

连入超市、商场等公共WIFI的时候,不需要输入密码,但要通过网页输入手机号,使用验证码验证,也就是采用802.11X进行的验证,通过服务器完成的验证。

使用手机开个人热点的时候,可以选择安全性OPEN、WEP、WAP、WAP2,也就对应不同的安全等级。

我手里的MIX2S,MIUI10个人热点里面就仅OPEN和WAP2两个选项,感觉这是个趋势,要么最简单的OPEN,要么就最安全的WAP2(WAP2是向下兼容的),逐渐扔掉历史的包袱。

1.2 选择无线网卡

首先是选择合适的无线网卡,选取的原则是根据WIFI无线网卡的VIDPID判断内核是否支持该无线网卡。

  • 1.获取无线网卡ID
    将无线网卡插入Windows电脑,打开设备管理器,选中无线网卡,右键“属性”,切换到“详细信”息选项卡,在“属性”下拉栏中选择"硬件ld",即可得到无线网卡的ID:
    在这里插入图片描述
    我的无线网卡VID0x148FPID0x3070

  • 2.查询内核是否支持
    可以从wireless.kernel.org得到支持的设备列表
    可以从列表中搜到前面的VIDPID,因此说明内核是支持现在使用的无线网卡。此外,还可以得知对应的驱动应该为rt2800usbrt2870sta
    在这里插入图片描述

1.3 移植WIFI驱动

  • 前面根据ID得到了对应的网卡驱动名字,但还不是很靠谱,建议直接在驱动中搜索ID,更靠谱:
grep "0x3070" drivers/net/wireless/ -nr

得到:
drivers/net/wireless/ralink/rt2x00/rt2800usb.c:1091: { USB_DEVICE(0x148f, 0x3070) },
知道了对应的驱动文件是rt2800usb.c

  • 再查看对应路径的Makfeile:
cat  drivers/net/wireless/ralink/rt2x00/Makefile 

得到:
obj-$(CONFIG_RT2800USB) += rt2800usb.o
知道了对应的宏是CONFIG_RT2800USB

  • 进入内核目录,执行:
make menuconfig

搜索CONFIG_RT2800USB,得知其依赖:
Depends on: NETDEVICES [=y] && WLAN [=y] && WLAN_VENDOR_RALINK [=y] && RT2X00 [=n] && USB [=y]
可以知道RT2X00 [=n]没有打开,再搜索它,如此循环,直到
RT2800USB [=y]

这里有个注意的就是,当开启的上层的某个依赖,下层的某个选项可能会多出来许多选项,而这些选项原来是没有的,不要固化思维。

最后重新编译内核即可。

1.4 使用buildroot移植应用

想要使用无线网卡,需要用到四个软件:

  • **iw:**可用于OPEN、WEP这两种"认证/加密",以及扫描WIFI热点等;
    **- wpa_supplicant:**可用于前面4种"认证/加密";
  • **hostapd:**能够使得无线网卡切换为AP模式;
  • dhcp: STA模式使WIFI网卡动态获取IP,AP模式分配IP;

也就是需要移植这四个软件,目前的方法有:
**1.**逐个下载源码,交叉编译,配置,可以还需要相关依赖库,缺点是费时费力;

**2.**使用Yocto等工具,制作发行版的根文件系统,例如Ubuntu16.04,里面有apt-get,可以自动下载安装,缺点是制作发行版根文件系统比较麻烦,且体积较大;

**3.**使用buildroot制作根文件系统,选择需要的软件,自动生成根文件系统,相对简单,体积也较小;

本次就以buildroot为例,制作包含应用程序的根文件系统。

  • 首先从GitHub下载针对Tiny4412修改后的buidroot
git clone -b board_tiny4412 https://github.com/hceng/buildroot.git
  • 查看支持的board
cd buildroot/
make list-defconfigs

得知tiny4412对应的配置文件:
tiny4412_defconfig - Build for tiny4412

  • 配置提供的配置文件
make tiny4412_defconfig
  • 添加自己所需软件
    执行:
make menuconfig

对应勾选所需软件:

Target packages  --->
    Networking applications  --->
        [*] dhcp (ISC)                                                
            [*]   dhcp server                                      
                [*]     Enable delayed ACK feature                     
            [*]   dhcp relay                                       
            [*]   dhcp client 
        ……
        [*] hostapd                                                     
            [*]   Enable ACS (NEW)                                      
            [*]   Enable EAP                                            
            [*]   Enable WPS 
        ……
        [*] iw
        ……
        [*] wpa_supplicant                                               
            [*]   Enable nl80211 support                                  
            [*]   Enable AP mode                                           
            [ ]   Enable EAP                                                  
            [ ]   Enable HS20                                                 
            [ ]   Enable syslog support                                       
            [ ]   Enable WPS                                                  
            [*]   Install wpa_cli binary                                      
            [*]   Install wpa_client shared library                           
            [*]   Install wpa_passphrase binary     
        
  • 修改主机名、欢迎语、root密码等
System configuration  --->
    (tiny_4412) System hostname  
    (Welcome to hceng's board.) System banner  
    ……
    [*] Enable root login with password
    (123456) Root password 
  • 生成根文件系统
    执行:
make

buildroot会自动下载相关源码包,整个过程时间比较久,最后生成buildroot/output/images/rootfs.tar,解压到SD卡rootfs分区即可。

1.5 添加firmware

此时开发板启动Linux后,使用ifconfig wlan0 up启动无线网卡,提示:

ieee80211 phy0: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
rt2800usb 2-2.2:1.0: Direct firmware load for rt2870.bin failed with error -2
ieee80211 phy0: rt2x00lib_request_firmware: Error - Failed to request Firmware
ifconfig: SIOCSIFFLAGS: No such file or directory

提示需要firmware文件rt2870.bin

继续通过网站wireless.wiki.kernel.org去下载该固件

得到rt2870.bin后,拷贝到单板/lib/firmware/下即可。

1.6 启动WIFI网卡

注意:
双网卡的单板的两个网卡IP不能设置为同一网段。原因参考:(https://www.zhihu.com/question/41331151)。

也就是先把有线网卡IP设置为其它网段,比如:

ifconfig eth0 192.168.2.220

然后启动WIFI网卡,并设置IP(路由器IP为192.168.1.1):

ifconfig wlan0 up
ifconfig wlan0 192.168.1.220

此时效果如下:
在这里插入图片描述

2.无线终端模式——STA

完成前面的准备工作后,就可以通过软件使用无线网卡了。

2.1 iw的使用

  • 列出WIFI网卡的性能:
iw list 
  • 扫描WIFI热点
iw dev wlan0 scan 
iw dev wlan0 scan | grep SSID:
  • 连接到开放AP
iw wlan0 connect hceng
  • 查看连接状态
iw dev wlan0 link
  • 断开WIFI连接
 iw wlan0 disconnect

还可以连接加密的WEP,这里就不研究了。

注意:
1.如果连接的不是路由器(IP为192.168.1.1),而是Android手机热点(IP一般为192.168.43.1),那么要将WIFI网卡IP设置为43网段,如:192.168.43.10,才能ping通192.168.43.1
 
2.此时只能ping路由器和局域网设备,如果要联外网,还需要如下操作:
①修改/etc/resolv.conf,添加DNS:nameserver 192.168.1.1,如果是手机热点为nameserver 192.168.43.1
②设置网关,输入命令:route add default gw 192.168.1.1,如果是手机热点为route add default gw 192.168.43.1
在这里插入图片描述

2.2 wpa_supplicant的使用

wpa_supplicant本是开源项目,被谷歌修改后加入android移动平台,它主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的。

wpa_supplicant是一个连接、配置WIFI的工具,它主要包含wpa_supplicant(命令行模式)与wpa_cli(交互模式)两个程序。

通常情况下,可以通过wpa_cli来进行WIFI的配置与连接,如果有特殊的需要,可以编写应用程序直接调用wpa_supplicant的接口直接开发。

记得以前想查看Android手机连接过的WIFI热点密码时,就直接使用RE文件管理器查看/data/misc/wifi/wpa_supplicant.conf即可(需ROOT),里面有所有连接过的WIFI名字和密码。

从这里可以看出,最后WIFI名字和密码,都会被保存到一个配置文件里,在Linux中,路径就是/etc/wpa_supplicant.conf

  • 连接开放网络
    /etc/wpa_supplicant.conf加入:
network={
    ssid="hceng"
    key_mgmt=NONE
}

初始化wpa_supplicant,执行:

wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf  

查看连接状态:

wpa_cli -iwlan0 status  

断开连接:

wpa_cli -iwlan0 disconnect

killall wpa_supplicant

重新连接:

wpa_cli -iwlan0 reconnect

在这里插入图片描述

  • 连接加密网络(WAP2)
    /etc/wpa_supplicant.conf加入:
network={
    ssid="hceng_test"
    psk="12345678"
}

初始化wpa_supplicant,执行:

wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf  

在这里插入图片描述

至于WEP和WAP方式,也就是配置文件的不同,这里就不去深究了,以后遇到了再说。

2.3 dhclient的使用

至此,已经可以连接WIFI了,但还有一些问题。

就如前面,需要手动设置设备的IP,且要根据热点的网段设置,还可能与同网段的设备IP冲突。
为了解决这个问题,引入了DHCP,自动分配IP地址。

就像家里的设备连接到路由器一样,除了输入名字,密码,其它都不用操作,而且还不会出现IP冲突的情况。

连接好WIFI后,输入:

dhclient wlan0

实现自动获取分配的IP,并设置。

在这里插入图片描述

2.4 自动脚本

现在已经从功能上实现了WIFI无线网卡的使用,但使用过程步骤比较多,相对麻烦。
理想的效果无论何时插上WIFI无线网卡,都自动连接WIFI,且自动获取IP地址。

这就要用到USB的热拔插机制,很久以前写过一篇U盘自动挂载的文章,用的就是这个机制。

  • 1.首先修改/etc/mdev.conf配置文件
    加入WIFI无线网卡的热拔插事件:
# hceng add for wifi
wlan0           root:root 660 * /sbin/auto_wifi.sh

其中*表示插拔都执行后面的脚本。

  • 2.自动连接脚本/sbin/auto_wifi.sh
    但检测到USB网卡插拔后,就会执行该脚本:
#!/bin/sh
if [ $ACTION = "add" ];
then
   echo --------usb wifi connect--------- > /dev/console
   wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf
   wpa_cli -B -i wlan0 -a/sbin/auto_dhcp.sh
else
   echo --------usb wifi disconnect--------- > /dev/console
   killall wpa_supplicant
   killall wpa_cli
   killall dhclient
fi

如果是插入USB无线网卡,将执行wpa_supplicant -B -d -i wlan0 -c /etc/wpa_supplicant.conf连接wifi,再执行wpa_cli -B -i wlan0 -a/sbin/auto_dhcp.sh调用dhcp的脚本;

如果是拔出USB无线网卡,将清除所有相关进程;

  • 3.自动dhcp脚本/sbin/auto_dhcp.sh
#!/bin/sh
IFNAME=$1
CMD=$2
if [ "$CMD" = "CONNECTED" ]; then
   echo ========connect $IFNAME, dhclient for it======= > /dev/console
   dhclient $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
   echo ========disconnect $IFNAME, kill dhclient for it======= > /dev/console
   killall dhclient
fi

如果是连接,将调用dhclient分配IP,反之清除dhclient进程。

  • 4.为脚本加上可执行权限
chmod +x /sbin/auto_wifi.sh
chmod +x /sbin/auto_dhcp.sh

最后便可实现自动连接WIFI,且自动获取IP地址。

3.无线热点模式——AP

无线热点模式共需要两步操作,先使用hostapd将无线网卡切换成AP模式,再使用dhcpd分配IP。

3.1 hostapd的使用

先清除前面STA模式的所有操作,重新启动单板。

  • 创建/etc/hostapd.conf配置文件

1.OPEN模式:

ctrl_interface=/var/run/hostapd

ssid=hceng
channel=1
interface=wlan0
driver=nl80211

2.WAP/WAP2模式:

ctrl_interface=/var/run/hostapd

ssid=hceng
#hw_mode=g
channel=1
interface=wlan0
#bridge=br0
driver=nl80211
macaddr_acl=0
#accept_mac_file=/etc/hostapd.accept
#deny_mac_file=/etc/hostapd.deny

auth_algs=1
wpa=3
wpa_passphrase=12345678
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP

注释
ctrl_interface:为了后面hostapd_cli链接上hostapd
ssid:无线热点名字;
hw_mode:指定802.11协议,其中a=IEEE 802.11ab=IEEE 802.11bg=IEEE 802.11g
channel:设定无线信道
interface:指定使用哪一个无线网卡;
bridge:指定所处网桥,对于一个同时接入公网、提供内部网和无线接入的路由器来说,设定网桥很有必要;
driver:指定无线驱动;
macaddr_acl:指定MAC地址过滤规则:
       0表示允许除禁止列表外的设备;
       1表示只允许在允许列表的设备;
       2表示使用外部RADIUS服务器;
accept_mac_file:指定允许MAC列表文件所在路径;
deny_mac_file:指定禁止MAC列表文件所在路径;
auth_algs:指定采用哪种认证算法,采用位域(bit fields)方式来制定;
      1表示使用WPA;
      2表示使用WEP;
      3表示使用WPA/WEP;
wpa:指定WPA类型,采用位域(bit fields)方式来制定;
   1表示使用WPA;
   2表示使用WPA2;
   3表示使用WPA2/WPA;
wpa_passphrase:WIFI的密钥;
wpa_key_mgmt:PSK为个人AP,不使用服务器认证;
wpa_pairwise:指定WPA的加密方式;
rsn_pairwise:指定WPA2的加密方式;

3.2 dhcpd的使用

如果此时启动热点,实测手机一直卡在获取IP地址,无法连接到热点,因此热点还需自动分配IP地址。

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.10 192.168.2.100;
  option domain-name-servers 192.168.2.1;
  option routers 192.168.2.1;
}

指定了子网IP起始地址、子网掩码、动态分配的IP范围、DNS服务器、路由。

3.3 启动热点

  • 1.启动无线网卡,并设置IP
ifconfig wlan0 up
ifconfig wlan0 192.168.2.1
  • 2.启动AP和DHCP
    启动命令:
hostapd -B /etc/hostapd.conf
dhcpd -cf /etc/dhcpcd.conf wlan0

对应的停止命令:

killall hostapd
killall dhcpd
  • 3.其它操作
    查看热点状态:
hostapd_cli all_sta

查看热点配置:

hostapd_cli get_config

查看已连接的设备:

iw dev wlan0 station dump

在这里插入图片描述

3.4 自动脚本

和前面的一样,假如希望实现USB无线网卡的热拔插,自动进入AP模式,只需如下操作:

  • 1.首先修改/etc/mdev.conf配置文件
    加入WIFI无线网卡的热拔插事件:
# hceng add for wifi
#wlan0           root:root 660 * /sbin/auto_wifi.sh
wlan0           root:root 660 * /sbin/auto_wifi_ap.sh
  • 2.自动AP脚本/sbin/auto_wifi_ap.sh
    但检测到USB网卡插拔后,就会执行该脚本:
#!/bin/sh
if [ $ACTION = "add" ];
then                                
   echo --------usb wifi connect--------- > /dev/console
   hostapd -B /etc/hostapd.conf
   ifconfig wlan0 192.168.2.1
   dhcpd -cf /etc/dhcpcd.conf wlan0

else                     
   echo --------usb wifi disconnect--------- > /dev/console
   killall hostapd
   killall dhcpd
fi
  • 3.为脚本添加可执行权限
    执行:
chmod +x /sbin/auto_wifi_ap.sh

之后插上无线网卡,自动启动热点;拔掉无线网卡,自动关闭热点。

参考教程:韦东山第3期视频之WiFi网卡移植


关注公众号baiwenkeji第一时间获得嵌入式干货。
技术交流加个人威信13266630429,验证:CSDN博客

2013-05-20 11:55:13 zhongnanjun_3 阅读数 801
  • 韦东山升级版嵌入式视频之快速入门

    韦东山老师为啥要录升级版嵌入式视频? 200x年左右,嵌入式Linux在全世界、在中国刚刚兴起。 我记得我2005年进入中兴时,全部门的人正在努力学习Linux。 在2008年,我写了一本书《嵌入式Linux应用开发完全手册》。 它的大概内容是:裸机、U-boot、Linux内核、Linux设备驱动。 那时还没有这样讲解整个系统的书, 芯片厂家Linux开发包也还不完善,从bootloader到内核,再到设备驱动都不完善。 有全系统开发能力的人也很少。 于是这书也就恰逢其时,变成了畅销书。 我也根据这个思路录制了视频:裸机、U-boot、Linux内核、Linux设备驱动。 收获些许名声,带领很多人进入Linux世界。 11年过去了,嵌入式Linux世界发生了翻天覆地的变化 ① 基本系统能用 芯片厂家都会提供完整的U-boot、Linux内核、芯片上硬件资源的驱动。 方案厂家会做一些定制,比如加上某个WIFI模块,会添加这个WIFI模块的驱动。 你可以使用厂家的原始方案,或是使用/借鉴方案商的方案,做出一个“能用”的产品。 ② 基础驱动弱化;高级驱动专业化 基础的驱动,比如GPIO、UART、SPI、I2C、LCD、MMC等,有了太多的书籍、视频、示例代码,修修改改总是可以用的。 很多所谓的驱动工程师,实际上就是“调参工程师”。 我们群里有名的火哥,提出了一个概念:这些驱动就起一个“hardware enable”的作用。 高级的驱动,比如USB、PCIE、HDMI、MIPI、GPU、WIFI、蓝牙、摄像头、声卡。 体系非常复杂,很少有人能讲清楚,很多时候只是一笔带过。 配置一下应用层工具就了事,能用就成。 这些高级驱动,工作中需要专门的人来负责,非常专业。 他们是某一块的专家,比如摄像头专家、音频专家。 ③ 项目为王 你到一个公司,目的是把产品做出来,会涉及APP到内核到驱动全流程。 中小公司玩不起华为中兴的配置,需要的是全面手。 大公司里,只负责很小很小一块的镙丝钉,位置也不太稳固啊。 所以,如果你不是立志成为某方面的专家,那就做一个全栈工程师吧。 ④ 调试很重要 都说代码是3分写7分调,各种调试调优技术,可以为你的升职加薪加一把火。 基于上述4点,我录制的全新视频将有这些特点: 1. 快速入门, 2. 实战项目, 3. 驱动大全, 4. 专题, 5. 授人以渔, 6. 要做任务 另外,我们会使用多款芯片同时录制,先讲通用的原理,再单独讲各个板子的操作。 这些芯片涵盖主流芯片公司的主流芯片,让你学习工作无缝对接。 1.快速入门 入门讲究的是快速,入门之后再慢慢深入, 特别是对于急着找工作的学生,对于业余时间挑灯夜读的工作了的人,一定要快! 再从裸机、U-boot、内核、驱动这样的路线学习就不适合了,时间就拉得太长了。 搞不好学了后面忘了前面。 并且实际工作中并不需要你去弄懂U-boot,会用就行:U-boot比驱动还复杂。 讲哪些内容? 怎么讲呢? 混着讲 比如先讲LED APP,知道APP怎么调用驱动,再讲LED硬件原理和裸机,最后讲驱动的编写。 这样可以快速掌握嵌入式Linux的整套开发流程, 不必像以前那样光学习裸机就花上1、2个月。 而里面的裸机课程,也会让你在掌握硬件操作的同时,把单片机也学会了。 讲基础技能 中断、休眠-唤醒、异步通知、阻塞、内存映射等等机制,会配合驱动和APP来讲解。 这些技能是嵌入式Linux开发的基础。 而这些驱动,只会涉及LED、按制、LCD等几个驱动。 掌握了这些输入、输出的驱动和对应的APP后,你已经具备基本的开发能力了。 讲配置 我们从厂家、从方案公司基本上都可以拿到一套完整的开发环境,怎么去配置它? 需要懂shell和python等配置脚本。 效果效率优先 以前我都是现场写代码、现场写文档,字写得慢,降低了学习效率。 这次,效果与效率统一考虑,不再追求所有东西都现场写。 容易的地方可先写好代码文档,难的地方现场写。 2.实战项目 会讲解这样的涉及linux网关/服务器相关项目(不限于,请多提建议):                      定位为:快速掌握项目开发经验,丰满简历。 涉及的每一部分都会讲,比如如果涉及蓝牙,在这里只会讲怎么使用,让你能写出程序;如果要深入,可以看后面的蓝牙专题。 3. 驱动大全 包括基础驱动、高级驱动。 这些驱动都是独立成章,深入讲解。 虽然基础驱动弱化了,但是作为Linux系统开发人员,这是必备技能,并且从驱动去理解内核是一个好方法。 在讲解这些驱动时,会把驱动的运行环境,比如内核调度,进程线程等概念也讲出来,这样就可以搭建一个知识体系。 没有这些知识体系的话,对驱动的理解就太肤浅了,等于在Linux框架下写裸机,一叶障目,不见泰山。 定位为:工具、字典,用到再学习。 4. 专题 想深入学习的任何内容,都可独立为专题。 比如U-boot专题、内核内存管理专题、systemtap调试专题。

    4901 人正在学习 去看看 韦东山
在S3C2440开发上增加 USB WiFi 网卡,就可以通过无线上网。手头正好有一块现成的Zydas的WiFi网卡。试试无线通讯.
 
 

一.增加USB网卡驱动

 
 
 

Linux 2.6.29 加入Zydas 的驱动支持.动态模块形式.

一般采用WiFi Zyda 2611的网卡,注意在内核中有一个ZB1201的无法驱动比较新的网卡,

 

,

 

 

 

make modules  编译动态模块

 

 

最终的zd1201.ko即是所需的动态模块.将其拷出来

 

insmod zd1201.ko 安装,(注意ko所在路径,最好是绝对路径)

insmod zd1211rw.ko,(注意ko所在路径,最好是绝对路径)

 

 

USB WIFI网卡插入,如果成功,应该能看到提示

cat /proc/bus/usb/devices能看到如下信息

 

 

至此,USB网卡安装装成功

 

如果网卡安装成功,应该能在用cat /proc/net/wireless 目录下看到网卡,( 注意,2.6.21以前,要配置CONFIG_NET_RADIO才会显示这个文件系统.更高的版本是自动支持的.)

 

 

 

 

 

 

Wifi应用层工具的使用

-----------------------------------------------------------------

 

此时应该在,安装应用层的工具.以便在Linux ifconfig 下能使用网络结点操作.

 

一般使用wireless_tools.29.tar.gz这一工具配置结点.

 

1.解压

tar xvzf wireless_tools.29.tar.gz

 

2.移植

这个项目已经预先写好了Makefile,因此不需要configure 重新生成,把所用的gcc 工具的地方用上arm-linux的版本.

prefix 改为相应的路径

 

 

 

 

执行 ifconfig wlan0 up 激活网卡 (注意是 ifconfig,不是iwconfig )

在大约一段时间后提示

 

 

表示需要一些固件,从网上查找的的文档来看是,是需要

zd1211-firmware-1.4.tar.bz2

 

里面有如下内容

 

 

[root@TecherHost libs]# tar xvjf zd1211-firmware-1.4.tar.bz2

zd1211-firmware/

zd1211-firmware/zd1211b_uphm

zd1211-firmware/zd1211_uphr

zd1211-firmware/WS11UPh.h

zd1211-firmware/WS11UPhm.h

zd1211-firmware/README

zd1211-firmware/zd1211b_uph

zd1211-firmware/zd1211b_ub

zd1211-firmware/WS11UPhR.h

zd1211-firmware/WS11UPhR_Turbo.h

zd1211-firmware/zd1211b_uphr

zd1211-firmware/zd1211_ub

zd1211-firmware/WS11Ub.h

zd1211-firmware/zd1211_ur

zd1211-firmware/zd1211_uph

zd1211-firmware/WS11Ur.h

zd1211-firmware/zd1211b_ur

zd1211-firmware/zd1211_uphm

zd1211-firmware/COPYING

 

根据firmware的说明,将其中的zd1211b_*文件拷贝到根文件系统/lib/firmware/zd1211目录中。

 

在开发板上执行:

mkdir -p /lib/firmware/zd1211/

cp zd1211_* /lib/firmware/zd1211/

再次执行Ifconfig wlan0

 

有如下提示

 

[root@FriendlyARM zd1211-firmware]# ifconfig wlan0 up

usb 1-1: firmware: requesting zd1211/zd1211b_ub

usb 1-1: firmware: requesting zd1211/zd1211b_uphr

zd1211rw 1-1:1.0: firmware version 4725

zd1211rw 1-1:1.0: zd1211b chip 0ace:1215 v4810 full 00-e0-4c UW2453_RF pa0 g7---

 

cfg80211: Calling CRDA for country: US

 

运行ifconfig 的结果

 

[root@FriendlyARM zd1211-firmware]# ifconfig

eth0      Link encap:Ethernet  HWaddr 08:00:3E:26:0A:5B

          inet addr:192.168.1.230  Bcast:192.168.1.255  Mask:255.255.255.0

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:505 errors:0 dropped:0 overruns:0 frame:0

          TX packets:233 errors:0 dropped:0 overruns:0 carrier:0

          collisions:12 txqueuelen:1000

          RX bytes:218025 (212.9 KiB)  TX bytes:31950 (31.2 KiB)

          Interrupt:53 Base address:0x300

 

lo        Link encap:Local Loopback

          inet addr:127.0.0.1  Mask:255.0.0.0

          UP LOOPBACK RUNNING  MTU:16436  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:0

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

wlan0     Link encap:Ethernet  HWaddr 00:E0:4C:18:74:B5

          UP BROADCAST MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

wmaster0  Link encap:UNSPEC  HWaddr 00-E0-4C-18-74-B5-00-00-00-00-00-00-00-00-00-00

          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1

          RX packets:0 errors:0 dropped:0 overruns:0 frame:0

          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0

          collisions:0 txqueuelen:1000

          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

 

 

 

 

 

 

3.使用无线网络

 

执行iwlist scanning 扫描AP设备

 

 

[root@FriendlyARM sbin]#

[root@FriendlyARM sbin]# ./scan.sh[J

lo        Interface doesn't support scanning.

 

eth0      Interface doesn't support scanning.

 

wmaster0  Interface doesn't support scanning.

 

wlan0     Scan completed :

          Cell 01 - Address: 00:14:78:B3:66:56

                    ESSID:"AndrewHome"

                    Mode:Master

                    Channel:10

                    Frequency:2.457 GHz (Channel 10)

                    Quality=11/100  Signal level:72/100 

                    Encryption key:off

                    IE: Unknown: 000A416E64726577486F6D65

                    IE: Unknown: 010882848B960C183048

                    IE: Unknown: 03010A

                    IE: Unknown: 0706434E20010D14

                    IE: Unknown: 2A0100

                    IE: Unknown: 32041224606C

                    IE: Unknown: DD180050F2020101000003A4000027A4000042435E0062322F00

                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s

                              12 Mb/s; 24 Mb/s; 36 Mb/s; 9 Mb/s; 18 Mb/s

                              48 Mb/s; 54 Mb/s

                    Extra:tsf=00000000ff931aa7

                    Extra: Last beacon: 95ms ago

          Cell 02 - Address: 00:90:4C:C1:03:E9

                    ESSID:"3G-Router"

                    Mode:Master

                    Channel:11

                    Frequency:2.462 GHz (Channel 11)

                    Quality=23/100  Signal level:14/100 

                    Encryption key:on

                    IE: Unknown: 000933472D526F75746572

                    IE: Unknown: 010882848B962430486C

                    IE: Unknown: 03010B

                    IE: Unknown: 2A0100

                    IE: Unknown: 2F0100

                    IE: Unknown: 32040C121860

                    IE: Unknown: DD090010180200F0040000

                    IE: Unknown: DD180050F2020101800003A4000027A4000042435E0062322F00

                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s

                              24 Mb/s; 36 Mb/s; 54 Mb/s; 6 Mb/s; 9 Mb/s

                              12 Mb/s; 48 Mb/s

                    Extra:tsf=00000014c2eb155b

                    Extra: Last beacon: 90ms ago

          Cell 03 - Address: 00:21:27:3A:3A:F0

                    ESSID:"TP-LINK-316"

                    Mode:Master

                    Channel:11

                    Frequency:2.462 GHz (Channel 11)

                    Quality=17/100  Signal level:11/100 

                    Encryption key:on

                    IE: Unknown: 000B54502D4C494E4B2D333136

                    IE: Unknown: 010882848B960C183048

                    IE: Unknown: 03010B

                    IE: Unknown: 2A0100

                    IE: Unknown: 32041224606C

                    IE: Unknown: DD0900037F01010008FF7F

                    IE: Unknown: DD1A00037F03010000000021273A3AF00221273A3AF064002C010808

                    Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 6 Mb/s

                              12 Mb/s; 24 Mb/s; 36 Mb/s; 9 Mb/s; 18 Mb/s

                              48 Mb/s; 54 Mb/s

                    Extra:tsf=0000000cffa98c87

                    Extra: Last beacon: 90ms ago

 

[root@FriendlyARM sbin]#

 

其中的ESSID:"AndrewHome"就是我自己无线路由器的名字,没有密码。就登录这个无线路由器

,因此登录上去。

iwconfig wlan0 key 123456 #设置登录命令为 123456,这里暂时不需要

iwconfig wlan0 essid " AndrewHome" #设置ESSID”AndrewHome”

 

[root@FriendlyARM sbin]# ./wup.sh wlan0 essid "AndrewHome"

[root@FriendlyARM sbin]# cfg80211: Calling CRDA for country: CN

 

其余采用自动参数

iwconfig wlan0 ap auto

再次执行iwconfig wlan0,这时发现已经上去了。

 

[root@FriendlyARM sbin]# ./wup.sh wlan0

wlan0     IEEE 802.11bg  ESSID:"AndrewHome"

          Mode:Managed  Frequency:2.457 GHz  Access Point: 00:14:78:B3:66:56

          Bit Rate=1 Mb/s   Tx-Power=27 dBm

          Retry min limit:7   RTS thr:off   Fragment thr=2352 B

          Encryption key:off

          Power Management:off

          Link Quality=100/100  Signal level:75/100

          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0

          Tx excessive retries:0  Invalid misc:0   Missed beacon:0

 

到这个阶段,就象普通的有线网卡一样,用ifconfig操作就行,设置IP

 ifconfig wlan0 192.168.1.231 netmask 255.255.255.0

 

然后可以写一个脚本。

#! /bin/sh
ifconfig wlan0 up
#iwconfig wlan0 key 123456
iwconfig wlan0 essid "AndrewHome"
iwconfig wlan0 ap auto
ifconfig wlan0 192.168.1.30 netmask 255.255.255.0

 

4.增加DHCP支持

 

从使用的角度来说,无线网卡最好用DHCP动态获取IP地址,LINUX下使用DHCP获取地址有几种方法,

在桌面机LINUX一种是配置网卡的启动脚本。

  即修改/etc/sysconfig/networks-scripts/ifg-XXXX(后面是设备名)

wlan0的设备就是 ifconfig-wlan0.第一块网卡就是 ifg-eth0,

静态IP的配置文件如下

 

DEVICE=eth0

BOOTPROTO=none

BROADCAST=192.168.0.255

IPADDR=192.168.0.146

NETMASK=255.255.255.0

NETWORK=192.168.0.0

ONBOOT=yes

USERCTL=no

PEERDNS=no

TYPE=Ethernet

 

如果用动态IP则修改成

 

DEVICE=eth0

BOOTPROTO=dhcp #以后的配置均失效。

BROADCAST=192.168.0.255

IPADDR=192.168.0.146

NETMASK=255.255.255.0

NETWORK=192.168.0.0

ONBOOT=yes

USERCTL=no

PEERDNS=no

TYPE=Ethernet

 

然后ifconfig eth0 down ,再打开ifconfig eth0 up即可申请IP

 

 

在嵌入式LINUX好象这个没有生效,可以用udhcpc这个busybox 的应用程序来手动申请。(在桌面版,这个程序是dhclient)

第一次运行,提示

 

[root@FriendlyARM init.d]# udhcpc wlan0

udhcpc (v1.13.3) started

udhcpc: exec /usr/share/udhcpc/default.script: No such file or directory

udhcpc: socket: Address family not supported by protocol

 

这里提示需要一些配置文件,查询资料是,

/usr/share/udhcpc/default.script

 

在在/busyboxexamples/udhcpc配置的模板,simple.scritp拷贝成default.script

 

/usr/share/udhcpc/sample.script

/usr/share/udhcpc/sample.deconfig

/usr/share/udhcpc/sample.nak

/usr/share/udhcpc/sample.renew

 

他们目录下面有一些模板,我们把拷到指定目录。进行配置

 

 

[root@FriendlyARM udhcp]# udhcpc -d -i wlan0

udhcpc (v1.13.3) started

udhcpc: socket: Address family not supported by protocol

 

查询原因,是可能内核没有打开相关选项.于是将DHCP选加入

 

 

 

 

 

 

 

6.增加对互联网的支持

增加域名服务器配置

   /etc/resolv.conf是保存DNS服务器地址的配置文件.

内容是

nameserver 202.102.224.68

nameserver 202.96.134.133


没有更多推荐了,返回首页