![](https://img-blog.csdnimg.cn/20190907195854228.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
Linux demo (base)
linux 简单driver的学习
zmjames2000
这个作者很懒,什么都没留下…
展开
-
7 MEMORY ALLOCATION
7.1.2 Allocating Memory on the Heap: malloc() and free()In general, C programs use the malloc family of functions to allocate and deallocate memory on the heap. These functions offer several advantag...翻译 2019-02-21 10:57:20 · 312 阅读 · 0 评论 -
I2C协议->裸机程序->adapter驱动程序分析-----Good
come from :1、i2c协议简要分析i2c中线是一种由 PHILIPS 公司开发的串行总线,用于连接微控制器及其外围设备,它具有以下特点。1、只有两条总线线路:一条串行数据线SDA,一条串行时钟线SCL。2、每个连接到总线的器件都可以使用软件根据它的唯一的地址来确定。3、传输数据的设备之间是简单的主从关系。...转载 2019-02-28 09:37:10 · 273 阅读 · 0 评论 -
spi驱动框架全面分析,从master驱动到设备驱动 --- Good
come from :https://blog.csdn.net/lizuobin2/article/details/51735963内容概括:1、I2C 驱动框架回顾2、SPI 框架简单介绍3、master 驱动框架3.1 驱动侧3.2 设备侧4、SPI 设备驱动框架4.1 设备册...转载 2019-02-28 09:37:30 · 507 阅读 · 0 评论 -
poll_wait阻塞/唤醒 --------------Good
come from :https://blog.csdn.net/zhangxuechao_/article/details/507265291. 应用阻塞应用程序使用 select() 或 poll() 调用设备驱动程序的 poll() 函数,该函数把输入输出复用处理的等待队列追加到由内核管理的进程的 poll_table()上#include <linux/poll.h&...转载 2019-03-04 11:11:54 · 1760 阅读 · 0 评论 -
9.按键之使用异步通知(详解)
come from :http://www.cnblogs.com/lifexy/p/7508791.html之前学的应用层都是:1)查询方式:一直读2)中断方式.同样一直读,直到中断进程唤醒3)poll机制:一直在poll函数中睡眠,一定时间读一次以上3种,我们都是让应用程序主动去读,本节我们学习异步通知,它的作用就是当驱动层有数据时,主动告诉应用程序,然后应用程序再来读,...转载 2019-03-04 11:35:25 · 250 阅读 · 1 评论 -
动态库的动态链接、打开、调用,使用dlopen、dlsym和dlclose
come form :https://blog.csdn.net/u013538542/article/details/72676460动态库的动态链接、打开、调用,使用dlopen、dlsym和dlclose 为了使程序方便扩展,具备通用性,可以采用插件形式。采用异步事件驱动模型,保证主程序逻辑不变,将各个业务已动态链接库的形基本的操作方法,式加载进来,这就是所谓的插件。Unix, l...转载 2019-03-05 00:14:48 · 820 阅读 · 0 评论 -
Linux C---- 记录总结 tool
b:块文件、位进制文件c:字符设备文件d:目录-:普通文件l:符号文件s:套接字文件p:管道文件缓存类型:全缓存:当填满I/O缓存后才进行实际I/O操作(或者执行fflush、floce、exit、return),4K大小行缓存:当填满I/O缓存后才进行实际I/O操作或者遇到新行符‘\n’(或者执行fflush、floce、exit、return),1K大小无缓存:标准错误...原创 2019-03-09 23:21:40 · 176 阅读 · 0 评论 -
比较 TCP 和 UDP 的异同点
比较 TCP 和 UDP 的异同点原创 2019-03-09 23:41:09 · 1269 阅读 · 0 评论 -
访问cache效率、平均访问时间的计算公式
题目条件:假设CPU执行某段程序时,共访问Cache命中2000次,访问主存50次。已知:Cache的存取周期为50ns,主存的存取周期为200ns。求Cache-主存系统的命中率。Nc = 2000, Nm= 50cache 主存系统的平均访问时间ta = h *tc + (1-h) *tm访问效率其中tc指命中时间的cache访问时间, tm为未命中时的主存访...转载 2019-03-10 08:46:27 · 41850 阅读 · 6 评论 -
Linux Platform devices 平台设备驱动
come from :https://blog.csdn.net/lizuobin2/article/details/51607813设备总线驱动模型:http://blog.csdn.net/lizuobin2/article/details/51570196本文主要参考:http://www.wowotech.net/device_model/platform_devic...转载 2019-02-28 09:36:55 · 198 阅读 · 0 评论 -
i2c驱动程序全面分析,从adapter驱动程序到设备驱动程序 ----- Good
come from :https://blog.csdn.net/lizuobin2/article/details/51694574内容概括:1、adapter client 简介2、adapter 驱动框架2.1 设备侧2.2 驱动侧2.2.1 probe 函数2.2.1.1 注册adapter...转载 2019-02-28 09:37:03 · 693 阅读 · 0 评论 -
【转】: the code from Linux system environment programming
#include <stdio.h>#include <stdlib.h>#include <string.h>#include <limits.h>#include <errno.h>#include "get_num.h"/* Print a diagnostic message that contains a fun...转载 2019-02-21 10:40:44 · 146 阅读 · 0 评论 -
10 T I M E
Within a program, we may be interested in two kinds of time:翻译 2019-02-21 11:12:18 · 126 阅读 · 0 评论 -
34.Linux-printk分析、使用__FILE__, __FUNCTION__, __LINE__ 调试 -------Good
come from :https://www.cnblogs.com/lifexy/p/7993136.html本节学习目的1)分析printk()函数 2)使用printk()调试驱动1.在驱动调试中,使用printk(),是最简单,最方便的办法当uboot的命令行里的“console=tty1”时,表示printk()输出在开发板的LCD屏上当uboot的命令行里的...转载 2019-03-05 22:21:48 · 430 阅读 · 0 评论 -
35.Linux-分析并制作环形缓冲区 --------- Good
come from :https://www.cnblogs.com/lifexy/p/8000515.html在上章34.Linux-printk分析、使用printk调试驱动里讲述了: printk()会将打印信息存在内核的环形缓冲区log_buf[]里,可以通过dmesg命令来查看log_buf[]1.环形缓冲区log_buf[]又是存在内核的哪个文件呢?位于/p...转载 2019-03-05 22:26:37 · 278 阅读 · 0 评论 -
36.Linux驱动调试-根据oops定位错误代码行 --------- Good
come from :https://www.cnblogs.com/lifexy/p/8006748.html1.当驱动有误时,比如,访问的内存地址是非法的,便会打印一大串的oops出来1.1以LED驱动为例将open()函数里的ioremap()屏蔽掉,直接使用物理地址的GPIOF,如下图所示:1.2然后编译装载26th_segmentfault并执行测试程序后,内核便...转载 2019-03-05 22:27:38 · 794 阅读 · 0 评论 -
37.Linux驱动调试-根据oops的栈信息,确定函数调用过程 ---- Good
come from :https://www.cnblogs.com/lifexy/p/8011966.html在上章里,我们分析了oops的PC值在哪个函数出错的本章便通过栈信息来分析函数调用过程1.上章的oops栈信息如下图所示:9fe0:代表最初的栈顶SP寄存器位置 9e80:代表函数出错的SP寄存器位置2.我们先来分析上图的栈信息,又是怎样的过程呢?...转载 2019-03-05 22:28:52 · 245 阅读 · 0 评论 -
38.Linux驱动调试-根据系统时钟定位出错位置 -----Good
come from :https://www.cnblogs.com/lifexy/p/8024415.html当内核或驱动出现僵死bug,导致系统无法正常运行,怎么找到是哪个函数的位置导致的?答,通过内核的系统时钟,因为它是由定时器中断产生的,每隔一定时间便会触发一次,所以当CPU一直在某个进程中时,我们便在中断函数中打印该进程的信息1.先来回忆下在之前的第5章内...转载 2019-03-05 22:30:06 · 409 阅读 · 0 评论 -
常用字符设备驱动函数总结 ----- 记录总结tool
打印等级: #define KERN_EMERG "<0>" /* system is unusable */ #define KERN_ALERT "<1>" /* action must be taken immediately */ #define KERN_CRIT "&...原创 2019-03-03 08:57:24 · 519 阅读 · 0 评论 -
MPU6050
come from :https://blog.csdn.net/wangwangmoon_light/article/details/52207405管脚 名称 说明VCC 3.3-5V (内部有稳压芯片)GND 地线 SCL MPU6050 作为从机时 IIC 时钟线SDA MPU6050 作为...转载 2019-03-10 17:03:01 · 4577 阅读 · 0 评论 -
socket 套接字 ---- 记录总结 tool
OSI开放系统互联模型 应用层 应用程序:FTP、E-mail、Telnet 表示层 数据格式定义、数据转换/加密 会话层 建立通信进程的逻辑名字与物理名字之间的联系 TCP 传输层 差错处理/恢复,流量控制,提供可靠的数据传输 IP 网络层 数据分组、路由选择 数据链路层 数据组成可发送、接收的帧 物理层 传输物理信号、接口、信号形式、速率TCP/IP协议族 ...原创 2019-03-10 20:42:02 · 334 阅读 · 0 评论 -
sqlite数据库 ------- 记录总结tool
1-- 安装数据库: sudo dpkg -i *.deb2-- 创建数据库 sqlite3 stu.db 必须指定数据库名称3-- sqlite命令 系统命令 以 "."开头 普通命令 ,以";"结束 .schema 查看表的结构 .quit 退出数据库 ...原创 2019-03-10 21:04:05 · 182 阅读 · 0 评论 -
notifier_call -----总结
1.通知链表简介 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。 为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。 通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。 通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。 当某个事情发生时...原创 2019-03-08 11:29:53 · 2486 阅读 · 2 评论 -
container of()函数简介 --------Good
come from :https://blog.csdn.net/s2603898260/article/details/79371024在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是...转载 2019-03-08 11:40:52 · 143 阅读 · 0 评论 -
Android HAL层开发
come from :https://www.jianshu.com/p/fa36e5faea67一直想深入Android底层开发,首先就从写一个完整的HAL层开发demo开始吧,步骤确实有很多,对我们这种不熟悉c/c++开发的人来说,确实是很痛苦,我看这简单的demo都要理解半天。下面我就一步步的来实现HAL层开发,附代码。我这里简单的归纳了下,一共8大步骤linux驱动实现 驱...转载 2019-03-25 13:59:31 · 1678 阅读 · 0 评论 -
ubuntu下安装、启动和卸载SSH
1、先停掉SSH服务:sudo stop ssh2、卸载openssh-server:apt-get remove openssh-server3、卸载openssh-client: apt-get remove openssh-server4、安装openssh-server:apt-get install openssh-server5、安装openssh-client:apt-ge...转载 2019-03-14 01:06:25 · 773 阅读 · 0 评论 -
经典摘录
come from :https://blog.51cto.com/21cnbao/1946351谈Linux的总线、设备、驱动模型软件工程强调高内聚、低耦合。若一个模块内各元素联系的越紧密,则它的内聚性就越高;模块之间联系越不紧密,其耦合性就越低。所以高内聚、低耦合强调,内部的要紧紧抱团,外面的给我滚蛋。基于这样的想法,linux把设备驱动分为了总线、设备和驱动三个实体,总线是上图...转载 2019-03-23 19:33:11 · 283 阅读 · 0 评论 -
linux内核——2.linux内核基础知识——摘录
come from : 奔跑吧linux内核宏内核架构的优点是设计简洁和性能比较好,而微内核架构的优势也很明显,比如稳定性和实时性等。第二章 Linux内核基础知识#define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_mi...原创 2019-03-24 18:07:40 · 163 阅读 · 0 评论 -
likely(x)与unlikely(x)函数
come from :https://kernelnewbies.org/FAQ/LikelyUnlikelylikely() and unlikely()What are they ?In Linux kernel code, one often find calls tolikely()andunlikely(), in conditions, like :...转载 2019-05-28 10:48:38 · 143 阅读 · 0 评论 -
实用C---- 记录总结 tool
struct var_data{ int len; char data[0];}struct var_data s;for (i = 0; i < s.len; i++) printf("%02x \n", s.data[i]); =====================================================================...原创 2019-03-08 11:24:27 · 251 阅读 · 0 评论 -
C-sizeof和strlen区别,以及sizeof如何计算结构体大小
come from :https://www.cnblogs.com/lifexy/p/10386552.htmlsizeof和strlen区别sizeof是关键字,在编译时就能计算出值,可以计算任何类型 strlen是函数,只有在运行时才能去计算,且只能计算字符型的.对于数组时,strlen是判断’\0’为标志结尾的,而sizeof则计算的是数组整个空间示例如下:char ...转载 2019-03-08 11:06:44 · 424 阅读 · 0 评论 -
Linux内核调试技术——进程D状态死锁检测
come from :https://blog.csdn.net/luckyapple1028/article/details/51931210Linux的进程存在多种状态,如TASK_RUNNING的运行态、EXIT_DEAD的停止态和TASK_INTERRUPTIBLE的接收信号的等待状态等等(可在include/linux/sched.h中查看)。其中有一种状态等待为TASK_UNIN...转载 2019-03-11 10:24:04 · 737 阅读 · 0 评论 -
Linux内核调试技术——进程上下文R状态死锁监测
come from :https://blog.csdn.net/luckyapple1028/article/details/51932414前一篇博文介绍了内核监测D状态死锁的hung task机制,本文介绍另一种死锁状态的监测手段——R状态死锁监测。R状态死锁指的是某一任务一直处于TASK_RUNNING态且一直占用着CPU,从而导致其他进程得不到调度而饿死的情况。一般情况下,R状态死...转载 2019-03-11 10:29:52 · 566 阅读 · 0 评论 -
死锁的四个必要条件和解决办法
come from :https://blog.csdn.net/guaiguaihenguai/article/details/80303835死锁概念及产生原理概念:多个并发进程因争夺系统资源而产生相互等待的现象。原理:当一组进程中的每个进程都在等待某个事件发生,而只有这组进程中的其他进程才能触发该事件,这就称这组进程发生了死锁。本质原因:...转载 2019-03-19 21:49:31 · 251 阅读 · 0 评论 -
ARM 内核SP,LR,PC寄存器
come from :https://blog.csdn.net/allan0508/article/details/52624618深入理解ARM的这三个寄存器,对编程以及操作系统的移植都有很大的裨益。 1、堆栈指针r13(SP):每一种异常模式都有其自己独立的r13,它通常指向异常模式所专用的堆栈,也就是说五种异常模式、非异常模式(用户模式和系统模式),都有各自独立的堆栈,用不...转载 2019-03-11 16:34:07 · 221 阅读 · 0 评论 -
39. 定制寄存器编辑器 内核调试
#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/irq.h>#include <asm/...转载 2019-03-11 19:45:39 · 185 阅读 · 0 评论 -
5.分析内核中断运行过程,以及中断3大结构体:irq_desc、irq_chip、irqaction(详解)
come from :http://www.cnblogs.com/lifexy/p/7506504.html本节目标: 分析在linux中的中断是如何运行的,以及中断3大结构体:irq_desc、irq_chip、irqaction在裸板程序中(参考stmdb和ldmia详解):1.按键按下,2.cpu发生中断,3.强制跳到异常向量入口执行(0x18中断地址处)...转载 2019-03-11 20:18:37 · 265 阅读 · 0 评论 -
嵌入式Linu驱动开发教程 ----- 记录总结tool
Linux 是宏内核或者单内核,windows是微内核,最大的区别是所有的内核功能都被整体编译在一起,形成一个单独的内核镜像文件。 优点是效率非常的高。Makefile: Ifeq…else…endifDepmod: 更新模块的依赖信息 Modprobe : 自动加载模块到内核 modprobe ver 不加.ko Modinfo l...原创 2019-03-13 06:55:24 · 382 阅读 · 0 评论 -
Linux时间函数之gettimeofday()函数之使用方法
come from :https://www.cnblogs.com/zl1991/p/5530546.html1.简介:在C语言中可以使用函数gettimeofday()函数来得到时间。它的精度可以达到微妙2.函数原型:#include<sys/time.h>intgettimeofday(struct timeval*tv,struct timez...转载 2019-05-28 10:55:01 · 245 阅读 · 0 评论 -
#ifdef __cplusplus extern "C"
#include <iostream>#include <cstdio>#include <fstream>#include <algorithm>#include <cmath>#include <deque>#include <vector>#include <queue&原创 2019-02-27 00:06:41 · 107 阅读 · 0 评论