摘要:
wake on lan是一种网络唤醒功能,它可以实现远程开机,刚好实验室有一台ftp服务器,因为不是24小时开机的,所以每次开机都要跑过去用手按开关,非常麻烦,于是在网上找了下资料,自己实现了一把,并在windows下用Qt写了个简单的界面,以后想开服务器就方便了。原理就是源主机广播一个特殊的数据包给目的主机,前提是目的主机的主板支持wake on lan并在BIOS里已经设置好,还有就是要知道目的主机的MAC地址。这个特殊的数据包叫做magic packet,它由102个字节组成,最前面六个字节为0xFF,其他字节为目的主机的MAC地址(6个字节为一组,共16组),如下图所示: ... 阅读全文
摘要:
在很多应用中都需要应用程序主动去查询驱动中是否有数据可读或者是否可以向驱动写入数据,对于单线程的应用,这可能会导致进程阻塞。当然,可以使用select来不断轮询驱动是否可读或可写,但是这并不是很好的解决方法,更好的解决方式是由驱动主动通知应用程序其状态,而不是应用程序主动去查询驱动的状态。 异步通知就类似于回调,应用程序首先向驱动注册一个回调函数,然后应用程序就可以无阻塞地去做其他事情,当驱动认为其已经可以被写入或者被读取时就会调用应用程序之前注册的回调函数,从而实现异步通知。下面以一个简单的例子说明驱动中异步通知的用法。 新建eclipse工程,具体过程见前面的文章,编写异步... 阅读全文
摘要:
之前写Linux驱动都是在纯文本下完成的,最近发现原来可以使用Eclipse来开发,于是捣鼓了半天终于编译成功,感觉还不错。下面以Hello World驱动为例说一下使用Eclipse开发ARM-Linux驱动的过程。 关于Eclipse和CDT的安装就不说了。安装完Eclipse和CDT后,运行Eclipse,file->New->project选择C/C++里面的C Project,如下图:然后点击Next,填写工程名为hello和设置工程路径,设置如下:点击Next后再点击Next,填写交叉编译器前缀和交叉编译器路径,如下:然后点击finish,此时的工程结构如下图所示,.. 阅读全文
摘要:
这里说的继承有点像C++里的父类和子类,实际上是结构体类型的强制转换,最近看Linux内核源码时经常接触到这种方法,在这里就当作是一个简单的学习吧。 下面给出一个Demo,很简单,分别定义了一个father结构体和一个son结构体,father结构体里定义了2个整形变量,son结构体里的第一个成员是father结构体类型的变量,son里的另外2个成员也是整形变量,这样,son结构体就好像继承了father结构体,并增加了2个成员,代码如下: 1 #include <stdio.h> 2 3 //父结构体 4 struct father 5 { 6 int f1; 7 ... 阅读全文
摘要:
wmaster0是linux无线网络设备的主接口,根据官方说明,从linux2.6.32开始删除了这个接口,所以从linux2.6.32版本开始不会再看到这个接口,我们比较熟悉的是类似于waln0这种接口,因为简单来说,一个wlanx(0,1,2,…)接口就代表一张无线网卡。但是,在linux2.6.31以前,所有的发送操作(还有其他一些操作)都要通过wmaster0来实现,下面以ath5k驱动程序为例简单分析一些发送操作这个过程。 首先,从ieee80211_register_hw()函数看看wmaster0的注册过程:1 …2 mdev = alloc_netdev_mq... 阅读全文
摘要:
最近需要用到网络编程中的广播程序,在网上找了下,亲测可用。客户端: 1 #include <stdio.h> 2 #include <arpa/inet.h> 3 #include <string.h> 4 #include <sys/ioctl.h> 5 #include <net/if.h> 6 #include <unistd.h> 7 8 9 int main(void)10 {11 struct sockaddr_in all;12 int fd;13 //广播消息14 char buff[]="thi 阅读全文
摘要:
一、概述 Linux网络设备驱动程序遵循通用的接口,设计时采用的是面向对象的方法,一个设备就是一个对象(net_device结构)。一个网络设备最基本的方法有初始化、发送和接收等。 Linux网络设备驱动程序的体系结构可以分为四层:网络协议接口层、网络设备接口层、设备驱动功能层和网络设备与媒介层,如图1所示。网络设备驱动程序最主要的工作是完成设备驱动功能层。在Linux中,所有网络设备都抽象为一个接口,这个接口提供了对所有网络设备的操作集合。由数据结构struct net_device来表示网络设备在内核中的运行情况,即网络设备接口。它既包括纯软件网络设备接口,如环路(loopb... 阅读全文
摘要:
找遍网上几乎全世界仅有DCMA-86P2这块网卡可以实现802.11p功能,但很遗憾,卖这块网卡的厂家不提供驱动。经过一段时间的研究,终于找到了点头绪,发现这块网卡默认是工作在802.11a模式的,即使修改了驱动让它工作在802.11p模式,在用iwconfig工具来查看的时候还是会显示802.11a模式。最近终于成功让它显示802.11p模式(只要它的工作频率位于5.85~5.925GHZ之间)了。目前已经90%确认它真的工作在802.11p模式,由于手头上暂时还没有5GHZ以上的频谱仪,所以没有十分确定。经过前几天的测试,现在已经100%确定可以工作在802.11p模式(最起码物理层... 阅读全文
摘要:
由于研究方向是关于车载自组网方面的,因此需要搭建仿真平台,发现NCTUns非常适合车载网络方面的仿真,而且它已经集成IEEE 802.11p协议,花了一些时间把NCTUns 6.0仿真平台搭起来了,虽然不难搭建,但搭建过程中还是会遇到一些小麻烦,在这里做个记录。一、安装Fedora12 这个就不多说了,网上教程一大堆,我的是虚拟机安装的(32位)。二、安装必要的工具#yum install gcc gcc-c++ make mkinitrd#yum install readline-devel ncurses-devel下载libXaw-1.0.6-4.fc12.i686.rpm后安装... 阅读全文
摘要:
一、概述 Android原生自带的电话软件是不支持挂接电震动设置的,但很多时候我们却需要这功能,要实现这功能有两种可行的办法,一是修改电话软件的代码,二是使用第三方软件,在这里我利用的是第二种方法。我们知道,Android提供给了开发者通过API直接监听到的三种电话状态:CALL_STATE_IDLE、CALL_STATE_OFFHOOK和CALL_STATE_RINGING,网上有很多文章对这三种状态进行了说明,但具体哪种STATE对应于实际中的哪个状态却很少提到,下面进行说明。 电话一开始所处的状态无非就两种:去电和来电。下面的图片是来电和去电的流程图。 来电和去电的流程非常相似... 阅读全文