ldd3_基础知识

设备驱动简介 -- ldd3读书笔记 阅读详情
Linux Device Drivers第三版,但一直没仔细拜读.最近决定仔细研读它以学习Linux设备驱动程序. 在这里归纳学习笔记. 不知道自己有没有恒心把它看完,总之better later than never. 就让这一系列的笔记伴随我学习ldd3的漫漫长路吧ldd3笔记_1_基础知识 - challengezcy - challengezcy的博客

ldd3介绍的是2.6.10版的内核

An Introduction to Devices Drivers

驱动扮演的角色

Driver is a software layer that lies between the applications and the actual device.

Mechanism & Policy

" the role of a device driver is providing mechanism, not policy".

mechanism和policy也是隐藏在unix设计背后的经典思想. 
mechanism: What capabilities are provided.
policy          : How these capabilities can be used. 
e.g1:   KDE or GNOME: 它们都的基础都是X server. KDE和GNOME属于policy. 它们所关注的是使用什么样的图形界面, 用户面板. 却无须考虑底层硬件. X server属于mechanism, 它与硬件交互, 并为用户程序提供接口. 所以不同的图形界面可以存在于同一台主机上.

e.g2: TCP/IP suite
OS提供socket接口, 应用程序则可以使用各种协议. socket就是mechanism, 应用程序则关注policy. 经典的OSI七层模型或TCP/IP四层模型也是这个思想.

Device Drivers: policy free, only provide mechanism!
but, sometimes, u may lay some policies on them.

和驱动一起发布的可能还会有一些库, 应用程序. 库和应用程序就要涉及到policies了.  开发者提供的库或应用程序中的policy即默认的policy.


Kernel可划分为下列功能单元

1, 进程管理: 进程调度, 资源分配, 进程间通信.

2, 内存管理: 其实也算是资源分配的一部分.

3, 文件系统: 管理, 组织物理媒介上数据的方法.

4, 设备控制: 设备驱动(ldd3所关注的)

5, 网络: 实质上是进程间通信. 但它不局限于一个特定的进程. 它关注收/发packets, 路由, 地址解析...

可加载模块(lodable modules)

module: 可实时加载到内核中的代码, 它可动态连接到内核(insmod, rmmod).

设备驱动就是module的代表, 但module还包括文件系统等等.

当然, 你也可以在开机后关闭模块的功能. 2.2版之后的内核支持在开机后关闭对加载module的支持.

设备, 模块的分类

针对不同的设备类型(实际上也就是文件类型, 可参考APUEv2, p88), 模块分为这些类型: character module, block module, network interface. 每种类型的模块驱动对应类型的设备.

字符设备: 以字节流的形式被访问的设备.
e.g: /dev/console : 文本控制台. /dev/ttyS0 : 串口

它通过文件系统节点被访问. e.g: /dev/tty1, /dev/lp0

字符设备与一般文件(regular file)的区别: 可以在一般文件中前后移动(lseek), 但只能顺序访问字符设备. 当然, 也有特例: frame grabbers. 
块设备: 能支持文件系统的设备.

传统的UNIX: 只能以block(512B)为单位访问块设备.
Linux: 能以访问字符设备的方式访问块设备, 即以字节文单位访问块设备.

Linux中字符设备与块设备的区别:
1, 内核内部对数据的组织和管理不同, 但这对驱动开发者来说是透明的.
2, 它们与内核之间的接口不同: 使用两套不同的interface. 

网络接口: 能与其他主机通信的设备.
它可以是硬件设备, 也可以是软件设备, 比如lo. (参考TCP/IP详解p26)

网络接口只管收发数据包, 而不管这些数据包被什么协议所使用.

不同于字符设备和块设备, 网络接口没有对应的文件系统节点. 虽然可以通过类似eth0这样的"文件名"来访问网络接口, 但文件系统节点中却没有针对网络接口的节点.

内核与网络接口之间的通信也不同于内核与字符/块设备之间的通信(read, write), 它们之间使用特定的传输数据包的函数调用.

另, 也有一些module不能严格地划分到上面的类型. 比如 USB module: 它工作在内核的USB子系统之上, 而实际的USB设备可以是字符设备, 块设备, 也可以是网络接口.
ldd3学习笔记--环境搭建(构建linux2.6.10源码树) ldd3《Linux设备驱动程序(第三版)》使用的内核是linux-2.6.10,所以想要搭建一个该版本的内核,方便学习。 //************************************************************************************************* 环境:虚拟机中运行Fedora Core 3 下载地址: Fedora 阅读详情

相关推荐

【原创】【专栏】《Linux设备驱动程序》--- LDD3源码目录结构和源码分析经典链接

【原创】LDD3源码目录结构和源码分析经典链接 http://blog.chinaunix.net/uid-25194149-id-3361623.html http://blog.youkuaiyun.com/column/details/ldd3.html

GengLUT 4287

探秘LDD3:一个互动的Linux设备驱动程序开发指南

是一个开源项目,基于经典的《Linux Device Drivers, Third Edition》(简称LDD3)书籍,提供了一种交互式的方式来学习和实践Linux设备驱动程序开发。本文将从技术角度深入解析该项目,并阐述其用途与特点,邀请更多的开发者加入其中。 ## 项目简介 LDD3项目是一个在线版本的Linux设备驱动教程,由Javier Martinez提供了一个可执行的环境,让你能够...

gitblog_00079的博客 779

Ldd3 学习笔记1 — 环境搭建

1、ldd3源代码下载          Linux设备驱动程序3 官方地址:http:www.oreilly.com,源代码下载地址:http://www.oreilly.com.cn/codeexample/ldd3sc/ 2、环境搭建         配套代码的linux内核代码版本是2.6.10,对应ubuntu的版本是ubuntu5.04,2005年发布的。现在估计网上

fangchongbory的专栏 4042

LDD3笔记基础知识

http://zzzppp.cublog.cn/ 去年(2005)9月2号就买了Linux Device Drivers第三版,但一直没仔细拜读.最近决定仔细研读它以学习Linux设备驱动程序. 在这里归纳学习笔记. 不知道自己有没有恒心把它看完,总之better later than never. 就让这一系列的笔记伴随我学习ldd3的漫漫长路吧 ldd3介绍的是2.6.10版的内核

smile_cc的专栏 1326

【Linux】LDD3中sbull源码编译问题梳理

LDD3,linux设备驱动第三版用的内核是2.6.10,在编译的时候我用的是2.6.32 2.6.32相比2.6.10在块设备驱动上,简直是动了大手术,编译基本满满错误,这里梳理一下我遇到全部的错误 很多都是网上找的资料,只有小部分是我写的: 1、包含文件 错误:没有#include 改法:删掉 2、整一个块设备驱动的struct block_device_operation

jyyyyyy 1033

LDD3(第三版).PDF

由于对Linux设备驱动程序设计的需求,所以前段时间在网上下载了LDD3的HTML格式文档,在看的时候感觉不太好看,同时为了打印方便,把它转化为PDF格式,所以在此与大家一起分享。 由于本资料不是本人自创,也是来自于网络,所以不要求资源分,但是,请不要用于任何商业行办,如果对此书真的感兴趣,请购买正版。 同时,由于本人的时间有限,没有对所有的章节进行重新排版,所以,请原谅!!!!

ldd3 文章列表

ldd3  文章 http://blog.youkuaiyun.com/wu5795175/article/category/1109793?viewmode=contents http://blog.youkuaiyun.com/songqqnew/article/details/6770927 http://blog.youkuaiyun.com/wishmiss/article/details/5

su_ocean16的专栏 461

从MC到DC:三维重建算法的核心原理与实战对比

本文深入对比了三维重建领域两大经典算法Marching Cubes(MC)与Dual Contouring(DC)的核心原理与实战表现。MC算法原理直观、实现简单,但存在特征丢失和二义性问题;DC算法通过求解二次误差函数(QEF)和利用法向量信息,能更好地保留模型的尖锐特征,但计算更复杂。文章结合医学影像处理实例,为开发者根据速度、精度和特征保真度需求选择合适算法提供了清晰指南。

weixin_29251131的博客 1032

Linux命令之ldd命令

LDD用来打印或者查看程序运行所需的共享库,常用来解决程序因缺少某个库文件而不能运行的一些问题。ldd不是一个可执行程序,而只是一个shell脚本。

月生的静心苑 1万+

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

西门子触摸屏教程wincc flexible2008 sp5 Smart V3 V4中文版软件

liang007dudu的博客 1万+

士兰微SC7A20H三轴加速度计在智能穿戴设备中的运动检测实践

本文详细介绍了士兰微SC7A20H三轴加速度计在智能穿戴设备中的运动检测实践,包括其工作原理、硬件设计避坑指南、运动检测算法优化、低功耗设计及校准测试技巧。SC7A20H凭借±16g超宽量程和0.004g高精度,成为智能穿戴设备的运动感知核心,适用于计步、6D方向检测等场景,显著提升用户体验。

weixin_29168153的博客 739

Linux Device Drivers 3 (LDD3) 项目教程

Linux Device Drivers 3 (LDD3) 是一个开源项目,旨在提供与现代内核兼容的设备驱动程序示例。该项目基于《Linux Device Drivers 3》一书中的示例代码,并对其进行了更新,以确保这些示例能够在最新的Linux内核版本中正常编译和运行。 LDD3 项目的主要目标是帮助开发者理解和编写Linux设备驱动程序。通过提供经过验证的示例代码,开发者可以快速上手并深入

gitblog_00506的博客 818

Super4PCS文章阅读笔记

Super4PCS阅读笔记 Super4PCS阅读笔记 前言 前言 今天给大家分享一下点云配准四点法4PCS0的变种——Super4PCS。此算法的原文在:Super4PCS: Fast Global Pointcloud Registration via Smart Indexing。稍微我也会写一篇关于如何使用这篇文章的里所提供的代码进行点云粗配准。关于四点法...

Vodake的博客 4539

ubuntu ldd

以上三种方法都可以用于查看动态库依赖的其他动态库,其中ldd命令是最简单和常用的方法。readelf和objdump提供了更详细的信息,但需要一些命令行的操作技巧。选择哪种方法可以根据个人习惯和实际需求来决定。

xie__jin__cheng的博客 1291

[STC32G144K246入门第三步]驱动串口收发(接收不定长数据)

本文介绍了STC32G144K246单片机的串口功能配置与使用。该芯片具有8组独立USART,支持异步/同步模式,各串口可独立配置波特率并支持DMA传输。重点讲解了串口寄存器配置方法,包括引脚设置、波特率计算和中断处理。特别指出RX引脚需配置为开漏或准双向口以避免接收乱码。还介绍了通过定时器实现不定长数据接收的技术方案,并提供了完整的初始化代码和中断处理函数示例。文中包含串口时序图、寄存器配置表等实用参考信息,适合嵌入式开发者快速上手多串口应用开发。

sinat_58149788的博客 194

【Bug已解决】Auto mode cannot determine the safety of an action — Claude Code 自动模式安全判断失败解决方案

将已知安全的操作添加到白名单,分类器不再拦截这些操作。# 步骤 1:编辑 Claude Code 配置"Read","Write"EOF# 步骤 2:白名单中的操作将自动通过# 不在白名单中的操作仍需分类器判断# 步骤 3:重启 Claude Codeclaude方案适用场景推荐指数难度方案一:手动审批偶发回退,安全优先⭐⭐⭐⭐⭐低方案二:/compact 压缩上下文超限导致⭐⭐⭐⭐低方案三:拆分步骤复杂操作触发⭐⭐⭐⭐低方案四:跳过审批隔离环境,CI/CD。

博客 1万+

编译LDD3的scull驱动问题总结

由于Linux内核版本更新的原因,LDD3(v2.6.10)提供的源码无法直接使用,下面是本人 编译scull源码时出现的一些问题及解决方法。 编译环境:CentOS 6.3(kernel version 2.6.32) 编译错误: make -C /lib/modules/2.6.32-279.14.1.el6.i686/build M=/mnt/HappyStudy/MyDesig

xiahouzuoxin 3706

新版CKA2020-2020-10-13-真题试卷

2020年10月13日 真题 新版CKA考试已于2020年9月1日正式上线! 考试模式:线上考试 考试时间:2小时 认证有效期:3年 软件版本:Kubernetes v1.19 重考政策:可接受1次重考 经验水平:中級 题目数量:17题 01 Task - 英文 Create a new ClusterRole named deployment-clusterrole that only allows the creation of the following resource types: Depl

随笔记录-分享&记忆 2394

ldd3开始学习(修改)

 ldd3  的 源码树建的真烦,搞了好久都没有弄出来,不过很高兴,今天终于弄出来了,心里面真高兴,而且是最戏剧性的是我正打算看 ldd2 了 ,而且我系统盘和书都找好了。正当我用 2.6 的内核最后一次编译的时候,却给我弄成功了 ,你可知道我这个可是弄了一个多星期阿(可能是我太笨了),发誓一定要把这本书学好,不然对不起这次的经历阿,千万不要放弃,gogo 加油! 我大致记下这次的 步骤,以防以后

Kevin1217的专栏 2258

【Unity 实用工具篇】 | Unity网格破碎插件 unity-fracture

前面写过一篇Unity中物体破碎效果的插件:【Unity 实用工具篇】 | Unity物体破碎效果 OpenFracture 本文介绍一个另外的工具unity-fracture,也可以实现网格破碎效果,且功能与OpenFracture略有差异。

努力前行,总会成为自己心中的那道光 1万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Linux :ldd 命令的介绍与使用

Linux :ldd 命令的介绍与使用

Cappuccino Blog 3万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

再读LDD3前言

毕业两年了,这一段时间对于未来的技术方向以及后续的个人发展都有一些迷茫。毕业后的工作多是与平台相关,驱动相关,现在决定在这一段迷茫期把LDD3这本经典书在读一遍,并利用博客把读的过程记录下来,按章节为单位,由于个人语言组织能力不强,主要是摘抄每张的主题,中心思想。用文章记录,一个是督促自己要看下去,另一个是作为以后备忘查询。 第一次看这个书是大三的时候,那时候很多东西不懂,虽然看完了,整本书的学

haomcu的专栏 1269

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Ldd3 学习笔记2 — simple

翻ldd3书看得云里雾里的,幸好有源码,可以找到源码,编译一下,自己动手学习ldd3到底讲了些什么知识。找到一份源码后,运行起来再说,不管是白猫还是黑猫,要抓老鼠,你得先得给我跑起来,哈哈! 上一篇给出了ldd3下载地址,下载examples.tar.gz解压有以下子目录 include Makefile pci scullc scullv simple

fangchongbory的专栏 2956

《Linux总线、设备与驱动》ldd3中demo分析

一、古老方式(不支持热插拔) 1.开机前硬件设备已经插入总线; 2.操作系统加载总线驱动,开始扫描设备、并为其申请struct device结构,最后挂入总线驱动devices链表; 3.操作系统加载设备驱动,注册struct device_driver结构,然后去总线驱动的devices链表中遍历没有绑定driver的设备(即struct device中struct device_driv

程序改变生活 2179
上一篇: ldd3笔记_加载模块方法_模块程序组成
下一篇: ioctl函数的作用与使用
bamboolsu
博客等级 码龄22年 200粉丝 394原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值