自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Radia的专栏

专注嵌入式Linux驱动、Python系统开发。

  • 博客(86)
  • 资源 (2)
  • 收藏
  • 关注

原创 linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)

本系列导航:linux驱动由浅入深系列:高通sensor架构实例分析之一(整体概览+AP侧代码分析)linux驱动由浅入深系列:高通sensor架构实例分析之二(adsp驱动代码结构)linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解)从adsp获取数据的方法分为同步、异步两种方式,但一般在实际使用中使用异步方式,因为同步获取数据会因

2017-07-27 12:47:24 16554 2

原创 从c语言快速过渡到java语言(java语言与c语言语法区别概述)

本文适合有面向对象知识积累,熟悉c/c++语法,希望快速料及java语法的同僚,并非一篇基础详尽的基础知识教程。语言类型c语言:面向过程java:面向对象面向对象语言出现的原因是提高编程粒度。也就是说在建大型建筑的时候就不再用土堆砌了,而是粒度更大的复合材料。面向对象语言的最小单位是类。数据类型java数据类型:    1):基本数据

2017-07-17 14:51:35 3200

原创 android系列:第三篇android调试常用工具:模拟按键输入,修改分辨率,获得按键消息

本文将介绍一些android开发中常用的调试技巧如:模拟按键输入,修改分辨率,获得按键消息getevent获取所有输入设备的事件,如power键,音量键、触摸屏、耳机插拔事件等shell中直接输入getevent,首先打印的即为各个eventX对应的设备关系,如下图展示了按下power键和滑动触摸屏的相应event hexdump使用hexdump工具可以直

2017-07-17 11:45:29 903

原创 android系列:第二篇android组件、manifest.xml、存储方式、通信方式概述

android基本组件Activity一个activity是一个显示界面,可以显示并处理用户的事件。activity之间通过intent进行通信每个activity需要在AndroidManifest.xml中声明 Service一个无界面的后台进程。startService()启动的服务,生命周期与其调用者无关,只要没人杀则永生。bindService()启动

2017-07-14 13:56:22 945

原创 android系列:第一篇 android开发常用命令集合,代码目录简介

android开发常用命令集合,代码目录简介 一、adb相关adb全名Andorid Debug Bridge.顾名思义,这是一个google为androidDebug专门开发的工具。常用adb命令   1. 查看设备  adb devices  这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示  2. 安装软件

2017-07-13 20:52:01 2283

原创 linux驱动层到应用层的重要接口sys文件系统---/sys目录详解

Linux2.6内核中引入了sysfs文件系统。sysfs文件系统整理的设备驱动的相关文件节点,被视为dev文件系统的替代者。同时也拥有类似proc文件系统一样查看系统相关信息的功能。最主要的作用是sysfs把连接在系统上的设备和总线组织成分级的文件,使其从用户空间可以访问或配置。 Sysfs被加载在 /sys/目录下,它的子目录包括:(本文以高通sdm630平台为例)1)  Bl

2017-07-13 11:30:40 4137

原创 英语知识系列:单词中元音字母发音规律

从上一篇文章中我们知道,一个英语单词中元音的发音是核心,辅音字符的发音起辅助作用。而且我们发现元音字母的发音种类最多(英语知识系列:26个字母在单词中的发音总结),常常一个单词对元音字母的发音选错了,整个单词的发音就相去甚远了。今天我们来一起看一下元音字母的发音有没有什么规律^-^1,开音节(半开音节)单个元音字母发小口音即a、e、i、o、u、y发音为 ei、i:、ai、əu、ju

2017-07-08 02:25:07 8126

原创 Linux DTS(Device Tree Source)设备树详解之二(dts匹配及发挥作用的流程篇)

有上一篇文章,我们了解了dts的背景知识和相关基础,这次我们对应实际设备进行一下相关分析。 DTS设备树的匹配过程一个dts文件确定一个项目,多个项目可以包含同一个dtsi文件。找到该项目对应的dts文件即找到了该设备树的根节点。kernel\arch\arm\boot\dts\qcom\sdm630-mtp.dts/* Copyright (c) 2017, The Li

2017-07-07 15:33:26 32655

原创 英语知识系列:单词音节的划分方法

英语单词是由一个个的音节组成的,能够熟练的分解出单词的音节,不但能够更好的理解单词的含义,便于记忆单词,更能了解单词的发音。下面我们来一起了解一下单词中的音节划分方法:音节组成[]中的内容表示可包含可不包含[音节头]  +音节中+[音节尾](辅音字母或辅音组合字母)(元音字母或元音组合字母)

2017-07-03 23:52:30 7664 3

原创 Android环境下关于kconfig,.config的解读及meneconfig 相关符号说明[M],{*},< >,-*-

kconfig的作用Kconfig 文件是用来管理哪个文件或哪一行(需要用宏包含起来的)需要编译,是linux可裁剪特性的主要实现方式。(ps:makefile的作用是用来管理文件之间的依赖关系的) kconfig是如何实现上面的神奇功能的linux源码根目录下的script文件夹中是实现makemenuconfig等配置工具的源码。其次在linux源码的各个目录中都有一个kcon

2017-07-03 20:17:42 3689

原创 英语知识系列:26个字母在单词中的发音总结

整理了26个字母在单词中的发音,如下(仅供参考)元音为绿色字母[字母音] 其他发音A[ei]         ei/æ/aB[bi:]          bC[si:]         k/sD[di:]        d/dʒE[i:]          i:/eF[ef]          fG[dʒi:]      g/dʒH[ei

2017-06-29 00:17:57 8564

原创 栈内存是如何被编译器维护的

栈内存是如何被编译器维护的我们一直听说“栈内存由编译器维护”,那是如何维护的呢?是在程序运行期间由编译器来管理栈内存吗?怎么可能!以函数调用时的出入栈为例:原来编译器在编译函数调用代码时,不仅编译成call指令,还会在call指令之前添加若干入栈指令:push,在函数返回时会添加对应的出栈指令:pop。这部分是程序员无法控制的,因此叫作栈内存由编译器维护,并非运行期间维护的,而

2017-06-27 15:43:22 2000 1

原创 MIPI协议概述:DCS、DSI、CSI、D-PHY的简要介绍

MIPI协议概述:DCS、DSI、CSI、D-PHY的简要介绍MIPI(stands for Mobile Industry Processor Interface)MIPI联盟,即移动产业处理器接口(Mobile Industry Processor Interface 简称MIPI)联盟。MIPI(移动产业处理器接口)是MIPI联盟发起的为移动应用处理器制定的开放标准和一个规范

2017-06-27 11:06:29 16019

原创 内存管理分析之二:MMU机制在进程中使用时的一些问题

内存管理分析之一:Linux进程空间与虚拟地址的好处内存管理分析之二:MMU机制在进程中使用时的一些问题内存管理分析之三:了解这些概念就了解了整个MMU机制32位linux系统中每个进程拥有4GB的虚拟地址空间(上文介绍:Linux进程空间与虚拟地址的好处),那么虚拟地址空间如何与实际物理内存进行对应呢—MMU(Memory Management Unit)。关于MMU的实现细节即分页处理的原理,...

2017-06-26 11:47:13 1604

原创 英语知识系列:按发音规律重排的英语音标

参考网上的资料按照音标的发音规律整理了英语音标:(仅供参考)  元音:发音顺畅的即为元音,是音节的核心。(LOL概念即为ADC) 发音应尽可能饱满!上舌元音:【i:】,【i】,【e】,【æ】,【ei】下舌元音:【a:】,【ʌ】,【ə】,【ɔ】,【ai】,【əu】混合元音:【iə】,【εə】,【uə】,【ɔi】,【au】,【u】,【u:】 辅音:发音会受到各种阻碍

2017-06-25 02:42:55 1484

原创 内存管理分析之一:Linux进程空间与虚拟地址的好处

内存管理分析之一:Linux进程空间与虚拟地址的好处内存管理分析之二:MMU机制在进程中使用时的一些问题内存管理分析之三:了解这些概念就了解了整个MMU机制使用虚拟地址的好处现代操作系统使用了虚拟地址的方式管理各个进程对内存的使用,这使得应用层编程方便、安全,主要体现在如下方面:1,  让每个进程拥有了相同的、独立内存空间,相互之间不会干扰2,  读写内存更安全。由于系统和MMU的限制,使得进程无...

2017-06-23 19:45:11 3726

原创 Linux程序编译执行原理之二:gcc编译出的elf文件分析

使用gcc编译出的可执行程序是啥样的呢?使用编辑器打开只会看到一堆乱码^-^ 它又为何能够执行,如何执行的呢?今天我们以上一篇文章中编译出来的elf文件为例,来一起了解一下这其中的缘由。 Elf格式与bin格式的区别首先来对比一下另一种二进制文件格式bin1,  bin文件是raw binary文件,其中只有机器码2,  elf文件除了含有机器码之外还有其它信息,如:段加载地址

2017-06-23 16:21:41 2951

原创 Linux程序编译执行原理之一:预处理-编译-汇编-链接过程分析

每次编译一个linux下的应用程序,好像只需要执行一下gcc,然后看到没有error就大功告成了(有时warning都不管的-_-),就可以高高兴兴的去执行啦。但是其中的原理是什么呢?看到这篇文章的同学肯定都有这样的疑惑,让我们一起来了解一下。 编译过程细节: test.c(文本格式c程序) -> (预处理器cpp)-> test.i(文本格式c程序) -> (编译器 ccl) -

2017-06-22 16:26:46 1173

原创 linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)

上一篇文章中我们了解了高通sensor的整体架构及对AP侧的代码进行了分析,这篇文章我们详细分析一下aDSP侧的代码结构。 完整sensor数据流代码下图是sensor数据流程中的关键代码部分:结合上一篇的测试代码,可以清楚的看到高通sensor的数据处理流程。图中7位置指示了每个基于ADSP架构的传感器需要实现的接口如下:typedef struct{

2017-06-20 15:00:13 12453 6

原创 linux驱动由浅入深系列:高通sensor架构实例分析之一

最初的时候芯片厂家对sensor的处理都是直接挂在processor上,sensor的驱动也和其他linux或android的驱动一样,生成对应的设备节点给上层提供数据(关于此类linux基础驱动的知识,可以参考本博客其他博文)。但后来这一切发生了变化,最主要的原因就是功耗。Sensor希望自己能够一直处理工作状态下,如计步器等应用场景。这样如果sensor还挂在主processor上(这时候处理

2017-06-19 16:25:27 29430 11

翻译 linux驱动由浅入深系列:PBL-SBL1-(bootloader)LK-Android启动过程详解之一(高通MSM8953启动实例)

对于嵌入式工程师了解芯片启动过程是十分有必要的,在分析、调试各种问题的时候都有可能涉及到这方面的知识。同时这部分知识也是比较复杂的,因为其中涉及到芯片内部架构,启动各个阶段软件代码执行顺序,启动模式等等。下面以比较常用的Qualcomm MSM8953芯片的启动过程为例,进行宏观分析(大部分翻译了高通的手册^-^),下一篇文章进行代码分析。可以看到MSM8953中的处理器有5个,分

2017-06-14 14:59:47 15943 3

原创 linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅增加了操作缓冲区,对用户请求顺序进行队列重拍等等。字符设备驱动的相关分析可以查看本博客相关的博文。 按照本博客的行文习惯,在具体分析块设备驱动代码之前,我们会从整体上了解一下研究对象的特征,以及用户空间...

2017-06-09 11:55:57 11146 1

原创 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)

一.什么是DTS?为什么要引入DTS? DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,比如板上的platform设备、resource、i2c_

2017-04-26 14:40:18 43730 19

原创 linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一

linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一linux驱动由浅入深系列:ALSA框架详解 音频子系统之二目前linux中主流的音频体系结构是ALSA(Advanced Linux Sound Architecture),ALSA在内核驱动层提供了alsa-driver,在应用层提供了alsa-lib,应用程序...

2017-03-20 14:51:21 24855 5

原创 实例讲解c语言结构体大小 sizeof(struct A)

约定为32位系统,即char 1字节、short 2字节、int 4字节该问题总结为两条规律:1,每个结构体成员的起始地址为该成员大小的整数倍,即int型成员的其实地址只能为0、4、8等2,结构体的大小为其中最大成员大小的整数倍#include #include #include #include #include #include #include #inclu

2017-03-08 10:01:55 17018 1

原创 linux驱动由浅入深系列:驱动程序的基本结构概览之二(详解驱动注册过程)

上一篇文章使用了misc_register函数注册字符设备,这篇文章使用基本的字符设备接口申请设备号、创建dev文件来展示一下细节部分:#include #include #include #include #include #include #include #include #include #include #define DRIVER_NAME "hello"

2017-03-06 12:10:51 1876

原创 linux驱动由浅入深系列:中断申请及下半部处理机制

1,  中断申请使用request_irq函数向系统申请中断。intrequest_irq(unsigned int irq, irq_handler_t handler,                        unsigned long irqflags, const char *devname, void *dev_id)irq是要申请的硬件中断号。handler是

2017-03-03 18:09:52 816

原创 linux驱动由浅入深系列: 驱动中获取设备结构体中定义的数据

linux内核2.6版以后,驱动模型统一为设备、驱动、总线的结构。即一个linux设备或驱动都是要挂载到一种总线上的,如常见的usb、pci、i2c等,对于SoC系统内部的控制器使用platform虚拟总线。这样platform机制将设备本身的资源(如gpio、irq、mem)注册进内核,由内核统一管理,当驱动中需要使用设备的资源时,可以由统一的接口。不管是设备还是驱动,都是挂接在某条总线上的

2017-03-03 15:17:12 1768

原创 linux驱动由浅入深系列:显示子系统之一(通过FrameBuffer在屏幕上画出图形)

显示子系统对应用层提供的接口叫做framebuffer,一般位于/dev/fb0(下文示例运行于adroid的平台位于/dev/graphics/fb0,不过它们都是一样的),它为上层提供了统一的对显卡的描述。首先要明确的是lcd显示子系统虽然复杂,但其任然是基本的字符设备,fb0就是其设备节点,主设备号29。不同之处在于,可以通过mmap(mmap将一个文件或者其它对象映射进内存。)对其进行地址

2017-03-02 16:59:17 3908 1

原创 linux驱动由浅入深系列:usb子系统之二(枚举过程)

在上一篇文章中我们知道了usb协议中的域、包、事务、传输的基本概念,下面我们来看看usb第一个通信过程—枚举。枚举就是从设备读取一些信息,知道设备是什么样的设备,如何进行通信,这样主机就可以根据这些信息来加载合适的驱动程序。这部分内容同上一篇文章一样,是一些接近物理层的过程,而且其中大部分细节都由硬件模块完成,对于linux驱动工程师来说只需要了解,并不用深陷其中无法自拔。(这部分PHY层细节

2017-02-27 17:38:36 1305

原创 linux驱动由浅入深系列:usb子系统之一(域、包、事务、传输的基本概念)

本文从usb协议的物理层讲起,对usb建立一个整体的概念再进行逐步细化。下图是usb2.0协议的物理层连线,其中包括一根地线、一根电源线(在usb2.0中电源线仅支持到5V 500mA,目前随着人们需求的日益膨胀,usb线提供的供电能力正在不断增加)、两根差分数据线DP、DM(使用差分线的好处是增加抗干扰能力,能够更快速的串行传输数据,这个有概念就可以了,在此不做深入探讨)。USB

2017-02-27 11:46:28 1874 1

原创 linux下的两种层次的控制台及打印级别

在嵌入式调试过程中查看各种log是十分重要的,而串口控制终端能够显示内核log,但是通过网络或adb shell连接的控制台只能显示用户空间的log,这两种控制台有什么区别呢?今天来区分一下kernel层log与应用层log,及打印级别。linux控制台分为两种:一种是kernel级别的控制台,一般为uboot启动时通过cmdline传递给kernel的,这个kernel级别控制台能够打印

2017-02-23 15:14:42 7866

原创 linux驱动由浅入深系列:输入子系统之三(应用层模拟input_event)

在上一篇文章中编写了gpio_key的驱动,可以看到每次gpio_key按下会上报event到/dev/input /event7节点。其实在应用层是可以完全模拟出这个按键过程的,原理是向EV_KEY类型的eventX消息节点write event将会被重新返回到eventX节点上,产生与按键按下相同的效果。(另外EV_LED、EV_SND类型的event通道驱动层会有对应的消息处理函数去点亮le

2017-02-22 16:00:59 3292

原创 linux驱动由浅入深系列:输入子系统之二(编写一个gpio_key驱动)

在上一篇文章中我们大致了解了linux input subsystem的功能用应用层的使用,本文我们一起来看一看驱动代码的编写。在“linux驱动由浅入深系列:驱动程序的基本结构概览”一文中已经解释的驱动程序的基本结构,今天我们以上一篇文章中的程序为基本结构,添加相关内容来构成一个gpio按键的驱动程序。先来看看修改完后的代码:#include #include #include

2017-02-21 17:44:10 4292 1

原创 linux驱动由浅入深系列:驱动程序的基本结构概览之一(第一个驱动程序)

提到linux驱动程序,首先应该知道它是linux的内核模块。那么想要编写驱动程序,就要首先认识一下linux的内核模块机制。Linux内核模块是使得复杂而庞大的linux内核条理清晰、可裁剪、高兼容性的重要特性。Linux内核模块的特点:1,  模块本身不被编译进内核镜像,能够控制内核的大小。2,  模块可以在需要的时候中被动态加载,一旦加载完成就和内核其它部分完全一样。 下

2017-02-16 15:54:39 7378

原创 linux驱动由浅入深系列:输入子系统之一(input子系统概述、应用层读取event)

本文系列文章先从宏观上了解linux中输入子系统的作用,再看看其在应用层是如何表现出来的,然后在一层层深入到linux内核代码中。  1,输入子系统引入的好处:(1)统一了物理形态各异的相似的输入设备的处理功能。例如,各种鼠标,不论PS/2、USB、还是蓝牙,都被同样处理。在移动设备上的触摸屏、按键、各类传感器也都是基于输入子系统的。(2)提供了用于分发输入报告给用户应用程序的简单的事

2017-02-13 12:01:48 5295

原创 开启智能时代的一个畸形灯泡--真空二极管

身处当今智能时代的我们,互联网技术已经如同空气一样不可或缺了。然而你可曾想过从爱迪生手中灯泡的亮起,到现在o2o大战、智能家具、可穿戴设备、虚拟现实等技术的如火如荼,这之前经历了多少沧桑。爱迪生与他的灯泡今天我们从爱迪生说起,为寻找灯丝材料做了近千次实验,这家伙看到什么材料都用来实验。这是一个我们耳熟能详的关于坚持与成功的故事,然而这并不是我们今天的主题。说到这

2017-02-11 20:13:06 1114

原创 Linux下的打包、压缩、解压总结

首先附上linux下各个后缀格式的压缩解压命令,如果暂时不想了解个中缘由可以用完即走。.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)高级打包使用,排除若干目录,指定打包路径。tar --exclude=var/www/ff-bb.cn/download --exc

2017-02-08 11:49:05 9017

原创 c语言常用小知识点(const、sizeof)

const常量指针指针指向的内容是常量,不能通过这个指针改变常量的值,但可以通过其它引用改变常量的值。可写作:const int * a;或int const * a;指针常量指针本身是常量,不能指向其他的地址int p;int *const a = &amp;psizeof与strlenchar str[20]="0123456789"; int   a=strlen(str); /*a=10;...

2015-12-19 22:08:20 785

原创 链路

链路:从一个节点到相邻的另一个节点一段物理线路,中间没有其他任何的交换节点。链路层的基本目的是向用户提供透明的和可靠的数据传输基本服务。桥接:基于公共的链路层协议将两个通信网进行互连,并基于链路地址选择要传递的数据的过程。桥接就是通过一台设备(或多个)把几个网络串联起来形成连接。

2015-12-19 22:06:43 958

setuptools-33.1.1.zip

windows下python安装第三方模块是报错“ImportError: No module named setuptools”,发现时未安装setuptools,按网上方法下载了ez_setup.py进行安装时又报错:“使用“2”个参数调用“DownloadFile”时发生异常:“基础连接已经关闭: 发送时发生错误。”发现时网络问题,下载不了setuptools-33.1.1.zip,后经科学上网法,拿到了setuptools-33.1.1.zip特分享出来以供需要的同学。

2017-11-10

total commander 8.52a 含对应的注册Key文件

为方便版本对应,提供了total commander8.52a的主程序和相应注册key,亲测成功。 注册方法:关闭Total Commander,将下载的文件(wincmd.key)复制到Total Commander的安装文件夹下,重启Total Commander即可。 注:此文件经用于个人学习研究用,禁止商业传播!有需要请购买正版支持原开发者。

2016-05-23

空空如也

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

TA关注的人

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