5 RadianceBlau

尚未进行身份认证

暂无相关描述

等级
TA的排名 1w+

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

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

2018-08-12 18:07:14

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

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

2018-06-06 15:27:50

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

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

2018-03-11 13:53:05

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

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

2018-03-07 00:33:16

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

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

2018-03-04 22:30:20

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

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

2018-03-04 14:22:10

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

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

2018-03-02 00:50:20

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

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

2018-02-28 21:05:08

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

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

2018-02-25 17:17:01

linux网络驱动分析

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

2017-12-08 18:11:50

linux系统调用实现的介绍

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

2017-12-08 14:24:51

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

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

2017-12-01 16:23:57

linux中netlink机制的实例讲解

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

2017-11-28 17:52:14

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

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

2017-11-20 14:01:15

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

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

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

2017-11-01 18:02:09

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

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

android编译系统解析,执行makebootimage后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

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

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

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

2017-10-24 20:11:36

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!