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.pswp.cn/web/95379.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/95379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac中进行适用于IOS的静态库构建

前沿: 进行C开发完成之后,需要将代码编译成静态库,并且在IOS的手机系统中执行,因此记录该实现过程. 1主要涉及内容 1.1 整体文件架构 gongyonglocalhost Attention % tree -L 2 . ├── build │ ├── __.SYMDEF │ ├── cmake_install.cmake │ ├── CMakeCache…

C++二维数组的前缀和

C二维数组的前缀和的方法很简单&#xff0c;可以利用公式res[i][j]arr[i][j]res[i-1][j]prefix[i][j-1]-res[i-1][j-1]。输入4 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16输出1 3 6 10 6 14 24 36 15 33 54 78 28 60 96 136#include<bits/stdc.h> using namespace std; int…

Wifi开发上层学习1:实现一个wifi搜索以及打开的app

Wifi开发上层学习1&#xff1a;实现一个wifi搜索以及打开的app 文章目录Wifi开发上层学习1&#xff1a;实现一个wifi搜索以及打开的app背景demo实现1.添加系统权限以及系统签名2.布局配置3.逻辑设计3.1 wifi开关的实现3.2 wifi扫描功能3.3 连接wifi总结一、WiFi 状态控制接口二…

【DSP28335 入门教程】定时器中断:为你的系统注入精准的“心跳”

大家好&#xff0c;欢迎来到 DSP28335 的核心精讲系列。我们已经掌握了如何通过外部中断来响应“外部事件”&#xff0c;但系统内部同样需要一个精准的节拍器来处理“内部周期性任务”。单纯依靠 DELAY_US() 这样的软件延时&#xff0c;不仅精度差&#xff0c;而且会在延时期间…

从零开始:用代码解析区块链的核心工作原理

区块链技术被誉为信任的机器&#xff0c;它正在重塑金融、供应链、数字身份等众多领域。但对于许多开发者来说&#xff0c;它仍然像一个神秘的黑盒子。今天&#xff0c;我们将抛开炒作的泡沫&#xff0c;深入技术本质&#xff0c;用大约100行Python代码构建一个简易的区块链&am…

网络通信IP细节

目录 1.通信的NAT技术 2.代理服务器 3.内网穿透和内网打洞 1.通信的NAT技术 NAT技术产生的背景是我们为了解决IPV4不够用的问题&#xff0c;NAT在通信的时候可以对IP将私网IP转化为公网IP&#xff0c;全局IP要求唯一&#xff0c;但是私人IP不是唯一的。 将报文发给路由器进行…

国内真实的交换机、路由器和分组情况

一、未考虑拥挤情况理想状态的网络通信 前面我对骨干网&#xff1a; 宜春城区SDH网图分析-CSDN博客 数据链路层MAC传输&#xff1a; 无线通信网卡底层原理&#xff08;Inter Wi-Fi AX201&#xff09;_ax201ngw是cnvio转pci-e-CSDN博客 物理层、数据链路层、网络层及传输层…

atomic常用类方法

Java中的java.util.concurrent.atomic包提供了多种原子操作工具类&#xff0c;以下是核心类及其方法&#xff1a;‌1. AtomicBoolean‌‌方法‌&#xff1a;get()&#xff1a;获取当前值set(boolean newValue)&#xff1a;强制设置值compareAndSet(boolean expect, boolean upd…

算法题打卡力扣第3题:无重复字符的最长子串(mid)

文章目录题目描述解法一&#xff1a;暴力解解法二&#xff1a;滑动窗口题目描述 解法一&#xff1a;暴力解 遍历每一个可能的子串&#xff0c;然后逐一判断每个子串中是否有重复字符。 具体步骤&#xff1a; 使用两层嵌套循环来生成所有子串的起止位置&#xff1a; 外层循环 i…

HTML5 简介和基础骨架

一、HTML5 简介HTML5 是 HTML&#xff08;超文本标记语言&#xff09;的第五个主要版本&#xff0c;于 2014 年 10 月由 W3C&#xff08;万维网联盟&#xff09;正式发布。它不仅是对 HTML4.01 和 XHTML 的升级&#xff0c;更是一套完整的 Web 技术标准&#xff0c;包含了新的标…

.NET技术深度解析:现代企业级开发指南

每日激励&#xff1a; “不要一直责怪过去的自己&#xff0c;他曾经站在雾里也很迷茫” &#x1f31f; Hello&#xff0c;我是蒋星熠Jaxonic&#xff01; &#x1f308; 在浩瀚无垠的技术宇宙中&#xff0c;我是一名执着的星际旅人&#xff0c;用代码绘制探索的轨迹。 &#x1…

苹果手机文本转音频,自行制作背诵素材

当你在学习一段专业内容或者背诵重要知识点时&#xff0c;是不是有时会觉得眼睛看久了疲惫&#xff0c;而且记忆效果也不太理想呢&#xff1f;利用手头的苹果手机或iPad&#xff0c;你可以轻松将文本内容生成音频文件&#xff0c;然后随时随地反复听&#xff0c;这对于备考人士…

电子电子技术知识------MOSFET管

电子电子技术知识------MOSFET管前言一、结构与符号二、工作原理1.小功率MOSFET&#xff08;横向导电&#xff09;2.电力MOS管三、基本特性总结前言 MOSFET是电力场效应晶体管的英文简写&#xff0c;又称功率mos管&#xff0c;mos管 一、结构与符号 二、工作原理 1.小功率M…

仿真波导中超短脉冲传输中的各种非线性效应所产生的超连续谱

在波导中&#xff0c;超短脉冲传输时会受到各种非线性效应的影响&#xff0c;从而产生超连续谱。这些非线性效应包括自相位调制&#xff08;SPM&#xff09;、交叉相位调制&#xff08;XPM&#xff09;、四波混频&#xff08;FWM&#xff09;等。基于MATLAB的仿真程序&#xff…

docker-compose的使用

目录 1-查看容器 2-查看docker镜像 3-运行两个容器 4-进入idea 编写docker-compose文件中的内容 5-编写配置文件 6-运行 7-docker-compose中的一些命令 启动服务 关闭服务 查看正在运行的容器 查看日志 重构新的服务 指令docker-compose 文件名 停止已运行的服务 启动 重启 1-查…

搭建分布式Hadoop集群[2025] 实战笔记

文章目录 一、实战目标 二、集群规划 1. 集群拓扑结构 2. 角色分配 说明: 三、环境准备 1. 修改 SSH 端口(安全加固) 操作步骤(所有节点执行): 2. FinalShell 连接配置 3. 防火墙配置 启动并配置 firewalld: 关闭并禁用防火墙(生产环境建议精细配置,测试环境可关闭):…

【自记录】Ubuntu20.04下Python自编译

因为需要新的Python版本&#xff0c;但是我们不希望修改系统原生的Python版本避免某些系统应用无法启动&#xff0c;因此自建一个干净的路径引入Python。 1.编译 以下在aarch64下测试&#xff0c;x64下可能有差异 必须把相关的devel包安装完毕&#xff0c;否则python可能缺功能…

Linux - 进程切换

&#x1f381;个人主页&#xff1a;工藤新一 &#x1f50d;系列专栏&#xff1a;C面向对象&#xff08;类和对象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;终会照亮我前方的路 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 文章目录进…

机器算法(五)模型选择与调优

一 交叉验证1 保留交叉验证HoldOutholdOut Cross-validation(Train-Test Split)在这种交叉验证技术中&#xff0c;整个技术集被随机划分为训练集和验证集。根据经验法则&#xff0c;整个数据集的近70%被用作训练集&#xff0c;其余30%被用作验证集&#xff0c;也就是最常使用的…

Ubuntu 服务器实战:Docker 部署 Nextcloud+ZeroTier,打造可远程访问的个人云

本次部署基于 Ubuntu 系统&#xff08;桌面版 / Server 版通用&#xff0c;核心操作一致&#xff09;&#xff0c;硬件配置参考如下&#xff0c;低配置主机可顺畅运行&#xff1a; ubuntu服务器配置如下 硬件类型具体型号/参数CPUIntel Core i3-6100T内存条8GB&#xff08;DD…