自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Zygote孵化器

Zygote 服务启动与运行机制摘要 Zygote 是 Android 系统的核心服务,通过 init.rc 配置为高优先级(root权限)的守护进程。其启动过程包含以下关键环节: 初始化阶段: 通过 AppRuntime 加载 ART 虚拟机(libart.so) 执行 ZygoteInit 预加载系统类和资源(preload-classes) 初始化 native 状态并关闭线程创建限制 服务架构: 采用 C/S 架构,通过 Unix Domain Socket 通信 创建 system_server

2026-04-08 09:33:10 371

原创 第一个启动的程序--init

本文分析了Android init进程的启动流程:首先挂载proc、sysfs等文件系统并初始化日志;然后进入Selinux安全策略设置;接着在第二阶段初始化属性服务,创建epoll监听器并加载init.rc配置文件。重点剖析了zygote服务的启动机制,包括rc文件解析、service启动流程(通过fork创建子进程执行zygote),以及epoll机制如何监听子进程信号。整个流程通过init.rc配置触发main类服务启动,最终完成系统关键服务的初始化工作。

2026-03-28 17:00:11 217

原创 bootable中的伪代码

本文分析了ARM架构下的指令执行与寄存器操作机制。重点解析了b reset指令实现PC指针跳转的原理,以及向量表对齐填充技术(使用.balignl 16,0xdeadbeef)。详细阐述了linkage头文件中的ENTRY宏展开过程,包括.global声明、4字节对齐和BX LR跳转指令。深入探讨了SVC模式设置方法(通过SPSR寄存器配置0xd3值)和CP15协处理器的关键操作,包括MRC读取系统控制寄存器、BIC位清除操作,以及MCR写入VBAR寄存器实现向量表重映射的技术细节。这些底层机制为理解ARM

2026-03-26 00:02:36 263

原创 linux字符设备

本文介绍了Linux字符设备驱动的注册流程。主要内容包括:设备号的动态/静态申请方法;cdev结构体的初始化使用cdev_init()函数;通过cdev_add()将设备添加到系统;最后说明了卸载设备时需要先释放设备号再删除cdev结构体。整个流程实现了字符设备从注册到注销的完整管理,为驱动开发提供了标准化的操作框架。

2026-03-17 16:10:03 61

原创 WDT 软件分析2

wtd_deferred_reg_done 如果在“dw_wdt.c”的驱动程序的加载,优先于watchdog_core.c等驱动时,会进行对watchdog_deferred_registration_add 进行加入延迟链表进行注册。是实现对寄存器的操作 在dw_wdt->regs 中,将dtsi文件中的物理地址转化为虚拟地址+(plus)地址偏移量(WDOG_COUNTER_RESTART_REG_OFFSET)val |= WDOG_CONTROL_REG_WDT_EN_MASK;

2026-03-16 16:30:17 201

原创 Linux WDT 软件分析

本文分析了Linux看门狗子系统(WDT)的实现机制。主要内容包括:1) 看门狗子系统的设计目的,实现对不同硬件WDT的统一控制;2) 关键数据结构解析,如watchdog_info、watchdog_ops等结构体的使用场景和注意事项;3) 设备树匹配机制,通过.dtsi文件定义硬件地址并与驱动匹配;4) 看门狗参数设置,包括优先级、超时时间等配置;5) 核心代码实现,包括初始化、ID分配、停止机制和重启处理流程。文章详细说明了看门狗驱动开发中的关键技术和注意事项,为Linux底层驱动开发提供了参考。

2026-03-13 09:47:35 438

原创 WDT设备树对比

本文对比了MTK和RK3xxx平台的看门狗设备树配置差异。MTK采用自研WDT驱动,时钟由硬件固定分配,仅需配置兼容性和寄存器地址;RK3xxx使用通用DW-WDT驱动,需额外指定时钟源、中断和寄存器等完整参数。这种差异源于MTK驱动内置了硬件信息,而RK通用驱动需通过设备树获取具体配置。设备树复杂度反映了驱动设计思路的不同:自研驱动更简洁,通用驱动更灵活但需完整配置。

2026-03-12 18:43:36 58

原创 LINUX BootLoader启动程序解析

本文介绍了Linux系统启动时uboot参数传递和镜像编译过程。主要内容包括:1) Linux启动时通过bootargs传递内核参数;2) BL1阶段加载设备树;3) uboot编译流程(make distclean/config/make);4) 镜像烧写方法;5) 配置原理分析(mkconfig脚本生成config.mk和config.h);6) 系统裁剪方法;7) uboot镜像生成过程(通过ld指定程序入口和段地址)。文章配有流程图说明编译配置过程。

2026-03-06 17:58:37 202

原创 在linux 系统下的qt 安装mqtt库

【代码】在linux 系统下的qt 安装mqtt库。

2025-03-17 14:35:51 885

原创 RT thread 信号量操作

rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time) 不可再ISR中断中调用。rt_err_t rt_sem_trytake(rt_sem_t sem) 函数就是尝试获取信号量。1.RT_IPC_FLAG_FIFO 等待的线程按照先进先出的方式排队。2.RT_IPC_FLAG_PRIO 等待的线程将按照优先级高的线程。ISR为快进快出 若调用 会永远挂起导致永远得不到反馈。获取不到就会返回 -RT_ETimeout。

2023-10-19 22:36:50 592

原创 chmod命令和chown命令

权限可以用3位数字来代表,第一位数字表示用户权限,第二位表示用户组权限,第三位表示其它用户权限。chmod -R u=rwx,g=rx, 0=x test, 将文件夹test以及文件夹内全部内容权限设置为: rwxr-x–x。chmod u=rwx,g=rx,o=x hello.txt,将文件权限修改为: rwxr-x–x。语法: chown [-R] [用户] [:] [用户组] 文件或文件夹。选项,-R,同chmod,对文件夹内全部内容应用相同规则。·选项:-R,对文件夹内的全部内容应用同样的操作。

2023-09-10 22:41:30 610

原创 Linux中的用户和用户组

用户名:密码(x):用户ID:组ID:描述信息(无用):HOME目录:执行终端(默认bash)su命令就是用于账户切换的系统命令,其来源英文单词:Switch User。针对文件夹,表示可以更改工作目录到此文件夹,即cd进入。针对文件夹,可以在文件夹内:创建、删除、改名等操作·包含3份信息,组名称:组认证(显示为x):组ID。针对文件夹,可以查看文件夹内容,如ls命令.useradd [-g -d] 用户名。语法: su [-] [用户名]语法: getent group。groupadd 用户组名。

2023-09-09 18:04:13 445

原创 echo tail 与 重定向符

语法如下: tail [ -f -num ] Linux路径。使用tail命令,可以查看文件尾部内容,跟踪文件的最新更改。语法: echo输出的内容。

2023-09-08 16:44:38 254

原创 grep wc 与 管道符

可以通过grep命令,从文件中通过关键字过滤文件行。语法: wc [-c -m -1 -w]文件路径。可以通过wc命令统计文件的行数、单词数量等。: grep [-n] 关键字文件路径。

2023-09-08 16:04:46 291

原创 FreeRTOS-队列优先级

Freertos 消息队列

2023-03-30 21:52:33 657

原创 CPU中央处理器(下)

CPU内部采用总线方式的控制信号与数据通路

2023-03-12 14:52:43 335

原创 CPU中央处理器(上)

中央处理器 第一部分

2023-02-23 14:08:01 584

原创 计组-Cache存储系统

计算机组成原理—— CACHE和内存原理

2023-02-21 20:38:04 795

原创 Lua语言开发

基础lua语言

2023-02-10 17:28:34 186

原创 MySQL-事务

并发事务管理

2023-02-08 14:53:52 167

原创 MySQL-多表查询

多表查询

2023-02-06 13:46:28 199

原创 MySQL 基础(下)

函数与约束

2023-02-04 15:09:23 161

原创 单片机通信-IIC

iic 原理图过程

2023-01-30 23:47:49 532

原创 python-多线程

python 多线程

2023-01-18 00:39:28 155

原创 python-网络

python-搭建网络 基础知识

2023-01-17 16:29:35 196

原创 python-图形用户界面

python 图形页面

2023-01-15 21:55:08 1590

原创 python-各类模块

python中的各类模块

2023-01-13 18:20:32 138

原创 python-异常处理

try-except 异常处理

2023-01-12 17:14:19 176

原创 Python-类与对象

类,对象 ,继承 知识点

2023-01-05 23:52:37 443

原创 MySQL-基础(上)

基础-mysql-小结。

2023-01-03 22:32:07 179

原创 ADC数模转化

ADC 简介VDDA 接入3.3V ,VSSA接GND,所以ADC的输入电压范围是0 ~3.3V逼近型 比较 一般采用二分法 8位数据时 比较八次 既可以 找到对应的电压值 12位时 需要比较12次。

2023-01-02 16:32:34 3302

原创 三种交换方式

2.动态分配线路:发送方将报文发给节点交换机时,节点交换机先存储整个报文 后选择合适的线路将报文发送出去。4.加速传输:分组是逐个传输的 后一个分组的存储操作与前一个分组的转发操作可以同时进行。2.有序传输:双方只使用一条专用的通信线路,数据只在这一条线路上传输,不存在失序问题。4.提高线路利用率:在不同时间段分段部分占用物理线路 ,提高了通信线路的利用率。3.简化了存储管理:因为分组的长度固定 相应的缓冲区大小叶固定,容易管理。3.没有冲突:不同的通信双方拥有不同的信道,不存在争用物理信道的问题。

2022-12-29 16:56:53 683

原创 数据的表示和运算(上)

每个数所用到的不同符号的个数称之为基数对于 b 进制的数列可看作 以个位为原点的参考系 个位为A1*b的零次方例如整数部分转化方法:A1到An的求法 对于整数部分,第 i 次除以基数 b 所得到的余数即为 Ai .( i 为1、2、…、 n )小部分的转化方法:第1次乘以基数 b 所得到的整数部分即为 A - i。( i 为0、1、…、 n ,注意每次乘法之后要把个位置 0)整数部分小数部分1.十进制小数部分 在×2时 可能会出现无线循环的情况 故IV不对2.

2022-12-11 22:45:43 370

原创 精简指令集与复杂指令集

机器周期:通常用从内存中读取一个指令字的最短时间来规定 CPU 周期(机器周期),也即 CPU 完成一个基本操作所需的时间。时钟周期: 一个时钟脉冲所需要的时间。在计算机组成原理中又叫 T 周期或节拍脉冲。是 CPU 和其他单片机的基本时间单位。采用流水线设 只要为8个detaT的时间。必须流水的每个步骤类似 且耗时也类似。

2022-11-29 22:14:41 936

原创 RT-Thread创建线程函数

构造好这个一个栈,然后将rt-thread 的sp指针 r4 栈尾。之后运行 这个线程时 将创建的栈中的词 写入CPU寄存器中。ro为参数寄存器 在函数入口时 将参数传置R0寄存器之中。该值 保存在栈中 之后再赋值给PC寄存器。1.分配了一个RT_thread 结构体。存在栈中的 有R0到R15 ,PSR。R13不保存 其别名为栈 保存在sp。PSR: 函数运行过程中断的开还是关。

2022-11-28 18:35:12 413

原创 创建线程时 栈的理论

假装暂停在第一条指令之前 设置栈 sp=sp -16*4。而动态分配 只需要指定栈的大小 即可 内部会给您分配。静态分布事先给出了栈的地址 和栈的大小 (数组)在thread_entry 进入函数A时 函数a。恢复时运行时要让PC 寄存器等于这个入口地址。如图所示 R15为入口地址。

2022-11-28 14:19:15 202

原创 STM32 RCC时钟控制

在库函数里面关于CFGR主要是设置了HCLK、APB1和APB2的时钟频率,还有通过寄存器后两位选择HSE/HSI/PLL这三个其中一个作为系统时钟。在 RCC_CR中 的第十六位 为 HSEON 将其置于一时 则是将 外部高速时钟使能。一般配置为系统时钟 = 锁相环时钟 (PLLCLK = SYSCLK) 此时为72M Hz。1、将HCLK设置为SYSCLK的频率,即HCLK频率为168MHZ。将CRR_CFGR寄存器复位。

2022-11-26 21:36:25 739

原创 中断服务函数 ENVIC_CONFIG 的配置

分为 GPIO口配置 中断函数配置 优先级配置

2022-11-26 18:26:43 432

原创 STM32 中断系统及应用

*采用 void _EXTILineConfig :为外部中断需要的函数调用此函数 既可以配置AFIO的数据选择器 来选择想要配置的中断引脚。*触发事件的响应方式 :事件中断为 中断不进入CPU 而是通向其他外设 比如触发ADC转换 或者为触发别的外设工作 属于外设之间的联合工作。中断函数 为弱定义 可在需要的文件中定义(若写错了则会调用 hd.s中的中断服务函数)*但是相同的 PIN 不可以同时触发中断 (即为 PA0 和PB0 不能同时使用)用于统一分配中断优先级和管理中断的(NVIC为内核外设)

2022-11-26 16:45:18 440

原创 STM32串口通信

其中 USART_FLAG_TXE:表示数据缓冲区是否为空,为空时置1,表示可以写数据到数据缓冲区,有可能数据没有发送完。需要对其进行初始化 (编译器在赋予i 值时为不确定的值)在stm32中发挥串口的极致功能 会在不同的GPIO口有不同功能的重映射。9位包含一个数据寄存器TDR 和一个接受数据寄存器RDR。将两个字节 分别放置于高八位 和低八位 后在分别发送。其中 nRTS 和nCTS 中的n 表示低电平有效。其中IE 即为中断使能 位。调用八次发送一个字节的函数。TE 相当于小门。

2022-11-26 15:40:23 1198

空空如也

空空如也

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

TA关注的人

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