linux驱动--内核和驱动关系

在线wifi跑包 金刚包跑包 cap跑包 hccapx ewsa在线 就来 握手包跑包

各位好 又见面了 我是曹操 今天给大家带来一篇新的教程

希望各位细心学习 低调用网

nethunter内核驱动

关键词:Linux驱动,内核

Linux设备驱动是Linux内核的一部分。它可以以两种方式编译和加载:

  1. 直接编译进Linux内核,在Linux启动时加载。
  2. 编译成可加载和删除的模块。

驱动程序向内核添加了一些函数,如Open()、Release()、Read()、Write()等。这些函数由内核在适当的时候调用,用于完成硬件访问等操作。驱动程序占据了内核源代码的超过50%。

内核中的printk()函数设计目的并不是与用户交流,而是一种日志机制,用于记录日志信息或给出警告提示。如果syslogd和klogd守护进程正在运行,则无论是否向控制台输出,消息都会被追加到/var/log/messages文件中。klogd只处理内核消息,syslogd处理其他系统消息,如应用程序。

设备驱动的并发控制可以使用自旋锁和信号量。自旋锁不会导致调用者睡眠,而是循环查看自旋锁是否被其他执行单元持有。自旋锁适用于保持时间非常短的情况,并可在任何上下文中使用。信号量会导致调用者睡眠,将进程从运行队列中移出,直到获得锁。信号量适用于保持时间较长的情况,并且只能在进程上下文中使用。如果被保护的共享资源需要在中断上下文访问(包括底半部即中断处理句柄和顶半部即软中断),则必须使用自旋锁。

设备驱动中的内存和IO访问是通过将内核虚拟内存映射到连续的物理内存来实现的。CPU通常没有为已知的外设I/O内存资源预定义虚拟地址范围,因此驱动程序不能直接通过物理地址访问I/O内存资源。相反,它们必须将这些资源映射到核心虚拟地址空间内,然后通过访内指令来访问这些I/O内存资源。Linux的io.h头文件声明了ioremap()函数,用于将I/O内存资源的物理地址映射到核心虚拟地址空间(3GB-4GB)。驱动程序中使用的地址是虚拟地址,而外设的IO地址需要映射到虚拟地址。

参考资料:

  • 《Linux设备驱动开发详解(第2版)》
  • 《Linux设备驱动调试、移植》
  • 内核 Linux内核
赞(0)