- 博客(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
1618
1
原创 双向循环链表实践---学生管理系统
写在前面在看Linux源码时,经常会涉及到驱动和设备的匹配,如果想弄清楚匹配过程,就要理解双向循环链表。 这篇文章是理解了Linux的list.h文件后自己的实现应用。理论知识实现步骤链表的常用的节点操作如下: 增加、删除、查找首先定义一个结构体,存放学生的信息struct student { int number; char id[20];
2018-01-27 18:36:23
1801
原创 Linux设备驱动之timer定时器与延时
理论知识原理介绍软件意义上的定时器是依赖硬件定时器实现的,内核在时钟中断发生后检测各个定时器是否到期,如果到期,将到期的定时器的处理函数作为软中断的下半部执行。实质上,时钟中断处理程序会唤醒TIMER_SOFTIRQ软中断,运行当前处理器上到期的所有定时器。timer定时器的重要数据结构struct timer_list { /*
2018-01-26 14:03:47
2103
原创 Linux 对处理器物理地址/虚拟地址和ioremap函数的个人理解
写在前面在Linux驱动学习过程中,遇到了ioremap这个函数,参数是phy_addr,返回值是虚拟地址。 linux启动以后,由于mmu的存在,想要控制寄存器,要找到寄存器物理地址的虚拟地址映射(听着比较拗口)。 前几天遇到了一个问题,手上的板子是rk3399,64bit的cpu,ram是2GB。spi3寄存器的base addr是0xff350000, 通过ioremap函数可以找
2018-01-25 15:09:29
2531
原创 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
1950
原创 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
4815
原创 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
1735
原创 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
469
原创 Linux设备驱动之字符设备
写在前面字符设备是Linux设备驱动中最简单的设备,也是入门级驱动。网上已经有很详细的讲解,这篇文章侧重代码实现,提供了一个完整驱动框架的代码实现。理论知识重要结构体字符设备驱动结构:struct cdev { struct kobject kobj; struct module *owner; //一般为THIS_MODULE c
2017-12-25 17:12:42
446
原创 Linux设备驱动之阻塞与非阻塞---等待队列
废话一堆以前由于项目需要,临时做过windows的虚拟串口驱动,当时只实现了write,没有实现read(不需要read)。当时不知道如何实现read操作,因为不知道设备什么时候才会有数据,我驱动中该什么时机读呢?难道我read程序中要写一个while循环,一直去读取吗? 现在才明白,可以使用操作系统中的阻塞和非阻塞原理解决上面的问题。正题
2017-12-22 14:42:06
890
原创 Linux设备驱动之中断---tasklet使用示例
前几篇文章介绍了中断的原理、基本框架、上下部使用之工作队列、线程化中断,这篇文章介绍另一种方法—线程化中断 tasklet。 此方法运行在中断上下文,不可休眠,延时。我使用的硬件是imx6q,原理都一样。原来的beep引脚是output模式,电路上把它改成了按键。下面程序的文件名为interrupt_tasklet.c#include <linux/kernel.h>#include <linux
2017-12-22 10:36:15
2472
原创 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
1201
原创 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
2254
原创 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
598
原创 Linux设备驱动之中断---介绍
中断中断是cpu在执行过程中,出现了某些突发情况,cpu必须暂停当前的任务,去处理紧急的事件,处理结束后继续处理刚才暂停的任务。分类:从中断源看:内部中断:来源于cpu内部,例如软件中断指令、溢出、除法错误等 外部中断:来源于cpu外部,外设提出请求从是否可屏蔽看:可屏蔽中断:中断被屏蔽后不再相应 不可屏蔽中断:NMI从跳转入口看:向量中断:cpu通常为不同的中断分配不同的中断入口地址,当检测到
2017-12-21 21:02:07
1488
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人