自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 资源 (1)
  • 收藏
  • 关注

转载 Binder(初始篇)

Android Binder机制

2023-10-31 17:44:24 76

原创 链表操作与管理

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2019-12-06 11:03:14 368

原创 Bindr机制-向ServiceManager添加服务

Bindr机制-向ServiceManager添加服务

2018-06-11 15:09:19 1028

原创 Binder机制-IPCThreadState过程

Binder机制-IPCThreadState过程

2018-06-10 23:13:50 7097

原创 Binder机制-ProcessState过程

Binder机制-IPCProcessState过程

2018-06-10 21:38:23 2737

原创 Binder机制概述

Binder是Android系统结合自身系统任务特点而实现的一种与传统方式不一样的IPC(Inter-Process Communication)机制。传统的IPC方式有:管道、FIFO、信号、消息队列、信号量、共享内存、Socket。Unix最初只有:管道、FIFO(命名管道)、信号等IPC机制,后来Linux继承和发展了Unix系统的IPC,对其影响比较大的有AT&T的贝尔实验...

2018-06-10 13:45:20 856

原创 POCO开源框架-模块加载卸载过程分析

一般地,基于POCO框架的程序结构都是按模块化架构的。 模块化处理过程主要涉及两个头文件: poco/1.4/Foundation/include/Poco/ClassLibrary.h poco/1.4/Foundation/include/Poco/ClassLoader.h ClassLibrary.h 此头文件的主要目的是单独导出三个函数供外部其他模块调用,实际就是Cla...

2018-05-16 11:37:38 1669

原创 crtmpserver 运行过程简明分析

crtmpserver.cpp main()函数下的执行过程:1. SRAND(); //随机数产生过程 2. InitNetworking(); //初始化异步socket资源,调用接口WSAStartup() 3. Variant::DeserializeFromCmdLineArgs(argc, argv, gRs.commandLine) //把命令行带入的参数,序列化到V...

2018-05-14 14:48:47 510

原创 crtmpserver运行过程详尽分析

crtmpserver是一个基于RTMP协议的流媒体服务器。下面比较详细的分析了它的处理过程:1. SRAND();它其实是一个宏定义,srand((uint32_t)time(NULL)); srand()就是给rand()提供种子seed的,如果srand每次输入的数值是一样的,那么每次运行产生的随机数也是一样的,srand(n),rand()也就是说,以一个固定的数值作为种子是...

2018-05-03 20:26:10 812

原创 Visual Studio添加引入FFMPEG库过程

在Windows下使用VS开发流媒体程序的时候,一般离不开引入开源项目FFMPEG,当然自己写的除外。 FFMPEG库及源码可以在FFMPEG开源网站下载。 一、 点击下载过程 点击下图片的标记部分 接着点击下图链接,有源码下载链接,也有库下载链接。 点击进去可见如下图,有当前的最新版本,也可以下载以前release的版本: 上图中需要对Static、Shared、Dev几个目录

2017-12-28 20:42:55 5353 2

原创 C++调用C#注册的回调函数

本文主要讲解C#注册回调函数提供给C++调用,用于异步通知机制。这在编程过程中是经常需要用到的模式。 此过程需要创建三个工程: 1. C++动态库工程 2. C++ CLR 托管动态库工程 3. C# 测试工程 接着前文C++封装成托管模式供C#调用过程创建的C++ CLR托管工程,在此基础上再创建一个C++动态库工程,此工程创建过程比较简单在此不再详细说明,只注意一点如图。 一、C++

2017-12-28 19:12:01 7004 6

原创 C++托管与C#中的数据类型转换

接上一篇文章 C++封装成托管模式供C#调用过程 在C#调用C++托管库的过程中,C++托管库一般只是封装为真正C++动态链接库(DLL)的一个外壳,其不做任何逻辑功能,但是会存在数据类型及结构上的转换问题,本文就是用于介绍数据类型转换过程中需要考虑的问题。 数据类型很多,限于篇幅原因,文章主要讲解几种常见且较复杂的数据类型。 1. C#句柄与C++窗体句柄类型的转换, IntPtr<—>HWN

2017-12-28 11:31:35 9049 1

原创 C++封装成托管模式供C#调用过程

C++是一种伪面向对象的语言,即可面向对象,也可能面向过程的混合编程语言。能够实现逻辑功能复杂的应用层功能,也能够开发偏向于底层的功能。 在用C#开发应用程序时,大部分底层的功能代码都是用C/C++写的SDK提供的接口,那么在C#中是无法直接调用C++的接口的。这就需要把C++提供的接口封装成能够供C#直接调用的托管模式,本文主要介绍此内容。一、 C++托管工程创建过程第一步:【文件】—>【新建】

2017-12-28 10:43:17 4014

原创 进程挂起wait_event_interruptible

在进程执行过程中,有时候需要等待某个条件满足而进行进程阻塞。 常用的一种方法就是让调用者进程暂时挂起,直到目标进程返回结果后,再唤醒等待的进程。wait_event_interruptible()定义如下:#define wait_event_interruptible(wq, condition) \({ \ int _ret = 0; \ if(!condition) \

2016-12-01 11:31:29 5322

原创 可变参数实现原理

C中可变参函数主要是通过以下三个函数(其实是三个宏)和一个类型来实现的:需要包含头文件 #include <stdarg.h>void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr );函数都是以va开头,其英文全称为varia

2016-11-18 11:10:36 488

原创 Android中MediaPlayer的setDataSource方法的使用

MediaPlayer.java文件路径:frameworks/base/media/java/android/media/MediaPlayer.javaMediaPlayer的setDataSource()方法主要有四种:Sets the data source as a content Uri.

2016-09-23 20:39:58 50182 9

原创 Eclipse中Android开发引用第三方库

Android.mk文件编写LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_MODULE := IDataEncapsulation #生成的库名LOCAL_CPPFLAGS := -DJSON_IS_AMALGAMATION -fexceptions #-Wwrite-strings #编译选项LOCAL_LDLIBS +=

2016-07-01 11:55:38 892

转载 Git 的origin和master分析

首先要明确一点,对git的操作是围绕3个大的步骤来展开的(其实几乎所有的SCM都是这样) 1. 从git取数据(git clone) 2. 改动代码 3. 将改动传回git(git push) 这3个步骤又涉及到两个repository,一个是remote repository,再远程服务器上,一个是local repository,再自己工作区上。其中 1, 3两

2016-06-01 10:18:54 274

转载 Android.mk详解

Android.mk是Android提供的一种makefile文件,用来指定诸如编译生成so库名、引用的头文件目录、需要编译的.c/.cpp文件和.a静态库文件等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 一、Android.mk文件的用途 一个android子项目中会存在一个或多个Android.mk文件 1、单一的Android.mk文件 直接参考NDK

2016-02-23 17:33:35 283

原创 Android编译环境搭建

add-apt-repository "deb http://archive.canonical.com/ lucid partner"apt-get updateecho y|apt-get install sun-java6-jdkecho y|apt-get install uuid-devecho y|apt-get install  uuidecho y|apt-

2016-01-29 17:38:08 428

转载 深入理解:Android 编译系统

一,简介:     Android Build 系统是用来编译 Android 系统,Android SDK 以及相关文档的一套框架。众所周知,Android 是一个开源的操作系统。Android 的源码中包含了许许多多的模块。 不同产商的不同设备对于 Android 系统的定制都是不一样的。如何将这些模块统一管理起来,如何能够在不同的操作系统上进行编译,如何在编译时能够支持面向不同的

2016-01-29 17:00:46 755

原创 echo 命令

若字符串中出现以下字符,则特别加以处理,而不会将它当成一般文字输出:\a 发出警告声;\b 删除前一个字符;\c 最后不加上换行符号;\f 换行但光标仍旧停留在原来的位置;\n 换行且光标移至行首;\r 光标移至行首,但不换行;\t 插入tab;\v 与\f相同;\\ 插入\字符;\nnn 插入nnn(八进制)所代表的ASCII字符;$echo -e

2016-01-29 12:03:11 298

原创 Linux内核驱动加载过程

Linux内核驱动加载过程驱动加载分为两种情况:静态加载和动态加载。1. 静态加载静态加载的方法是把驱动程序直接编译进内核,然后内核在启动过程中由do_initcall()函数加载。do_initcalls()函数路径在/init/main.c过程如下:start_kernel()--->rest_init()--->kernel_init()--->do_basic_se

2016-01-29 11:30:48 8254

原创 Linux 内核启动过程

内核启动前需要满足的条件(寄存器,CPU,Cache、MMU):1. CPU寄存器的设置:    ①R0 = 0    ②R1为机器码    ③R2为启动参数,标记列表在RAM中的起始地址2.CPU工作模式    ①必须禁止中断(IRQ和FIQ)    ②CPU必须设置为SVC模式3.Cache和MMU的设置    ①MMU必须关闭    ②指令Cache可

2016-01-29 10:39:11 728

原创 Android源码下载同步指导

Step 1. 安装Curl命令,从网页服务器上下载相关资源。         Curl是利用URL语法在命令行方式下工作的文件传输工具,支持很多协议,如HTTP、FTP、TELNET等。在PHP等语言开发的实例中经常使用的到。那么在Lamp服务器上如何安装呢? 以Ubuntu为例,只需一条命令即可:        1. sudo apt-get install curl libc

2016-01-29 10:26:29 772

转载 ARM指令详尽解释(英文)

指令格式:  指令{条件}{S} {目的Register},{OP1},{OP2}"{ }"中的内容可选。即,可以不带条件只有目的寄存器,或只有目的寄存器和操作数1,也可以同时包含所有选项。“S” 决定指令的操作是否影响CPSR中条件标志位的值,当没有S时指令不更新CPSR中条件标志位的值  助记符英文全称示例、功

2016-01-28 10:49:19 1344

转载 实例讲解ARM指令集

算术和逻辑指令ADC : 带进位的加法(Addition with Carry)ADC{条件}{S} , , dest = op_1 + op_2 + carryADC 将把两个操作数加起来,并把结果放置到目的寄存器中。它使用一个进位标志位,这样就可以做比 32 位大的加法。下列例子将加两个 128 位的数。128 位结果: 寄存

2016-01-28 10:36:33 757

转载 ARM指令集详解

ARM 可以用两套指令集:ARM指令集和Thumb指令集。本文介绍ARM指令集。在介绍ARM指令集之前,先介绍指令的格式。1  指令格式        (1)基本格式        {}{S} ,{,}        其中,是指令助记符,是必须的,而{}为 指令执行条件,是可选的,如果不写则使用默认条件AL(无条件执行)。        opcode  指令助记符,如LDR

2016-01-28 10:31:04 1368

转载 ARM汇编结构

.section ".start", #alloc, #execinstr在这行代码里,先看来理解section关键字,这个关键字主要用来定义一个段的开始。在计算机组织可执行代码,主要通过分段的方式,比如一般的程序,都包括有几个段:代码段、数据段、堆栈段、全局数据段。这个关键字的格式如下:.sectionsection_name [, "flags"[, %type[,flag_s

2016-01-28 10:18:38 1357

转载 ARM指令教程

转载地址:http://www.cnblogs.com/huhu0013/p/4103024.htmlARM指令教程 ARM汇编程序特点:l         所有运算处理都是发生通用寄存器(一般是R0~R14)的之中.所有存储器空间(如C语言变量的本质就是一个存储器空间上的几个BYTE).的值的处理,都是要传送到通用寄存器来完成.因此代码中大量看到LDR,STR指令来传

2016-01-27 17:52:46 981

转载 linux kernel 从入口到start_kernel 的代码分析

linux kernel 从入口到start_kernel 的代码分析本文的很多内容是参考了网上某位大侠的文章写的>,有些东西是直接从他那copy过来的。最近分析了一下u-boot的源码,并写了分文档, 为了能够衔接那篇文章,这次又把arm linux的启动代码大致分析了一下,特此写下了这篇文档。一来是大家可以看看u-boot到底是如何具体跳转到linux下跑的,二来也为自己更深入的学习l

2016-01-27 16:09:26 448

转载 Linux下profile和bashrc四种的区别

转载地址:http://blog.itpub.net/27040306/viewspace-732343//etc/profile、/etc/bashrc、~/.bash_profile、~/.bashrc很容易混淆,他们之间有什么区别?它们的作用到底是什么?/etc/profile: 用来设置系统环境参数,比如$PATH. 这里面的环境变量是对系统内所有用户生效的。/etc/

2016-01-26 20:12:15 270

转载 ARM嵌入式开发中的GCC内联汇编简介

转载:http://blog.csdn.net/ce123/article/details/8209702在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择。但如果完全通过汇编代码实现,又会过于复杂、难以调试。因此,C语言内嵌汇编的方式倒是一个不错的选择。然而,使用内联汇编的一个主要问题是,内联汇编的语法格式与使用的编译器直接相

2016-01-25 19:05:07 412

转载 gcc与g++的区别

一:gcc与g++比较 编译c/c++代码的时候,有人用gcc,有人用g++,于是各种说法都来了,譬如c代码用gcc,而 c++代码用g++,或者说编译用gcc,链接用g++,一时也不知哪个说法正确,如果再遇上个extern “C”,分歧就更多了,这里我想作个了结,毕竟知识的目的是令人更清醒,而不是更糊涂。误区一:gcc只能编译c代码,g++只能编译c++代码 两者都可以,但是请注意: 1.后

2016-01-06 09:28:47 390

转载 Linux系统中环境变量

先来介绍以下linu中的环境变量Linux 的变量可分为两类:环境变量和本地变量 环境变量,或者称为全局变量,存在与所有的shell 中,在你登陆系统的时候就已经有了相应的系统定义的环境变量了。Linux 的环境变量具有继承性,即子shell 会继承父shell 的环境变量。 本地变量,当前shell 中的变量,很显然本地变量中肯定包含环境变量。Linux 的本地变量的非环境变量不具备继承性。

2016-01-05 15:21:47 283

原创 LDR与ADR伪指令的区别

在学习ARM汇编指令的时候,经常会使用到ldr与adr两条指令,相信大部分初学的人曾经都对这两个命令产生过疑惑。其实这两条指令都是伪指令:ldr是大范围的读取地址伪指令,相当于PC寄存器或其他寄存器的长跳转;adr指令时小范围的地址读取伪指令,相对于PC寄存器或其他寄存器的小范围跳转。要想清楚的说明这两条指令的区别,还是得从实际的例子中来解释,空谈泛泛,难以实际掌握。 ldr r0, _

2015-12-05 14:57:06 907

转载 source insight 常用快捷键

退出程序 : Alt+F4 重画屏幕 : Ctrl+Alt+Space 完成语法 : Ctrl+E 复制一行 : Ctrl+K 恰好复制该位置右边

2015-11-29 18:09:30 420

原创 主机Linux的交叉编译链生成、安装、配置

Linux发行版缺乏一些开发用的工具、文件,例如标准C库的头文件、g++编译器等。1 . 使用以下命令安装基本的开发环境$ sudo apt-get install build-essential还需要安装bison、flex,它们分别是语法、词法分析器:$ sudo apt-get install bison flex安装C函数库的man手册,以后就可以通过类似”man read”命令查看函数的用

2015-11-27 15:47:10 826

转载 Systemd 基本概论介绍

转载路径:https://wiki.archlinux.org/index.php/SystemdBasic systemctl usage Analyzing the system stateList running units:$ systemctlor:$ systemctl list-unitsList failed units:$ systemctl --failedThe

2015-11-16 15:11:58 2173

转载 嵌入式程序地址解析

转载地址:http://blog.csdn.net/linux_103/article/details/8888427搞ARM开发时,在连接目标代码会提到运行地址和加载地址。这两者有什么区别呢?其次,网上也有说链接地址和存储地址,那么这四个地址之间有什么区别?1、运行地址<—>链接地址:他们两个是等价的,只是两种不同的说法。2、加载地址<—>存储地址:他们两个是等价的,也是两种不同的说法。运行

2015-11-16 09:55:40 2236

Linux设备驱动开发详解(基于4.0内核)

http://blog.csdn.net/21cnbao/article/details/45322629

2016-03-28

空空如也

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

TA关注的人

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