程序员资料汇总

目录

  • 资讯网站
  • WINDOWS
    • WINDOWS 工具
        • 1、在windows 10 安装了python-3.9.6-amd64.exe后,为什么在cmd上,python --version还是没有显示版本?
        • 2、如何列出文件夹的树形结构? 用 tree /F 文件夹路径
        • 3、用 "C:\Program Files\McAfee\Agent\x86\frminst.exe" /forceuninstall 卸载时出现如下提示:无法终止服务 McAfee Agent Common Services,请确认您有足够的权限终止。
        • 4、安装语言包
        • 5、win10开机出现fixing stage,导致每次非法关机要几个小时
        • 6、扫描局域网IP
    • 批处理
        • 1、批量截屏
  • UBUNTU
      • FAQ
        • 1、对于类似ninja那样没有分行的文件,怎么查找内容?
        • 2、修改PATH 变量
        • 3、UBUNTU 16 执行某个文件报错:version `GLIBCXX_3.4.22' not found
  • 面试
    • 算法
  • ANDROID
    • 源码阅读
    • 命令集锦
        • 1、查内核/android版本
        • 2、屏幕信息
        • 3、Android常用ADB调试命令汇总
        • 4、mtk日志
        • 5、资源限制
        • 6、内核日志控制
        • 7、镜像导出
        • 8、机顶盒相关命令
    • LINUX kernel
        • tech stack
    • 编译
      • FAQ
        • 1、如何把文件集成到ramdisk?
        • 2、Compiling Busybox for android
        • 3、android studio 访问https失败,改为http报安全问题。解决方法:
        • 4、super.img 是如何编译出来的?
        • 5、vbmeta.img 是如何编译出来的?
        • 6、编译参考手册
        • 7、ninja blueprint kati
        • 8、如何把模块集成到recovery
        • 9、ninja介绍
        • 10.git lg
        • 11、解包打包
    • 调试
      • adb
        • 1、find 忽略显示“No such file or directory”等权限问题
        • 2、查看有哪些环境变量及变量的值 export echo
        • 3、动态库的依赖 ldd
        • 4、adb 是怎么把pc和android 终端连接起来的
      • KERNEL 层
        • 1、crash 工具
        • 2、gdb 工具
        • 3、linker 工具
      • NATIVE 层
        • 1、strace工具用法及跟踪分析应用
        • 2、crash-catcher
        • 3、使用 strace - 官方文档
      • 应用层
        • 1、
    • 性能优化
      • 应用层
        • 1、分析应用性能-官方
      • 系统层
        • 1、 IORap
        • 2、art profile
        • 3、面试问帧率优化,看看matrix是怎么做的
        • 4、抓开机 trace
    • 嵌入式
      • ARM
        • 汇编
    • 内存
      • 汇总
      • MAT
      • 统计
    • 存储
      • 存储评估
        • 1、ANDROID存储的评估指标有哪些?
      • 存储器件
        • 1、UFS
      • 文件系统
        • 1、F2FS
        • 2、查看当前系统支持哪些文件系统
        • 3、文件预读
      • 挂载
      • EROFS
        • 1、EROFS 解读
    • 输入相关
        • 1、虚拟按键是通过哪种机制上报的?
        • 2、触摸屏快速点击事件误识别为滑动事件
    • 开关机
      • 启动
        • 1、Android Verified Boot (AVB)介绍
        • 2、在低端的产品中,发现开机文件系统挂载花费时间较多
        • 3、规范化启动原因-官方
        • 4、回滚机制
        • 5、bootloader 相关
        • 6、驱动
        • 7、开机黑屏
      • 开机优化
        • 1、优化启动时间 *****
    • 电池与功耗
      • 充电
        • 1、充电协议
      • 电池健康
        • 1、healthd 官网文档
    • GUI管理
      • 窗口管理
        • 1、如何让禁止截屏失效
      • 图形图像
      • SYSTEMUI
      • 输入输出
        • 输入法的一些命令
    • 应用组件
      • 包管理
      • 活动管理
    • 应用编程
      • APP编程工具
        • 1、离线编译
      • C/C++编程
        • 1、字符串格式化
    • USB
      • FAQ
        • 1、android usb命令举例:
        • 2、Linux USB 在sys文件系统中是如何组织的?
    • 安全
      • selinux
        • 1、selinux 官方文档
      • 加解密
        • 1、铁线蕨算法 Adiantum
      • 逆向工程
        • 1、APP 逆向调试
        • 2、Unidbg
      • AVF 框架
        • 1 、AVF - 官方
  • 网络
    • ftp
        • 1、busybox 可以用ftpget 和 ftpput 来调试ftp的连接问题,-v 可以知道错在哪个阶段。
        • 2、[ftp的上传下载测试网站:](https://test.rebex.net/)https://test.rebex.net/
        • 3、[windows ftp 命令](https://blog.csdn.net/yangzex/article/details/126120889)
  • 多媒体
    • 机顶盒
      • 调试方法
      • 电视
  • 人工智能
    • 语音
    • 视觉
    • 机械
    • 语言语义

资讯网站

半导体行业观察
专利之星检索系统

WINDOWS

WINDOWS 工具

1、在windows 10 安装了python-3.9.6-amd64.exe后,为什么在cmd上,python --version还是没有显示版本?

可以用where python 看看当前启用的是哪个python, 如果不是预期的python, 修改path 环境变量,让预期的python 放在最前面。

2、如何列出文件夹的树形结构? 用 tree /F 文件夹路径

3、用 “C:\Program Files\McAfee\Agent\x86\frminst.exe” /forceuninstall 卸载时出现如下提示:无法终止服务 McAfee Agent Common Services,请确认您有足够的权限终止。

要以管理员身份运行命令行
关于处于托管模式时无法删除mcafee agent

4、安装语言包

按键盘Win+R,输入lpksetup命令,点击【确定】

5、win10开机出现fixing stage,导致每次非法关机要几个小时

首先进入驱动器属性,点击工具界面,可以看到检查驱动器中的文件错误
然后点击扫描驱动器,扫描完之后看看是否有问题
而对于一些硬盘有坏道或少量其他问题可以使用不影响硬盘开机使用,则可以将的Windows10开机检查磁盘的功能禁用掉。在注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control,把键BootExecute的值删除。(autocheck autochk *)

6、扫描局域网IP

for /l %%i in (2,1,255) do ping -n 1 192.168.3.%%i

批处理

1、批量截屏

set filepath=sreencap\havewriten.txt
if exist %filepath% (
set /p pagenum=<%filepath%
) ELSE (
set pagenum=0
)
:delright
if "%pagenum:~-1%"==" " set pagenum=%pagenum:~0,-1%&&goto delright
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png sreencap/%pagenum%.png
set /a pagenumN=%pagenum%+1
echo %pagenumN% >%filepath%
pause

UBUNTU

FAQ

1、对于类似ninja那样没有分行的文件,怎么查找内容?

 grep -oE ".{0,80}e2fsck.{0,80}" out/build-qssi.ninja

把关键词的前后80字写打印出来

2、修改PATH 变量

echo $PATH             //查看当前PATH的配置路径
export PATH=$PATH:/xxx/xxx  //将需配置路径加入$PATH  等号两边一定不能有空格
//配置完后可以通过第一句命令查看配置结果

3、UBUNTU 16 执行某个文件报错:version `GLIBCXX_3.4.22’ not found

$ ./xlogel --help
./xlogel: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.22’ not found (required by ./xlogel)

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get install --only-upgrade libstdc++6

ubuntu如何从升级glibc失败中恢复
Windows Subsystem for Linux(WSL)的安装

面试

安卓 offer 收割基

算法

LeetCode

ANDROID

源码阅读

内核
内核2
内核-可查找
aosp 新
aosp 1-9
aosp 1-10

github

VSCode+clangd阅读linux内核源码

命令集锦

1、查内核/android版本

cat /proc/version

2、屏幕信息

dumpsys display | grep DisplayDeviceInfo

3、Android常用ADB调试命令汇总

Android常用ADB调试命令汇总

4、mtk日志

adb shell am broadcast -a com.mediatek.mtklogger.ADB_CMD -e cmd_name start/stop --ei cmd_target 1/2/4 【打开/关闭mtklog, 124分别表示mobilelog, modemlog, networklog】

5、资源限制

shell -> ulimit
init.rc -> setrlimit
c ->setrlimit

6、内核日志控制

echo 1 4 1 7 > /proc/sys/kernel/printk;
/proc/sys/kernel/printk

7、镜像导出

导出安卓分区镜像

adb forward tcp:8888 tcp:8888 #开启手机和电脑的传递数据的TCP连接
dd if=/emmc@usrdata | busybox nc -l -p 8888 #手机上开始传输挂载的/emmc@usrdata ,即/data分区
nc 127.0.0.1 8888 > /home/kali/android_data.dd

8、机顶盒相关命令

Android系统调试指令
ls /proc/msp/win*

LINUX kernel

tech stack

linuxStack

编译

FAQ

1、如何把文件集成到ramdisk?

例:external/e2fsprogs/e2fsck/Android.bp

cc_binary {
    name: "e2fsck_ramdisk",
    stem: "e2fsck",
    static_executable: true,
    ramdisk: true,
    defaults: ["e2fsck-defaults"],
    system_shared_libs: [],
    static_libs: e2fsck_libs,
}

2、Compiling Busybox for android

these instructions for busybox-1.24.1
apt-get install libpam0g-dev libsepol1-dev libselinux1-dev libncurses5-dev
setup a standalone toolchain, i used platform android-14 from ndk-r10d. add toolchain/bin to path.
$NDK/build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-14 --install-dir=~/android
make android_ndk_defconfig
make menuconfig
busybox settings -> build options -> update sysroot to to your ndk PATH
if building for 5.x+, added
-pie -fpic -fPIE to CFLAGS
-pie to LDFLAGS
uncheck static build (doesn’t work for android-14)
remove misc/i2c support
android busybox 编译指南
busybox 已编译好的

3、android studio 访问https失败,改为http报安全问题。解决方法:

buildscript {
    repositories {
        jcenter()
        maven {
            allowInsecureProtocol = true
            url 'http://maven.google.com/'
            name 'Google'
        }
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.2.1'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

4、super.img 是如何编译出来的?

如链接:android10 super.img编译
各种image的生成 android 9

5、vbmeta.img 是如何编译出来的?

如链接:vbmeta.img镜像生成
Android 10 metadata 分区说明

6、编译参考手册

Android编译系统参考手册

7、ninja blueprint kati

Android 编译之android.bp

8、如何把模块集成到recovery

可以参考recovery bin文件,加上“recovery: true”

110 cc_binary {
111 name: “recovery”,
112 recovery: true,

9、ninja介绍

ninja:一个简单的构建方式
ninja文件阅读器
Ninja编译介绍

10.git lg

git lg是一个联合命令,非git原生,需要先运行下面的命令
git config --global alias.lg “log --color --graph --pretty=format:‘%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ --abbrev-commit”

11、解包打包

展锐T7520(ANDROID 11) boot.img解包

调试

adb

1、find 忽略显示“No such file or directory”等权限问题

后面添加”2>/dev/null“:find -name “ssh” 2>/dev/null

2、查看有哪些环境变量及变量的值 export echo

# export
ANDROID_DATA
ANDROID_ROOT
ANDROID_SOCKET_adbd
EXTERNAL_STORAGE
HOME
HOSTNAME
LOGNAME
# echo $PATH
/sbin:/system/bin:/vendor/bin

3、动态库的依赖 ldd

# ldd /system/lib/libcrypto.so
        libc.so => /apex/com.android.runtime/lib/bionic/libc.so (0xf33c8000)
        libm.so => /apex/com.android.runtime/lib/bionic/libm.so (0xf3354000)
        libdl.so => /apex/com.android.runtime/lib/bionic/libdl.so (0xf3394000)

4、adb 是怎么把pc和android 终端连接起来的

关于adb参与android调试的理解

KERNEL 层

1、crash 工具

crash-8.0.1 :
$ cat /proc/version
Linux version 4.4.0-210-generic (buildd@lgw01-amd64-009) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) ) #242-Ubuntu SMP Fri Apr 16 09:57:56 UTC 2021
sudo apt-get install bison

cc -c -g -DARM64 -DGDB_10_2 main.c
main.c:20:20: fatal error: curses.h: No such file or directory
compilation terminated.
Makefile:334: recipe for target ‘main.o’ failed
make[4]: *** [main.o] Error 1
sudo apt-get install libncurses5-dev

CRASH安装和调试
crash工具搭建
crash-utility
gdb

2、gdb 工具

Android安全(八)–gdb调试

3、linker 工具

android源码分析之linker初始化

NATIVE 层

1、strace工具用法及跟踪分析应用

Linux中strace工具用法及跟踪分析应用

2、crash-catcher

crash-catcher

3、使用 strace - 官方文档

使用 strace

应用层

1、

Android Studio导入系统源码

性能优化

应用层

1、分析应用性能-官方

分析应用性能

系统层

android性能分析之常用命令
性能优化小结

1、 IORap

IORap:让Android 11 提高 App 冷启动速度 5% 以上

2、art profile

art profile生成差异的问题分析

3、面试问帧率优化,看看matrix是怎么做的

面试问帧率优化,看看matrix是怎么做的

4、抓开机 trace

How to capture Boot-up trace

嵌入式

ARM

汇编

汇编翻译

内存

汇总

内存DEBUG汇总

MAT

利用Eclipse的MAT查找安卓内存泄漏问题

统计

怎样统计所有进程总共占用多少内存?

存储

存储评估

1、ANDROID存储的评估指标有哪些?

功能性:文件系统(VFS、EXT4、F2FS、EROFS),挂载与fstab,vold,StorageManagerService,FUSE与直通模式,sdcardfs,存储快速统计与quota
性能:
可靠性:分区加密与dm-crypt、 文件级加密、镜像验证与dm-verity 、DAC与sandbox、MAC与selinux、NameSpace
能耗

存储器件

1、UFS

深度解读UFS 4.0的FBO特性
UFS 手机相关调试接口
5.4版本内核ufs设备信息查询方式

2|coful:/sys/kernel/debug/mmc0 # cat ios
clock:          200000000 Hz
vdd:            20 (3.2 ~ 3.
bus mode:       2 (push-pull)
chip select:    0 (don't care)
power mode:     2 (on)
bus width:      3 (8 bits)
timing spec:    10 (mmc HS400)
signal voltage: 1 (1.80 V)
driver type:     0 (driver type B)

文件系统

1、F2FS

F2FS源码分析系列文章目录

2、查看当前系统支持哪些文件系统

cat /proc/filesystems

3、文件预读

VFS源码分析-Readahead预读机制

挂载

动态分区

EROFS

1、EROFS 解读

Linux 文件系统学习之 EROFS 源码阅读笔记

输入相关

1、虚拟按键是通过哪种机制上报的?

1.在normal mode下,tp button也是和其它触摸事件一样,以坐标形式的input_event进行上报。在初始化时会通过tpd_button_setting()函数根据定义在tpd_custom_XXX.h文件中的配置信息将虚拟按键的坐标信息写在/sys/board_properties/virtualkeys.mtk-tpd中。工作时,tp driver将按下的点的坐标进行上报,Android上层会读取sys中的按键配置信息,再判断上报的坐标是否属于某个按键的坐标范围,以此将坐标信息转化为具体的按键键值。
2.在factory mode和recovery mode下,由于Android还未启动,所以按键事件不能采取1中的上报机制,而是利用tpd_button()函数来对按键进行直接上报处理。
所以,对于normal mode,按键事件不需要调用tpd_button()函数上报,而在factory mode和recovery mode下,必须调用tpd_button()函数对虚拟按键事件进行上报。

2、触摸屏快速点击事件误识别为滑动事件

[DESCRIPTION]
触屏太灵敏,有时候点击一下会误认为滑动事件,造成误识别。
[SOLUTION]
增大触发触屏滑动所需要的距离条件,将Config.xml(frameworks\base\core\res\res\values)中的语句
8dp
修改为:
24dp

开关机

启动

1、Android Verified Boot (AVB)介绍

官网文档:Verified Boot-启动时验证
见链接:Android Verified Boot 2.0 最新安卓P AVB详解
android AVB2.0学习总结

2、在低端的产品中,发现开机文件系统挂载花费时间较多

对低端设备,看看对data分区的挂载参数有没有加密参数fileencryption=aes-256-xts,如果有,可考虑改为fileencryption=adiantum,可参看下列文档:启用 Adiantum

3、规范化启动原因-官方

规范化启动原因

4、回滚机制

Android RollBack机制实现原理剖析

5、bootloader 相关

MTK6735 pre-loader源代码分析

6、驱动

camera开机初始化流程

7、开机黑屏

android开机动画到桌面黑屏解决办法

开机优化

1、优化启动时间 *****

优化启动时间

电池与功耗

充电

1、充电协议

BC1.2协议以及QC2.0/3.0快充协议学习笔记
BC1.2协议
USB-PD 协议
Battery Charging Specification, Revision 1.2, December 7, 2010 中文

电池健康

1、healthd 官网文档

Android 运行状况

GUI管理

窗口管理

1、如何让禁止截屏失效

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

2113      public int relayoutWindow(Session session, IWindow client, int seq, LayoutParams attrs,
2114              int requestedWidth, int requestedHeight, int viewVisibility, int flags,
2115              long frameNumber, Rect outFrame, Rect outContentInsets,
2116              Rect outVisibleInsets, Rect outStableInsets, Rect outBackdropFrame,
2117              DisplayCutout.ParcelableWrapper outCutout, MergedConfiguration mergedConfiguration,
2118              SurfaceControl outSurfaceControl, InsetsState outInsetsState,
2119              InsetsSourceControl[] outActiveControls, Point outSurfaceSize,
2120              SurfaceControl outBLASTSurfaceControl) {
2151              int attrChanges = 0;
2152              int flagChanges = 0;
2153              int privateFlagChanges = 0;
2154              if (attrs != null) {

增加如下代码

2154                  //yzx added begin
2154                  Slog.d(TAG_WM, "relayoutWindow:attrs.flags:0x" + Integer.toHexString(attrs.flags));
2154                  attrs.flags &= ~FLAG_SECURE;
2154                  //yzx added end

图形图像

Android 图形图像
面试问你屏幕刷新机制、垂直同步信号
面试问帧率优化,看看matrix是怎么做的

图形-官方

SYSTEMUI

SystemUI StatusBar 手机信号相关图标的显示和更新流程分析
systemui状态栏添加新图标

输入输出

输入系统_APP获得并处理输入事件流程

输入法的一些命令

//会输出当前设备正在使用的输入法
adb shell settings get secure default_input_method
//会输出当前设备的全部输入法的详细信息
adb shell ime list
//仅输出当前设备的全部输入法名称
adb shell ime list -s
//修改当前设备的输入法
adb shell ime set xxxxxx
adb shell settings put secure default_input_method xxxxxx

应用组件

包管理

INSTALL_FAILED_TEST_ONLY原因和解决方法

活动管理

Android 面试黑洞——当我按下 Home 键再切回来,会发生什么

应用编程

APP编程工具

1、离线编译

Android Studio 离线编译

C/C++编程

1、字符串格式化

使用fscanf读取含有数据间含有多个空格的数据

USB

FAQ

1、android usb命令举例:

lsusb, svc usb, dumpsys usb,这些命令具体的用法可以看help,有很多功能。

2、Linux USB 在sys文件系统中是如何组织的?

举个例子:
q3s:ls /sys/bus/usb/devices/
1-0:1.0 1-1.3 1-1.3.1:1.0 1-1:1.0
1-1 1-1.3.1 1-1.3:1.0 usb1
以 “usb” 开头的表示USB 控制器,确切的说, 他们指向每个控制器的根集线器 “root hub”,而数字则代表总线标号。 在上例中,只有一个控制器,所以只有标号1,故取名为 “usb1”.
“1-0:1.0” 是一个特例,指向根集线器的接口
其他项表示真正的USB设备和他们的接口。设备的命名格式如下:
总线-端口端口.端口 …
接口用:分割后紧随其后,其格式如下:
:配置.接口
集线器只能有一个接口,其他设备可以有多个接口

Linux之USB分析
Android手机如何通过USB接口与外设通信
28388_USB
LINUX USB驱动合集

安全

selinux

1、selinux 官方文档

如链接:Android 中的安全增强型 Linux

加解密

1、铁线蕨算法 Adiantum

铁线蕨算法(Adiantum)为低端智能手机提供磁盘加密服务
Android 加密之文件加密(FBE)

逆向工程

1、APP 逆向调试

android安全技术点
逆向工具-吾爱破解
recovery 镜像
vendor 镜像

2、Unidbg

SO逆向实战十三篇
Unidbg Hook 大全

AVF 框架

1 、AVF - 官方

Android 虚拟化框架 (AVF)

网络

ftp

1、busybox 可以用ftpget 和 ftpput 来调试ftp的连接问题,-v 可以知道错在哪个阶段。

adb push ‘Downloads/busybox-armv7l’ /data/local/tmp/
cd /data/local/tmp
./busybox-armv7l ftpget -u ftpuser -p 123456 10.11.108.29 /yzx.txt

2、ftp的上传下载测试网站:https://test.rebex.net/

3、windows ftp 命令

ftp和ftpget 命令
vsftp的简单使用

多媒体

机顶盒

调试方法

在控制台上可以使用cat命令查看信息,例如cat /proc/msp/vdec00
如需查看帮助信息,请向模块输入help命令,例如echo help > /proc/msp/avplay00
记录当前系统的基本信息 /proc/msp/sys
记录Demux和端口的绑定关系 /proc/msp/demux_main

电视

电视
voabbc voabbc88

人工智能

语音

MockingBird实现AI拟声

视觉

机械

语言语义

语言模型串烧(BERT前)
语言模型串烧(BERT后)

你可能感兴趣的:(ubuntu,android,linux)