从需求的角度去理解Linux之一:总线、设备和驱动

这是一篇有关如何学习嵌入式

这是作者精心撰写的经验总结,希望嵌入式Linux的学习者仔细领会,多读几遍也无妨。

转载请务必保留我们的公众号:嵌入式企鹅圈

一、软件、面向对象、软件框架

软件是为了解决现实问题而产生的,面向对象的软件思维是解决普遍现实问题的一种有效的抽象方法,而软件框架指的是用面向对象的思维去解决某种特定领域的问题而专门设计的一套行之有效的解决方案。

Android Framework、Windows MFC

frame buffer驱动等等都属于软件框架,它是针对特定的硬件体系需求以面向对象的思维去设计的一种软件解决方案,而且已经经过长时间的多平台验证。严格意义上,将子系统归入软件抽象组件会更加贴切,而软件框架表现为一组抽象组件及其组件实例之间的交互。软件框架和软件组件的特点都是解决特点领域问题,可以高度重用设计。

二、理解好软件需求是学习好软件框架的前提

对于学习着来说,软件需求(即软件要解决的问题)和软件框架都已经存在。但学习者往往只关注软件框架,,因为学习的终极目标也是为了掌握软件框架并使用它来解决自己的问题。对于一般的知识传播者来说(例如学校老师、机构培训师;教科书或者网络文献),往往也是着重于解读软件框架的组成和原理。

事实上,对于一个代码量有几万甚至几十万行代码量的软件框架,一开始接触就学习原理和代码并不是好事。这种做法很像是试图从软件框架的学习理解中得出软件需求,有太多的未知就接触源码,那理解过程会非常痛苦,往往会感到非常迷惑。

我认为,深入地理解好需求,再去理解软件框架会事半功倍。

甚至,当达到一定的水平后,知道了需求,完全可以去猜测软件框架的实现。

可以说,深入地理解硬件体系是理解好Linux总线设备驱动框架的前提!从面向对象的角度,我们要弄清楚,物理意义上的硬件是什么,而对应的软件对象是如何表述的。

以下阐述会重点讲述软件需求,作为以后分析框架的基础。

四、总线、驱动、设备

1.总线

2.设备

3.驱动

I2C EEPROM的读时序肯定是不一样的,访问时序的产生和控制也是驱动的一部分。

I2C EEPROM

4.再谈总线

总线在软件层面主要是负责管理设备和驱动。

if(match(device, driver) == OK)

driver->probe();

5.再谈驱动

int fd = open(“设备文件名”);

read(fd, buf, len);

write(fd, buf, len);

B1.设备要提供struct file_operation结构定义的接口:

struct file_operations {

int (*open) (struct inode *, struct file *);

int (*ioctl) (struct inode *, struct file *, …);

ssize_t (*read) (struct file *, char __user *,…);

ssize_t (*write) (struct file *, const char __user *, …);

…}

struct file_operations

Driver->probe()

I.探测设备是否正常

II.cdev_add(struct file_operations)注册操作接口

III. device_create()创建设备文件

6.继续谈驱动

struct file_operations中的接口都要做什么。我们挑几个主要的来讲讲,其余可以自己想象。

SOC datasheet

b. read

c. ioctl一般是对设备进行参数设置。

微信公众号:嵌入式企鹅圈

我们追求:

1.忠于Linux源码,百分百原创。

2.从上电第一行代码、系统第一行代码、模块第一行代码、应用第一行代码,深入讲解嵌入式软件生命周期。3 深刻理解硬件体系,聚焦软件层次设计、模块设计和框架设计。

版权声明:本文为博主原创文章,未经博主允许不得转载。

经验是由痛苦中粹取出来的

从需求的角度去理解Linux之一:总线、设备和驱动

相关文章:

你感兴趣的文章:

标签云: