自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

不积硅步,无以至千里

cxiaolei的技术博客

  • 博客(15)
  • 收藏
  • 关注

原创 git 空目录提交

git 空目录自动提交.git同目录下创建文件.gitignore,并编辑写入如下内容:# git does not allow empty directories.# Yet, we need to add this empty directory on git.# To achieve that, we created this .gitignore file, so that...

2018-05-31 20:07:33 1565 1

原创 双向循环链表实践---学生管理系统

写在前面在看Linux源码时,经常会涉及到驱动和设备的匹配,如果想弄清楚匹配过程,就要理解双向循环链表。 这篇文章是理解了Linux的list.h文件后自己的实现应用。理论知识实现步骤链表的常用的节点操作如下: 增加、删除、查找首先定义一个结构体,存放学生的信息struct student { int number; char id[20];

2018-01-27 18:36:23 1632

原创 Linux设备驱动之timer定时器与延时

理论知识原理介绍软件意义上的定时器是依赖硬件定时器实现的,内核在时钟中断发生后检测各个定时器是否到期,如果到期,将到期的定时器的处理函数作为软中断的下半部执行。实质上,时钟中断处理程序会唤醒TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器。timer定时器的重要数据结构struct timer_list { /*

2018-01-26 14:03:47 1978

原创 Linux 对处理器物理地址/虚拟地址和ioremap函数的个人理解

写在前面在Linux驱动学习过程中,遇到了ioremap这个函数,参数是phy_addr,返回值是虚拟地址。 linux启动以后,由于mmu的存在,想要控制寄存器,要找到寄存器物理地址的虚拟地址映射(听着比较拗口)。 前几天遇到了一个问题,手上的板子是rk3399,64bit的cpu,ram是2GB。spi3寄存器的base addr是0xff350000, 通过ioremap函数可以找

2018-01-25 15:09:29 2434

原创 imx6 手动进入recovery

写在前面平板项目,需要音量减+关机键进入recovery模式。中间遇到了一些问题,记录一下。配置音量键uboot启动以后会检测音量上下键是否被按,然后进入不同的分支 board/freescale/common/recovery.c/* export to lib_arm/board.c */void check_recovery_mode(void){ if (ch

2018-01-25 14:33:20 1811

原创 Android recovery分区表

写在前面这篇文章以imx6q的android5.1为例,介绍recovery分区表的配置和加载分区表加载//bootable/recovery/roots.cppvoid load_volume_table(){ int i; int ret; fstab = fs_mgr_read_fstab("/etc/recovery.fstab");

2018-01-25 14:10:53 4575

原创 Linux设备驱动之字符设备---poll/select机制

写在前面poll机制是基于等待队列wait_queue的,我个人的理解,poll机制是对wait_queue的补充,等待队列会一直等待,直到condition满足条件并且wake_up队列头。 如果不满足,程序会一直阻塞。 poll机制让wait_queue有了超时机制,如果阻塞一定时间后会直接返回。poll机制中几个重要的函数设备驱动file_operations中要添加对应的.poll头

2017-12-26 15:47:41 1583

原创 Linux设备驱动之字符设备\interrupt\wait_queue实现

这篇文章是前几篇文章的总结,同时实现了中断,等待队列,都放在了字符设备的read中。 可以使用cat /dev/char_interrupt 类似于getevent 代码就不添加注释了,比较简单,下篇文章会在此基础上添加poll机制。#include <linux/kernel.h>#include <linux/init.h>#include <linux/module.h>#incl

2017-12-26 14:09:32 405

原创 Linux设备驱动之字符设备

写在前面字符设备是Linux设备驱动中最简单的设备,也是入门级驱动。网上已经有很详细的讲解,这篇文章侧重代码实现,提供了一个完整驱动框架的代码实现。理论知识重要结构体字符设备驱动结构:struct cdev { struct kobject kobj; struct module *owner; //一般为THIS_MODULE c

2017-12-25 17:12:42 393

原创 Linux设备驱动之阻塞与非阻塞---等待队列

废话一堆以前由于项目需要,临时做过windows的虚拟串口驱动,当时只实现了write,没有实现read(不需要read)。当时不知道如何实现read操作,因为不知道设备什么时候才会有数据,我驱动中该什么时机读呢?难道我read程序中要写一个while循环,一直去读取吗? 现在才明白,可以使用操作系统中的阻塞和非阻塞原理解决上面的问题。正题

2017-12-22 14:42:06 766

原创 Linux设备驱动之中断---tasklet使用示例

前几篇文章介绍了中断的原理、基本框架、上下部使用之工作队列、线程化中断,这篇文章介绍另一种方法—线程化中断 tasklet。 此方法运行在中断上下文,不可休眠,延时。我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_tasklet.c#include <linux/kernel.h>#include <linux

2017-12-22 10:36:15 2313

原创 Linux设备驱动之中断---thread使用示例

前几篇文章介绍了中断的原理、基本框架、上下部使用之工作队列,这篇文章介绍另一种方法—线程化中断 thread.我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_threaded.c#include <linux/kernel.h>#include <linux/module.h>#include <linux/

2017-12-22 10:27:45 1084

原创 Linux设备驱动之中断---work_queue使用示例

前两篇文章介绍了中断的原理和基本框架,但是实际使用过程中会用到中断上下文的编程方法,这里介绍work_queue.我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_work_queue.c#include <linux/kernel.h>#include <linux/module.h>#include <li

2017-12-21 21:28:48 2151

原创 Linux设备驱动之中断---基本代码框架

原理已经在上一篇文章中介绍了,这篇文章主要介绍最基本的使用方法,后面的文章有其他使用示例我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。#include <linux/kernel.h>#include <linux/module.h>#include <linux/interrupt.h>#include <linux/irq.h>#inc

2017-12-21 21:17:51 534

原创 Linux设备驱动之中断---介绍

中断中断是cpu在执行过程中,出现了某些突发情况,cpu必须暂停当前的任务,去处理紧急的事件,处理结束后继续处理刚才暂停的任务。分类:从中断源看:内部中断:来源于cpu内部,例如软件中断指令、溢出、除法错误等 外部中断:来源于cpu外部,外设提出请求从是否可屏蔽看:可屏蔽中断:中断被屏蔽后不再相应 不可屏蔽中断:NMI从跳转入口看:向量中断:cpu通常为不同的中断分配不同的中断入口地址,当检测到

2017-12-21 21:02:07 1372

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除