自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

yxw0609131056的博客

路漫漫其修远兮,吾将上下而求索

  • 博客(67)
  • 资源 (1)
  • 收藏
  • 关注

原创 《Linux设备驱动开发详解》之udev用户空间设备管理

1 udev完全在用户态工作2 udev利用设备加入或移除时内核所发送的热插拔事件来工作,在热插拔时,设备的详细信息会由内核通过netlink套接字(uevent)发送给用户空间,然后根据事先定义的udev规则,创建对应的设备文件节点。3 udev对冷插拔的处理:向uevent节点写“add”,触发内核重新发送netlink,之后udev就可以收到对应的uevent事件,再之后的过程同热插拔处理过程。

2022-09-08 15:05:29 667 1

原创 浅谈Linux PMIC驱动(一)

转眼间,从事PMIC驱动开发已将近4年,前后参与两款PMIC芯片研发,一款自研,一款Q公司PMIC,对PMIC有了一定的理解,将其总结归纳,算是这几年工作的收获吧?

2022-08-30 10:52:07 2351 2

原创 《Linux设备驱动开发》第11章 内核内存管理

今天难得偷得半日闲,用xmind总结了一下Linux内核内存管理,废话少说,直接上干货。

2022-08-13 18:59:55 278

原创 git pull --rebase PK git pull

在使用git的日常开发过程中,经常遇到如下情况:1、某个时间你通过git clone/git fetch拉取了远程仓库代码到本地仓库2、开始本地调试并开发某个功能,经过几天的奋斗,终于功能调试好了3、当你开心地准备通过git push分享你的成果时,遇到git push失败,提示本地代码非最新,需要先更新本地代码原来在你调试过程中,有人“偷偷地”提交了代码,导致出现类似下面所示的情况......

2022-06-13 12:26:28 2957

原创 git rebase

git rebase

2022-06-10 13:59:26 325

原创 Linux源代码阅读:request_irq()

本文尝试阅读Linux kernel 5.0 + ARM64上中断申请过程的源代码,但并非逐字逐句地解析,只是梳理一些关键点(在工作中经常可能会用到的知识点)。为了提升Linux的实时性,kernel引入了中断线程化概念。其实就是将中断的下半部放在内核线程(FIFO,也称实时进程)中执行,这样可以减少中断对高优先级进程的饥饿感。因为传统的中断上半部执行完成后,需要通过tasklet,或者softirq来执行中断下半部,这些都属于中断上下文,会被内核优先处理,这样就会导致进程产生饥饿,即使是优先级比较高的

2022-05-13 09:44:57 2780

原创 《深入理解Linux内核》第二十章 程序执行(一)引言

一、程序和进程之间的关系 程序是一个存储在硬盘上的可执行文件,而进程是一个程序运行所需信息的集合,包括页表,打开的文件,CPU寄存器集等等,也就是所谓的execution context。但是程序却包含execution context初始化时所需信息。二、可执行文件 可执行文件一般保存在硬盘上,它包含程序执行所需要的一系列函数(处理器指令)和这些函数所需要的数据。其中有些函数是编程人员自己实现的,但有一些公共函数是以Library形式提供的,在源程序编译时,可以选择将这...

2021-02-15 15:29:19 136

原创 《深入理解Linux内核》第三章 进程(一)

一、进程、线程和轻量级进程1、进程 一个进程在操作系统中通常指处于执行状态程序的一个实例,你也可以理解为用来描述程序已经执行到什么阶段所用数据结构的集合。 进程有些属性与人类相似:一个进程一旦被创建,他的生命周期或长或短,他可以选择性创建一个或者多个子进程,也可以不创建任何子进程,但最终都会死亡。与人类有一点不同的是,进程没有性别之分,每个进程只有一个父进程。 从内核的角度来看,进程是用于管理系统资源如何分配的一个实体。 当一个进程被...

2021-01-31 17:06:54 163

原创 《深入理解Linux内核》第四章 中断和异常(五)

今天让我们来看下另一个中断下半部常用的机制----work queue一、特性1、先激活,在某个时间点再执行函数2、有专用的内核线程work thread二、与可延迟函数区别1、可延迟函数处于中断上下文,不能调用导致睡眠的函数,而work queue处于进程上下文,可以睡眠,允许调用导致睡眠的函数三、数据结构1、work_structstruct work_struct { unsigned long pending; struct list_head entry;

2020-12-03 11:30:50 642

原创 《深入理解Linux内核》第四章 中断和异常(四)

上篇讲完了softirq,今天让我们来看一个softirq应用实例-------tasklet二、tasklet1、优点1、简单易用,在设备驱动中比较常见2、同softirq一样,tasklet执行期间,中断处于使能2、特点1、动态分配2、同一种tasklet不能同时在多个CPU上运行,但是不同的tasklet,可以同时在多个CPU上运行3、tasklet种类1、HI_SOFTIRQ,对应0号softirq2、TASKLET_SOFTIRQ,对应5号softirq

2020-11-26 17:13:42 206

原创 《深入理解Linux内核》第四章中断和异常(三)

上两篇分析了I/O中断处理过程,接下来我们来分析softirq和tasklet一、softirq中断处理一般分为三部分:第一是critical,第二是Noncritical,第三是Noncritical deferrable,softirq就经常用于Noncritical deferrable阶段1、优点:1、softirq执行期间,中断处于使能2、将其从中断处理函数中去除,可以减小kernel对中断反应时间,这对中断反应时间要求高的中断请求很重要2、特点:1、静态分配2、必

2020-11-25 17:38:20 289

原创 《深入理解Linux内核》第四章中断和异常(二)

上次我们说到_ _do_irq()函数,那我们先看下它长什么样子/* * do_IRQ handles all normal device IRQ's (the special * SMP cross-CPU interrupts have their own specific * handlers). */fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs){ irq_desc_t *desc =

2020-11-13 10:21:17 381

原创 《深入理解Linux内核》第四章中断和异常(一)

最近鼓足勇气拿起吃灰多年的linux红宝书《深入理解Linux内核》,希望可以提升和巩固Linux内核理论知识。在此记录自己对书本内容和源代码理解,望各位大虾批评指正。一、中断描述符(4.2.3. Interrupt Descriptor Table)目的:关联中断或者异常向量和对应中断或异常处理程序地址大小:64bit(8个byte)寄存器:idtr格式:其中40---43bit用来识别中断描述符类型。二、硬件上对中断或者异常处理过程(4.2.4. Hardware Han

2020-11-12 14:42:15 545

原创 linux crash分析案例之进程同步

声明:本文是真实案例分析,而非crash分析工具使用说明,不熟悉相关工具的同学,请参考官方文档1、问题现场:Unable to handle kernel NULL pointer dereference at virtual address 00000001Mem abort info: Exception class = DABT (current EL), IL = 32 bits SET = 0, FnV = 0 EA = 0, S1PTW = 0Data abort inf...

2020-10-17 17:58:32 5649 6

原创 ARM系列之cache(一)

一、背景 Cache一词是从法语中动词“cacher”(隐藏)借鉴而来的。顾名思义,用于存储处理器所需的指令和数据的cache,对编程人员和系统是隐藏的,在很多情况下,cache可以说是透明的,或者是隐藏的。但是理解cache的操作细节依然是非常重要的。 第一代ARM架构被开发出来时,处理器时钟速度和memory访问速度差不多,但是如今ARM处理器速度已经非常快了,而外部总线频率和memory设备并没有达到与处理器匹配的速度。虽然片上SRAM可以达到与处理器匹配的速度,但是...

2020-08-28 10:29:55 1761

原创 Debugging with GDB

官网文档:https://sourceware.org/gdb/current/onlinedocs/gdb/

2020-07-23 20:06:05 1082

原创 ARM64 registers

参考文档:《ARM Cortex-A Series Programmer's Guide for ARMv8-A》一、通用寄存器1、arm64一共有31个通用寄存器,X0~X30 其中X29,又称FP寄存器,而X30,又称LR寄存器每一个通用寄存器都有两种表示:Xn 和 Wn,其中Xn代表64bit,Wn代表低32bit,因此读Wn,相当于读Xn的低32bit值,写Wn,相当于将其进行零扩展至64bi...

2020-07-22 14:45:29 1501

原创 x86函数调用栈分析

声明:原创作品转载请注明出处参考文档:《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000本文将以一个C代码片段来刨析x86函数调用栈变化过程,进而理解高级语言是如何在计算机上运行的。C代码片段如下:int g(int x){ return x+30;}int f(int x)...

2020-05-04 13:52:47 327

原创 《ARM微控制器与嵌入式系统》慕课---实验四 PWM实验

任务:使用PWM驱动蜂鸣器来播放简单音乐分析:声音的特性可由三个要素来描述,即响度、音调和音色。音调主要与声波的频率有关 音调 频率 低 L1 261.6 L2 293.7 L3 329.6 L4 349.2 L5 392 L6 440 L7 493.9 中 M1 523.3 M2...

2020-03-12 22:04:17 854 1

原创 《ARM微控制器与嵌入式系统》慕课---实验三 Systick实验

任务一:使用Systick触发LED灯闪烁,间隔时间为1秒分析:前面已经做过了LED灯闪烁实验,现在只需将delay()改由systick来实现闪烁间隔1、配置Systick相关寄存器,使其每0.5秒产生一个中断2、由于要求每1秒切换LED灯闪烁状态,所以需要有一个变量来计数3、在Systick_Handler()中断服务函数中,更新这个变量值注意:Systick是一个24bi...

2020-03-01 20:18:15 1137

原创 《ARM微控制器与嵌入式系统》慕课---实验二 UART实验

任务一:发送完整ASCII表给PC,每16个字符换行分析:1)首先配置UART1,使其可以发送字符给PC,注意: UART1使用bus clock(时钟频率为10.485M) 2) ASCII表从0开始到0x7F,定义一个变量从0到0x7F,每次发送该变量的值,然后再将变量加1 3) 每逢16的整数倍,发送一个换行字符实现代码片段:...

2020-02-13 20:03:26 498

原创 《ARM微控制器与嵌入式系统》慕课---实验一 点LED灯

受当前疫情影响,目前只能在家办公,终于有时间可以玩BLAZAR-β学习板,现将该实验一整理如下,供大家参考一 实验所需条件1) BLAZAR-β学习板2) Jlink调试器3) codewarrior10.5软件开发环境二 实验内容任务1:两个灯同时点亮,同时熄灭,进行闪烁分析:1) 选择板子上led4和led7两个LED灯,查看原理图可知,这两个LED...

2020-02-12 13:05:32 1293 3

原创 吴恩达机器学习笔记(week 8)----聚类

声明:本文只用于学习交流,若不慎侵权,请及时联系我,立即予以删除一  聚类 监督学习与无监督学习从上面可以看出,监督学习中training数据带有标签y,而无监督学习中training数据则没有标签y2.  K-means 算法以下是该算法的图形演示:注意:其实这里选取的两个簇族中心是原始training数据中的任意两个,而且选择不同,结果有很大的差异 ...

2018-11-11 21:12:23 229

原创 浅谈高通平台NON-HLOS.bin文件生成和镜像加载过程

      声明:本文只用于个人学习交流,若不慎造成侵权,请及时联系我,立即予以改正       NON-HLOS.bin文件是BP侧的一个镜像,最终被烧写到modem分区,但最近研究发现,其不仅仅包含modem镜像,它还包含ADSP镜像、Wcnss镜像、Venus镜像、Widevine镜像,还有一些安全相关的镜像。AP侧Init进程解析init.rc时,会通过kernel PIL驱动程序加载...

2018-08-27 11:27:24 19991 8

原创 msm8905刷屏过程分析(二)

 

2018-07-20 13:34:24 684

转载 下推自动机(四)------Pushdown Automata & Parsing

Parsing is used to derive a string using the production rules of a grammar. It is used to check the acceptability of a string. Compiler is used to check whether or not a string is syntactically correc...

2018-07-04 19:44:38 1204

转载 下推自动机(三)------PDA & Context-Free Grammar

If a grammar G is context-free, we can build an equivalent nondeterministic PDA which accepts the language that is produced by the context-free grammar G. A parser can be built for the grammar G.Also,...

2018-07-04 19:42:57 790

转载 下推自动机(二)------Pushdown Automata Acceptance

There are two different ways to define PDA acceptability.Final State AcceptabilityIn final state acceptability, a PDA accepts a string when, after reading the entire string, the PDA is in a final stat...

2018-07-04 19:40:27 755

转载 下推自动机(一)------Pushdown Automata Introduction

Basic Structure of PDAA pushdown automaton is a way to implement a context-free grammar in a similar way we design DFA for a regular grammar. A DFA can remember a finite amount of information, but a P...

2018-07-04 19:38:51 3258

原创 system分区挂载失败案例分析

最近项目需要升级高通base,具体从LA3.0.1升级到LA3.1.1,发现一个问题:Android go版本可以正常开机,但是Android O版本无法正常开机,UART log显示system分区挂载失败,会自动进入fastboot。[ 6.943432] EXT4-fs (mmcblk0p6): bad geometry: block count 309656 exceeds size...

2018-06-28 16:51:08 18375

原创 高通平台GPIO漏电问题分析方法

在Android智能手机项目开发过程中,我们经常会遇到GPIO漏电导致系统底电流偏高。故总结一下:1、首先建议HW将怀疑漏电的GPIO与外围电路彻底断开2、如果依然漏电,使用命令检查GPIO状态:相应的实现代码:LINUX/android/kernel/drivers/pinctrl/qcom/pinctrl-msm.cstatic void msm_gpio_dbg_show_one(struc...

2018-06-12 14:28:16 2722

原创 高通平台GPIO pinctrl调试心得

众所周知,Linux 2.6引入了非常经典的设备模型,最近发现在驱动和设备attach时,会设置GPIO状态为default哦,而且在设备驱动probe()调用之前,什么情况?且听我慢慢道来,呵呵那我们就从__device_attach_driver()函数开始吧?LINUX/android/kernel/drivers/base/dd.c这个函数最后会调用driver_probe_device(...

2018-06-12 12:26:52 8194

原创 Android O reboot命令执行过程总结

众所周知,当在adb shell中执行reboot命令时,系统会重启,但是你知道其具体执行流程吗?最近在分析bug时,研究了一下reboot流程,现总结如下:https://blog.csdn.net/yxw0609131056/article/details/79926276,从这篇文章可以看出,adb shell所用的shell为/system/bin/sh,而/system/bin目录下有一...

2018-04-13 16:11:03 6041 1

原创 Android O system函数执行reboot命令失败

最近在折腾Android O fastmmi中一个bug:在重启选项中,选择“关机”,机器并没有执行关机操作分析过程如下:LINUX/android/vendor/qcom/proprietary/fastmmi/mmi/func_map.cpp发现在process_reboot()函数中,的确执行了system("reboot -p"),但是通过WEXITSTATUS跟踪代码发现,这个命令执行失...

2018-04-13 11:27:14 3650 2

转载 godir命令

转自:http://blog.csdn.net/bigmarco/article/details/6995426godir: Go to the directory containing a file.首先执行source build/envsetup.sh命令配置环境比如我们要进到包含init.rc目录$godir init.rc 第一次运行会提示建立索引,会在你根目录建立filelist文件如...

2018-04-13 09:28:10 787

原创 Android O selinux违反Neverallow解决办法

因工作需要移植fastmmi到Android O,其中会涉及selinux权限配置,现将自己的理解总结如下:1、Android O selinux相关配置文件所在路径      system/sepolicy/*                      AOSP device和APPS相关selinux配置      device/qcom/sepolicy/*            平台和板卡...

2018-04-02 19:21:10 30119 7

转载 教你透彻了解红黑树

转载地址:https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/03.01.md二叉查找树由于红黑树本质上就是一棵二叉查找树,所以在了解红黑树之前,咱们先来看下二叉查找树。二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉...

2018-03-27 15:36:38 154

原创 Android O init.rc语法及解析过程总结

      Android O高通默认使用QMMI取代了fastmmi,但是由于QMMI是一个APK,属于Android应用层面,所以必须等到开机完成后,才能测试各个功能模块,这样就会导致开机时间过长,尤其在msm8909平台上,最快也要30s左右,很难满足产线生产要求,所以应公司要求,尝试将fastmmi移植到Android O,期间一直在折腾FFBM模式下各服务启动流程,即不断修改相关init...

2018-03-20 19:44:17 7002 6

原创 并查集(不相交集)ADT

等价关系:需要同时满足下列三个性质的关系R1、自反性:对于所有的a属于集合S,a R a(自身与自身有关系)2、对称性:a R b当且仅当b R a(如果a和b有关系,则b和a也有关系)3、传递性:若a R b且b R c,则a R c(如果a和b有关系,b又和c有关系,则a和c有关系)等价集合:如果一个元素a 属于集合S,则元素a的等价集合是集合S的一个子集,它包含所有与元素a有等价关系的元素。...

2018-03-14 15:42:28 402

原创 一种快速排序实现

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。一趟快速排序的算法是:1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,赋值给key...

2018-03-12 19:27:51 159

easyarmlm3s1138

easyarmlm3s1138 配套資料

2011-03-05

空空如也

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

TA关注的人

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