LDD3 study note 1

2023-11-02 05:32
文章标签 note study ldd3

本文主要是介绍LDD3 study note 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LDD3 study note 1

-v0.1 2016.12.25 Sherlock init

LDD3的第三章介绍了一个简单的字符设备,实现了read/write/open/release等回调函数。
网上有LDD3自带的源代码,为了方便查找,我把官方源代码放到了: https://github.com/wangzhou/ldd3.git

自己实现的代码(第三章的简易字符设备)放在了:https://github.com/wangzhou/scull.git
本文只是记录一下实现中遇到的需要注意的地方,适合驱动入门的读者。

1. 这是一个什么设备

这是一个内存模拟出来的设备,简单说就是一些内存区域。在用户态,可以对相应的设备
文件read/write,相应的结果是读写这些内存区域中的数据。

这些内存的区域按照下面的数据结构组成:

    +-------+         +-------+          +-------+         +-------+   | 链表  +-------->+       +--------->+       +-------->+       |   ....|       |         |       |          |       |         |       |+---+---+         +-------+          +-------+         +-------+|               ...                                            +--------+      +-------------------------+                 | 指针    +----->+ quantum(e.g. 4000) Byte |+--------+      +-------------------------+|        +-----> ...                                            +--------+                                                  |        |                                                  +--------+                                                  ...                                                 +--------+                                                  |        |                                                  +--------+                                                  |        |                                                  +--------+                                                  

可以看到数据只是存在quantum的单元里的,其他的数据结构都是为了索引到这个结构。
这个数据结构的特点是,链表的长度是不固定的(quantum, 指针数组的大小是固定的), 这样
只要一直往这个设备里写数据,链表就不断的加长,同时不断的创建新的quantum, 把数据
存在里面。这个过程可以吃光系统里所有的内存。还有一个特点就是,设备一开始不会分配
quantum, 只有有数据需要写入,又没有quantum时才开始分配。所有分配的quantum在模块
卸载时释放掉。同时,设备的读写函数设计成如果一次读写的数据超过一个quantum的界限,
那么只读写当前一个quantum中的数据。

2. open/release/read/write的实现

open: 把scull_dev挂成struce file的数据,方便以后其他的操作找到设备
read/write: …
release: 关闭文件的时候要调用到, 对scull_dev不做处理。模块退出的时候, 释放设备对应的
内存, 这个操作应该是在exit函数里,不放到这里。

3. 调试宏

在代码中插入了一些断言的宏,方便调试。

4. 自动创建设备节点

LDD3源代码中是加了一个脚本创建设备节点,这里创建一个class, 然后在class里创建这个
字符设备对应的设备文件。模块加载时会自动在/dev下创建设备文件。

这篇关于LDD3 study note 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/328465

相关文章

(南京观海微电子)——GH7006 Application Note

Features ⚫ Single chip solution for a WXGA α-Si type LCD display ⚫ Integrate 1200 channel source driver and timing controller ⚫ Display Resolution: ◼ 800 RGB x 480 ◼ 640 RGB x 480 ⚫ Display int

chapter06 面向对象基础 知识点Note

文章目录 前言类的设计 属性和行为对象的内存解析 (堆 栈 方法区)类的成员之一 变量(属性) field类的成员之二 方法 method对象数组方法重载 overload可变个数的形参 语法糖方法的值传递机制递归关键字package importMVC设计模式import导入面向对象特征之一 封装类的成员之三 构造器JavaBeanUML类图 前言 ` 面向对象封装 面向

Study Plan For Algorithms - Part24

1. 包含min函数的栈 定义栈的数据结构,要求在该类型中实现一个 min 函数,能够获取栈的最小元素。在该栈中,调用 min、push 以及 pop 函数的时间复杂度均为 O (1)。 方法: class MinStack:def __init__(self):self.stack = []self.min_stack = [float('inf')]def push(self, x):sel

Cmake note

cmake 指定交叉编译工具 指定install安装目录 $CC=arm-linux-uclibcgnueabi-gcc cmake -DCMAKE_INSTALL_PREFIX=./output . $make $make install 删除camke cache文件: find . -iname ‘cmake’ -not -name CMakeLists.txt -exec rm -rf

chapter01 Java语言概述 知识点Note

JavaSE JavaEE JavaME 大数据 Java基础常用技术栈 mysql JDBC SSM spring+spring mvc+mybatis Linux nacos Hadoop Flink JAVA EE 消息队列 rabbitMQ docker 数据库 redis spring boot springcloud ssh struts + spring + hiber

chapter03 流程语句 知识点Note

@TOC 分支结构if-else 和 switch-case switch(表达式){case 常量值1:语句块1;//break;case 常量值2:语句块2;//break; // ...[default:语句块n+1;break;]} switch-case 执行过程: 第1步:根据switch中表达式的值,依次匹配各个case。如果表达式的值等于某个case中的常量值,则执行对

Study Plan For Algorithms - Part21

1. 二叉树的镜像 输入一个二叉树,输出它的镜像。 方法一: class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightdef mirrorTree(root):if not root:return Nonetemp, left,

work note

1:  sum_total 是什么意思?  没有百度出来 见proce:  rptMohthCdr

Self-study Python Fish-C Note20 P64to65

类和对象 (part 3) 本节主要介绍 类和对象的多态和鸭子类型、私有变量和 __slots__(原视频P64-65)\ 多态 多态是面向对象编程的三大特征之一,另外两个是封装和继承。多态是指同一个运算符、函数或对象,在不同场景下具有不同作用效果的情况。 Python 是一门动态语言,多态本来就是 Python的一种特性。 比如: 加号:两边都是数字的时候就是执行算术运算(相加),如果两边

note-Redis实战3 核心-数据安全与性能保障

助记提要 快照持久化的作用和缺点Redis创建快照的时机AOF文件同步的三种配置AOF文件重写的方式Redis复制的配置项和控制命令Redis复制过程 5步Redis主从链确认数据写入从服务器硬盘故障处理的两步Redis事务命令 5个Redis事务的特点 3点非事务型流水线使用性能测试工具评估客户端的性能 4章 数据安全与性能保障 持久化和复制 故障恢复 事务和流水线 4.1 快照持久