当前位置: 首页 > news >正文

Linux驱动开发学习笔记

第1章 Linux驱动开发的方式

  1. mmap映射型设计方法。【不推荐】
    • 将芯片上的物理地址映射到用户空间的虚拟地址上,用户操作虚拟地址来操作硬件。
  2. 使用文件操作集(file_operatiopns)设计方法。【极致推荐】
  3. platfrom总线型设置方法。【比较流行】
  4. 设备树。【推荐】

第2章 Linux设备分类

2.1 字符设备

  1. LED
  2. 显卡
  3. 声卡
  4. USB
  5. 鼠标
  6. 键盘
  7. 触摸屏

2.1.1 字符设备特点

  1. 按字节流顺序访问

    • 数据以字节为单位进行读写,像“流”一样,通常不支持随机访问。
    • 例如:串口、键盘、鼠标、LED 驱动等。
  2. 不经过文件系统缓冲(可选)

    • 可以直接进行 read()write() 系统调用,绕过内核页缓存(也可以使用缓存)。
    • 支持非阻塞 I/O、异步 I/O。
  3. 无固定块大小概念

    • 传输单位是字节或任意大小的数据块,不像块设备固定为 512B 或 4KB。
  4. 设备文件通常位于 /dev

    • 如 /dev/ttyS0/dev/leds/dev/mychardev
    • 主设备号(major)标识设备类型,次设备号(minor)标识具体设备。
  5. 常见操作函数

    • openclosereadwriteioctl 等。
  6. 不需要文件系统支持即可访问

    • 可以直接通过系统调用操作设备文件

2.2 块设备

  1. 硬盘
  2. nand flash
  3. SD卡
  4. U盘
  5. eMMC卡

2.2.1  块设备特点

  1. 以“块”为单位进行数据传输

    • 块大小通常是 512 字节、4KB 等,必须是 2 的幂。
    • 所有 I/O 操作都对齐到块边界。
  2. 支持随机访问

    • 可以直接读写任意一个数据块(如第 1000 个块),适合存储设备。
  3. 通过内核缓冲区(页缓存)进行 I/O

    • 块设备 I/O 通常经过 Buffer Cache 或 Page Cache,提高性能。
    • 支持写缓存、预读等优化。
  4. 通常用于存储系统

    • 是文件系统(如 ext4、XFS)的底层载体。
  5. I/O 请求被放入请求队列(request queue)

    • 内核可以对请求进行合并、排序(电梯算法),提高效率。
  6. 设备文件在 /dev

    • 如 /dev/sda/dev/sda1/dev/mmcblk0
  7. 可被挂载为文件系统

    • 例如:mount /dev/sda1 /mnt

块设备驱动带有缓存。

2.3 网络设备

  1. 无线网卡
  2. 有线网卡

2.3.1 网络设备的特点

  1. 不支持文件操作接口

    • 没有 open()read()write() 等系统调用。
    • 不创建传统意义上的设备文件(如 /dev/eth0 不存在)。
  2. 通过套接字(socket)接口访问

    • 用户通过 socket()send()recv()ioctl() 等进行网络通信。
  3. 数据以“包”(packet)为单位传输

    • 面向数据包,不是字节流或块。
    • 支持协议栈(如 TCP/IP)。
  4. 双向传输:发送和接收队列

    • 有独立的发送队列(TX queue)和接收队列(RX queue)。
    • 使用中断或 NAPI 处理数据包。
  5. 由内核网络子系统管理

    • 属于 net_device 结构体管理,不是 inode
    • 通过 ifconfigip 命令配置。
  6. 支持多种协议

    • 如以太网、Wi-Fi、PPP、虚拟网卡(tun/tap)等。
  7. 没有设备号(major/minor)

    • 不属于字符或块设备,因此不参与 dev_t 编号系统。

第3章 设备驱动框架

3.1 驱动框架

3.1 程序调用流程

第4章 重要驱动函数

4.1 调试信息

级别名称(宏)数字描述(用途)
KERN_EMERG0紧急(Emergency):系统崩溃,几乎无法运行。如:"System is down"
KERN_ALERT1警报(Alert):必须立即处理的问题。如:"Kernel panic"
KERN_CRIT2严重(Critical):严重错误,如硬件故障、关键服务失败。
KERN_ERR3错误(Error):运行时错误,影响功能但系统仍可运行。
KERN_WARNING4警告(Warning):潜在问题,可能出错,但尚未失败。
KERN_NOTICE5注意(Notice):正常但重要的情况,需引起注意。
KERN_INFO6信息(Informational):普通信息,如设备初始化成功。
KERN_DEBUG7调试(Debug):调试信息,仅开发时使用,生产环境通常关闭。
printk(KERN_INFO "This is an info message\n");
printk(KERN_ERR "Failed to allocate memory\n");
printk(KERN_DEBUG "Debug: i = %d\n", i);

第5章 自动生成设备文件

http://www.dtcms.com/a/363016.html

相关文章:

  • 【C++框架#1】gflags 和 gtest 安装使用
  • 情况三:已经 add ,并且也 commit 了
  • 10 51单片机之DS1302实时时钟
  • 2025 年普通人还可以期待 NFT 交易市场吗?
  • 第四届可再生能源与电气科技国际学术会议(ICREET 2025)
  • 【数学建模学习笔记】时间序列分析:LSTM
  • 碳酸钆:稀土家族里看不见的科技推手
  • Sentinel vs Resilience4j vs Bucket4j:分布式限流方案对比与实战
  • [re_2] rpc|http|nginx|protobuf|
  • 腾讯云上有性能比较强的英伟达GPU
  • Java集合源码解析之ArrayList
  • DELPHI 利用OpenSSL实现加解密,证书(X.509)等功能
  • PFLOTRAN 模拟多相、多组分、反应性流动与传输过程的高性能并行数值模拟软件
  • spring boot驴友结伴游网站的设计与实现(代码+数据库+LW)
  • 深入分析 json2(新)与标准的 jsonrpc的区别
  • Maven + JUnit:Java单元测试的坚实组合
  • Qt6实现绘图工具:12种绘图工具全家桶!这个项目满足全部2D场景
  • 机器学习 - Kaggle项目实践(7)NLP with Disaster Tweets 灾难消息
  • WPF迁移avalonia之图像处理(一)
  • STM32HAL 快速入门(十六):UART 协议 —— 异步串行通信的底层逻辑
  • 网络编程 socket——TCP
  • (CVPR-2024)VideoBooth:基于扩散的视频生成与图像提示
  • HTML5 简介和基础骨架
  • Linux 入门到精通,真的不用背命令!零基础小白靠「场景化学习法」,3 个月拿下运维 offer,第二十四天
  • 在 Qt 的 .pro 文件中设置警告级别和 C++11 标准
  • .NET技术深度解析:现代企业级开发指南
  • PCB传输线的拓扑结构
  • 启动 Springboot 方式不同,导致无法读取中文文件名的文件
  • 基于单片机颜色识别分拣系统设计
  • 一款为开发者而生的开源全栈LLMOps平台