
网络设备有很多,如网卡,猫,路由器,交换机等等。
需要安装驱动程序的只有网卡。
安装办法:首先把你的网卡驱动放入光盘或者存到硬盘指定位置。然后右键点击我的电脑,打开我的电脑属性界面,选择硬件,找到设备管理器并打开,找到有“?”项或者后面有ethernet或网络相关字眼的项目,双击它,点重新安装驱动程序,然后按顺序依次点下一步,直到出现驱动位置,你指向光盘或硬盘相应位置,然后点下一步,直到完成。若成功安装后,在设备管理器的网络适配器里选项下,会有网卡的驱动正确显示出来。另外,若你打开设备管理器没有看到相关与网卡有关的?项,你可以按上面的放大镜 按钮,或按F5键,是扫描硬件改动。若有驱动没正确安装会有提示。
}; //IO功能选项,硬件上拉输出 static unsigned int gpio_cfg_table[] = { S3C2410_GPB5_OUTP, S3C2410_GPB6_OUTP, S3C2410_GPB7_OUTP, S3C2410_GPB8_OUTP, }; //编写一个ioctl函数,这个函数提供给用户端使用(也就是用户态使用) static int my_ioctl(struct inode inode,struct file file,unsigned int cmd, unsigned long arg) { if (arg > 4) { return -EINVAL; } if (cmd == 1) //led ON { s3c2410_gpio_setpin(gpio_table[arg],0); return 0; } if (cmd == 0) //led OFF { s3c2410_gpio_setpin(gpio_table[arg],1); return 0; } else { return -EINVAL; } } //一个和文件设备相关的结构体。 static struct file_operations dev_fops = { owner = THIS_MODULE, ioctl = my_ioctl, //read = my_read, //这个暂时屏蔽,一会我们再加入一个读 *** 作的函数 }; //linux中设备的注册结构体 static struct miscdevice misc =
{ minor = MISC_DYNAMIC_MINOR, name = DEVICE_NAME, fops = &dev_fops, }; //设备初始化(包括注册)函数 static int __init dev_init(void) { int ret; int i; for (i=0;i<4;i++) { s3c2410_gpio_cfgpin(gpio_table[i],gpio_cfg_table[i]); s3c2410_gpio_setpin(gpio_table[i],0); mdelay(500); s3c2410_gpio_setpin(gpio_table[i],1); } ret = misc_register(&misc); printk(DEVICE_NAME"MY_LED_DRIVER init ok\n"); return ret; } //设备注销函数 static void __exit dev_exit(void) { misc_deregister(&misc); } //与模块相关的函数 module_init(dev_init); module_exit(dev_exit); MODULE_LICENSE("GPL"); MODULE_AUTHOR("blogednchinacom/itspy");
MODULE_DESCRIPTION("MY LED DRIVER"); 到此,上面就完成了一个简单的驱动(别急,下面我们再会稍微增加点复杂的东西),以上代码的可以简单概括为:像自己写51单片机或者ARM的裸奔程序一样 *** 作IO函数,然后再linux系统中进行相关必须的函数关联和注册。 为什么要关联呢,为什么注册呢? 因为这是必须的,从以下这些结构体就知道了。 stuct file_operations{ struct module owner; loff_t (llseek) (struct file , loff_t, int); ssize_t (read) (struct file , char __user , size_t, loff_t ); ssize_t (write) (struct file , const char __user , size_t, loff_t ); ssize_t (aio_read) (struct kiocb , const struct iovec , unsigned long, loff_t); ssize_t (aio_write) (struct kiocb , const struct iovec , unsigned long, loff_t); int (readdir) (struct file , void , filldir_t);
unsigned int (poll) (struct file , struct poll_table_struct ); int (ioctl) (struct inode , struct file , unsigned int, unsigned long); long (unlocked_ioctl) (struct file , unsigned int, unsigned long); … } file_operations 结构体中包括了很多与设备相关的函数指针,指向了驱动所提供的函数。 struct inode{ struct hlist_node i_hash; struct list_head i_list; struct list_head i_sb_list; struct list_head i_dentry; unsigned long i_ino; atomic_t i_count; unsigned int i_nlink; uid_t i_uid; gid_t i_gid; dev_t i_rdev; u64 i_version; loff_t i_size; … } inode 是 UNIX *** 作系统中的一种数据结构,它包含了与文件系统中各个文件相关的一些重要信息。在 UNIX 中创建文件系统时,同时将会创建大量的 inode 。通常,文件系统磁盘空间中大约百分之一空间分配给了 inode 表。 大略了解以上信息之后,我们只需把我们所要实现的功能和结构体关联起来。上例中已经完成IO写 *** 作的函数,现在我们再添加一个读的函数。基于这种原理,我们想实现各种功能的驱动也就很简单了。 //添加读函数示意, 用户层可以通过 read函数来 *** 作。 static int my_read(struct file fp, char __user dat,size_t cnt) { size_t i; printk("now read the hardware\n"); for(i=0;i<cnt;i++) dat[i] = 'A'; dat[i] = '\0'; return cnt; } 这样,完成驱动编写。编译之后,本驱动可以通过直接嵌入内核中,也可以以模块的嵌入的形式加载到linux内核中去。 完成了驱动,写个应用程序了验证一下吧: int main(int argc,char argv) {
int on; int led_no; int fd; char str[10]; int cnt =0; fd = open("/dev/MY_LED_DRIVER",0); if (fd < 0) { printf("can't open dev\n"); exit(1); } printf("read process\n"); cnt = read(fd,str,10); printf("get data from driver:\n%s\ncount = %d\n",str,cnt); printf("read process end \n"); cnt = 0; printf("running\n"); while(cnt++<1000) { ioctl(fd,0,0); //led off ioctl(fd,0,1); ioctl(fd,0,2); ioctl(fd,0,3); sleep(1); //printf("sdfdsfdsfdsfds\n"); ioctl(fd,1,0); //led on ioctl(fd,1,1); ioctl(fd,1,2); ioctl(fd,1,3); sleep(1); printf("%d\b",cnt); } close(fd); return 0; }
驱动程序是很底层的,危险性很高的,直接跟硬件打交道的,在 *** 作系统层级下面而普通的应用程序层级是高于 *** 作系统的,需要通过 *** 作系统去调用底层的东西。
驱动程序,可以说相当于硬件的接口, *** 作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
扩展资料:
设备驱动程序与应用程序的相互关系:
在《linux设备驱动程序》里面介绍应用程序有一个组织策略的功能,驱动程序在编写的时候就是提供相关硬件设备的机能。就是说驱动程序不要加入额外的怎么去逻辑上使用硬件的部分,驱动程序需要实现好以下功能:
1、对设备初始化和释放;
2、把数据从内核传送到硬件和从硬件读取数据.;
3、读取应用程序传送给设备文件的数据和回送应用程序请求的数据.;
4、检测和处理设备出现的错误。
以上就是关于什么是网络设备驱动程序,如何正确安装.全部的内容,包括:什么是网络设备驱动程序,如何正确安装.、如何编写Linux的驱动程序、设备驱动程序为什么和普通应用程序许多差异等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)