什么是网络设备驱动程序,如何正确安装.

什么是网络设备驱动程序,如何正确安装.,第1张

网络设备有很多,如网卡,猫,路由器,交换机等等。

需要安装驱动程序的只有网卡。

安装办法:首先把你的网卡驱动放入光盘或者存到硬盘指定位置。然后右键点击我的电脑,打开我的电脑属性界面,选择硬件,找到设备管理器并打开,找到有“?”项或者后面有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的驱动程序、设备驱动程序为什么和普通应用程序许多差异等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9469877.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存