- 博客(218)
- 资源 (1)
- 收藏
- 关注
原创 2024年Android APP小项目
Android手机通过蓝牙连接LED氛围灯,控制LED氛围灯的亮度、颜色、闪烁等。后期考虑修改为温度贴、门锁、汽车胎压、蓝牙测试工具等产品的APP。
2024-06-26 23:26:44
196
原创 TCP和UDP总结
四次挥手:client发起请求,server发出收到(此时缓冲区可能有数据,先发完数据),server发出断开,client发出响应,2MSL最大段生存时间后关闭连接。TCP:面相连接,有三次握手建立连接,四次回收断开连接,有数据确认、超时丢失重传、拥塞机制等,以确保数据的准确、顺序。TCP/IP模型:应用层(HTTP、FTP)、传输层(TCP、UDP)、网络层(IP)、数据链路层(MAC地址)。OSI(开放式系统互联)模型:应用层、表示层、会话层(建立管理终止会话)、传输层、网络层、数据链路层。
2024-04-09 14:25:12
370
原创 Android总结(一)
C++调用java类:env->FindClass,env->GetMethodID,env->NewObject,CallVoidMethod。切换:getFrameManager().beginTransaction(), replace,commit,传参Bundle。使用cs架构,在Binder驱动空间创建缓冲,数据和内核缓冲区映射,接收进程的用户空间和数据缓冲区映射。跨进程通信:用户空间不共享,内核空间数据共享。重载:Java_包名_类名_方法__XX()继承BroadCastReceiver。
2024-04-09 12:01:01
282
原创 进程和线程总结
共享代码段、数据段、堆栈等,共享用户组、文件描述符、信号处理等,但有自己的进程ID、私有栈等。页表到物理内存:页表上有一串不连续的地址(间隔4K),找到指定的行,取出行里的值,这个地址对应物理内存的首地址,并且对应物理内存的4K大小。无名管道:用于父子兄弟等有血缘关系的进程,单向传输(读端写端),64K大小限制,当另一端关闭时,读会阻塞,写会管道破裂。一个进程占2^32=4G大小,3G为用户空间,1G为内核空间。2个进程是相互独立的地址空间,通信需要内核(进程A用户空间-》内核空间-》进程B用户空间)。
2024-04-09 11:03:34
225
原创 QT5总结
鼠标事件:QMouseEvent,mousePressEvent(QMouseEvent *e),mouseMoveEvent(QMouseEvent *e)控件:Window,Rectangle,Image,Text,MouoseArea,ListView,ListModel,ListElement。当调用emit时,调用信号函数,并且传递发送信号的对象指针,元对象指针,信号索引,参数列表到active函数。
2024-04-08 16:16:14
578
原创 ROS2总结
分别创建Xxx.msg、Xxx.service、Xxx.action文件(首字母一定要大写,文件的格式也不能错)声明source install/local_setup.sh后,才能在调用方找到自定义的msg。action:开始用service,中间使用topic反馈,结束使用service。修改setup.py,把配置节点entry_points(可修改重命名)生成build编译过程产生的文件、install可执行文件、log日志。分别创建msg、service、action目录。创建工作空间(目录)
2024-04-08 16:14:49
193
原创 Linux内核驱动
LCD:设备树:bitwidth(RGB565、RGB888)、背光(开启PWM、时钟)、修改水平像素/垂直像素等屏参;I2C:同步半双工,从器件地址,寄存器地址、方向,i2cdetect、i2cget、i2cget,一个总线一个adapter。实现file_operation:owner、open/release、read/write。触摸:中断/复位引脚;常用属性:compatible、address、reg、status。查看:cat /proc/devices、cat /dev/XXX。
2024-04-08 16:13:29
283
原创 C++总结
异步:promise、get_future()、future、wait()、get()、async、launch(async、reference)智能指针:共享指针share_ptr(引用计数),独占指针uniqued_ptr(移动语义)、weak_ptr(引用计数不改变)针对不同对象:局部变量、全局变量、函数、类成员属性、类成员方法、指针、数组。类:继承构造、final、override、default、delete。在内存的位置:静态区、常量区、堆区、栈区、不占内存(引用、声明)
2024-04-08 16:10:22
273
原创 Android 系统精简思路
Android 系统精简思路文章目录Android 系统精简思路Android框架层次层次(从上往下)移除删除(还没有删,待确认)不同层次的log另一种删除预装APK方法Android框架层次层次(从上往下)应用程序层(Application)应用程序框架层(Application Framework)运行时库层(Runtime)硬件抽象层(HAL)Linux内核层(Linux kernel)移除应用程序层:移除APP/可执行文件(已经删除谷歌和高通的一部分APP了)应用程序框架
2020-09-03 15:26:20
2399
原创 Android CAN
Android CANkerel默认编译成模块,没编译进内核│ Symbol: CAN [=m] │ │ Type : tristate │ │ Prompt: CAN bus subsystem support
2020-09-02 17:33:58
1635
1
原创 Android 驱动-点灯
Android 驱动-点灯通过设备树属性1. 设备树&leds_test_node{ compatible = "leds_test"; status = "disable"; // 添加属性 of_get_name_gpio(node, "gpios1", 0) gpios1 = <&gpl2 0 GPIO_ACTIVE_HIGH>; gpios2 = <&gpk1 1 GPIO_ACTIVE_HIGH>;}
2020-09-02 00:12:19
284
原创 Android kernel添加菜单选项
Android kernel添加菜单选项添加kernel模块1. 添加hello.c#include <linux/init.h>#include <linux/module.h>static int __init hello_init(void) /*模块加载函数,通过insmod命令加载模块时,被自动执行*/{ printk(KERN_INFO " Hello World enter\n"); return 0;}static void __e
2020-09-02 00:09:30
250
原创 Android SPI 使用说明
Android SPI 使用说明文章目录Android SPI 使用说明硬件1. SPI7设备树1. 设备树pinctrl2. 设备树使能硬件1. SPI7设备树1. 设备树pinctrl# kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsispi7 { spi7_default: spi7_default { /* active state */ mux { /
2020-09-02 00:07:30
709
原创 Android UART 使用说明
Android UART 使用说明文章目录Android UART 使用说明硬件1. 设备树1. 设备树pinctrl2. 设备树使能3. 高速串口2. 驱动3. 设备树节点硬件1. 设备树1. 设备树pinctrl# kernel/msm-4.9/arch/arm64/boot/dts/qcom/msm8953-pinctrl.dtsipmx-uartconsole { uart_console_active: uart_console_active { mu
2020-09-02 00:06:04
1118
原创 Android添加Setting选项
Android添加Setting选项文章目录Android添加Setting选项控制类添加方法Activitypath布局文件属性加入Activity对话框监听开关备注控制类添加方法void start() {}void stop() {}Activity# packages/apps/Settings/AndroidManifest.xmlpathpackages/apps/Settings/res/drawable/ic_settings_ethernet_black_24
2020-09-02 00:04:05
843
原创 Android 预装APK
Android 预装APK文章目录Android 预装APK步骤1. 添加apk文件2. 添加so3. 添加到系统4. 编译APK直接放入编译生成的目录在Android.mk中进行复制软件权限普通软件默认授权,不弹出对话框预装软件默认授权备注步骤1. 添加apk文件在packages/apps/下以需要安装的APK名字创建文件夹,例如安装AndroidDemo将AndroidDemo.apk放到packages/app/AndroidDemo下在packages/apps/AndroidDem
2020-09-02 00:02:38
1661
原创 Android自定义配置
Android自定义配置文章目录Android自定义配置屏幕不休眠开机显示自定义静态LOGO系统中文显示隐藏状态栏电量开机不显示No SIM card 提示隐藏状态栏和三大按键1. 默认配置文件2. 加载配置文件隐藏搜索栏1. 在布局文件中删除2. 在launcher中去掉关闭系统休眠Launcher图标清空直接隐藏清空布局默认开启以太网添加全局变量Settings.Global字符串定义默认值数据库加载使用开启默认配置测试备注屏幕不休眠# 获取屏幕休眠时间adb shell settings ge
2020-09-01 21:53:36
531
原创 Android修改kernel和logcat的输出级别
Android修改kernel和logcat的输出级别文章目录Android修改kernel和logcat的输出级别kernel查看当前输出级别输出宏定义指定级别高通初始化服务java备注kernel查看当前输出级别cat /proc/sys/kernel/printk6 6 1 7输出# kernel/msm-4.9/kernel/printk/printk.cint console_printk[4] = { CONSOLE_LOG
2020-09-01 21:52:45
2760
原创 Android 开机加速优化
Android 开机加速优化文章目录Android 开机加速优化关闭BootLoader的企鹅关闭开机动画Android关闭锁屏删除预装APP查看预装APP删除编译生成的APK不编译APK1. 统一配置2. 修改单个APK的Android.mk谷歌APP高通APP关闭系统服务修改LOG打印级别并发加载class和resource等资源readahead机制预加载测试1. 关闭系统服务2. 显示3. 删除预装APP4. 其它关闭BootLoader的企鹅# kernel/msm-4.9/arch/arm
2020-09-01 21:51:56
7814
原创 Android 自启动脚本说明
Android 自启动脚本说明文章目录Android 自启动脚本说明开机启动脚本1. 开机启动脚本2. 添加文件3. 添加服务4. 添加服务权限备注开机启动脚本1. 开机启动脚本#!/vendor/bin/sh# LEDecho 105 > /sys/class/gpio/exportif [ -d "/sys/class/gpio/gpio105" ]; then echo out > /sys/class/gpio/gpio105/direction echo
2020-09-01 21:49:52
942
原创 Android 设备节点权限说明
Android 设备节点权限说明文章目录Android 设备节点权限说明selinux 权限1. 临时关闭selinux(重启后失效)2. 源码selinux改成警告模式(无法关掉整个selinux)设备节点文件权限1. 临时加权限(重启后失效)2. 源码修改权限APP权限备注selinux 权限android使用selinux安全,需要关闭selinux才能打开设备节点1. 临时关闭selinux(重启后失效)# 关闭:setenforce 0# 打开:setenforce 1# 查看:ge
2020-09-01 21:48:44
1572
原创 Android 镜像
Android 镜像文章目录Android 镜像镜像说明调整分区大小1. 分区2. 块3. 根文件系统解压镜像备注镜像说明序号分区镜像是否必须编译说明备注1bootboot.img是make bootimagecmdline/内核/设备树2dtbodtbo.img是设备树叠加层3cachecache.img是缓存对应/cache,除了OTA更新外,一般没什么用4mdtpmdtp.img是5vbmet
2020-09-01 21:46:55
1017
原创 Android 烧录与修改分区
Android 烧录与修改分区文章目录Android 烧录与修改分区常用分区uboot烧录设置u-boot环境变量烧录uboot烧录linux进入fastbootdd复制分区查看文件系统大小查看内存大小挂载点源码定义分区大小分区定义文件fastboot分区挂载备注常用分区开机启动画面区:splash1内核区:boot,引导分区系统区:system,系统分区数据缓存区:cache,手机执行后存放缓存的分区用户数据区:userdata,手机执行后存在的数据分区uboot烧录设置u-boot环境
2020-09-01 21:46:32
2256
原创 Android fastboot 烧录说明
Android fastboot 烧录说明文章目录Android fastboot 烧录说明硬件安装 adb和fastboot1. Window2. Linux1. 安装2. 添加规则文件3. 运行fastboot命令需要root权限fastboot烧录脚本硬件平台Micro USB2.0type c 2.0type c 3.0window 10支持支持支持ubuntu 16.04支持支持安装 adb和fastboot1. WindowAndroid
2020-09-01 21:44:58
1173
原创 Android QFIL 烧录
Android QFIL 烧录文章目录Android QFIL 烧录生成镜像包安装python2.71. 安装python-2.7.6.amd64.msi2. 添加环境变量3. 验证prebuilt生成镜像1. 拷贝image2. 运行3. 修改4. 添加logo烧录系统安装QFILQFIL烧录系统1. 添加BootLoader2. 添加xml文件3. 接上USB3. 烧录4. 烧录成功5. 其它配置备注生成镜像包安装python2.71. 安装python-2.7.6.amd64.msi注意:使
2020-09-01 21:43:33
1798
原创 Android 编译
Android 编译说明文章目录Android 编译说明硬件系统环境1. 依赖库2. JDK8编译1. 目标2. 编译脚本备注硬件环境:ubuntu 16.04 64位CPU:2个CPU,2核内存:8Gswap:8G硬盘:300G(源码占45G,编译后总共200G左右)系统环境1. 依赖库sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev
2020-09-01 21:42:23
156
原创 git:导出文件差异
查看commit idgit log --pretty=oneline # 只看提交ID和提交信息,不看作者时间等(按时间倒序排列)注意:id太长一般复制前面7位,或者使用HEADHEAD表示当前提交HEAD^表示上一次提交HEAD^^表示上上次提查看2次commit的文件内容差异git diff 37c4441fa2ccd921b6589454e5fbce4688056a98 c3c3883a71fb1828ad14367b42b1f7188c9c27bb或者git diff HEAD
2020-08-28 16:27:02
939
原创 关于并发与多线程处理与缓冲区
文章目录读与写读写多线程性能提升缓冲区代码读与写读read:只能监控一个句柄select:一次性监控多个句柄是否可读/可写/异常,超时退出。原理:所有句柄进入等待队列,只要有一个句柄的状态改变,立刻返回(进程从阻塞状态进入就绪),再遍历所有句柄,找到状态发生改变的句柄文件句柄有限:1024个文件句柄是最大值+1超时时间必须每次都初始化(否则,这个时间是剩余的时间)可以一次性不同类型的文件句柄,设备文件/socket/管道等等内部使用轮询来检查状态是否改变poll:同select
2020-08-28 16:23:16
984
原创 opencv:DNN模块加载机器学习模型
DNN模块从OpenCV 3.3开始,dnn模块加入到主仓库中,目前支持Caffe、TensorFlow、Torch、PyTorch等深度学习框架。protobufGoogle Protocol Buffers,是google开发的的一套用于数据存储,网络通信时用于协议编解码的工具库。protobuf是一种灵活高效的独立于语言平台的结构化数据表示方法,类似json/xml。TensoFlow模型1. 模型文件 a. 二进制的protobuf格式描述文件:.pb b. protobuf格式文本文
2020-05-16 00:21:23
1903
原创 JNI:调试
符号表:内存地址和文件名/函数名/行号的映射原理:通过报错的寄存器地址逆推出在文件的出错位置addr2line工具addr2line -e xxx.so 寄存器地址ndk-stack命令adb logcat | ndk-stack -sym so目录或者adb logcat > /tmp/xxx.txtndk-stack -sym so目录 -dump xx.txt...
2020-05-15 20:48:06
173
原创 JNI:native层调用Java层
调用Java层静态方法1. java层定义静态方法public static void javaStaticFun(String str) {}2. native层找到对应的类jclass myClass = env->FindClass("com/xxx/www/应用名/类名");if(NULL == myClass){ return;}3. 找到对应的方法jmethodID myMethod = env->GetStaticMethodID(hello, "java
2020-05-15 20:47:33
572
原创 JNI:签名
方法签名:解决方法重载问题签名规则基本类型签名:一般是类型的首字母的大写,比如int对应I(有2个例外:boolean对应Z,long对应J)类签名:L类全名,比如Lcom/xxx/www/应用名/类名数组签名:[类型签名,比如int[]; 对应[I, int[][]对应[[I查看方法签名cd app/build/intermediates/classes/debugjavap -s com/xxx/www/应用名/类名...
2020-05-15 20:46:48
166
原创 JNI:log
native的日志在Android输出native层#include <android/log.h>#define LOGV(…) (__android_log_print(ANDROID_LOG_VERBOSE, TAG, __VA_ARGS__))编译在mk文件添加:LOCAL_LDLIBS +=-llog或者在build.gradle文件的NDK选项添加:ldLibs(“log”)...
2020-05-15 20:45:37
320
原创 JNI:实现流程/数据类型映射关系/参数传递/返回值
步骤1. java层静态代码块:public static native String fun(String str);2. 生成包名.类名.h头文件:javah -classpath bin/class; android.jar -d jni 包名.类名-classpath:把java代码编译成的.class的目录-d:输出目录3. 创建.cpp文件:复制头文件中的函数名再实现函数4. mk文件:编译脚本LOCAL_MODULE := xxx // so名字LOCAL_SRC_FI
2020-05-15 20:43:48
286
原创 JNI:NDK
java层和native层交互Native层:一些本地服务和链接库,通过C和C++语言实现(加密/加速)JNI(java native interface),Java代码和其它语言写的代码进行交互jni实现流程1. 编写Java类代码2. 编译成字节码.class (javac)3. 产生头文件.h (javah)4. 编写JNI代码.cpp5. 编译成链接库文字.so (ndk-build)NDKnative develop kit,开发C++代码的工具下载: http://dev
2020-05-15 20:42:01
135
原创 嵌入式产品:通信方式
常见通信方式:SBUS/UART/I2C/SPI/USB/PPM/JTAG/CAN/MIDI/RS-232/RS-485同步与异步同步:有时钟信号,每个时钟发一位数据(时钟的频率和每一位数据对应)异步:没有时钟信号,有数据起始位/停止位,从数据起始位开始间隔一定的时间取信号串行与并行串行:一位位发,先发低字节并行:一次性发送UART异步串行(先发低字节)接口:TXD/RXD速度:一般9600个比特位每秒,即每秒传输9600/8=1200字节数据长度:8位起始位:高变低停止位:低变高
2020-05-12 19:06:37
286
原创 嵌入式产品:烧录
SD卡启动(emmc有boot才能用SD卡启动)1. windows软件 a. ether b. win32DiskImager2. Linux a. 检查SD卡文件系统类型 dmesg | grep mmcblk b. dd拷贝镜像到SD卡 sudo dd bs=4M if=~/system.img of=/dev/sdb status=progress sudo sync转为emmc启动系统启动后,使用dd把sd卡上的内核uImage和文件系统rootfs.img.tar分别拷贝
2020-05-12 19:05:45
381
原创 嵌入式产品:build root制作系统
Buildroot是一个简单,高效且易于使用的工具,可通过交叉编译来生成嵌入式Linux系统,由Makefile脚本和Kconfig配置文件构成。快速变成编译cross-compilation toolchain、bootloader、kernel、rootfs、第三方库。链接Rockchip原厂Buildroot项目: https://github.com/rockchip-linux/buildrootBuildroot官网: https://buildroot.org下载编译1. wget
2020-05-12 19:03:53
627
原创 嵌入式产品:编译boot
uboot(universal bootloader 通用启动代码)1. 本质:裸机程序:上电就运行,独占CPU,启动内核就结束2. 核心功能:启动系统内核3. uboot是个开源项目,是bootloader标准PC启动流程1. BIOS程序由厂家烧录在主板(norflash)上(操作系统在硬盘)2. BIOS初始化内存/硬盘3. BIOS把操作系统从硬盘读到DDR4. BIOS启动系统5. BIOS结束uboot启动流程1. uboot程序/操作系统在flash上2. uboo
2020-05-12 19:02:18
215
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人