摘要: 我为什么写博客? 最开始写博客的动机,只是觉得笔记APP太麻烦,写博客对个人的好处很多,比如,发布之后的文章使用浏览器就可以看,同时,写博客的过程其实也是梳理自己知识体系的过程,经常是,本来认为懂的知识,写着写着就发现好像不那么懂了,或者为了文章更有说服力,随手做了个实验,发现和自己已学的知识有出入阅读全文
posted @ 2017-06-10 22:09 Abnor 阅读(20) 评论(0) 编辑
摘要: 我为什么写博客? 最开始写博客的动机,只是觉得笔记APP太麻烦,写博客对个人的好处很多,比如,发布之后的文章使用浏览器就可以看,同时,写博客的过程其实也是梳理自己知识体系的过程,经常是,本来认为懂的知识,写着写着就发现好像不那么懂了,或者为了文章更有说服力,随手做了个实验,发现和自己已学的知识有出入阅读全文
posted @ 2017-06-10 22:09 Abnor 阅读(20) 评论(0) 编辑
摘要: 在面向对象的程序设计中,类之间有6中关系,分别是 继承, 组合, 聚合,关联, 依赖,实现 ,如果使用C语言实现,上面的这些关系通过"结构体包含结构体、结构体包含结构体指针以及函数指针等语法实现",C语言本身的语法并不支持这些逻辑关系的实现,所以使用C语言实现面向对象的程序设计很多时候需要我们自己来阅读全文
posted @ 2017-04-07 14:40 Abnor 阅读(176) 评论(0) 编辑
摘要: Linux素来以其强大的网络功能著名,同时, 网络设备也作为三大设备之一, 成为Linux驱动学习中必不可少的设备类型, 此外, 由于历史原因, Linux并没有强制对网络设备贯彻其"一切皆文件"的思想, 网络设备不以/dev下的设备文件为接口,用户程序通过socket作为访问硬件的接口。本文以Li阅读全文
posted @ 2017-03-28 08:23 Abnor 阅读(301) 评论(0) 编辑
摘要: MTD(Memory Technology Device)即常说的Flash等使用存储芯片的存储设备,MTD子系统对应的是块设备驱动框架中的设备驱动层,可以说,MTD就是针对Flash设备设计的标准化硬件驱动框架。本文基于3.14内核,讨论MTD驱动框架。 MTD子系统框架 设备节点层 :MTD框架阅读全文
posted @ 2017-03-25 08:53 Abnor 阅读(199) 评论(0) 编辑
摘要: 磁盘驱动就是实现磁盘空间和内存空间数据上的交互 ,在上一篇中我们讨论了内存端的Page Segment Block Sector相关的概念,本文以3.14内核为例,讨论这部分内存是如何被组织管理的。我们知道,为了解决CPU和内存的速度不匹配,计算机系统引入了Cache缓存机制,这种硬件Cache的速阅读全文
posted @ 2017-03-24 14:13 Abnor 阅读(288) 评论(0) 编辑
摘要: 块设备是Linux三大设备之一,其驱动模型主要针对磁盘,Flash等存储类设备, 块设备(blockdevice) 是一种具有一定结构的随机存取设备,对这种设备的读写是按 块 (所以叫块设备)进行的,他使用缓冲区来存放暂时的数据,待条件成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。 作为存阅读全文
posted @ 2017-03-21 07:30 Abnor 阅读(690) 评论(0) 编辑
摘要: "./drivers/usb/usb skeleton.c"是内核提供给usb设备驱动开发者的海量存储usb设备的模板程序, 程序不长, 通用性却很强,十分经典, 深入理解这个文件可以帮助我们更好的理解usb子系统以及usb设备驱动框架, 写出更好的usb海量存储设备驱动。 匹配前 既然是一个usb阅读全文
posted @ 2017-03-14 08:14 Abnor 阅读(330) 评论(0) 编辑
摘要: USB总线是一种典型的热插拔的总线标准,由于其优异的性能几乎成为了当下大小设备中的标配。 USB的驱动可以分为3类:SoC的USB控制器的驱动,主机端USB设备的驱动,设备上的USB Gadget驱动,通常,对于USB这种标准化的设备,内核已经将主机控制器的驱动编写好了,设备上的Gadget驱动通常阅读全文
posted @ 2017-03-10 09:36 Abnor 阅读(681) 评论(2) 编辑
摘要: "./drivers/i2c/busses/i2c s3c2410.c"是3.14.0内核中三星SoC的i2c控制器驱动程序, 本文试图通过对这个程序的分析, 剥离繁复的细节, 总结一套编写i2c主机控制器驱动的框架以及一个分析内核驱动的流程. 匹配之前 1291 将主机控制器驱动在系统启动的时候就阅读全文
posted @ 2017-03-09 09:28 Abnor 阅读(198) 评论(0) 编辑
摘要: 如果你也遇到了填充了id_match_table,compitible怎么看都一样,但probe就是不执行(让我哭一会),你可以回头看一下上一篇的模板,我们这里 虽然使用的是设备树匹配,但和platform的设备树匹配只填充i2c_match_table不同,i2c_driver的设备树匹配需要同时阅读全文
posted @ 2017-03-08 08:02 Abnor 阅读(485) 评论(0) 编辑
摘要: 另外一种驱动 应用层除了使用上述的使用i2c_driver接口来访问i2c设备,Linux内核还提供了一种简单粗暴的方式——直接通过虚拟i2c设备驱动的方式,即上一篇中的i2c dev提供的方式,这种方式使用的i2c_client是随着open的操作临时创建的虚拟的client,即不是挂接在i2c_阅读全文
posted @ 2017-03-08 08:01 Abnor 阅读(245) 评论(0) 编辑
摘要: i2c总线是一种十分常见的板级总线,本文以linux3.14.0为参考, 讨论Linux中的i2c驱动模型并利用这个模型写一个mpu6050的驱动, 最后在应用层将mpu6050中的原始数据读取出来 i2c子系统框架 下图就是我理解的i2c驱动框架示意图, 类似中断子系统, i2c子系统中也使用一个阅读全文
posted @ 2017-03-07 09:22 Abnor 阅读(563) 评论(0) 编辑
摘要: 为uboot添加网卡功能可以让uboot通过tftp下载内核, 方便我们的开发, 对于网卡功能的移植,我们依然在在一遍又一遍的实践这个uboot改造的套路。 1. 找运行逻辑 ,即插入代码的位置。 2. 根据运行逻辑编写功能代码。 3. 找配置逻辑 ,即修改哪些文件使配置生效。 4. 根据配置逻辑修阅读全文
posted @ 2017-03-06 08:24 Abnor 阅读(120) 评论(1) 编辑
摘要: 串口作为一种非常简单的通信方式,才是嵌入式系统调试的王道,通过设置串口输出,我们可以将程序运行的情况直接通过串口线输出到屏幕上,对于这种异常重要的功能,uboot原生就提供了支持,但为此我们需要做一些准备工作, 流程还是那套: 1. 找运行逻辑 ,即插入代码的位置。 2. 根据运行逻辑编写功能代码。阅读全文
posted @ 2017-03-05 14:04 Abnor 阅读(175) 评论(0) 编辑
摘要: 这一节主要讨论1个问题:点灯。点灯是实际开发中,特别是裸板开发中常见的调试手段,相当于主机开发中漫天飞舞的printf/printk。为了追踪程序的现场执行情况,很多时候我们都使用点一个灯的方法来进行初步的判断。如果你把刚才编译的程序烧录到SoC,你又怎么知道这个Uboot有没有工作呢?所以,我们在阅读全文
posted @ 2017-03-05 10:40 Abnor 阅读(97) 评论(0) 编辑