自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (8)
  • 收藏
  • 关注

原创 【RK3399】【Android7.1】camsys 驱动加载流程分析

驱动的加载过程(1) camsys driver入口函数​根据 ./kernel/drivers/media/video/rk_camsys 目录下的Makefile可以了解到,该目录源码最终会生成camsys_drv.o模块,设备端加载camsys_drv.o这个模块时,会调用这个模块中module_init注册的入口函数camsys_platform_init,具体代码如下:module...

2019-10-23 14:24:46 1386

原创 【RK3399】【Android7.1】Ubuntu16.04下不能正常使用vi编辑文件解决方法

问题现象:ubuntu16.04中vi在编辑状态下方向键不能用,还有回格键不能删除等我们平时习惯的一些键都不能正常使用。问题原因:ubuntu16.04中预装的是vim tiny版本,想要正常使用我们常用的功能需要的是vim full版本。解决办法:可以安装vim full版本,在full版本下键盘可以正常使用,安装好后同样使用vi命令。安装vim:执行下面的语句安装vim full...

2019-10-20 20:35:03 344

原创 【RK3399】【Android7.1】SecureCRT连接虚拟机中的Linux系统(Ubuntu)

Platform: Firefly-RK3399OS: Android 7.1PC: Ubuntu 16.04什么是SecureCRTSecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说就是可以在Windows下登录UNIX或Linux服务器主机的软件。为什么要使用SecureCRT想要操作linux系统的时候不必进入到linux桌面,可以更方便的在命令行下...

2019-10-20 20:05:56 378

原创 【RK3399】【Android7.1】Ubuntu16.04配置开发编译环境出现的问题

(1) ubuntu16.04 安装 lib32readline-gplv2-dev 出错,解决办法直接用 lib32readline6-dev 替代:lib32readline-gplv2-dev使用命令:sudo apt-get install lib32readline6-dev(2) Android N 源码编译错误:Communication error with Jack...

2019-10-19 08:37:52 493

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(7)——读写信号量

读写信号量概述读写信号量和信号量的关系与读写自旋锁和自旋锁的关系类似。读信号量和写信号量是互斥的,但允许N个读执行单元同事访问共享资源(同事获取读信号量),而最多允许一个写进程获取写信号量。因此,读写信号量相对于信号量更宽松,对于读多写少的情况会明显提高程序的执行效率。读写信号量的使用方法(1) 定义和初始化读写信号量struct rw_semaphore rw_sem; /* 定义读写信...

2019-10-18 16:34:34 249

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(8)——信号量(Semaphore)

信号量(Semaphore)简单介绍信号量也是一种用来保护 临界区(共享数据) 的常用方法,它的使用方法和自旋锁类似。和自旋锁类似之处是,信号量使用时,只有得到信号量的进程才能够执行临界区代码。和自旋锁不同的地方是,在没有得到信号量的时候,进程不会像自旋锁那样原地旋转,而是进入休眠等待的状态。因此当信号量阻塞时小号的系统资源(主要是CPU资源)并不多,也不会出现死机的现象。信号量的使用方法...

2019-10-15 19:10:47 146

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(6)——读-复制-更新(RCU)机制API

RCU使用方法(1) 读锁定static inline void rcu_read_lock(void)static inline void rcu_read_lock_bh(void)(2) 读解锁static inline void rcu_read_unlock(void)static inline void rcu_read_unlock_bh(void)(3) 使用RC...

2019-10-13 16:32:16 209

转载 Markdown进阶(更改字体、颜色、大小,设置文字背景色,调整图片大小设置居中)

Markdown进阶(更改字体、颜色、大小,设置文字背景色,调整图片大小设置居中)Markdown进阶(更改字体、颜色、大小,设置文字背景色,调整图片大小设置居中)...

2019-10-12 09:52:59 895 1

原创 【RK3399】【Android7.1】关于adb的一些问题

“adb”不是内部或外部命令,也不是可运行的程序或批处理文件(Win)原因: 出现这个问题的原因是在对应的目录下没有adb执行程序,即“adb.exe”。解决方法:解决这个问题最简单的一个方法就是,将android stuido软件里的 ./sdk/platform-tools/ 目录下的 adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll 三个文件放在对应的目录下...

2019-10-11 21:58:49 1035

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(5)——读-复制-更新(RCU)机制原理

RCU的原理RCU(Read-Copy-Update,读-复制-更新)机制可以看做是读写自旋锁的扩展。在rwlock机制中读自旋锁和写自旋锁时互斥的,但是在RCU机制中读和写操作是可以并发执行的。在访问共享数据的时候,需要先获取锁,才能访问共享数据。这种原理很简单,其根本思想就是在访问共享资源时,需要先访问一个全局的变量,也就是锁,然后通过全局变量的状态来控制任务线程或进程对共享数据的访问。但...

2019-10-09 17:58:57 239

原创 【RK3399】【Android7.1】Ubuntu16.04配置开发编译环境

获取Ubuntu16.04镜像文件可以在如下地址获取到Ubuntu16.04的镜像文件Ubuntu16.04镜像文件下载链接下载成功后可以得到一个iso镜像文件:ubuntu-16.04.6-desktop-amd64.iso获取的 .iso文件 可以通过vmware 创建新的虚拟机中选中来加载。安装基本的依赖软件sudo apt-get install -y git flex bis...

2019-10-09 17:04:14 1696

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(4)——顺序锁

顺序锁和读写自旋锁的区别顺序锁 同样是自旋锁的一种衍生,顺序锁和读写自旋锁类似,但是顺序锁赋予了 写自旋锁 更高的权限。在 读写自旋锁 中,读自旋锁和写自旋锁的优先级是相同的,当有任务线程或进程获取了读自旋锁后,写自旋锁必须等待读自旋锁被释放后,才能被获取,反过来也一样。在 顺序锁 中,当任务线程或进程获取了读自旋锁后,不必等到读自旋锁被释放也可以获取写自旋锁,并在此过程中继续执行修改共享数...

2019-10-09 12:32:18 141

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(3)——读写自旋锁

为什么会引入读写自旋锁自旋锁并不在乎锁定的临界区是进行读操作还是写操作,因为它仅仅允许同一时间只有一个任务线程或进程获取自旋锁,所以即使有很多个任务线程或进程同时读取共享数据并不会影响到共享资源,临界区也会被锁住,这无疑是影响系统性能的。为了解决这个问题,在自旋锁的基础上衍生出了这样一个分支锁——读写自旋锁。读写自旋锁 可以将临界区的读、写操作区分开。如果开发人员认为临界区的代码只是读取了共享...

2019-10-08 18:51:58 144

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(2)——自旋锁

什么是自旋锁(Spin Lock)

2019-10-08 15:29:50 169

原创 《Android深度探索 卷1 HAL与驱动开发》笔记之Linux驱动程序中的并发操作(1)——原子操作

为什么需要并发控制通常一个 Linux 驱动程序并不是为了给某个用户空间使用而编写的。调用到这个 Linux 驱动程序的用户有可能会有很多个,这就有可能出现多个用户程序同时对这个 Linux 驱动程序进行read、write、ioctl等操作。由于 Linux 驱动程序还会使用一些全局数据(即共享数据),如果同时对这些全局数据进行操作,就有可能会出现异常数据,这就使得 Linux 驱动必须具有能...

2019-10-07 18:50:42 290

原创 Linux 驱动程序编写流程概述

编写 Linux 驱动程序的步骤第1步:(建立 Linux 驱动的骨架加载和卸载 Linux驱动)Linux 内核在使用驱动前需要先加载驱动。在加载过程中会进行一些初始化的工作,比如分配设置注册对应的结构体,创建设备文件,分配内存地址空间等。而当 Linux 内核需要移除这个驱动时,会卸载该驱动,在卸载这个驱动的过程中会释放掉加载时这个驱动占用的资源,比如释放分配的内存地址空间以及删除创建的...

2019-10-06 22:58:08 1332

嵌入式CC++语言精华文章集锦

嵌入式 C C++语言精华文章集锦 C C+语言 struct 深层探索 2 C++中 extern "C"含义深层探索 7 C 语言高效编程的几招

2019-02-15

深入Linux设备驱动程序内核机制

这是一本系统阐述Linux设备驱动程序技术内幕的专业书籍,它的侧重点不是讨论如何在Linux系统下编写设备驱动程序,而是要告诉读者隐藏在这些设备驱动程序背后的那些内核机制及原理。作者通过对Linux内核源码抽丝剥茧般的解读,再辅之以精心设计的大量图片,使读者在阅读完本书后对驱动程序前台所展现出来的那些行为特点变得豁然开朗

2019-02-15

Linux设备驱动开发详解:基于最新的Linux 4.0内核

这是一本介绍Linux设备驱动开发理论、框架与实例的书,《以Linux4.0 版本内核为蓝本,详细介绍自旋锁、信号量、完成量、中断顶/底半部、定时器、内存和I/O映射以及异步通知、阻塞I/O、非阻塞I/O等Linux设备驱动理论;字符设备、块设备、TTY设备、I2C设备、LCD设备、音频设备、USB设备、网络设备、PCI设备等Linux设备驱动的架构和框架中各个复杂数据架构和函数的关系,并讲解了Linux驱动开发的大量实例,使读者能够独立开发各类Linux设备驱动。

2019-02-15

Android系统源代码情景分析

本书结合使用情景,全面、深入、细致地分析了Android系统的源代码,涉及到Linux内核层、硬件抽象层(HAL)、运行时库层(Runtime)、应用程序框架层(Application Framework)以及应用程序层(Application)

2019-02-15

深入理解Android内核设计思想

全面剖析了进程/线程、内存管理、Binder机制、GUI显示系统、多媒体管理、输入系统等核心知识在Android中的实现原理,通过大量图片与实例来引导读者学习,以求尽量在源码分析外,为读者提供更易于理解的思维路径 由浅入深,由总体框架再到细节实现,让读者尽快了解Android内核的设计思想

2019-02-15

Git权威指南

git领域的集大成之作,是一本关于git的百科全书,在广度、深度和实战性上让同类作品望尘莫及。

2019-02-15

空空如也

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

TA关注的人

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