自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(96)
  • 收藏
  • 关注

原创 bash中如何区分系统命令和自定义函数

type 显示命令的类型(系统命令、函数、别名等) 通用检查。declare -F 检查函数是否已定义 判断函数是否存在。declare -f 列出或显示函数的定义 检查函数定义。command -v 显示命令的路径或名称 简洁检查。compgen 列出所有命令、别名、函数等 批量检查。系统命令:输出命令的路径(例如 /bin/ls)。通过以上方法,可以轻松区分系统命令和自定义函数。which 查找系统命令的路径 仅检查系统命令。函数:输出函数名(例如 myfunc)。方法 功能 适用场景。

2025-03-21 11:42:50 412

原创 Android/AOSP源码编译错误:TEMPORARY_DISABLE_PATH_RESTRICTIONS

分析操作流程,在同一个编译环境中,连续编译不同版本的Android源码(Android 11和Android 12),由于不同版本源码编译时设置不同的环境变量,并且不同版本源码对环境变量的检查条件不兼容导致的。,在Android12编译时,不兼容这个变量的设置,并且编译脚本不会取消这个变量,导致编译报错。具体到遇到的这个问题,在Android11上编译是,配置脚本设置。编译环境多次编译过源码,工具链等都是正确配置,不存在问题。取消次环境变量设置,再次编译源码,可正常编译。

2025-03-13 14:11:23 196

原创 Ubuntu上用adb连接Android提示无权限(no permissions (missing udev rules? user is in the plugdev group))

需要配置udev rule,在/etc/udev/rules.d/下创建对应的rule文件。重新插拔设备连接到PC上的USB线即可。

2025-03-11 13:39:59 178

原创 sudo免密码

Ubuntu上执行需要root权限的命令需要使用sudo命令,默认每次都需要输入密码进行授权。可以通过配置sudoer把用户添加到白名单中,执行sudo命令是不需要输入密码验证。

2025-03-10 10:42:47 123

原创 随机过程和马尔科夫过程

随机过程是一族随机变量 {X(t),t∈T}{X(t),t∈T},其中 TT 是参数集(通常是时间或空间),X(t)X(t) 是在每个时刻或位置 tt 的随机变量。例如,股票价格随时间的变化、天气温度的变化、电话呼叫的到达时间等都可以用随机过程来描述。随机过程 {Xn,n=0,1,2,… }{Xn​,n=0,1,2,…状态空间:S={s1,s2,… }S={s1​,s2​,…}(可以是有限或无限的)。转移概率。

2025-02-24 14:28:13 624

原创 vs code配置Android native开发的include path

编辑settings.json(Ctrl + ,或者直接打开如下配置文件,在vs code的界面上只能逐项添加)为了方便修改,可以添加自动以变量,定义android源码的根目录,如果切换源码目录,只需要修改这个变量即可。修改属性:C_Cpp.default.includePath,追加include path。

2024-12-24 14:28:54 428

原创 leetcode:删除链表中倒数第N个节点

【代码】leetcode:删除链表中倒数第N个节点。

2024-12-17 17:13:48 103

原创 Android源码编译命令 m/mm/mmm/hmm

【代码】Android源码编译命令 m/mm/mmm/hmm。

2024-10-21 15:10:42 243

原创 记录一个Android编译中遇到的(有点)奇怪的问题vendor_available

这几个xml是对应工程中hal接口描述文件(学名叫兼容矩阵compatibility matrix,这里不展开),根据.bp文件中的配置vendor是否可用,选择是否在vendor目录下放置此文件。把上述几个.xml文件删除,重新make就可以正常编译通过。此时单独编译工程,使用mm或者mmm命令,可以正常编译。Android源码已经完整编译过。

2024-09-13 11:12:56 636

原创 DDS笔记: hello world解析

获取DomainParticipantFactory -> 创建participant -> 注册sub-pub type -> 创建topic(顺序可延后) -> 创建publisher / subscriber -> 创建writer / reader -> write / read / WaitSet.wait。创建subscriber时传入listener参数,通过listener回调事件和数据(on_subscription_matched, on_data_available)。

2024-08-18 14:47:03 332

原创 Android.bp编译报错

确认可用类型,查找编译目录,找到以下几种平台类型的静态库。前面几种arm类型的都能对应上,x86平台的只编译出来linux_glibc_x86_64_static版本,这个是和当前PC编译环境对应的,其他3中x86类型缺失是由于当前环境下不具备编译条件。这个例子中发现缺少:image:vendor.30。可以通过libc++fs库对应的.bp文件进行确认。同时,提示当前可用版本类型(available variants),每行是一个类型。把“期望类型”和“已有类型”对比差异,逐个字段比较,看缺少哪项。

2024-07-23 17:37:44 1829

原创 Android Hal service compatibility matrix

编译后文件保存的位置:(/etc —> /system/etc)2)在Android.bp中增加对应的编译选项。

2024-04-07 13:31:47 788

原创 JetBrains全家桶vmoptions配置文件(Ubuntu)

【代码】JetBrains全家桶vmoptions配置文件(Ubuntu)

2024-03-26 09:25:14 1596

原创 Linux socket: udp server and client demo

(2)收到client请求后,在server fd上调用accept获得client fd,client sockaddr_in对象。1)创建socket,指定协议版本(v4,v6)、协议类型(udp、tcp),获得server fd。(3)bind和connect入参相同,server fd, addr, addr_length。server端,不指定具体的client地址,设置为INADDR_ANY。1)创建socket,指定协议版本和协议类型,获得server fd。4)接收client连接请求。

2024-01-04 15:01:55 930

原创 c++ asio: udp server and client demo

2)receive_from可以获取到client的endpoint,也可以用这个对象给client发送数据(send_to)2)创建一个udp::endpoint对象,指定协议版本(v4,v6)和端口号,初始化socket对象。执行收发动作,socket.receive_from和socket.send_to。1)需要创建一个io_context对象,初始化socket对象。1)收发都需要一个asio::buffer缓存。创建udp::socket,用于收发数据。一、server 端。

2024-01-04 14:45:06 1018

原创 Bash script进阶笔记

3)必须提供‘下标’,下标可用数字(此时和数组类似),可以是字符串(单引号、双引号都可以)2)需要使用declare -A声明,不能像数组那样可省略declare -a。declare是bash内置命令,可为变量设置属性(值类型、访问类型等)。1)最外面是小括号(),内部元素间用空格分隔,下标用中括号[]指定。-A: associative array Map类型。-a: indexed array 数组。-x: export,导出环境变量。Map类型(关联数组)

2023-12-14 14:29:30 658

原创 Linux 网络命令:ip

ip route 查看路由表。

2023-12-04 15:27:37 738

原创 C++知识点梳理:C++ templates

这3种参数是不同维度的,尤其是类型参数和template template参数,容易混淆,在实例化时需要区分模板参数和普通类型参数,如果定义为模板参数则只能提供模板名(不能用具体类型实例化,如vector,不是vector< int >)6)匿名参数,在模板参数列表中定义匿名参数,这些参数在模板定义中没有用到,仅用于静态分发(通过类型选择不同的模板),或者为了应用SFINAE规则(阻止生成不符合某些规则的模板)。只需要类名和后面的类型说明,和定义时不同,此时需要提供具体的类型。

2023-11-17 12:43:16 538

原创 C++知识点梳理:移动语意、右值

a)传入lvalue调用,过程中分配内存2次:v->x复制一次(第一次分配内存),x move to data_由于data_内存不够大(data_默认构造的,除非v为空)需要在移动构造函数内再次分配内存(第二次分配内存)。本质上,就是这个局部变量是多余的,通过传值在函数参数初始化时创建一个临时变量(省略掉多余的局部变量),函数参数的变量名是必须有的,只是能够选择分配内存(传值、赋值)或不分配内存(传引用、右值)。如果是类成员变量,已经初始化了?b)返回值,NRVO优化,不会复制。

2023-11-13 16:40:32 165

原创 C++知识点梳理:包装类型/词汇类型 vocabulary types

2)std::get< index >(v) 通过索引检索当前保存的值,如果对应索引没有保存值,抛出异常:std::bad_variant_access。3)std::get< type >(v) 通过类型检索当前保存的值,如果对应类型没有保存值,抛出异常:std::bad_variant_access。std::get_if< index >(&v) 通过索引检索当前保存的值,如果对应索引没有保存值,返回nullptr。注意:传入指针,返回指针。注意:传入指针,返回指针。

2023-11-10 14:34:23 165

原创 Linux pipe()系统调用示例

一个pipe是单向数据传输的,不用用于父子进程双向读写。创建2个pipe实现父子进程间的双线读写。Linux系统调用pipe函数,创建一个pipe,通过传入的fd数组返回pipe的读、写两端。其中fd[ 0 ]用于读,fd[ 1 ]用于写。

2023-11-08 17:56:12 266

原创 Rust笔记【3】

Deref 强制转换可以将&String 转换为&str,因为String 实现了Deref trait 因此可以返回&str。Deref 强制转换(deref coercions)将实现了Deref trait 的类型的引用转换为另一种类型的引用。• 当T: DerefMut<Target=U> 时从&mut T 到&mut U。• 当T: Deref<Target=U> 时从&mut T 到&U。• 当T: Deref<Target=U> 时从&T 到&U。2)移动大量数据,避免赋值。

2023-11-07 15:43:01 101

原创 Rust笔记【2】

(3)如果定义中没有使用到lifetime参数,可使用匿名lifetime:'_ ,如下面的read()方法。(2)输出lifetime可自动推导的情况:唯一输入lifetime和方法&self的lifetime。语法示例,lifetime在函数、struct的语境中作为泛型参数使用,无法单独使用。(1)struct中有引用类型,就需要声明lifetime参数。(1)泛型参数列表中,lifetime在typename之前。适配器是惰性的,需要调用消费适配器的方法,才会实际执行。函数中的lifetime。

2023-11-01 09:23:22 363

原创 Rust笔记【1】

注意:作用域结束不是以大括号结束,是以变量最后一次使用结束变量作用域(是没有显式标志)。1)为所有情况单独处理每个分支,例如enum类型。Rust中match匹配必须是穷尽的。字符串slice类型声明:&str。2)使用通配模式,用到匹配的值。字符串字面值是slice。

2023-10-24 14:49:44 387

原创 git patch创建和应用

【代码】git patch创建和应用。

2023-10-11 17:59:14 319

原创 DBus笔记

2)track life-cycle,application exit/crash notification,当app退出时,message bus通知其他应用对应的app name失去owner。1)[Bus Name],可选,如果没有使用dbus daemon就不需要bus name,相当于点对点通信。4)特例,不使用dbus daemon,需要明确server app和client app,以及它们的地址。1)方法调用,前3种消息,调用和返回双向,一对一。2)广播消息,第4中,单向,一对多。

2023-09-15 13:40:22 356

原创 vlan笔记

1)标签型VLAN:Tagging VLAN,IEEE 802.1Q协议(dot one Q),对数据帧附加识别信息。TPID的值固定为0x8100,它标示网络帧承载的802.1Q类型,交换机通过它来确定数据帧内附加了基于IEEE 802.1Q的VLAN信息。每个数据帧头部都会被附加26字节的“ISL包头(ISL Header)”,并且在帧尾带上通过对包括ISL包头在内的整个数据帧进行计算后得到的4字节CRC值。1)静态VLAN(基于端口的VLAN):将交换机的各端口固定指派给VLAN。

2023-09-04 13:56:29 507

原创 函数指针模板

实在是一言难尽,元编程对特定领域的一些问题比较有效,也非常复杂,学习的性价比不高。C++模板的一个边缘特性,做个笔记,不做说明了。

2023-08-31 17:04:37 172

原创 C++模板:用递归实现阶乘的几种方法

主要是演示C++模块的递归语法和实现机制,以阶乘为例。下面分别用类模板(factorial1)、函数模板(factorial3、factorial4)和变量模板(factorial2)分别实现。这里的模板递归都是在。

2023-08-21 10:08:51 1027

原创 C语言读写文件函数:read/write,pread/pwrite,readv/writev,preadv/pwritev,preadv2/pwritev2

read/write/pread/pwrite函数比较直观,这里仅示例readv/writev函数用法。把程序中定义的buf通过writev函数输出到屏幕上。

2023-08-18 11:11:15 805

原创 OBD针脚定义参考

2)其中一种4/5/7/8也是上下对应的;另一种4-5,12-13,7/8和15/16交叉连。OBD定义的一种标准的参考,不同的车场有不同的定义,貌似没有统一。1)1/2/3/6几个针脚都是一样的,分别上下针脚对应。

2023-08-08 16:28:50 3846

原创 AUTOSAR笔记2:AP主要模块

CM(Communication Management)组件提供独立于网络和协议的应用间通信服通信协议CM是独立于具体通信协议的通信管理框架,当前支持部署到不同协议,包括:数据分发服务协议(简称DDS)、车载以太网协议(简称SOME/IP)。DDS协议主要用于内部通信高性能场景;SOME/IP协议主要用于与外部部件对接的通信场景,如与Classic AUTOSAR对接,其中,SOME/IP支持采用两种序列化方式进行。

2023-08-07 10:27:25 1894 1

原创 CAN连接器线序

2023-07-18 15:24:26 192

原创 Android native开发:system/core/libutils

文章目录1. AndroidThreads.h2. Atomic.h3. BitSet.h4. ByteOrder.h5. CallStack.h6. Compat.h7. Condition.h8. Debug.h9. Endian.h10. Errors.h11. FastStrcmp.h12. FileMap.h13. Flattenable.h14. Functor.h15. JenkinsHash.h16. KeyedVector.h17. LightRefBase.h18. List.h19.

2023-06-28 11:07:55 996

原创 Android native开发:system/core/base

跨平台支持获取thread id,在Linux上调用gettid()或syscal(__NR_gettid)2)ScopedLockAssertion,为了Clang做线程安全分析的辅助类。还提供一些assertion宏。1)一些thread相关的__attribute__宏定义。临时保存errno,作用域结束后恢复。

2023-06-19 17:00:17 1181

原创 PC - Android - QNX 传输文件

开发中需要把一些文件从PC(Windows或者Linux)上传输到Android或者QNX上。下面这个脚本,可以在Linux上执行,把文件复制到QNX系统上,即 PC --> QNX。如果需要可以参照编写一个QNX–>PC传文件的脚本。

2023-06-15 17:45:45 1298

原创 不常用的 Linux/C 函数/系统接口整理

如果通过编译参数(-fno-builtin)关闭内置函数,此时为了编译通过的方法:#define strcpy(d, s) __builtin_strcpy ((d), (s))(1)没有C标准库对应方法的__builtin_函数,这类方法总是被inline展开,没有入口地址,只能用在函数中(不能用在表达式中,内联展开会导致编译错误)。(2)有对应C标准库方法的__builtin_函数,内置函数和C库函数有完全相同的原型、入口地址。strp指向的内容,需要用free()函数释放。

2023-06-12 17:58:47 762

原创 Android native开发:systeom/core/libcutils

封装了user id, app id, uid, cache_gid, ext gid, ext cache gid, shared gid, share app gid获取和转换函数。定义了很多AID_xxx的宏,build/tools/fs_config用来生成Android文件的。获取init管理的文件,path是init.rc中的文件路径,返回fd。对__builtin_popcount的封装,计算二进制中1的个数。atomic相关的一些函数,遗留代码,不推荐使用。自定义list及相关操作函数。

2023-06-12 17:46:24 1778

原创 Android studio导入Android源码(AOSP Android 14)

说明:这些设置也可以在Android studio:project structure - project settings - modules - dependencies中修改,速度比较慢,直接编辑.iml文件方便。1)增加excludeFolder列表,排除不需要的源码路径,这样可以加快导入和创建文件索引的速度。说明:也可以通过修改development/tools/idegen/excluded-paths文件,增加排除的路径。删除后,则可以直接跳转到源码文件。

2023-06-10 17:46:30 6965 4

原创 C++函数自动生成规则

一个类,成员类型,删除赋值构造,这个类的赋值构造也会默认删除。

2023-06-10 16:05:15 782

数据结构知识梳理汇总文档

大家都知道数据结构是开发的基础,也是提升水平的必经之路。文档梳理了数据结构的知识体系。数据结构(data structure)是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系,并对这种结构定义相适应的运算,设计出相应的算法,并确保经过这些运算以后所得到的新结构仍保持原来的结构类型。简而言之,数据结构是相互之间存在一种或多种特定关系的数据元素的集合,即带“结构”的数据元素的集合。“结构”就是指数据元素之间存在的关系,分为逻辑结构和存储结构。

2023-01-09

全面的Android view相关知识汇总整理

Android应用开发中View是基本的概念之一,也是应用开发最基础的构件。由于界面控件都是基于View扩展出来的,形成了复杂的技术体系,不理解这些概念、原理,就不可能开发出稳定、性能优化的应用。这些知识也是高级、资深工程师的必备知识基础。这也是在面试中逢考必问的知识点。文档中最近了View相关的技术知识点,既可以作为平时开发时的参考,也可以作为准备面试的知识提纲,帮助自己快速建立知识体系。

2023-01-09

Android面试必备参考提纲(2022)

提纲内容涵盖网络传输、Framework开发、设计模式等多方面,较为前面的整理了面试中可能遇到的各类问题,让面试准备更系统化,节省时间。内容全面,贴近实战,在开发中参考用来提升个人能力也是非常好的选择。

2023-01-07

空空如也

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

TA关注的人

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