自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 深入理解Linux内存管理

内存是计算机最重要的资源之一,内存管理是操作系统最重要的任务之一。内存管理并不是简单地管理一下内存而已,它还直接影响着操作系统的风格以及用户空间编程的模式。可以说内存管理的方式是一个系统刻入DNA的秉性。既然内存管理那么重要,那么今天我们就来全面系统地讲一讲Linux内存管理。外存是程序存储的地方,内存是进程运行的地方。外存相当于是军营,内存相当于是战场。选择一个良好的战场才有利于军队打胜仗,实现一个完善的内存管理机制才能让进程多快好省地运行。如何更好地实现内存管理一直是操作系统发展的一大主题。在此过程中内

2022-08-20 11:59:03 741

原创 收藏金典CSND笔记

它山之石可以攻玉,以下链接都是本人看到很不错,为了以后经常回顾学习,所以统一做了一个笔记,希望也对大家有用。7、soc设计内容与soc设计流程总结。1、Ubuntu虚拟机安装EDA工具。11、很好的学习linux内核。3、verdi和VCS使用。4、Verilog学习教程。8、数据结构与算法汇总。

2022-08-20 11:53:10 400 1

原创 字符串操作

实现逻辑,每个整数看其转换进制,从个位到十位百位都可以通过%操作加上/操作获得,再用一个字符数组保存0-F,用个位数对应值转为字符,实现逻辑,在比较字符时可以将其统一转换为大写或小写,然后再进行比对即可,和正常对比无其他不同。注意转换出的字符串是反向的,还要考虑传入的若是负数如何处理,再用翻转字符串完成最后整个操作。实现逻辑,判断字符串长度是否相同,若相同逐个比较字符是否相同。实现逻辑,就是将字符串从中间一分为二,互相换位置即完成了翻转的效果。实现逻辑,逐个赋值直到遇到'\0'停止即可。...

2022-08-15 20:24:32 277

原创 TCP-UDP协议

在建立连接时,SYN和ACK可以一同发送到客户端,而断开连接时,只是客户端不再发送数据了,但还可以接收数据,服务端也不一定。字节就要进行数据的分片处理,对于多分片,每次分片都有自己的偏移值,除最后一个外,其它都有MF标志,传到主机后,主机会。并未丢失,而客户端以为服务器没收到,又发了一条,连接建立成功,数据发送完毕后断开,此时那条消息到达服务器,本来是失效。4,客户端接收到服务端的释放连接报文,发送确认包到服务端,进入TIME_WAIT状态,服务端收到应答立马关闭此连接。...

2022-08-15 20:22:57 670

原创 网络协议之http

HTTP是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。5,GET只可支持ASCLL字符,中文乱码,POST支持标准字符。2,GET传输数据在URL中用户可见,POST用户不可见。3,GET传输数据率小,效率高,POST传输数据量大。4xx:客户端错误--请求有语法错误或请求无法实现。2xx:成功--表示请求已被成功接收、理解、接受。5xx:服务器端错误--服务器未能实现合法的请求。1xx:指示信息--表示请求已接收,继续处理。4,GET不安全,POST安全性较高。......

2022-08-15 20:21:30 70

原创 NBIOT协议

COAP是一种在物联网界的类web协议,COAP协议类似http协议,不过由于智能设备资源少,COAP是以二进制格式传输,传输层是UDP,支持。1,Connect(连接态),模块注册入网后处于该状态,可以发送接收数据,无数据交互超过一段时间进入Idle模式,时间可配置。2,大连接,相比现有无线技术,同一基站增多50-100倍的接入数,每小区可以达到50k的连接数,实现万物互联的海量连接。3,PSM(节能模式),此模式下终端关闭收发信号机,不监听寻呼,因此虽然注册在网络但信令不可达,处于休眠态,功率很小。..

2022-08-15 20:21:04 3033

原创 杂乱知识总结

当任务申请某资源时,此资源已被占用,那么判断当前任务是否比占用资源的任务优先级高,若高则将占用资源任务的优先级。就是高优先级任务要访问共享资源,而此时低优先级任务正在占用,此时中等优先级任务到来先执行完毕后,低优先级任务释放资源高优先级。htons,htonl,ntohs,ntohl,主机序与网络字节序的转换函数。网络字节序其实就是大端字节序,为了统一通信标准,都统一转换为相同字节序。小端字节序:低地址存低位,高地址存高位,更符合人类思维。大端字节序:低地址存高位,高地址存地位,更直观。...

2022-08-15 20:18:05 122

原创 多进程与多线程

1,关于资源,子进程除了代码段和父进程共享以外,其他的就是一个复制过来的副本,二者并不共享地址空间,两个是单独的进程,之后就没太多关系。4,多进程程序更加健壮,多线程出现某个线程挂掉导致整个业务挂掉,多进程有独立的地址空间,一个进程挂掉影响可能并不大。2,共享内存,效率高,可直接读写内存不需任何数据拷贝,而管道,消息队列需要拷贝4次,共享内存只需2次。1,进程是系统资源分配的最小单位,线程是程序执行的最小单位,即CPU调度的基本单位。3,在线程中malloc等申请的空间都是占的进程的资源,即堆资源。...

2022-08-15 20:16:25 113

原创 RAM内存 & ROM存储

1,SRAM: S->static(静态),6个晶体管存储一个bit,不需要周期性补充电源来保持记忆,故为静态。存取速度快,成本高,6,NAND Flash: 基本存储单元为串联,故减少了金属导线占用的面积,存储密度高,适用于需要大容量存储的场合,不可位读取,5,LPDDR:是DDR SDRAM的一种,面向低功耗内存而制定的通信标准,以低功耗和小体积著称,专门用于移动式电子产品。5,NOR Flash: 基本存储单元为并联,故可以实现位读取,读取速率快,存储密度低,适用于代码存储,不适合存储数据。...

2022-08-15 20:14:25 299

原创 gdb调试

2,使用调试器选项follow-fork-mode选项,设置调试父进程还是子进程,如set follow-fork-mode child。嵌入式目标机装上gdbserver,挂载PC共享目录,使用gdbserver运行程序,PC端连接目标机进行gdb调试。1,info threads 显示当前可调试的所有线程,gdb会为每个线程分配一个ID。3,step 表示在单步执行的时候,只有当前线程会执行。1,单独调试子进程, 使用attach “PID”单独调试。2,thread ID 调试指定的目标ID的线程。.

2022-08-15 20:12:24 304

原创 稳定性能力评估图

稳定性能力评估地图: 初级任职需求: 1. ARM芯片学习,理解ARM的7种工作模式和寄存器。 2. 堆栈概念,理解堆栈的出栈入栈过程。 3. 内存概念:MMU原理,虚拟地址,物理地址,内核地址,用户地址。 3. LOG和logs tools专项, 包括死机log获取,log解析工具使用。 4. KE 死机dump backtrace原理。 5. 系统看门狗WDT 工作原因及WDT 类型重启原理。 6. 会使用GDB 反汇编,定位源码位置,构建死机堆栈系统调用流程图。 7. 符号表概念:

2022-07-04 15:12:28 502

原创 稳定性-死机问题

死机问题1. 死机/phong hang 定义当手机长时间无法再被用户控制操作时,我们称为死机或者hang 机。在这里我们强调长时间,如果是短时间,我们归结为Perfomance 问题,即性能问题.2. 死机表现* 用户操作手机无任何响应, 如触摸屏幕,按键操作等.* 手机屏幕黑屏, 无法点亮屏幕.* 手机界面显示内容和用户输入风马牛不相及.可能导致死机的原因可能导致死机的原因1. 系统简图当用户对手机进行操作时, 对应的数据流将是下面一个概括的流程图.hang process * HW

2022-07-04 15:06:08 198

原创 crash分析工具

什么是Crash? 当linux系统内核发生崩溃的时候,可以通过KEXEC+KDUMP等方式收集内核崩溃之前的内存,生成一个转储文件vmcore。内核开发者通过分析该vmcore文件就可以诊断出内核崩溃的原因,从而进行操作系统的代码改进。那么Crash就是一个被广泛使用的内核崩溃转储文件分析工具。 对调试来讲,gdb是非常适合的,但gdb始终是调试native的工具,不支持kernel信息显示,比如task信息之类的。crash补足了这个短板,由Dave Anderson开发和维护的一个内存转储分

2022-07-04 15:00:32 623

原创 gdb调试-总结

GDB调试概要 coredump是linux原生的概念,目前有很多工具可以支持coredump调试。其中gdb/trace32都可以支持。 coredump包含进程空间的内存,如果在加上含有调试信息的lib/程序,那么可以还原出当时异常的场景,这时你可以查看寄存器内容,调用栈,变量和内存等等。这对分析问题非常有帮助。 下面我们会一一介绍gdb和trace32如何调试coredump。1. gdb (GNU debugger)(1). 概述 GDB是GNU开源组织发布的一

2022-07-04 14:57:03 493

原创 linux-内核锁

目录:一、铺垫知识1、指令执行流2、上下文3、抢占二、内核锁基础知识1、为什么要用锁?why2、锁保护什么?what3、锁是如何保护资源的?How三、各类锁的介绍1、原子操作2、spinlock3、mutex4、…进程指令执行流代码在CPU上执行的指令数据流,由一系列代码组成。可分为两大类:线程维度和中断维度1、cpu只要上电,就需要不停的执行指令,永不停歇,若无事可做,那就执行空指令,直到下电。cpu类似一个跑道,各个task轮流到跑

2022-05-14 12:46:11 2623 1

原创 Android系统的稳定性分析-2.0

分析Android问题时,经常会遇到一些稳定性问题。什么是稳定性问题呢,我归结有以下特点,非必现问题,或没有找到复现路径的问题。其实没有非必现问题,只有找不到复现方法。系统越复杂这类问题越多,因为软件路径太多了。 应用的死机重启。这类问题不能简单的归结为应用问题,毕竟应用是跑在系统上的。当应用开发人员无法分析出问题时,可能就会认为是稳定性问题。 系统死机重启。Android开发还是偏重应用的,这样导致系统开发人员较少。很多时候碰到这类问题就找不到分析方法,也就归到稳定性上。起始这类问题与Linux系

2022-04-22 15:59:41 1147

原创 15 个百度网盘搜索引擎

1、云铺子 - 百度网盘搜索引擎地址:http://www.yunpz.net/ 查看方式:直接打开 推荐指数:★★★★★ 备注:聚合类,体验好,推荐!2、橘子盘搜-好用的影视资源搜索引擎地址:https://www.nmme.cc/ 查看方式:直接打开 推荐指数:★★★★★ 备注:专攻影视搜索,度盘、迅雷、阿里,体验好,推荐!3、优聚搜地址:https://ujuso.com/ 查看方式:直接打开 推荐指数:★★★★★ 备注:支持度盘、蓝奏、阿里,体验好,推荐!4、蓝瘦

2022-04-22 15:57:14 27534

原创 高通-Android平台稳定性问题分析

1、复位类型类型1:Warm reset --Many power rails are not reset, for example DDR--Warm reset is designed to capture dump2:Hard reset --It will not reset digital/analogic power domain inside PMIC,but will reset power rails that are exported externally.3:Dvd

2022-03-31 10:04:55 1943

原创 UEFI 日志查看的方法

1. fastboot 模式下执行 fastboot oem log2. 正常启动后,通过 adb 命令导出分区查看:/dev/block/by-name/xbl_sc_logs xbl_sc log,最多保存10次/dev/block/by-name/logfs xbl + abl log,保存次数跟熔丝状态相关方法:adb pull /dev/block/by-name/xbl_sc_logs .stringsxbl_sc_logs >xbl_sc_logs.txt..

2022-03-28 15:42:33 1321

原创 trace32使用

常用操作:1、加载全量代码命令如下:y.SourcePATH.srd z:\code\sm8450\kernel_platform\msm-kernel注意:加载代码时,要注意代码的配套关系,通常要看内核版本号Linux version 5.10.81-qki-consolidate-android12-9-g0d22ce60d8510d22ce60d851 是版本构建时的kernel仓的tag点(commit id),可以进到kernel仓并checkout到该tag点,确保代码和du

2022-03-28 15:18:54 442

原创 嵌入式软件工程师必备技能

1、BSP开发|嵌入式软件|Linux驱动|笔试面试大全BSP开发|嵌入式软件|Linux驱动|笔试面试大全_Evan_ZGYF丶的博客-CSDN博客_嵌入式驱动面试题2、嵌入式软件工程师经典笔试题嵌入式软件工程师经典笔试题_ch3rry的博客-CSDN博客_嵌入式笔试题目3、嵌入式程序员面试题嵌入式程序员面试题_zhangdaisylove的博客-CSDN博客4、Android启动流程简析Android启动流程简析(一) - 简书 (jianshu.com)5、Linux I2

2022-03-17 10:41:09 766 1

原创 Android系统稳定性问题分析总结

一、kernel层稳定性问题:APPS(LA) kernel 基础设施 锁 automic mutex spinlock sem rcu 链表 通知链 中断 信号 休眠唤醒 ...

2022-03-07 16:02:14 2647

原创 LCD驱动模块基础介绍

1、LCD概念及基本分类LCD —— Liquid Crystal Display 显示材料 数据的接收和功能的实现 Panel 类别 LCD OLED 说明 LCD是由液态晶体组成的显示屏,液晶层本身不能发光,通过LED灯照......

2022-03-07 10:24:58 1932

原创 嵌入式软件开发面试题总结

2022-02-15 15:44:16 274

原创 嵌入式Linux设备驱动面试题汇总

大家平时在写驱动的时候,驱动相关的知识都会用到,但真到面试的时候,很难快速流畅的回答面试提出的问题,特意从网上收集整理网友遇到的问题驱动大概的分为三部分:基础部分,同步相关,还有中断部分。中断,同步相关基本都是必问的。基础部分驱动中操作物理绝对地址为什么要先ioremap?因为在内核中操作的都是虚拟地址,内核访问不到物理地址,只能通过ioremap映射为虚拟地址 内核才能访问此内存空间设备驱动模型三个重要成员是?platform总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有

2022-02-15 09:53:10 5162

转载 嵌入式程序员面试题

接着上一篇博文,说说这次找工作面试遇到的面试题。腾讯,面试职位:后台服务器工程师,大概有七八到笔试题,只能凭印象写出还记得的一些题目1.const的用法2.大小端问题3.二叉排序树的插入4.应用题,一台服务器一分钟的访问量是200W次,要求每隔五到十分钟提示重复登录的用户,请提供设计思路和算法其他一些公司的面试题:1.整型转字符串的实现(不使用库函数)2.字符串的翻转3.位设置与清除4.String类的实现5.0-N的乱序数组的时间复杂度为O(N)的排序.

2022-02-15 09:51:08 100

转载 嵌入式软件工程师经典笔试题

> 预处理器(Preprocessor)1. 用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL我在这想看到几件事情:1). #define 语法的基本知识(例如:不能以分号结束,括号的使用,等等)2). 懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。3). 意识到这个表达式将...

2022-02-15 09:49:35 4103 1

原创 uboot系统分析

一、前言uboot是一套小系统开源系统,在网络上我们能够找到对这个系统较多的分析,展锐团队在此基础上适配了对应芯片的开机流程。采用了 uboot 系统, 和其它平台类似,虽然 u boot 本身就是双启动流程即( s pl -->uboot ),但是展锐依然 脱离 uboot 实现 自己 S PL 镜像, 因此小系统的组成变为 s pl/uboot 组合,和高通 xbl/uefi 及 M TK 平台 PBL /lk 类似 。 唯一的区别在于 U BOOT 的跳转过程。展锐平台的启动流程如下:

2022-02-11 11:34:24 1244

原创 文件系统基础知识

提纲:闪存的特性文件系统简介文件系统框架结构文件及文件存储结构文件系统的存储结构文件读写过程内存和IO的关系文件碎片和空间碎片文件系统垃圾回收思考几个问题1、存储设备上的文件内容物理地址是连续的吗?2、闪存不需要寻道,为什么随机读写性能比顺序读写差?3、碎片为什么影响IO性能?4、存储空间不足时为什么影响IO性能5、低内存影响IO体现在哪些方面闪存的特性n读写和擦除读写以页(扇区)为单位进行,擦除以块为单位进行。必须先确保擦除闪存块,然后才能写入数据。擦除比较费

2022-02-10 15:48:59 413

原创 UEFI启动流程

# UEFI启动流程graph TBSEC安全验证-->PEI-EFI前期初始化PEI-EFI前期初始化-->DXE驱动执行环境DXE驱动执行环境-->BDS启动设备选择BDS启动设备选择-->TSL操作系统加载前期TSL操作系统加载前期-->RTRun-TimeRTRun-Time-->AL灾难恢复期```![image-20211214163147113](../AppData/Roaming/Typora/typora-user-images/i

2022-02-10 14:20:18 980

原创 串口日志缺少log怎么办?

输出到串口的日志级别跟输出到内存的日志级别不一样。配置在 /proc/sys/kernel/printk 节点。 当前 user 版本配置是: 4 4 1 4,含义如下: 4:串口输出级别,数字小于4(Warnning)级别的日志,也就是 Error 级别才能输出到串口 4:默认的日志级别,也就是代码中调用 printk 但没有指定日志级别时,输出的那条日志的级别 1: 4:默认串口输出级别。 为了输...

2022-02-10 14:15:57 767

原创 linux i2c驱动协议

1、I2CI2C Bus(Inter-Integrated Circuit Bus)最早是由Philips半导体(现被NXP收购)开发的两线时串行总线,常用于微控制器与外设之间的连接2、硬件连接I2C仅需两根线就可以支持一主多从或者多主连接,I2C使用两个双向开漏线,配合上拉电阻进行连接,上拉电阻阻值大小有最大值和最小值的限制。3、硬件拉低(Open-Drain Pulling Low)下图代表了总线电平拉低过程,当总线要传输低电平0时,Logic会控制FET使其导通VB...

2022-02-09 17:36:48 2063

原创 linux spi驱动协议

1、SPI通讯协议SPI是一个同步的数据总线,也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和接收端的完美同步。时钟是一个振荡信号,它告诉接收端在确切的时机对数据线上的信号进行采样。产生时钟的一侧称为主机,另一侧称为从机。总是只有一个主机(一般来说可以是微控制器/MCU),但是可以有多个从机;数据的采集时机可能是时钟信号的上升沿(从低到高)或下降沿(从高到低),具体要看对SPI的配置。整体的传输大概可以分为以下几个过程:主机先将NSS信号拉低,这样保证开始接收数据; 当接收端检测到

2022-02-09 17:31:13 282

原创 linux uart驱动协议

1、UART通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),通常称作UART,是一种异步收发传输器,是电脑硬件的一部分。它将要传输的资料在串行通信与并行通信之间加以转换。作为把并行输入信号转成串行输出信号的芯片,UART通常被集成于其他通讯接口的连结上。UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP...

2022-02-09 17:23:18 141

原创 fastbootd---用户空间的fastboot,刷机指导

版本提供分区表: 1、进入fastboot模式: 提供分区表 adb reboot bootloader 2、读取当前活动分区 fastboot getvar current-slot 3、烧写分区表 fastboot flash partition common\bootloaderimage\out\gpt_both0.bin---版本里归档的 4、进入fastbootd模式 fastboot reboot fast...

2022-02-08 15:19:17 7604

原创 手动加载自己的驱动ko

adb shell "insmod /vendor/lib/modules/fingerprint.ko" 查看自己的驱动有没有加载: lsmod | grep fingerprint 卸载驱动: rmmod fingerprint 查看kernel log: dmesg -w | grep fpc 或者 adb wait-for-device && adb root ad...

2022-02-08 15:14:43 731

原创 git基本操作

add 提交撤销: git status 先看一下add 中的文件 git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了 git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了 commit提交撤销: git reset --soft HEAD^ :这样就成功的撤销了你的commit。注意,仅仅是撤回commit操作,您写的代码仍然保留。 git reset --hard H...

2022-02-08 15:02:49 470

原创 修改Linux默认nano编辑器

在linux系统中,我们git commit 时候 如果想要修改已commit信息时候,执行git commit --amend 的时候,linux默认打卡nano编辑器,可以通过如下方式修改未vim编辑器:nano这个编辑器使用ctrl + X 退出 修改方式方式: 1、git config --global core.editor vim 2、打开文件 .git/config 在 core 中添加 editor=vim...

2022-02-08 15:00:33 868

原创 andriod/linux开机启动流程

本文目录:(一)整体概述(二)BootLoader(三)Kernel初始化(四)Init初始化介绍(a)Init.rc(b)boottanim启动(c)Surfaceflinger启动(五)Zygote启动介绍(a)app_process(b)AppRuntime(c)ZygoteInit(六)SystemServer启动介绍(a)AMS启动(b)PackageMS启动(七)Launcher启动介绍(a)SystemUI启动(b)Launc

2022-02-08 14:55:45 2536

原创 vim编译器替换命令

:s/chb/org/ 替换当前行第一个 chb 为 org :s/chb/org/g 替换当前行所有 chb为 org :%s/chb/org/ 替换每一行的第一个 chb为 org :%s/chb/org/g 替换每一行中所有的 chb为 org

2022-02-08 14:48:39 421

空空如也

空空如也

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

TA关注的人

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