自定义博客皮肤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)
  • 收藏
  • 关注

原创 SD卡软件识别流程

本文章是结合SD的协议手册,来描述SD卡的初始化流程,文章有点臭,建议仔细阅读,定有收获。

2024-05-22 20:09:18 155

原创 eMMC和SD模式速率介绍

一般情况下我们项目中都是会支持到HS400 8bit 1.8V,最大时钟频率为200MHZ,通讯速率可达400MB/s, 双边沿采样。

2024-05-15 20:17:41 696

原创 eMMC断电通知机制(PON)

host在断电前通知eMMC卡要断电了,然后eMMC把没有做完的操作赶紧做完,然后host再进行断电。

2024-05-07 09:27:44 909

原创 eMMC/SD 供电

eMMCSD

2024-04-01 21:51:34 218

原创 eMMC CMD、RESP详解(eMMC总线协议扩展篇)

定义了四种类型来控制eMMC所谓的广播命令(broadcast cmd)就是说一台设备产品上不一定只有一个eMMC设备,host想要发送某一个命令给所有的eMMC设备,这就是广播命令。所谓的点对点命令(point-to-point cmd)就是说一台设备产品上有多个eMMC设备,host想要发送给指定的一个eMMC设备的情况,也叫地址命令。

2024-04-01 21:21:08 928

原创 eMMC分区管理

eMMC的分区管理介绍

2024-03-15 10:56:35 1108

原创 eMMC 总线协议

该篇文章,介绍总线协议中的数据的帧格式,也就是所说的token,eMMC是有自己的协议规范的,接下来我们进行学习。上电复位后,主机必须通过专有的基于消息的 e•MMC 总线协议初始化设备。对于每一条数据线,数据可以在每时钟周期 1 bit 的速率(单倍数据率 SDR)或 2 bit 的速率(双倍数据率 DDR)下传输。e•MMC 命令是面向块的命令:这些命令发送一个附带CRC 位的数据块。读和写操作都允许单块或多块传输。当在CMD行上跟随一个停止命令时,与顺序读取类似,多块传输被终止。

2024-03-09 12:18:02 1034

原创 eMMC概述

由上图可以看出,eMMC设备控制器是由控制器+存储介质组成,eMMC的存储介质多数是nand flash。VCC是给存储介质供电,VCCQ是给通讯io供电,reset是给eMMC设备控制器进行复位控制,clock,cmd,data是通讯io,与host相连。在实际产品开发过程中,根据产品设计需求,对flash空间及速率要求,会对flash进行选型,根据存储空间选择一般eMMC>NAND Flash>Nor flash, 价格也是eMMC>NAND Flash>Nor flash。

2024-03-09 12:16:31 24

原创 一个测试OOM killer的程序未触发OOM所带来的问题

linux下OOM Killer相关问题

2024-03-06 18:30:12 1071

原创 Uboot中ARMV7和ARMV8 MMU配置

Uboot中ARMV7和ARMV8 MMU配置

2024-01-28 17:43:23 528

原创 linux 内核ARM64启动

这个是与机器有关的,可能使用了内部算法自动的定位并取得物理内存的大小,这些CPU在内核之外的保留的内存区域(dtb里的 /memreserve/ 的指定区域)空转,并轮询“cpu-release-addr”地址,该地址也在保留区域内。任何描述给内核的内存(包括低于镜像起始地址的),如果没有标记为保留的(dtb里的 /memreserve指定)将被内核认为是可以使用的。所有可写的系统寄存器在这内核镜像将要进入的异常级别(EL)必须在一个更高的异常级别(EL)通过软件初始化,来防止在一个未知的状态执行。

2024-01-17 22:44:12 1131 1

原创 linux 内核ARM32启动

(它可以使用内部算法自动定位和调整所有RAM的大小,也可以使用对机器中RAM的了解,或者任何其他引导加载程序设计者认为合适的方法。我们使用了raw Image的启动方式,没有选择使用uImage(压缩)的方式进行启动,使用gzip进行对Image进行压缩,在uboot中进行gzip解压,可与arm64的打包方式保持一致。内核应该放置在RAM的前128MiB中。如果使用了initramfs,那么与dtb一样,它必须放置在内核解压缩程序不会覆盖的内存区域中,同时仍然位于内核低内存映射的范围内。

2024-01-17 17:23:30 1071

原创 linux嵌入式开发常用命令

介绍下基于linux嵌入式系统开发过程常用到的一些命令,比如nm ,strings, size, strip, readelf,objdump等

2024-01-08 15:08:18 916

原创 代码分支合并git命令快速解决

在项目开发中会存在分支代码合并的问题,一般会涉及到多个仓库的合并工作,同一个仓库下可能涉及到很多笔提交,每一笔提交都有可能产生冲突,很多时候使用compare比较去处理,也是一种方法,但是往往工作量比较大,下面提供一种方法处理该问题。

2024-01-04 21:34:59 362

原创 在ARMv8中aarch64与aarch32切换

实现armv8从aarch64运行状态切换到aarch32运行状态,目的缩减系统的大小,用于系统裁剪。

2024-01-03 11:15:44 1280

原创 基于rockpi4b启动流程(2)

基于上篇文章,将开发板烧录loder和system镜像,即可开机进console。我们将系统停到uboot命令行,printenv看下环境变量炸眼一看信息很多,我们来分析看下该系统的启动设置;首先看下bootcmd命令,该命令是uboot启动kernel的命令设置,其中使用了uboot中的run命令,run命令用于执行一个或多个预定义的命令序列;命令定义主要在。

2024-01-02 22:15:45 416

原创 基于rockpi4b启动流程(1)

rk3399 系统启动介绍,基于rockpi4b的sdk开发实验

2023-12-30 22:26:55 1032

原创 AddressSanitizer(ASan)

gcc编译选项#-fsanitize=address:开启内存越界检测#-fsanitize-recover=address:一般后台程序为保证稳定性,不能遇到错误就简单退出,而是继续运行,采用该选项支持内存出错之后程序继续运行,需要叠加设置ASAN_OPTIONS=halt_on_error=0才会生效;若未设置此选项,则内存出错即报错退出#-fno-stack-protector:去使能栈溢出保护#-fno-omit-frame-pointer:去使能栈溢出保护。

2023-11-20 11:36:56 435

原创 ARM64 linux并发与同步之经典自旋锁

在实际项目中临界区数据有可能会修改一个数据结构或者链表中的数据,在整个过程中要保证原子性,才不会影响数据的有效性,这个过程使用原子变量不合适,需要使用锁机制来完成,自旋锁(spinlock)是linux内核中常见的锁机制。早期的linux内核是使用一个简单的无符号类型的变量来表示是否持有锁,这样会带来一个问题,当前持有锁的代码路径刚刚释放,有可能又获取了该锁,这样对别的代码路径不公平,这样会导致整个系统的性能会差很多;它不会保存当前的中断状态,因此在释放自旋锁后会恢复先前未知的中断状态。

2023-11-14 15:53:00 411

原创 ARM64 linux并发与同步之内存屏障

*指令同步屏障(Instruction Synchronization Barrier, ISB)指令:**比DMB指令和DSB指令严格,刷新流水线和预取缓冲区后,才会从高速缓存或者内存中预取ISB指令之后的指令。仅当所有在它前面的存储器访问操作都执行完毕后,才提交在它后面的访问指令,DMB指令保证的是DMB指令之前的所有内存访问指令和DMB指令之后的所有内存访问指令的顺序。DMB指令仅仅影响内存访问指令、数据高速缓存指令,以及高速缓存管理指令等,并不会影响其他指令的顺序。位于此指令前的所有缓存,

2023-11-12 15:59:49 344

原创 ARM64 linux并发与同步之原子操作

linux 并发与同步中的原子操作

2023-11-07 11:55:30 391

原创 Python3学习(八)

文章目录多态多态Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。文件有多种形态:文本文件,可执行文件

2020-08-16 18:24:44 213

原创 Python3学习(七)

文章目录类中的私有属性类中的私有方法__del__方法类中的私有属性私有属性的定义,是以"__value"格式定义,只允许在类中的方法使用,不允许直接通过对象获取。上栗子:class Animal: def __init__(self,new_age): self.age = new_age #公有属性的定义,即允许在类中的方法使用,也允许直接通过对象获取 self.__name = "小黑" #私有属性的定义,只允许在类中的方法使用,不允许直接通过对象获取

2020-07-15 15:37:30 229

原创 Python3学习(六)

文章目录面向对象创建类面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。方

2020-07-06 13:33:14 183

原创 Makefile工程管理器

文章目录导引makefile的规则和伪目标makefile规则makefile伪目标makefile中的变量自定义变量自动变量预定义变量和环境变量makefile的规则Makefile引用其他Makefile导引如果是一个单独的.c文件,我们可以使用一条gcc指令去完成编译,得到可执行文件。例如://test.c#include <stdio.h>#include <unistd.h>#include "test.h"int main(void){ //prin

2020-06-30 09:19:56 267

原创 Python3学习(五)

文章目录引用扩展变量交换字符串的常用操作文件操作open() 方法close()方法文件copyreadline() 方法readlines()方法seek()方法引用扩展ubuntu@ubuntu-Lenovo:/work/python$ cat 1-引用-扩展.py a = 100 #不可变类型def test(num): num += num print(num)test(a)print(a)#结果ubuntu@ubuntu-Lenovo:/work/python$ pyt

2020-06-15 09:38:27 264

原创 Python3学习(四)

文章目录缺省参数,可变参数元组、字典的拆包引用递归匿名函数匿名函数的应用缺省参数,可变参数Python中形参有确定参数,缺省参数,可变参数,关键字参数。具体的使用和区别如下:确定参数:平时最常用的必传确定数量的参数即为确定参数缺省参数:在调用函数时可以传也可以省去的参数,如果不传将使用默认值可变参数:可变长度参数关键字参数:长度可变,但是需要以kv对形式传参举栗子:# 缺省参数 即有默认值的参数1

2020-06-09 11:27:43 664

原创 Python3学习(三)

文章目录字典访问字典里的值修改字典删除字典元素查看字典中的值字典字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中 ,格式如下所示:In [32]: dict = {'key1':'value','key2':'value2'}In [33]: dictOut[33]: {'key1': 'value', 'key2': 'value2'}In [34]: infor

2020-06-04 09:50:20 139

原创 Python3学习(二)

文章目录break和continue字符串在内存中的存储方式break和continuei = 1num = 0while i <= 10: print(i) num += 1 if num == 3: continue if num == 5: break print("--------") i += 1#结果:ubuntu@ubuntu-Lenovo:/work/python$ python3

2020-05-25 10:17:37 176

原创 Python3学习(一)

文章目录python的交互模式,ipythonpython2的中文解决python 注释定义变量,使用变量输入输出python2和python3的输入功能不同类型及类型转换if-elsepython的交互模式,ipythonpython和ipython的区别是ipython不仅支持python语法,也支持shell指令ubuntu@ubuntu-Lenovo:~$ ipython3 Python 3.4.3 (default, Nov 12 2018, 22:25:49) Type "copyri

2020-05-20 09:36:21 275

原创 如何理解linux input输入子系统

文章目录何为input输入子系统?输入子系统解决了什么问题?input输入子系统如何工作?相关的数据结构事件上报流程设备驱动层input core输入事件驱动层总结何为input输入子系统?linux系统支持的输入设备繁多,比如鼠标,键盘,游戏杆,触摸屏等,在这些输入设备中种类繁多,类型不一,不同原理、不同的输入信息,那么问题来了,如何管理这些信息呢?答案就是:input输入子系统就是完成这...

2020-04-15 19:13:01 334

原创 linux设备驱动模型之——platform虚拟总线

文章目录什么是platform虚拟总线platform组成什么是platform虚拟总线platform总线:linux内核用于管理片上资源的虚拟总线。它不像usb总线、PCI总线、 I2C、SPI 那样真实存在的。在计算机中有这样一类设备,它们通过各自的设备控制器,直接和CPU连接,CPU可以通过常规的寻址操作访问它们(或者说访问它们的控制器)。这种连接方式,并不属于传统意义上的总线...

2020-03-24 17:10:13 953

原创 项目管控

1.客户联系人列表2.产品定义、产品规格书3.产品需求及需求变更统计(包括软件、硬件、结构及客户)4.客户需求及任务清单罗列统计5.软件bsp调试计划,及bsp领域自测报告6.关键器件变更7.SCM管控:(代码拉取,编译环境搭建,版本发布及客户版本推送)8.生产管控9.关键问题review...

2020-01-21 21:55:37 129

原创 Linux 错误码

Linux错误代码及其含义 C Name Value Description 含义 Success 0 Success 成功 EPERM 1 Operation not permitted 操作不允许 ENOENT 2 No such file or directory 没有这样的文件或目录 ESRCH ...

2019-12-31 11:15:19 458

转载 Android Verified Boot 2.0 安卓P AVB实现详解

什么是AVB验证启动是确保用户设备运行软件完整性的一整套流程。 它通常从设备固件的只读部分启动,使用加密方式验证代码是可靠且没有任何已知的安全缺陷之后才会执行。 AVB是验证启动的一种实现。VBMeta结构体AVB中使用的核心数据结构是VBMeta结构体。此数据结构包含许多描述符(和其他元数据),并且所有这些数据都以加密方式签名。 描述符用于映像哈希值,映像哈希树元数据和所谓的链...

2019-12-31 10:42:26 3406

原创 富爸爸,穷爸爸

2019-12-28 15:03:32 106

原创 高通平台 设置LDO电源域

高通平台如何设置LDO电压,以LDO17为例,默认给屏供电,设置为2.85V现在设置为3.3V。修改的rpm和sbl部分代码,修改LDO17电压为3.3V 。(1).--- a/RPM.BF.2.2/rpm_proc/core/systemdrivers/pmic/config/msm8937/pm_config_target.c+++...

2019-12-26 19:04:41 1834 1

转载 高通平台Android源码bootloader分析之sbl1(三)

前两篇博文分析了启动流程、代码流程、cdt,接下来就分析另外几个需要格外关注的部分。log系统sbl1中的log系统也是sbl1部分调试会经常接触得部分高通平台在sbl中做的log系统并不是很强大, 但是对于我们调试已经远远足够了。sbl1_boot_logger_initsbl1_boot_logger_init是log系统的初始化函数,被sbl1_main_ctl函数调用(详细参考:高...

2019-12-26 18:49:24 1622

转载 高通平台Android源码bootloader分析之sbl1(二)

在上一篇博文中主要描述了启动流程,及代码执行流程,并重点介绍了一下我重点关注的部分。这个sbl部分也算有点庞大,我们没有精力也没有必要去分析全部,所以接下来就来分析一下sbl1中另外几个需要格外关注的部分:CDT :主要提供平台设备数据log system:log日志系统,当然没有kernel里面那么强大了download:代码下载烧写实现ramdump:异常信息dump 本篇博文就先来...

2019-12-26 18:36:14 2381 1

转载 高通平台Android源码bootloader分析之sbl1(一)

高通8k平台的boot过程搞得比较复杂, 我也是前段时间遇到一些问题深入研究了一下才搞明白。不过虽然弄得很复杂,我们需要动的东西其实很少,modem侧基本就sbl1(全称:Secondary boot loader)的代码需要动一下,ap侧就APPSBL代码需要动(对此部分不了解,可参照:bootable源码解析),其他的都是高通搞好了的,甚至有些我们看不到代码。今天就要分析一下开机前几秒钟起着关...

2019-12-26 18:06:44 5035

linux-5.15.73/Documenta/arm64/booting.rst中文翻译

linux-5.15.73 Documenta arm64 booting.rst 中文翻译

2024-01-18

linux-5.15.73/Documenta/arm/booting.rst 中文翻译

根据理解,翻译booting.rst linux-5.15.73/Documenta/booting.rst

2024-01-18

毕业设计:基于 STC12 的亚健康手环

旨在以脉搏波为主体,六轴加速度及其他生理参数为辅助进行信息融合,辅助医师对佩戴者的心脑血管疾病突发的风险进行实时预测,以能够在黄金时间内采取有可能的措施。 该项目的主体目前主要包括: 基于 STC12 的硬件数据采集和传输 基于 Android APP 的数据预处理,显示,存储和传输 基于 SpringBoot+MySQL 的服务器后端 基于 Matlab 的数据预处理实验测试 基于 Python 的数据处理实验测试 基于 JavaScript 的上位机web数据显示(他人完成)

2024-01-12

毕业设计:基于stc12开发板的图形系统

功能使用说明 主界面 4.进入主界面后,可看到相应程序的图标和一段白一段红的指示光标(一下简称光标),通过按键 "PRE" 可向左移动光标,按键 "NEXT" 可向右移动光标,按键 "UP/VOL" 可向上移动光标,按键 "DOWN/EXIT" 可向下移动光标。当移动光标至相应程序的图标时,相应程序标题将会变绿,按键 "ENTER" 即可进入该图标下的相应程序。 音乐播放器 5.将光标移动至 "Music" 图标并按键 "ENTER" 即可进入音乐播放器。如果你的TF内存卡里面的 "Music"目录存在歌曲,播放器将自动播放音乐,如果你的TF内存卡没有 "Music" 目录或 "Music"目录没有歌曲,请将音乐文件复制至TF内存卡的 "Music"目录插入开发板并重新启动E1101。播放器默认播放模式为全部循环,你可以通过按键 "ENTER" 暂停/播放音乐,按键 "NEXT" 播放 下一曲,按键 "PRE" 播放上一曲,按键 "UP/VOL" 调节播放器音量,按键 "DOWN/EXIT" 退出播放器并会回到主界面.

2024-01-12

AutoGPT:为个人提供可访问的人工智能工具

AutoGPT的愿景是为每个人提供可访问的人工智能,用于使用和构建。我们的使命是提供工具,这样你就可以专注于重要的事情。 Building - Lay the foundation for something amazing. Testing - Fine-tune your agent to perfection. Delegating - Let AI work for you, and have your ideas come to life.

2024-01-12

毕业设计:嵌入式软件项目,基于MSP430演示通过CC3000 WiFi向云发送和接收数据

该项目是一个嵌入式软件项目,旨在运行在德州仪器MSP430 FRAM开发套件上,以演示通过CC3000 WiFi向云发送和接收数据。 项目功能包括: 1. 从 ADC 输入读取(A0、A1、A2、A4/热敏电阻、A5、A7、A12/X 轴、A13/Y 轴、A14/Z 轴、A15)。 2. 使用CC3000 WiFi将ADC数据写入Exosite 3. 使用CC3000 WiFi从Exosite读取命令/控制数据 4. 基于云的控制数据打开和关闭LED7

2024-01-08

树莓派驱动开发实战,基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享

基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享,旨于对Linux内核模块机制的熟悉、常见接口的Linux驱动实现、常用模块的原理掌握。原则上,每个驱动模块我都会编写对应的教程(因为我相信掌握知识最有效的方式是理解并能转述)。 目前实现hello world, gpio led, gpio key, device io,pwm, 红外, PDD与设备树相关驱动,还有一些文档

2024-01-04

毕业设计,课程项目练习,学习C/C++语言自学小项目

1.终端日历表 算不上一个项目,几个函数之间的调用,难点就是如何不采用公式计算当天在当年所处的哪一天 2.俄罗斯方块 第一个真正的项目,意义重大!记得是8.8号看到这个源码,心态炸裂,500行代码,20多个函数,心生恐惧连看都看不下去,更别说写了,甚至觉得自己不适合学编程,c入门级别的项目都写不出来,(之后偶然看到雷总演讲说的跳读法,不懂就跳过先学其他的,知识不是线性的,不断回顾,知识量到了也就懂了,心态好了不少)后来学到了c++随着代码量增加决定重头挑战下,一个功能一个功能去实现,结果就这么磨出来了,真的非常激动,自此之后也具备了独立完成小项目的能力 3.学生管理系统 常规单链表操作,不难 4.模拟shell终端 递归拼接路径是难点 5.并发服务器模型 6.udp聊天室 7.tcp文件上传下载服务器 8.tcp文件上传下载服务器 用C++改写 9.五子棋项目

2024-01-04

毕业设计:51单片机采集环境数据并使用MQTT协议上传至阿里云,阿里云使用AMQP消息队列下发至业务服务器,在前端页面展示数据

51单片机采集环境数据并使用MQTT协议上传至阿里云,阿里云使用AMQP消息队列下发至业务服务器,在前端页面展示数据 配置 硬件 硬件型号 单片机 IAP15w4k58s4 OLED显示屏 128x64 IIC WiFi ESP8266 使用方法 注册阿里云iot平台账户,按照其说明文档添加产品及设备,在设备界面获取MQTT连接参数 利用esp8266连接

2024-01-04

《TCP/IP网络编程》学习笔记

本资源是介绍《TCP/IP网络编程》学习笔记及具体代码实现,代码部分请参考章节文件夹下的代码,readme中有详细的说明。 环境是:Ubuntu18.04 LTS 编译器版本:g++ (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0 和 gcc (Ubuntu 7.3.0-27ubuntu1~18.04) 7.3.0

2024-01-04

空空如也

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

TA关注的人

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