- 博客(57)
- 资源 (5)
- 收藏
- 关注
原创 2020-07-09
ulimit -a 用来显示当前的各种用户进程限制Linux对于每个用户,系统限制其最大进程数,为提高性能,可以根据设备资源情况,设置个Linux用户的最大进程数,一些需要设置为无限制:如数据段长度:ulimit -d unlimited最大内存大小:ulimit -m unlimited堆栈大小:ulimit -s unlimited设置core dump 的空间无限大:ulimit -c unlimited查看限制情况 ulimit -a可以看到如下信息core file size
2020-07-09 21:21:04
353
1
原创 2020-07-07
运行异常的debug方法对于stack trace只印出函数+偏移的情况,我们可以有两个方向来debug1.nm+addr2line2.objdump+addr2line首先应该是先在代码里面找到带symbol的lib/so
2020-07-07 17:59:01
418
转载 EMMC驱动分析
一、SD卡系列简介这些都是网上找出来的,权当作为开场白了。MMC卡全称Multi Media Card,由西门子公司和SanDisk公司1997年推出的多媒体记忆卡标准。MMC卡尺寸为32mm x24mm x 1.4mm,它将存贮单元和控制器一同做到了卡上,智能的控制器使得MMC保证兼容性和灵活性。MMC卡具有MMC和SPI两种工作模式,MMC模式是默认工作模式,具有MMC的全部特性。而SPI...
2018-12-09 11:02:56
2573
转载 EMMC驱动数据结构
结构体mmc_host定义于/include/linux/mmc/host.c,可以认为是linux为SD卡控制器专门准备的一个类,该类里面的成员是所有SD卡控制器都需要的,是描述主机控制器的共有结构,具体的控制器结构体包含结构体mmc_host,如://该结构体有自己编写,根据实际项目来编写自己的host结构体struct pxamci_host { struct mmc_host *m...
2018-12-09 09:25:51
841
转载 标准linu休眠和唤醒机制分析(一)
说明:1. Based on linux2.6.32,  only for mem(SDR)2. 有兴趣请先参考阅读: 电源管理方案APM和ACPI比较.docLinux系统的休眠与唤醒简介.doc3. 本文先研究标准linux的休眠与唤醒,android对这部分的增改在另一篇文章中讨论4...
2018-10-28 17:56:48
299
原创 Linux网卡
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/83185955在嵌入式SOC上,通常集成有ARM核和MAC控制器,以及增加数据传输带宽的MAC专用DMA,对这种形式的SOC通常使用外接物理PHY设备的方法,外接的PHY芯片如RTL8201F、88E1111、88E6096等,集成型以...
2018-10-25 16:50:00
1250
原创 PCI设备驱动程序
PCI总线是现在非常流行的计算机总线,学会它的驱动设计方法很重要。相信曾经想学习PCI总线驱动的人有这么一个经历,就是去看那些讲解PCI总线驱动的书籍和资料的时候,会被里面繁杂的内容所击败,又是什么配置空间又是什么枚举的,还没开始真正的去写PCI的驱动,到这里就已经开始打退堂鼓了。其实,只要你认真下去,虽然有些东西看不明白,但是对于你写PCI的驱动来说,似乎“不那么重要”。因为,Linux内核对P...
2018-10-24 18:05:40
18883
原创 PCI设备驱动之设备
https://www.cnblogs.com/image-eye/archive/2012/02/15/2352699.html四、PCI设备的枚举探测过程在内核启动过程中,PCI设备的探测过程是完全自动的,内核已经集成好了方法,我们无需更改,在这里还是分析一边代码作为了解。分析之前,先看一下全部的函数调用关系,大致了解一下pci_arch_init /* 判断host/pci桥的类型 ...
2018-10-24 16:22:07
1793
原创 linux内核之工作队列
在我的文章Linux内核:软中断、tasklet中,我们已经了解了中断底半部的两种实现方式,即软中断和tasklet微线程。但是这两种方式归根结底都是采用软中断机制的,其根本上还是在中断的上下文中执行,所以这也就要求了采用这两种方式编写中断底半部,不能出现一些可能导致程序休眠或者是延迟的函数(虽然当发生中断嵌套时会生成Ksoftirq线程,但这个是不确定的,所以我们在编写程序时,还是不能采用具有休...
2018-10-23 15:45:45
1487
原创 Linux内核之tasklet
中断下半部使用tasklet:手把手教你写Linux设备驱动—中断(二)–tasklet实现(基于友善之臂4412开发板)其实,tasklet的实现就是基于软中断的。软中断初始化函数softirq_init()中注册了两个tasklet软中断。void __init softirq_init(void){ ...... //此处注册两个软中断 open_softi...
2018-10-22 17:53:31
212
原创 Linux 之软中断softirq
softirq驱动开发人员一般都不会用到,到内核代码中会用到softirq机制,如在timer定时器中有用到softirq机制。。。下面我们来简单了解一下Linux中的软中断的使用。注册软中断处理函数open_softirqvoid open_softirq(int nr, void (*action) (struct softirq_action *));/** * @nr: 软中...
2018-10-22 16:50:13
2090
原创 linux内核中断
统一入口entry-armv.S .align 5__irq_svc: svc_entry#ifdef CONFIG_TRACE_IRQFLAGS bl trace_hardirqs_off#endif#ifdef CONFIG_PREEMPT get_thread_info tsk ldr r8, [tsk, #TI_PREEMPT] @ get preempt coun...
2018-10-22 15:35:37
303
转载 Linux内核中进程上下文、中断上下文、原子上下文、用户上下文的理解
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运...
2018-10-22 15:07:54
369
原创 pci总线
https://blog.csdn.net/notbaron/article/details/79643799https://blog.csdn.net/notbaron/article/details/80346988https://blog.csdn.net/zyboy2000/article/details/51971453http://blog.chinaunix.net/uid/2...
2018-10-19 17:45:08
5941
原创 完成量
在驱动程序开发中,一种常见的情况是:一个线程需要等待另一个线程执行完某个操作后,才能继续执行。这个工作其实信号量也可以完成,但其效率比Linux中专门针对这种情况的完成量机制要差些一、完成量概述Linux中提供了一种机制,实现一个线程发送一个信号通知另一个线程开始完成某个任务,这种机制就是完成量。完成量的目的是告诉一个线程某个事件已经发生,可以在此事件基础上做你想做的另一个事件了。二、定义...
2018-10-17 11:39:53
2114
原创 linux内核线程
内核经常需要在后台执行一些操作,这种任务就可以通过内核线程(kernle thread)完成,内核线程是独立运行在内核空间的标准进程。内核线程和普通的进程间的区别在于内核线程没有独立的地址空间,mm指针被设置为NULL;它只在内核空间运行,从来不切换到用户空间去;并且和普通进程一样,可以被调度,也可以被抢占。实际上,内核线程只能由其他内核线程创建,linux驱动模块中可以用kernel_threa...
2018-10-16 18:22:49
19645
1
转载 linux内核等待队列
等待队列在linux内核中有着举足轻重的作用,很多linux驱动都或多或少涉及到了等待队列。因此,对于linux内核及驱动开发者来说,掌握等待队列是必须课之一。 Linux内核的等待队列是以双循环链表为基础数据结构,与进程调度机制紧密结合,能够用于实现核心的异步事件通知机制。它有两种数据结构:等待队列头(wait_queue_head_t)和等待队列项(wait_queue_t)。等待队列头和等待...
2018-10-15 17:43:23
296
转载 linux 内核 current全局变量
在内核的API里经常能够见到一个指针current,它表示的是当前的进程(如果说是一个全局变量虽然不合理,但更容易理解)linux 内核 current全局变量
2018-10-15 17:03:37
503
原创 Mutex 互斥锁
1、理解互斥锁?互斥锁的使用也是保持内核临界区的同步的,互斥锁可以说源于信号量,信号量设置计数器可以容许n个进程并发的访问临界区,而互斥锁不行,只能容许每次一个进程访问,也就是计数器值为1的信号量,可以这么理解。互斥锁和自旋锁有不同(显然的),互斥锁在中断处理程序中和可延迟函数中都不能使用,因为它是可以睡眠的,只能在进程上下文或者软中断上下文才能使用。struct mutex {/* 1: ...
2018-10-15 15:59:07
3040
1
原创 linux内核链表
链表有一个“头指针”变量,图中以head表示,它存放了一个地址,该地址指向一个元素。链表中每一个元素称为“结点”,每个结点都应包含两个部分:用户需要用的数据、下一个结点的地址。这样,head结点指向第一元素,第一个元素指向第二个元素…直到最后一个元素...
2018-10-15 11:11:49
173
原创 信号量
Linux中的常用信号量是锁的另一种实现机制,Linux中提供了两种信号量,一种用于内核程序中,一种用于应用程序中。这里讲解的是内核中的信号量一、信号量概述和自旋锁一样,信号量也是保护临界资源的一种有用方法。信号量只有当得到信号量时,进程或者线程才能够进入临界区,执行临界代码(down等函数后面的代码块)。信号量与自旋锁的最大不同点在于,当一个进程试图去获取一个已经锁定的信号量时,该进程不会...
2018-10-13 17:08:06
23686
3
原创 自旋锁
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/830142921.定义和初始化自旋锁一个自旋锁必须初始化才能被使用,对自旋锁的初始化可以在编译阶段通过宏来实现,初始化自旋锁可以使用宏SPIN_LOCK_UNLOCKED,这个宏表示一个没有锁定的自旋锁。在Linux中,申明定义一个自...
2018-10-12 18:38:00
276
原创 设备驱动中的并发控制
现代操作系统有三大特性:中断处理、多任务处理和多核处理器(SMP)。这些特性导致当多个进程、线程或者CPU同时访问一个资源时,可能会发生错误,这些错误是操作系统运行所不允许的,这就是并发。并发是指在操作系统中,一个时间段中有几个程序正在运行,且这几个程序都是在同一个处理机上运行,但任一时刻点上只有一个程序在处理机上运行。并发容易导致竞争问题。竞争就是两个或者两个以上的新城同时访问同一个资源,从...
2018-10-12 18:04:28
278
原创 USB设备驱动之驱动
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/82999949上一篇文章USB设备驱动之设备讲到USB设备的EEPROM中,固化了设备的一些描述信息和一些程序。当USB设备插入USB插槽时,会引起一个电信号的变化,主机控制器捕获这个电信号,并命令USB核心处理对设备的加载工作。US...
2018-10-11 18:14:25
3137
1
原创 USB设备驱动之设备
USB设备固件固件(Firmware)就是写入EROM或EEPROM中的程序。通俗的理解就是“固化的软件”。更简单的说,固件即使BIOS(基本输入输出软件)的软件,但又与平台软件完全不同,它是固化在集成电路内部的程序代码,负责控制和协调集成电路的功能。USB固件中包含了USB设备的出厂消息,标识该设备的厂商ID、产品ID、主版本号和次版本号等。这就是为什么当我们把U盘插入USB口的时候主机就能知...
2018-10-11 14:32:31
1670
原创 USB系列之Host控制器
USB拓扑对于每个嵌入式的CPU芯片中一般都会集成一个或多个Host 控制器,每个Host控制器其实就是一个PCI设备,挂载在PCI总线上,在Linux系统中,驱动开发人员应该给Host 控制器提供驱动程序,Host 控制器用usb_hcd结构来表示。该结构体在/include/linux/usb/hcd.h中定义。每个USB Host控制器都会自带一个USB Hub,被称为跟(Root)Hu...
2018-10-10 16:14:14
3886
原创 LCD
s3c2410fb_map_video_memory 帧缓冲起始地址s3c2410fb_init_registers 设置引脚类型s3c2410fb_set_par 设置LCD控制器寄存器struct fb_info {atomic_t count;int node;int flags;stru...
2018-10-10 11:51:47
188
原创 Linux输入子系统
一、什么是input输入子系统?1、Linux系统支持的输入设备繁多,例如键盘、鼠标、触摸屏、手柄或者是一些输入设备像体感输入等等,Linux系统是如何管理如此之多的不同类型、不同原理、不同的输入信息的输入设备的呢?其实就是通过input输入子系统这套软件体系来完成的。从整体上来说,input输入子系统分为3层:上层(输入事件驱动层)、中层(输入核心层)、下层(输入设备驱动层),如下图所示:...
2018-10-08 16:48:09
632
转载 详解应用层open函数如何调用到底层驱动中xxx_open函数
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012142460/article/details/78932165 在上一篇Linux驱动(三)字符设备驱动框架中,我们编写函数操作集合ops,并编写了应用层代码。...
2018-09-30 18:07:04
693
转载 创建设备节点(文件)
说过kobject创建的是sysfs文件系统(/sys/)下的目录,那么设备文件节点如何创建呢提醒一点,udev是应用层的,不要试图在内核的配置选项里找到它;加入对udev的支持很简单,以作者所写的一个字符设备驱动为例,在驱动初始化的代码里调用class_create为该设备创建一个class,再为每个设备调用device_create创建对应的设备。大致用法如下:struct class *...
2018-09-30 16:05:42
2256
转载 设备驱动模型(kobject、kset、ktype)
转自https://blog.csdn.net/guet_kite/article/details/78368928设备驱动模型概述Linux早期时候,一个驱动对应一个设备,也就对应一个硬件地址,那当有两个一样的设备的时候,就要写两个驱动,显然是不合理的。应该是从Linux2.5开始,就引入了device-bus-driver模型。其中设备驱动模型主要结构分为kset、kobject、kty...
2018-09-30 15:37:25
637
原创 i2c设备驱动
跟所有的 bus-dev-drv模型一样,当我们拿到一个模块我们需要做的就是dev_drv即设备驱动程序一、设备(device)方法一、自己写一个i2c_device.c#include <linux/kernel.h>#include <linux/module.h>#include <linux/platform_device.h&am
2018-09-28 17:20:13
983
原创 i2c_adapter
1、adapter client 简介在内核里,i2c 驱动框架大概分为两层,adapter 驱动 和 设备驱动,adapter 英文翻译过来为 “适配器”,适配器并不恰当,根据我的理解,adapter 指的是我们 mcu 里的 i2c 控制模块,就是那堆寄存器,因为一个 mcu 里的i2c控制模块是固定的(寄存器参数、以及收发数据的方法),因此大多数情况下,它们都有芯片厂商写好了,然而我们学习...
2018-09-25 16:10:51
3685
1
原创 i2c裸机与理论
1、i2c协议简要分析i2c中线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接微控制器及其外围设备。它具有以下特点。1、只有两条双向信号线:一条串行数据线SDA,一条串行时钟线SCL。2、每个连接到总线的器件都可以使用软件根据它的唯一的地址来确定。3、传输数据的设备之间是简单的主从关系。4、主机可以用作主机发送器或者主机接收器。5、它是一个真正的多主机总线,两个或多个...
2018-09-21 15:58:33
335
原创 platform总线驱动代码分析
一、platform 驱动的工作过程platform模型驱动编程,需要实现platform_device(设备)与platform_driver(驱动)在platform(虚拟总线)上的注册、匹配,相互绑定,然后再做为一个普通的字符设备进行相应的应用,总之如果编写的是基于字符设备的platform驱动,在遵循并实现platform总线上驱动与设备的特定接口的情况下,最核心的还是字符设备的核心结构...
2018-09-19 19:58:05
350
原创 platform总线、设备与驱动
一、platform总线、设备与驱动一个现实的Linux设备和驱动通常都需要挂接在一种总线上,对于本身依附于PCI、USB、I2C、SPI等总线的设备而言,这自然不是问题,但是在嵌入式系统里面,SoC系统中集成的独立的外设控制器、挂接在SoC内存空间的外设等却不依附于此类总线,即集成到SOC芯片内的外设控制器或外设并没有挂载到实际的总线上。基于这一背景,Linux发明了一种虚拟的总线,称为pla...
2018-09-19 18:12:15
782
转载 Linux 设备总线驱动模型
转自https://blog.csdn.net/lizuobin2/article/details/51570196     尽管LDD3中说对多数程序员掌握设备驱动模型不是必要的,但对于嵌入式Linux的底层程序员而言,对设备驱动模型的学习非常重要。&am
2018-09-19 11:23:44
4351
1
原创 Linux 混杂设备驱动模型
版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/huangweiqing80/article/details/82702979混杂设备概念混杂设备miscdevice是字符设备的一种,它们共享一个主设备号MISC_MAJOR(即10),但次设备号不同,所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscd...
2018-09-19 10:30:28
685
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人