
Linux内核笔记
白鲸入海
嵌入式软件类,蓝牙BLE-2.4G开发,杰理/泰凌 蓝牙ble方案开发,杰理音频方案开发,定制键鼠方案开发,语音遥控器方案开发。BLE触摸方案开发。
展开
-
platform_set_drvdata 和 platform_get_drvdata函数分析
分析两个小知识点看看platform_set_drvdata 和 platform_get_drvdata函数是如何保存和获取参数的直接上代码。static struct platform_device *s900_link_snd_device;static struct snd_soc_card snd_soc_s900_atc2603c_link = { .name = "s900_lin...原创 2018-04-26 11:03:15 · 1209 阅读 · 0 评论 -
Linux SPI 总线 和设备驱动架构之三:SPI控制器驱动
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动。通用接口层和控制器驱动三大部分。其中,控制器驱动负责最底层的数据收发工作,为了完成数据收发工作,控制器驱动需要完成以下这些功能:1.申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等;2.配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作;3.向通用接口层提供接口,使得上层的协议驱动...转载 2018-12-13 14:39:24 · 1144 阅读 · 0 评论 -
USB学习之一:USB协议基础
USB开发者论坛http://www.usb.org/USB专区:http://group.ednchina.com/93/1.1USB的特点 在USB1.0和USB1.1版本中,只支持1.5Mb/s的低速(low-speeed)模式,和12Mb/s的全速(full-speed)模式。在USB2.0又加入了速度更快的(480Mb/s)的高速(high-speed)模式。目前...原创 2018-12-25 09:39:28 · 2406 阅读 · 0 评论 -
Linux输入子系统框架分析
输入子系统简介:1.linux系统支持的输入设备很多,例如键盘、鼠标、触摸屏、手柄或者一些体感设备等等,linux是如何管理如此之多的不同类型、不同原理、不同输入信息的设备呢?其实就是通过input输入子系统这套软件体系来完成的。2.输入子系统有设备驱动层、输入子系统核心、事件处理层三部分组成。· 驱动层:将底层的硬件输入转化为统一事件形式,向输入核心(input core)汇报。...原创 2019-02-14 16:57:24 · 414 阅读 · 0 评论 -
Linux 中断底半部
设备中断会打断内核进程的正常执行,系统对更高吞吐率的追求势必会要求中断服务程序尽量短小精悍。但是在现实中,中断服务程序往往要进行大量耗时操作。Linux将中断处理程序分解为两个部分:顶半部和底半部。 顶半部用于完成尽量少的比较紧急的工作,往往只是简单的读取寄存器的中断状态,并清除中断标志后,就进行“登记中断”的工作,登记中断意味着将底半部处理程序挂到该设备的底半部执行队列中去,这样,顶...原创 2019-03-15 13:42:05 · 270 阅读 · 0 评论 -
阻塞与非阻塞IO
阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足操作的条件后再进行操作,被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足,而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停的查询,直到可以进行操作为止。简单的来说就是:阻塞调用会一直等待(睡眠等待),直到获得资源后,才会返回。而非阻塞操作则会立马返回,并不断查询。在阻塞访问时,不能...原创 2019-03-13 14:58:48 · 219 阅读 · 0 评论 -
cat /proc/kallsyms 发现内核符号表值都为0
最近调试内核,cat /proc/kallsyms 后发现符号表值都为0。检查内核配置项,该配的都已经配置。查找很多网上资料,说是内核为了防止漏洞出现,特意不让非root用户查看符号表。但是我将shell切换为root,还是只能查看到0.因此只能修改内核代码。kernel/kernel/kallsyms.cstatic int s_show(struct seq_file *...原创 2019-03-26 09:37:09 · 2568 阅读 · 1 评论 -
Unable to handle kernel paging request at virtual address e6f4b4d0
调试tiny4412LCD屏幕的时候,驱动加载的时候会挂掉。对寄存器ioremap的时候没有出错,但是访问寄存器的时候出错了。[ 187.030282] Unable to handle kernel paging request at virtual address e6f4b4d0[ 187.034416] pgd = dedc0000[ 187.037145] [e6f4b4d...原创 2019-03-28 14:28:32 · 2951 阅读 · 1 评论 -
Linux内核空间内存申请函数kmalloc、kzalloc、vmalloc的区别
原文:https://blog.youkuaiyun.com/lu_embedded/article/details/51588902 我们都知道在用户空间动态申请内存用的函数是 malloc(),这个函数在各种操作系统上的使用是一致的,对应的用户空间内存释放函数是 free()。注意:动态申请的内存使用完后必须要释放,否则会造成内存泄漏,如果内存泄漏发生在内核空间,则会造成系统崩溃。 那么,在内...转载 2019-03-28 22:16:20 · 278 阅读 · 0 评论 -
Linux SPI总线和设备驱动架构之二:SPI通用接口层
转自:https://blog.youkuaiyun.com/DroidPhone/article/details/23932447通过上一篇文章的介绍,我们知道,SPI通用接口层把具体的SPI设备的协议驱动和SPI控制器驱动联系在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备,SPI协议驱动和SPI控制器的数据...转载 2018-12-13 11:38:12 · 781 阅读 · 0 评论 -
Linux ALSA声卡驱动之一:ALSA架构简介
转自:http://blog.youkuaiyun.com/droidphone一、 概述ALSA是Advanced Linux Sound Architecture的缩写,目前已经成为linux的主流音频体系结构。ALSA开源项目网址:http://www.alsa-project.org/在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用...转载 2018-12-03 19:16:22 · 560 阅读 · 0 评论 -
Linux 下IIC 子系统架构总结
本文中第1、2、3、4、5、6部分是参考前辈的博客总结https://blog.youkuaiyun.com/wangpengqi/article/details/177111651.IIC简介 IIC是philips提出的外设总线。 IIC只有两条线,一条串行数据线SDA;一条是时钟线SCL。使用SCL,SDA这两条线就实现了设备之间的数据交互。2.Linux下的驱动...原创 2018-05-18 16:46:57 · 2271 阅读 · 1 评论 -
Poll 机制的简单分析
参考:韦东山老师视频教程用户空间应用程序向设备驱动请求数据时,一般有以下几种方式:1.不断查询,条件不满足的情况下就是死循环,这种情况下非常耗费CPU。2.休眠唤醒的方式,如果条件不满足,应用程序则一直休眠下去。3.poll机制,如果条件不满足,休眠指定时间,休眠时间内条件满足唤醒进程,条件一直不满足,达到指定时间,则自动唤醒。4,异步通知,应用程序注册信号处理函数,驱动程序发信号。poll在li...转载 2018-05-28 14:02:13 · 6288 阅读 · 0 评论 -
Pinctrl子系统之一了解基础概念
1.Linux Pinctrl子系统简介在许多soc内部都包含有pin控制器,通过pin控制器的寄存器,我们可以配置一个或者一组引脚的功能和特性。在软件方面,Linux内核提供了pinctrl子系统,目的是为了统一各soc厂商的pin脚管理。2.Linux Pinctrl子系统提供的功能 (1)管理系统中所有的可以控制的pin,在系统初始化的时候,枚举所有可以控制的pin,并标识这些pin。...原创 2018-06-11 17:08:15 · 51237 阅读 · 1 评论 -
pinctrl子系统之二
以炬芯的方案来分析一下pinctrl子系统的代码kernel/drivers/pinctrl/owl/pinctrl-s700.c中pinctrl驱动是注册为平台驱动的。platform_driver_register(&s700_pinctrl_driver); //注册平台设备驱动//直接去看probe函数static int s700_pinctrl_probe(struct p...原创 2018-06-12 09:57:59 · 1723 阅读 · 0 评论 -
Linux GPIO子系统分析
在设备驱动中对GPIO的操作是非常普遍的,linux内核为我们提供了GPIO子系统,方便用户使用,它为用户提供了GPIO的统一操作接口,用户不需要关心底层实现,因为这是芯片厂商需要关心的,芯片厂商会去做这一部分工作。接着我们就从驱动入手来看一下gpio子系统的框架。gpio_direction_output(gmac->resetgpio, 1); mdelay(30);gpio_dir...原创 2018-05-30 18:27:36 · 3560 阅读 · 0 评论 -
tar 相关的解压命令
.tar.gz 格式解压为 tar -zxvf xx.tar.gz.tar.bz2 格式解压为 tar -jxvf xx.tar.bz2原创 2018-06-27 15:28:17 · 179 阅读 · 0 评论 -
LCD 驱动 framebuffer程序框架分析
framebuffer机制是将一块连续内存映射进LCD屏幕,用户可以直接操作framebuffer,进而来操作屏幕上的显示内容。内核中统一抽象了framebuffer的共性地方放在fbmem.c中。fbmem.c作为一个中间层,向上为应用程序提供了统一的open 、read、write接口。向下为LCD硬件驱动程序提供统一的注册接口。#define FB_MAJOR 29 /*...原创 2018-07-22 23:05:58 · 679 阅读 · 1 评论 -
Linux ALSA声卡驱动之二:声卡的创建
1.1.snd_card是什么snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声卡相关的逻辑设备都是在snd_card的管理之下,声卡驱动的第一个动作就是创建一个snd_card结构体。1.2snd_card的定义 位于include/sound/core.hstruct snd_card { int number; ...转载 2018-12-04 10:20:46 · 815 阅读 · 0 评论 -
container_of(ptr, type, member) 宏分析
转自:https://blog.youkuaiyun.com/s2603898260/article/details/79371024在linux 内核编程中,会经常见到一个宏函数container_of(ptr,type,member), 但是当你通过追踪源码时,像我们这样的一般人就会绝望了(这一堆都是什么呀? 函数还可以这样定义??? 怎么还有0呢??? 哎,算了,还是放弃吧。。。)。 这就是内核大...转载 2019-05-30 10:57:38 · 699 阅读 · 0 评论