自定义博客皮肤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 Shell 语法篇--命令替换与变量替换

命令替换命令替换是指Shell可以先执行命令,将输出结果暂时保存,在适当的地方输出。命令替换的语法:command注意是反引号,不是单引号,这个键位于 Esc 键下方。下面的例子中,将命令执行结果保存在变量中:#!/bin/bashDATE=dateecho “Date is $DATE”USERS=who | wc -lecho “Logged in user are $US...

2020-03-29 15:11:28 778

原创 英语知识系列:英文与中文句子构成成分的对应关系

我们对英语的句子感到不适应,主要是由于英语的句子成分的位置关系与中文有所不同。这篇文章我们来看一下,英语中各个句子成分的位置与中文句子中各个成分的对应关系:汉语句子成分:(状语1) +定语1+ 主语+ 状语2 +谓语 +定语2+ 宾语+ (状语3)英语句子成分:(状语1) +主语+ 定语1+ 谓语+ 状

2020-03-29 00:17:59 1545

原创 Linux Shell 语法篇-- Shell 中的各类运算:算数运算、关系运算、布尔运算、字符串运算、文件测试

Bash 支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。expr 是一款表达式计算工具,使用它能完成表达式的求值操作。例如,两个数相加:#!/bin/bashval=expr 2 + 2echo “Total value : $val”运...

2020-03-28 20:50:16 383

原创 Linux Shell 语法篇--详解 Shell 变量,字符串与数组操作

变量定义shell 定义变量时,变量名不加美元符号$var=123注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。空格的使用在脚本中是个关键,后文会整理总结。使用一个定义过的变量,只要在变量名前面加美元符号即可eg:echo ${var}变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界变量类型shell中变量为动态数据类型,...

2020-03-27 20:28:32 298

原创 PCIe的内存地址空间、I/O地址空间和配置地址空间

PCIe的内存地址空间、I/O地址空间和配置地址空间pci设备与其它接口的设备(如i2c设备)最大的不同是存在内存地址空间和配置地址空间,本文分析一下它们的用途。首先区分一下IO空间和内存空间cpu会访问的设备一般有内存和外设寄存器,如下图所示。x86架构采用独立编址将内存操作与外设IO操作分开了才有了内存空间和IO空间的区分。x86平台cpu内部对内存和外设寄存器访问的指令也是不同的。...

2018-08-12 18:07:14 11863 5

原创 linux驱动由浅入深系列:块设备驱动之三(块设备驱动结构分析,以mmc为例)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(从用户空间的read、write到实际设备物理操作整体架构分析)linux驱动由浅入深系列:块设备驱动之三(块设备驱动结构分析,以mmc为例)前一篇文章介绍了块设备驱动在linux框架张的位置关系,本文来分析一下驱动本身。块设备驱动的模型还是基本基于字符设备驱动的,可以简单理解为块设备仅仅...

2018-06-06 15:27:50 2530

原创 linux驱动由浅入深系列:camera驱动之二(基于高通平台的V4L2结构及代码分析)

在上一篇文章中介绍了camera的基础知识和相关概念,我们一起来了解一下驱动相关的代码结构。本文以高通+android平台为示例,首先看一下整体框图:这张图是从整体上来看的1,图中最下面的是kernel层的驱动,其中按照V4L2架构实现了camera sensor等驱动,向用户空间提供/dev/video0节点2,在往上是HAL层,高通代码实现了对/dev/video0的基本操作,对接了andro...

2018-03-11 13:53:05 11072 1

原创 linux驱动由浅入深系列:块设备驱动之二(从用户空间的read、write到实际设备物理操作整体架构分析)

linux驱动由浅入深系列:块设备驱动之一(高通eMMC分区实例)linux驱动由浅入深系列:块设备驱动之二(块设备驱动结构分析)在第一篇文章中介绍了块设备在应用层的操作,本文一起了解一下块设备驱动的结构:1,用户空间使用统一的读写函数操作所有块设备2,虚拟文件系统屏蔽了磁盘上各种不同文件系统的差异,为用户空间提供统一的操作3,Cache当用户发起文件访问请求的时候,首先回到Disk Cache中...

2018-03-07 00:33:16 2548

原创 linux驱动由浅入深系列:显示子系统之二(基于android的分析)

上一篇文章中介绍了应用层对显示系统的使用,我们操作framebuffer在屏幕上画出了图形。这次我们一起来看一下android中显示子系统各个模块的功能。android系统音频系统在高通平台上的框图:HWUIUI硬件加速,从Androd 3.0(Honeycomb)开始,Android开始支持hwui。OpenGLOpenGL(全写Open Graphics Library)是个定义了一个跨编程语...

2018-03-04 22:30:20 2608

原创 linux驱动由浅入深系列:ALSA框架详解 音频子系统之二

linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一linux驱动由浅入深系列:ALSA框架详解 音频子系统之二本文以高通平台为例,介绍一下android下的音频结构。android使用的是tinyALSA作为音频系统,使用方法和基本框架与linux中常用的ALSA音频子系统是一致的。ALSA音频框架ALSA(Adv...

2018-03-04 14:22:10 14795 4

原创 文件系统系列之二:ext3/vfs文件系统的结构分析

在上一篇文章中,我们介绍了基本的文件系统概念和SD卡中常用的FAT32文件系统。在有了上文的基础,我们这次来学习一下linux中默认的ext文件系统。ext文件系统是为linux量身打造的,因此和linux的虚拟文件系统(VFS)在基础概念上基本是一致的,本文也顺带介绍一下vfs。vfs能适配十几种不同类型的文件系统,如上文介绍的FAT等。vfs进行适配的原理是在内存中讲FAT文件系统的FAT、F...

2018-03-02 00:50:20 1788

原创 文件系统系列之一:fat文件系统的结构分析

在这个系类的开篇还是先说一下文件系统是什么吧。首先来介绍一下对u盘的格式化这个操作,格式化不是仅仅删除了所有文件,还为接下的来文件存储约定了一种存放格式,这种约定的文件存放格式就叫做文件系统。再用最通俗的说法简要介绍一下,磁盘如sd卡只能存放0和1这两种二进制状态序列,数字文件本质上也是一串0和1的序列。那么磁盘存储文件怎么存放呢?你说这个简单,把一个个的文件紧挨着排列在磁盘中不就可以了吗。那么,...

2018-02-28 21:05:08 5390

原创 内存管理分析之三:了解这些概念就了解了整个MMU机制

内存管理分析之一:Linux进程空间与虚拟地址的好处内存管理分析之二:MMU机制在进程中使用时的一些问题内存管理分析之三:了解这些概念就了解了整个MMU机制MMU的作用1,完成虚拟地址到物理地址的转换2,地址访问控制,地址保护页:最小的映射单位,32位系统一般为4k页帧:物理内存中的一页称为页帧页表:虚拟内存与物理内存的映射规则PTE:页表项(page table entry PTE),页表由一条...

2018-02-25 17:17:01 1554

原创 linux网络驱动分析

网络驱动与字符驱动和块驱动最大的区别在于没有设备节点,这也是linux中一切皆文件的一个例外。网络设备没有设备节点,那么给应用层提供的操作方式是怎么的呢?答案是-系统调用。如我们在网络编程中经常用到的socket(),bind(),listen(),accept()。下面这张图展示了从应用层发起系统调用到驱动层的调用过程。应用层调用socket()本质上是一个glibc中的函数,执行实

2017-12-08 18:11:50 1201

原创 linux系统调用实现的介绍

操作系统负责资源管理,当应用层需要使用资源时就需要向内核发起系统调用。如读取问题时发起syscall_read系统调用,建立socket时发起syscall_socket等等内核完成引导后,就处于等待处理各种中断的状态下,以实现对硬件资源的管理,对上层请求的相应。能够触发内核相应的有三类1,系统调用,是基于软件中断实现的,应用层向内核层发起请求的方式2,异常,如缺页异常,使虚拟地址

2017-12-08 14:24:51 1779

原创 linux内核panic/oops/crash分析(addr2line,objdump,gdb)

panic、oops、crash都是指linux kernel层发生了内核无法处理的异常。应用层编程只会造成该进程的崩溃,内核层的编程如驱动代码中的异常最严重的情况会导致内核panic。那怎样处理呢?内核panic后有dump机制会打印出目前的所有寄存器,以便于分析异常原因。我们经常用到的工具为addr2line,objdump,gdbaddr2line可以将出错代码地址转转换

2017-12-01 16:23:57 7427

原创 linux中netlink机制的实例讲解

netlink作为内核层与用户层双向通信的交互机制广泛的应用在网络驱动及字符驱动的uevent机制中。Netlink 相对于系统调用,ioctl 以及 /proc文件系统而言具有以下优点:1,netlink使用简单,只需要在include/linux/netlink.h中增加一个新类型的 netlink 协议定义即可,就是定义一个还未使用的整数。2. netlink是一种异步通信机制,

2017-11-28 17:52:14 1569

原创 网络协议实例讲解(配抓包图)

网络七层协议模型在实际使用中并没有完全实现,事实证明有了如下部分,网络就可以完美运行了:应用层http ftp 传输层 tcp udp网络层 ip icmp igmp链路层 arp rarp物理层 wifi 以太网上面的一层一层的协议在最终传输的网络包上表现为,每经过网络的一层就会在原始数据包上添加一个网络的协议头Ethernet头IP头 TCP/UDP头

2017-11-20 14:01:15 2311 1

原创 linux驱动由浅入深系列:显示子系统之二(高通平台lcd驱动代码分析)

在上一篇文章中我们初步了解了lcd对应用层提供的接口-framebuffer,以及应用层通过fb在lcd上画图的示例。本文我们来看一下驱动层的相关逻辑,主要介绍几个核心数据结构fb_info, fb_var_screeninfo, fb_fix_screeninfo,以及framebuffer设备注册的过程,framebuffer大小的确定。我们从kernel中lcd最核心的一个文件看起k

2017-11-06 15:30:29 2633

原创 高通平台启动log概述(PBL log、sbl1 log、kernel log)

高通平台启动log概述(PBL log、sbl1 log、kernel log)在嵌入式linux的调试过程中log有着至关重要的地位,等同于医生的CT报告。能够熟悉启动各个阶段的log,如PBL阶段,sbl1阶段,kernel阶段,android阶段,对于分析定位问题有着重要的作用。本文以高通msm8937平台android启动的串口log为例简要介绍一下log相关的技巧和对log的概要介绍

2017-11-01 18:02:09 17586 2

原创 LK(little kernel)第一行代码链接位置分析及lk启动过程

LK是(L)ittle (K)ernel的缩写,是一个功能及其强大的bootloader开源项目,但现在只支持arm和x86平台。LK的一个显著的特点就是它实现了一个简单的线程机制(thread),和对高通处理器的深度定制和使用。因此高通平台android普遍采用LK作为其bootloader。但是,LK只是整个系统的引导部分。1,lk的代码链接方式以及第一行代码的位置本文以高通平台为

2017-10-30 15:02:53 4812 1

原创 android编译系统解析,执行make bootimage后mk文件的调用顺序详解

android编译系统解析,执行make bootimage后mk文件的调用顺序详解构成android编译系统的有make文件(makefile,xxxxx.mk),shell脚本,python脚本等make文件针对三个层次1,整个编译系统的核心 android/build/core/下,如其中的main.mk文件2,针对不同厂商不同产品的make文件位于android/devic

2017-10-27 10:52:59 11992 1

原创 linux中新增一个shell命令最简单的方法

linux中新增一个shell命令最简单的方法结论:运行shell脚本之后,其中的function就自动成为了当前shell中的新增命令了。android编译时会运行. build/envsetup.sh脚本,运行后就为当前shell新增了一些命令,如:croot,lunch,mm,mmm,mma,cgrep等等。这些命令十分好用,为开发带来了极大的便利。一直以为envsetup.sh

2017-10-25 20:02:14 4069

原创 linux移植过程概述(linux移植的全局认识并非step by step的教程)

本文简述一下对linux移植过程的全局认识并非step by step的教程想让linux在一个板子上跑起来需要做什么?需要做三件事1.移植uboot适配板子 2.调试kernel中各类驱动 3.构建根文件系统。为什么需要uboot?内核虽然强大,但是不能开机自动完全从零开始启动的,内核启动还是需要别人帮忙的。uboot为kernel启动创造各种条件,帮助内核实现重定位

2017-10-24 20:11:36 1603 1

原创 linux启动第一个应用程序init && init启动android过程解析 && init.rc与inittab的关系 && android property和linux 环境变量

linux启动第一个应用程序initlinux的运行顺序为uboot传递参数到内核,内核的第一个c编写的函数为start_kernel(),start_kernel来启动内核,最后到到rest_init()函数处完成内核启动过程。rest_init()中启动第一个应用程序init,init程序的进程号为1,Linux使用了init进程来对组成Linux的服务和应用程序进行初始化。ini

2017-10-24 16:36:34 3448

原创 linux驱动由浅入深系列:usb子系统之四(android平台鼠标驱动代码分析)

android上的usb口是支持OTG(on the go)的,USB OTG既可以作为Host又可以作为Device,我们本文来看一下android手机作为Host连接鼠标的情况。OTG是如何做到既可以做Host又可以作为Device的呢标准usb接头中有四根线:vbus,gnd,dp(d+),dm(d-),android手机上的usb为miniUSB接口增加了一根id线,用来区分Hos

2017-10-18 17:30:25 2374

原创 linux/android代码中对于不同项目中conf、dts、defconfig文件的处理方法

本文以高通平台为例(代码 android oreo),介绍几种在不同项目公用一套代码时对于conf文件、dts、defconfig文件的处理方法一、不同项目共用一套代码时,其中一些conf配置文件在项目间又有差异的处理方法1,在device下给每个项目建一个单独文件夹存放不同的配置文件2,在mk文件中根据不同的项目宏进行copy例子:1,在device\qcom\msm89

2017-10-18 10:36:30 2303

原创 linux驱动由浅入深系列:usb子系统之三(usb系统中的设备、配置、接口、端点概念及代码解释)

一个usb设备对应一个或多个配置一个配置包含一个或多个usb接口一个usb接口可能存在一种或多种设置一个设置会使用零个或多个usb端点设备设备就是一个usb物理设备,一个usb设备可以只包含一个简单功能的device,也可以包含一个由hub连接的多个设备,叫作复合设备。接口与端点的概念较为清晰端点端点是host或device中具有独立控制usb总线能力的最小物理

2017-09-26 20:52:04 1872

原创 linux设备驱动uevent详解,高通平台battery上报电量实例

本文以高通平台上的android系统为参照展开探讨。1,uevent是什么呢?uevent是一种linux设备模型中的一个组成部分。kseg中包含的uevent_ops结构体拥有uevent的操作函数。uevent可以在设备发生变化时主动通知应用层。是对普通先注册设备后注册驱动模式的一种补充。一般用作usb设备的自动驱动加载、电池电量上报等。2,uevent主动通知应用层的

2017-09-18 20:46:17 8901 1

原创 sys文件系统中文件、文件夹与kobject、kset、kobj_type的对应关系

网上对sys文件系统与kobject的文章很多,但对初学者的我越看越乱。几经辗转总结出如下结论,如有误恳请讨论指出,直接给出:1,kobject,kset对应sysfs里面的文件夹,目录的名字就是结构体中的 name2,kobj_type对应sysfs里面的文件,这些文件是kobject的属性的外在表现3,kobject是linux设备树的核心结构体,整个设备树都是围绕kobject建

2017-09-14 19:45:05 1135

原创 linux双向链表List结构分析

双向链表是linux内核中的一个核心数据结构,由于其运用场景众多如task列表、设备列表等等,因此内核将其操作逻辑独立了出来。下面我们以i2c的设备树列表为例来看一下List列表的使用方法。如图所示,双向链表不包含任何数据,在使用时,将其嵌入到目标结构体中使用。且第一个list_head不与数据机构体关联,作为整个链表的起始。List的实现代码在kernel\include\linux

2017-09-13 17:16:26 1035

原创 linux中i2c子系统代码结构详解

本文介绍一下linux驱动代码中i2c子系统的驱动代码结构和使用方法,示例平台文件为高通msmXXXX平台一,i2c子系统代码结构i2c-core.c1,使用bus_register进行总线注册2,提供与具体硬件无关的操作逻辑供i2c-dev.c中使用3,将操作逻辑通过EXPORT_SYMBOL导出到整个内核,供其他基于i2c的设备驱动调用i2c-dev.c

2017-09-13 15:17:39 1186

原创 linux模块(module_init)、子系统(subsys_initcall)入口函数详解

linux内核代码是以模块(module)和子系统(subsys)为单元的层次结构。在写模块代码时我们知道入口函数是module_init()或subsys_initcall(),在linux启动时会被调用,这其中更为详细的前因后果是什么呢,一起来了解一下。一,linux模块程序示例下面是一个linux模块的示例程序:#include #include MODUL

2017-09-12 11:13:55 2394

原创 c++与其他语言的语法区别总结

c++是一个具有一些c语言特性的不纯粹的面向对象语言,下面整理一些c++与其他语言的区别之处,避免混淆。c++中还是有指针概念的struct结构体也依然存在,c语言中经常用struct来模拟class的功能。c++支持多继承c++最为特色的是模板的概念,好像是c++语言独有的吧c++中没有interface关键词,使用virtual关键词构建纯虚函数实现接口特性

2017-09-06 10:43:16 1715

原创 android AP侧通过sensor_class挂载sensor的一种方案

1.引言1.1背景目前android上对sensor的处理是将其挂载到类似于sensorhub的独立处理单元上与AP分离,这样便于解决功耗问题。高通平台也类似的将sensor挂在了adsp上,但特定需求下还是希望sensor能够挂载到AP下,并且对上层隐藏这种差异,可以使用相同的处理流程。本文介绍一种使用以input设备为基础的sensor_class抽象类在AP侧挂载sensor的方法。

2017-09-05 19:38:37 3932 2

原创 android oreo 中adb shell中的ps命令需要加参数ps -A

更新了android oreo后发现在adb shell中执行ps命令只得到了很少的信息:msm8937_32:/ # psUSER PID PPID VSZ RSS WCHAN ADDR S NAMEroot 4285 1516 4632 1544 sigsuspend add6067c S sh

2017-09-05 19:29:33 11526 1

原创 英语知识系列:英语单词的可数名词与不可数名词

我们对英语的句子感到不适应,主要是由于英语的句子成分的位置关系与中文有所不同。这篇文章我们来看一下,英语中各个句子成分的位置与中文句子中各个成分的对应关系:汉语句子成分:(状语1) +定语1+ 主语+ 状语2 +谓语 +定语2+ 宾语+ (状语3)英语句子成分:(状语1) +主语+ 定语1+ 谓语+ 状

2017-08-16 01:53:13 2835

原创 linux驱动由浅入深系列:基于高通平台分析触摸屏(TP)、虚拟按键驱动

触摸屏的触摸板(touch panel简称TP)驱动的基本架构和普通按键驱动基本一致,可以参考文章:linux驱动由浅入深系列:输入子系统之二(编写一个gpio_key驱动)。只是其功能稍稍复杂些,配置也多些,下面一起来看一下。TP包括 触摸屏、虚拟按键、虚拟按键背光灯TP驱动芯片厂商主要有:Goodix(汇顶),FocalTech(敦泰科技),cypress(赛普拉斯),synapt

2017-08-04 16:39:17 4011 1

原创 Linux DTS(Device Tree Source)设备树详解之三(高通MSM8953实例分析篇)

本系列导航:Linux DTS(Device Tree Source)设备树详解之一Linux DTS(Device Tree Source)设备树详解之二在前两篇中我们了解了DTS的背景基础知识以及发挥作用的流程,这篇文章我们以高通的MSM8953平台为例来添加一个基础的i2c设备(包含一个gpio中断)。1,首先我们在该i2c设备的驱动中找到了匹配设备与

2017-08-02 12:49:03 17410 1

原创 linux驱动由浅入深系列:camera驱动之一(背景及基础知识篇)

这篇文章了解一下与摄像头相关的概念知识,如光圈、快门速度、CCD,CMOS图像传感器、彩色滤波阵列、白平衡、自动对焦等。下一篇文章介绍应用层通过摄像头获取一张图片的实例程序,之后再逐层深入linux的v4l2架构下的驱动部分。曝光三要素在摄影名词中应该听说过曝光三要素:光圈大小、快门速度、感光度(ISO),今天我们也从这个开始了解吧。先通俗的说一下,光圈就是指曝光瞬间开孔多大;快门速度就是

2017-07-31 17:59:19 11331 2

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关注的人

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