驱动知识点简单汇总

1、字符设备与块设备的区别

 

字符设备是指存取时没有缓存的设备,大多数字符设备只能顺序读写。比如鼠标、键盘、声卡。

块设备的读写则都有缓存来支持,只能以块为单位进行读写,并且块设备必须能够随机存取(random access),即不管块处于设备的什么地方都可以对它进行读写,字符设备则没有这个要求。比如硬盘、U盘、SD卡。

 

 

 

2、常用驱动命令

 

查看驱动中的打印信息用dmesg命令。

查看内核中字符设备和块设备信息可以使用命令 cat  /proc/devices。

查看正在使用的中断号可以使用命令 cat  /proc/interrupts。

 

3、使用模块的方式加载驱动的优点

 

Linux内核是一种单一大内核,如果没有模块机制,在调试阶段,我们需要修改内核中的某个驱动,必须把内核整个编译一遍,还要重新启动机器,这样操作会非常耗时。有了模块,我们只需要对我们关心的驱动以模块方式单独编译,无须编译整个内核,也不需要重启机器。

 

4、内核空间与用户空间拷贝数据实现方法

 

copy_to_user实现从内核空间向用户空间拷贝数据的功能。copy_from_user实现从用户空间向内核空间拷贝数据的功能。分别用于实现驱动中的read和write函数。如果交换数据都发生在内核空间中,可以直接使用内核定义的memcpy函数。

 

5、主设备号与次设备号

 

主设备号用于区别不同的驱动程序,次设备号用于区别使用同一个驱动程序的同一类设备中的不同设备。chartest使用和ttyS0一样的驱动程序。

 

6、注册设备函数参数

 

register_chrdev(MAJOR_NUMBER, DRIVER_NAME, &xxx_fops)
该函数有三个参数,分别是主设备号,驱动名字和file_operations结构的指针。

 

7、linux中的中断机制

 

中断是一段程序,当外部设备引起中断时由CPU执行。DMA是直接内存访问,用于外设与主存储器之间快速的交换数据,利用DMA,在交换数据时可以不通过CPU,提高了CPU的利用率。
注册中断使用 request_irq(IRQ_NUMBER, (*handler), IRQ_FLAGS, DRIVER_NAME, dev_id)。该函数共有5个参数,分别是要注册的中断号,中断处理程序的指针,中断标志位,中断的名字和dev_id用于区别共享同一个中断的不同设备。

注销中断使用free_irq(unsigned int, void *)第一个参数是中断号,第二个参数一般是NULL指针。

 

8、中断与轮询方式的使用场合

 

参考答案:在一般情况下,由于数据量比较小,中断会比轮询更有效率。但是如果数据量比较大的时候,如果采用中断,由于CPU花在进程切换和保存现场上的时间开销变得比较大,所以这个时候通常采用轮询更有效率。

 

9、网卡协议

 

802.3 MAC Engine:实现802.3协议的核心,实现对以太网桢的发送和接收。

Encoder/Decoder:Encoder/Decoder部分实现对曼彻斯特的编码/译码工作。

10Base-T RX/RX filter & Receiver/ Transmitter:实现对物理信号的发送和接收。

 

 

10、数据发送与接收方式

 

参考答案:发送数据frame:

a.关中断

b.发送skbuff中的数据到硬件上

c.开中断

d.释放skbuff

 

接收数据frame:

a.读硬件获得数据长度

 b.根据长度分配skbuff

 c.从硬件上读数据到skbuff内 

 d.通过netif_rx将skbuff提交到上层,也就是IP层。

 

11、发送数据帧的过程

 

发送数据frame的过程可能在线程的上下文中,关中断是为了保证数据发送的一致性,而接收数据frame的过程主要在中断处理中,这个过程本身就是原子的,所以不需要关中断。

 

12、内核层的通讯

 

sk_buff是在Linux网络协议的各个层次上都用到的一个数据结构,目的是防止数据的重复拷贝。sk_buff的分配由最先使用它的模块分配,而由最后使用它的模块进行释放,具体到网络设备来说,就是,发送的时候在网络协议的最高层,也就是TCP层负责分配,而在设备驱动中当向硬件上发送完sk_buff中数据后释放sk_buff;而对于接受就是在设备驱动的接收到以太网侦的时候分配sk_buff以容纳数据,而在最高层,也就是TCP层负责释放。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux设备驱动是一种软件程序,用于控制硬件设备的操作。它允许操作系统与硬件设备进行通信,从而实现对设备的控制和管理。Linux设备驱动通常由内核模块或用户空间程序实现,可以通过编写C语言代码来实现。设备驱动程序需要遵循Linux内核的规范,包括使用标准的设备文件接口和实现正确的设备操作函数等。在Linux系统中,设备驱动程序是非常重要的组成部分,它们为各种硬件设备提供了支持,包括网络适配器、磁盘驱动器、USB设备等。 ### 回答2: Linux设备驱动是指是在Linux操作系统中控制和管理硬件设备的软件模块,它使得操作系统能够与硬件设备进行通信和交互。在Linux系统中,每个硬件设备都需要由相应的设备驱动程序来支持,这些设备驱动程序负责向操作系统提供设备的操作接口,并处理设备的输入和输出。 Linux设备驱动可以分为字符设备驱动和块设备驱动两种。字符设备驱动用于管理字符设备,例如键盘、鼠标等;块设备驱动用于管理块设备,例如硬盘、固态硬盘等。在驱动程序中,通常会包含设备的初始化和配置、设备的打开和关闭、设备的读取和写入等功能。 为了方便设备驱动的开发和维护,Linux提供了一些设备驱动开发框架和接口,如字符设备驱动的主要接口为file_operations结构体,块设备驱动的主要接口为block_device_operations结构体。开发人员只需要实现这些接口,就可以将相应的设备驱动程序编译为内核模块,然后加载到Linux内核中。 Linux设备驱动的编写需要熟悉硬件设备的工作原理和寄存器的操作,同时还需要了解Linux内核的相关知识。开发人员需要通过阅读设备规格书、硬件设计手册等,了解硬件设备的寄存器地址和寄存器位域的含义,然后编写适当的代码来读取和写入这些寄存器。此外,还需要熟悉Linux内核的设备模型、设备树等,以便正确地注册设备并与操作系统进行通信。 总之,Linux设备驱动是为了实现操作系统与硬件设备之间的通信和交互而编写的软件模块。通过适当配置和编写设备驱动程序,可以使得Linux操作系统能够正确地识别和管理各种硬件设备。 ### 回答3: Linux 设备驱动是指用于操作系统中的设备和外设的软件模块或程序。它负责对计算机和外围设备进行通信和控制,使它们能够正确地工作和与其他部分进行交互。 Linux 设备驱动由内核负责加载和管理,它提供了一种与硬件设备通信的接口,使应用程序能够通过系统调用与设备进行交互。设备驱动程序可以根据底层硬件设备的特定规格和功能进行开发,以确保设备可以和系统进行可靠而有效的通信。 Linux 设备驱动提供了一套标准接口和程序,使开发人员可以编写适用于不同硬件设备的通用驱动程序。这使得设备供应商和开发人员可以更轻松地将设备接入Linux系统,而不需要自行开发专门的驱动程序。此外,设备驱动程序可以提供一系列的API函数和工具,以便应用程序能够控制和访问设备的不同功能和特性。 Linux 设备驱动的开发需要一些特定的技能和知识,包括熟悉C语言编程、了解硬件设备的工作原理和接口规范、熟悉Linux内核和设备驱动开发的相关知识等。开发人员需要编写设备驱动程序的相关代码,并将其编译为内核模块,然后将模块加载到系统中。 总而言之,Linux 设备驱动在操作系统中起到了至关重要的作用,它使得Linux系统能够与各种硬件设备进行联通和交互,从而为应用程序提供了丰富的功能和特性。通过开源的特性,Linux 设备驱动的开发变得更加便捷和灵活,使得越来越多的硬件设备能够与Linux系统兼容,并为用户带来更好的使用体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值