- 博客(560)
- 资源 (20)
- 收藏
- 关注
转载 RPMsg:协议简介
起因之前在RPC原理与FastRPC实现一文中介绍过RPC的原理,简而言之,RPC就是实现本地程序调用位于另一个地址空间的例程(routine)的一种技术手段,其基本架构如图0-1所示。图0-1 RPC基本架构由于RPC只是一种技术手段,并没有一个统一的标准,因此,每一种RPC框架根据其应用场景不同,所采用的实现方式也不尽相同。这些差异主要集中在两个方面:数据的序列化和反序列化方法不同:例如可以使用JSON、XML以及谷歌推出的Protocol Buffer、Flat Buffer等格式作为数据.
2021-10-06 21:05:01
1671
1
原创 Linux内核的同步/互斥机制(待完善)
文章目录一、原子操作二、锁机制2.1 自旋锁2.2 读写锁2.3 RCU2.4 信号量2.5 读写信号量2.6 互斥量三、等待队列Linux是一个多用户多任务的操作系统,在多处理器(SMP)情况下,存在真正的并行运算。内核同步机制和用户空间的同步机制并不是一 一对应的,但是基本的思想都是相同的:保护临界区。只是内核同步机制更适合于在解决内核中的同步问题。一、原子操作原子操作是由编译器来保证的,保证一个线程对数据的操作不会被其他线程打断。在对称多处理器结构中,即使能在单条指令中完成的操作也有可能被打
2021-07-29 18:06:06
774
原创 Android.bp 添加宏开关
以前在android系统控制编译的Android.mk不是纯文本形式,里面还有流控制,而Android.bp是类似JSON的纯文本形式. 对于Android.mk里面流控制部分,在Android.bp里要借助使用go语言文件去进行控制.Android在7.0引入 ninja 编译系统,8.0引入Android.bp替代Android.mk,9.0强制使用Android.bp作为编译配置。Google称之为soong, 具体可以参考:https://android.googlesource.com/pl
2021-07-13 19:34:06
2287
2
原创 GIT 创建分支并推到远程分支
创建本地分支git checkout -b dev此时已经切换到了新分支推送本地分支到远程分支git push origin dev:dev设置关联git branch --set-upstream-to=origin/dev dev/*If you wish to set tracking information for this branch you can do so with:git branch --set-upstream-to=origin/ develop_s5..
2021-07-13 17:06:17
188
原创 Android系统添加USB共享网络
测试平台:MT2712,Android9.0,Linux4.9使用场景:Android车机,通过USB线连接T-box、手机、PC电脑,进而使用他们的网络上网。其实Android系统已经支持USB共享网络,但相应的产品系统中还未开启USB共享网络,那么这个时候就需要添加USB网络共享的一些配置,使得产品支持此功能。一、代码修改:1.内核添加RNDIS的支持CONFIG_USB_USBNET=yCONFIG_USB_NET_DM9601=yCONFIG_USB_NET_SR9700=yCON
2021-07-09 15:25:17
6605
1
原创 经验(持续更新)
在我们写kernel驱动程序时,遇到要求一个数组的大小请记得使用ARRAY_SIZE。如: static initcall_t *initcall_levels[] __initdata = { __initcall0_start, __initcall1_start, __initcall2_start, __initcall3_start, __initcall4_start, __initcall5_start, __initcall6_start, __initcall7_s.
2021-07-05 15:50:38
120
原创 Linux内核驱动:gpio模拟i2c驱动
目录一、配置二、代码分析三、应用读写本文基于linux 4.19 版本内核进行分析。Linux内核很多驱动都使用到I2C子系统。EEPROM、RTC,电池,tp等。inux内核的i2c-gpio是使用GPIO模拟I2C协议的驱动,在内核中已经实现了,我们要做的只需要配置2根GPIO即可。GPIO模拟I2C协议的驱动位于drivers/i2c/busses目录。驱动名称为“i2c-gpio”,驱动文件为drivers/i2c/busses/i2c-gpio.c一、配置config配置1.1.
2021-07-03 19:16:03
7169
4
原创 Linux内核启动流程(待完善)
文章目录本文以Linux3.14版本源码为例分析其启动流程。各版本启动代码略有不同,但核心流程与思想万变不离其宗。内核映像被加载到内存并获得控制权之后,内核启动流程开始。通常,内核映像以压缩形式存储,并不是一个可以执行的内核。因此,内核阶段的首要工作是自解压内核映像。内核编译生成vmliunx后,通常会对其进行压缩,得到zImage(小内核,小于512KB)或bzImage(大内核,大于512KB)。在它们的头部嵌有解压缩程序。通过linux/arch/arm/boot/compressed目录下的
2021-07-02 14:51:45
4007
原创 Linux用户态与内核态通信的几种方式(待完善)
文章目录Linux 用户态和内核态由于 CPU 权限的限制,通信并不像想象中的使用进程间通信方式那么简单,今天这篇文章就来看看 Linux 用户态和内核态究竟有哪些通信方式。我们平常在写代码时,一般是在用户空间,通过系统调用函数来访问内核空间,这是最常用的一种用户态和内核态通信的方式。(关于 Linux 用户态和内核态可以参考 xx)除此之外,还有以下四种方式:procfs(/proc)sysctl(/proc/sys)sysfs(/sys)netlink 套接口procfs(/proc
2021-07-02 14:22:33
3259
4
原创 进程和线程
文章目录一、抽象类比:二、进程三、线程四、进程和线程的区别一、抽象类比:单CPU:一台单核处理器计算机 = 一个车间;多CPU:一台多核处理器计算机 = 一座工厂;进程:一个车间 = 一个进程; (即一个运行的程序)多进程:一座工厂可以同时运行多个车间;CPU和进程:单CPU只能同时运行单个进程,多CPU可以同时运行多个进程。线程:车间内一个工人 = 一个线程;进程与线程:一个进程可以包括多个线程。线程间内存共享:车间的空间是工人们共享的,比如许多房间是每个工人都可以进出的。一个进程的内
2021-06-30 17:01:37
139
转载 Android进程间通信
一、什么是进程间通信进程间通信(IPC,Interprocess communication)是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。二、如何开启多进程正常情况下,在Android中多进程是指一个应用中存在多个进程的情况,因此这里不讨论两个应用之间的多进程情况。在Android中上层应用开发使用多进程唯一一种方法,那就是给四大组件(Activity、Service、Receiver、ContentProvider)在AndroidMenifes
2021-06-30 14:39:42
309
原创 Linux多线程间通信和多进程间通信的方式
进程间通信的概念每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内核提供的这种机制称为进程间通信(IPC,InterProcess Communication)进程间通信的7种方式第一类:传统的Unix通信机制管道/匿名管道(pipe)管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道。只能用于父子进程或者兄
2021-06-29 10:18:13
9801
3
转载 VMware下对Ubuntu进行扩充磁盘大小
1.“编辑虚拟机设置”-“硬盘”-“实用工具”-“扩展”2.输入需要扩展的磁盘容量大小3.点击扩展,扩展完毕,扩充完毕后,打开Ubuntu,然后安装一个工具Gpartedsudo apt-get install Gparted4.安装完毕打开此应用5.打开Gparted应用,你可以看到已分配分区状况和新增未分配的分区6.依次删除/dev/sda5和/dev/sda2 (若无法删除,右键/dev/sda5,点击“SwapOff”),点击菜单栏上删除按钮,依次删除/dev/sda5和/dev
2021-06-29 09:50:47
1645
1
转载 Android10.0系统启动之Zygote进程-[Android取经之路]
文章目录1.概述2.核心源码3.架构3.1 架构图3.2 Zygote 是如何被启动的3.2.1 init.zygote64_32.rc3.2.2 Zygote进程在什么时候会被重启3.3 Zygote 启动后做了什么3.4 Zygote启动相关主要函数:4. Zygote进程启动源码分析4.1 Nativate-C世界的Zygote启动要代码调用流程:4.1.1 [app_main.cpp] main()4.1.2 [AndroidRuntime.cpp] start()4.1.3 [JniInvocat
2021-06-28 16:18:48
400
转载 repo新分支
近期在做一个项目的时候,需要在原来代码的基础上创建一个分支,并在新分支上维护开发。 其实repo上创建分支很简单,就是git创建新分支一样,为什么?其实熟悉repo的朋友就会知道,repo只不过是利用git(manifest仓库)来记录管理多个git仓库而已。因此我们利用repo创建一个新的分支,其实就是给repo管理的每个git仓库创建一个一样的新分支。我们知道单个git仓库创建分支的命令很简单。1.创建一个新分支git 创建一个分支: git checkout -b new_branch_name
2021-06-28 15:42:27
1611
原创 Android 10.0系统启动之init进程-[Android取经之路]
摘要:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,kernel启动完后,在用户空间启动init进程,再通过init进程,来读取init.rc中的相关配置,从而来启动其他相关进程以及其他操作。Android init 启动进程主要分三个阶段分析:概述,Init如何被启动Init进程启动的源码分析rc语法分析1.概述:init进程是linux系统中用户空间的第一个进程,进程号为1.当bootloader启动后,启动kernel,k
2021-06-28 11:01:51
641
1
原创 Linux之本地进程间Socket通信
一、Sokcet 学习路径1:http://blog.youkuaiyun.com/u010073981/article/details/50734484 学习路径2:https://www.cnblogs.com/cy568searchx/p/4211124.html 学习路径3:https...
2021-06-24 11:18:40
2299
转载 C++封装一个易用的打印backtrace信息的函数
C++封装一个易用的打印backtrace信息的函数 1、前言2、几个需要用到函数2.1、backtrace函数2.2、backtrace_symbols函数2.3、__cxa_demangle函数 3、测试各个函数的使用3.1、使用backtrace()获取到的堆栈信息...
2021-06-24 10:31:49
885
原创 ffmpeg使用方法
由图片生成RGB文件: ffmpeg -i test.png -s 1920x720 -pix_fmt rgb24 LOGO.rgb。如果是MTK系统,将LOGO.rgb重命名为LOGO.BGR即可。(实测ok)由mp4生成h264文件:ffmpeg -i Output.mp4 -pix_fmt yuv420p -vcodec h264 -s 1920x720 -r 30 out.h264。(实测ok)...
2021-06-21 19:13:09
459
原创 遇到的问题总结
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-06-21 16:54:45
86
转载 C语言进阶——likely和unlikely
在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习。我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直达问题本质,把大家从大海捞针的痛苦中解脱出来。 文章目录 1 定...
2021-06-21 15:27:00
1070
转载 linux setsockopt函数
<div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css"> <div id="content_views" class.
2021-06-21 14:30:34
1991
原创 i2c_transfer的返回值
<div id="article_content" class="article_content clearfix"> <link rel="stylesheet" href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/ck_htmledit_views-b5506197d8.css"> <div id="content_views" class.
2021-06-21 14:24:01
8874
5
原创 [Android]使用property_get和property_set的注意事项
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/weixin_44873133/article/details/107302688收起在学习资料满天飞的大环境下,知识变得非常零散,体系化的知识并不多,这就导致很多人每天都努力学习到感动自己,最终却收效甚微,甚至放弃学习。我的使命就是过滤掉大量的垃圾信息,将知识体系化,以短平快的方式直达问题本质,把大家从大海捞针的痛苦中解脱出来。文章目录1
2021-06-21 11:27:07
3105
转载 I2C 时序详解,精确到每一个时钟
1 输入输出模式设置官方文档中有这样的介绍: SDA和SCL都是双向线路,都通过一个电流源或上拉电阻连接到正的电源电压,当总线空闲时,这两条线路都是高电平,连接到总线的器件输出级必须是漏极开路或集电极开路才能执行线与的功能;2C 总线上数据的传输速率在标准模式下可达100kbit/s,在快速模式下可达400kbit/s,在高速模式下可达 3.4Mbit/s ;连接...
2019-05-09 14:56:22
1515
转载 C++中 打印size_t 和 ssize_t
#Use the z modifier:size_t x;ssize_t y;printf("%zu\n", x); // prints as unsigned decimalprintf("%zx\n", x); // prints as hexprintf("%zd\n", y); // prints as signed decimal
2019-05-09 10:50:25
563
转载 找不到 mkimage 命令
举个例子: UIMAGE arch/arm/boot/uImage"mkimage" command not found - U-Boot images will not be built/home/liwei/share/myandroid/kernel_imx/arch/arm/boot/Makefile:80: recipe for target 'arch/arm/boot
2017-05-22 21:39:23
2776
转载 Android Studio导入android源码技巧(源码无需编译即可导入)
开始之前,我们需要一份已经编译过的源码,如果你还没有编译或者还没有源码请看我的上一篇文章ubuntu12.04(64bit)编译android4.4源码、sdk及kernel,里面有你编译源码需要的所有资源。为什么我标题上说不需要编译就可以导入Android Studio,但是却又需要一份编译好的源码呢,先mai个关子,请向下看,看完你就明白了。注:我这篇文章是衔接着上一篇文章ubuntu
2017-05-07 19:55:30
1071
转载 Android 音频系统:从 AudioTrack 到 AudioFlinger
1. Android 音频框架概述Audio 是整个 Android 平台非常重要的一个组成部分,负责音频数据的采集和输出、音频流的控制、音频设备的管理、音量调节等,主要包括如下部分:Audio Application Framework:音频应用框架 AudioTrack:负责回放数据的输出,属 Android 应用框架 API 类AudioRecord:负责录音
2017-05-07 19:18:34
764
转载 Ubuntu 16.04 /home 目录迁移到独立分区的方法
1 简介Ubuntu分区方案一般有下面三种:/boot 200M、/ 30G、/home 剩余全部空间、swap 8G/ 剩余全部空间、swap 8G/ 30G、/home 剩余全部空间、swap 8G第一种分区方案是为了将/boot独立出来,防止操作系统无法启动,这样分的好处博主没体会到,好像/boot没什么用,而且把磁盘搞得支离破碎的,所以博主一般不用这种分法。
2017-05-07 18:27:55
786
转载 [Android 编译(一)] Ubuntu 16.04 LTS 成功编译 Android 6.0 源码教程
1 前言经过3天奋战,终于在Ubuntu 16.04上把Android 6.0的源码编译出来了,各种配置,各种error,各种爬坑,特写此博客记录爬坑经历。先上图,Ubuntu上编译完后成功运行模拟器,如图:2 编译环境UbuntuKylin 16.04 LTSAndroid 6.0_r1Open JDK 73 准备工作(1) 下载Android 6
2017-05-07 18:14:58
878
转载 MediaPlayer和AudioTrack播放Audio的区别与联系
播放声音可以用MediaPlayer和AudioTrack,两者都提供了java API供应用开发者使用。虽然都可以播放声音,但两者还是有很大的区别的。其中最大的区别是MediaPlayer可以播放多种格式的声音文件,例如MP3,AAC,WAV,OGG,MIDI等。MediaPlayer会在framework层创建对应的音频解码器。而AudioTrack只能播放已经解码的PCM流,如果是文
2017-03-31 19:08:33
1114
转载 记一次Android系统下解决音频UnderRun问题的过程
【前言】 因为这几天在为设备从 Android M 升级到 Android N 的 bringup 做准备,所以一直没写博客。趁现在刚刚把 Kernel 部分的移植做完,忙里偷闲把 2 周前解决的一个音频 UnderRun 问题记录一下,留作以后参考。 问题现象是:使用腾讯视频 APP 播放视频,一段时间后会出现 pop-click 噪音,听起来类似“哒哒”一样的声
2017-03-31 18:58:17
2090
转载 Android 7.0 Audio的Resample过程详解
Android 7.0 Audio的Resample过程详解Qidi 2017.02.23 (Markdown & Haroopad)【前言】处理过音频文件的工程师都知道音频数据存在采样率(Sample Rate)这个指标。在位深度(Bit Depth)一定的情况下,采样率越高,理论上来说播放出来的声音就越细腻,录制的声音也就越保真,反之亦然。但在较早的Andr
2017-03-31 18:56:00
1570
转载 深入了解MediaServer-1
http://blog.youkuaiyun.com/myarrow/article/details/7048488
2014-10-22 10:55:02
678
转载 ifeq ifneq ifdef ifndef
http://blog.youkuaiyun.com/shaoyizhe2006/article/details/8012929
2014-10-20 14:31:45
741
转载 C++中引用(&)的用法和应用实例
http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html
2014-10-17 18:08:43
469
转载 Android编译系统简要介绍和学习计划
http://blog.youkuaiyun.com/luoshengyang/article/details/18466779
2014-10-15 18:31:36
469
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人