- 博客(54)
- 收藏
- 关注
原创 eMMC和SD模式速率介绍
一般情况下我们项目中都是会支持到HS400 8bit 1.8V,最大时钟频率为200MHZ,通讯速率可达400MB/s, 双边沿采样。
2024-05-15 20:17:41
2836
原创 eMMC CMD、RESP详解(eMMC总线协议扩展篇)
定义了四种类型来控制eMMC所谓的广播命令(broadcast cmd)就是说一台设备产品上不一定只有一个eMMC设备,host想要发送某一个命令给所有的eMMC设备,这就是广播命令。所谓的点对点命令(point-to-point cmd)就是说一台设备产品上有多个eMMC设备,host想要发送给指定的一个eMMC设备的情况,也叫地址命令。
2024-04-01 21:21:08
1644
原创 eMMC 总线协议
该篇文章,介绍总线协议中的数据的帧格式,也就是所说的token,eMMC是有自己的协议规范的,接下来我们进行学习。上电复位后,主机必须通过专有的基于消息的 e•MMC 总线协议初始化设备。对于每一条数据线,数据可以在每时钟周期 1 bit 的速率(单倍数据率 SDR)或 2 bit 的速率(双倍数据率 DDR)下传输。e•MMC 命令是面向块的命令:这些命令发送一个附带CRC 位的数据块。读和写操作都允许单块或多块传输。当在CMD行上跟随一个停止命令时,与顺序读取类似,多块传输被终止。
2024-03-09 12:18:02
1223
原创 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
186
原创 linux 内核ARM64启动
这个是与机器有关的,可能使用了内部算法自动的定位并取得物理内存的大小,这些CPU在内核之外的保留的内存区域(dtb里的 /memreserve/ 的指定区域)空转,并轮询“cpu-release-addr”地址,该地址也在保留区域内。任何描述给内核的内存(包括低于镜像起始地址的),如果没有标记为保留的(dtb里的 /memreserve指定)将被内核认为是可以使用的。所有可写的系统寄存器在这内核镜像将要进入的异常级别(EL)必须在一个更高的异常级别(EL)通过软件初始化,来防止在一个未知的状态执行。
2024-01-17 22:44:12
1566
1
原创 linux 内核ARM32启动
(它可以使用内部算法自动定位和调整所有RAM的大小,也可以使用对机器中RAM的了解,或者任何其他引导加载程序设计者认为合适的方法。我们使用了raw Image的启动方式,没有选择使用uImage(压缩)的方式进行启动,使用gzip进行对Image进行压缩,在uboot中进行gzip解压,可与arm64的打包方式保持一致。内核应该放置在RAM的前128MiB中。如果使用了initramfs,那么与dtb一样,它必须放置在内核解压缩程序不会覆盖的内存区域中,同时仍然位于内核低内存映射的范围内。
2024-01-17 17:23:30
1176
原创 linux嵌入式开发常用命令
介绍下基于linux嵌入式系统开发过程常用到的一些命令,比如nm ,strings, size, strip, readelf,objdump等
2024-01-08 15:08:18
993
原创 代码分支合并git命令快速解决
在项目开发中会存在分支代码合并的问题,一般会涉及到多个仓库的合并工作,同一个仓库下可能涉及到很多笔提交,每一笔提交都有可能产生冲突,很多时候使用compare比较去处理,也是一种方法,但是往往工作量比较大,下面提供一种方法处理该问题。
2024-01-04 21:34:59
410
原创 在ARMv8中aarch64与aarch32切换
实现armv8从aarch64运行状态切换到aarch32运行状态,目的缩减系统的大小,用于系统裁剪。
2024-01-03 11:15:44
1568
原创 基于rockpi4b启动流程(2)
基于上篇文章,将开发板烧录loder和system镜像,即可开机进console。我们将系统停到uboot命令行,printenv看下环境变量炸眼一看信息很多,我们来分析看下该系统的启动设置;首先看下bootcmd命令,该命令是uboot启动kernel的命令设置,其中使用了uboot中的run命令,run命令用于执行一个或多个预定义的命令序列;命令定义主要在。
2024-01-02 22:15:45
492
原创 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
690
原创 ARM64 linux并发与同步之经典自旋锁
在实际项目中临界区数据有可能会修改一个数据结构或者链表中的数据,在整个过程中要保证原子性,才不会影响数据的有效性,这个过程使用原子变量不合适,需要使用锁机制来完成,自旋锁(spinlock)是linux内核中常见的锁机制。早期的linux内核是使用一个简单的无符号类型的变量来表示是否持有锁,这样会带来一个问题,当前持有锁的代码路径刚刚释放,有可能又获取了该锁,这样对别的代码路径不公平,这样会导致整个系统的性能会差很多;它不会保存当前的中断状态,因此在释放自旋锁后会恢复先前未知的中断状态。
2023-11-14 15:53:00
565
原创 ARM64 linux并发与同步之内存屏障
*指令同步屏障(Instruction Synchronization Barrier, ISB)指令:**比DMB指令和DSB指令严格,刷新流水线和预取缓冲区后,才会从高速缓存或者内存中预取ISB指令之后的指令。仅当所有在它前面的存储器访问操作都执行完毕后,才提交在它后面的访问指令,DMB指令保证的是DMB指令之前的所有内存访问指令和DMB指令之后的所有内存访问指令的顺序。DMB指令仅仅影响内存访问指令、数据高速缓存指令,以及高速缓存管理指令等,并不会影响其他指令的顺序。位于此指令前的所有缓存,
2023-11-12 15:59:49
699
原创 Python3学习(八)
文章目录多态多态Python中多态是指一类事物有多种形态。比如动物有多种形态,人,狗,猫,等等。文件有多种形态:文本文件,可执行文件
2020-08-16 18:24:44
274
原创 Python3学习(七)
文章目录类中的私有属性类中的私有方法__del__方法类中的私有属性私有属性的定义,是以"__value"格式定义,只允许在类中的方法使用,不允许直接通过对象获取。上栗子:class Animal: def __init__(self,new_age): self.age = new_age #公有属性的定义,即允许在类中的方法使用,也允许直接通过对象获取 self.__name = "小黑" #私有属性的定义,只允许在类中的方法使用,不允许直接通过对象获取
2020-07-15 15:37:30
262
原创 Python3学习(六)
文章目录面向对象创建类面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。本章节我们将详细介绍Python的面向对象编程。面向对象技术简介类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量, 用于处理类及其实例对象的相关的数据。方
2020-07-06 13:33:14
201
原创 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
409
原创 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
490
原创 Python3学习(四)
文章目录缺省参数,可变参数元组、字典的拆包引用递归匿名函数匿名函数的应用缺省参数,可变参数Python中形参有确定参数,缺省参数,可变参数,关键字参数。具体的使用和区别如下:确定参数:平时最常用的必传确定数量的参数即为确定参数缺省参数:在调用函数时可以传也可以省去的参数,如果不传将使用默认值可变参数:可变长度参数关键字参数:长度可变,但是需要以kv对形式传参举栗子:# 缺省参数 即有默认值的参数1
2020-06-09 11:27:43
690
原创 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
161
原创 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
356
原创 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
468
原创 如何理解linux input输入子系统
文章目录何为input输入子系统?输入子系统解决了什么问题?input输入子系统如何工作?相关的数据结构事件上报流程设备驱动层input core输入事件驱动层总结何为input输入子系统?linux系统支持的输入设备繁多,比如鼠标,键盘,游戏杆,触摸屏等,在这些输入设备中种类繁多,类型不一,不同原理、不同的输入信息,那么问题来了,如何管理这些信息呢?答案就是:input输入子系统就是完成这...
2020-04-15 19:13:01
377
原创 linux设备驱动模型之——platform虚拟总线
文章目录什么是platform虚拟总线platform组成什么是platform虚拟总线platform总线:linux内核用于管理片上资源的虚拟总线。它不像usb总线、PCI总线、 I2C、SPI 那样真实存在的。在计算机中有这样一类设备,它们通过各自的设备控制器,直接和CPU连接,CPU可以通过常规的寻址操作访问它们(或者说访问它们的控制器)。这种连接方式,并不属于传统意义上的总线...
2020-03-24 17:10:13
1225
原创 项目管控
1.客户联系人列表2.产品定义、产品规格书3.产品需求及需求变更统计(包括软件、硬件、结构及客户)4.客户需求及任务清单罗列统计5.软件bsp调试计划,及bsp领域自测报告6.关键器件变更7.SCM管控:(代码拉取,编译环境搭建,版本发布及客户版本推送)8.生产管控9.关键问题review...
2020-01-21 21:55:37
145
原创 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
559
转载 Android Verified Boot 2.0 安卓P AVB实现详解
什么是AVB验证启动是确保用户设备运行软件完整性的一整套流程。 它通常从设备固件的只读部分启动,使用加密方式验证代码是可靠且没有任何已知的安全缺陷之后才会执行。 AVB是验证启动的一种实现。VBMeta结构体AVB中使用的核心数据结构是VBMeta结构体。此数据结构包含许多描述符(和其他元数据),并且所有这些数据都以加密方式签名。 描述符用于映像哈希值,映像哈希树元数据和所谓的链...
2019-12-31 10:42:26
3720
原创 高通平台 设置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
2261
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
1995
转载 高通平台Android源码bootloader分析之sbl1(二)
在上一篇博文中主要描述了启动流程,及代码执行流程,并重点介绍了一下我重点关注的部分。这个sbl部分也算有点庞大,我们没有精力也没有必要去分析全部,所以接下来就来分析一下sbl1中另外几个需要格外关注的部分:CDT :主要提供平台设备数据log system:log日志系统,当然没有kernel里面那么强大了download:代码下载烧写实现ramdump:异常信息dump 本篇博文就先来...
2019-12-26 18:36:14
2668
1
转载 高通平台Android源码bootloader分析之sbl1(一)
高通8k平台的boot过程搞得比较复杂, 我也是前段时间遇到一些问题深入研究了一下才搞明白。不过虽然弄得很复杂,我们需要动的东西其实很少,modem侧基本就sbl1(全称:Secondary boot loader)的代码需要动一下,ap侧就APPSBL代码需要动(对此部分不了解,可参照:bootable源码解析),其他的都是高通搞好了的,甚至有些我们看不到代码。今天就要分析一下开机前几秒钟起着关...
2019-12-26 18:06:44
5946
1
linux-5.15.73/Documenta/arm64/booting.rst中文翻译
2024-01-18
linux-5.15.73/Documenta/arm/booting.rst 中文翻译
2024-01-18
毕业设计:基于 STC12 的亚健康手环
2024-01-12
毕业设计:基于stc12开发板的图形系统
2024-01-12
AutoGPT:为个人提供可访问的人工智能工具
2024-01-12
毕业设计:嵌入式软件项目,基于MSP430演示通过CC3000 WiFi向云发送和接收数据
2024-01-08
树莓派驱动开发实战,基于Raspberry Pi 3B+平台学习Linux驱动开发的记录与分享
2024-01-04
毕业设计,课程项目练习,学习C/C++语言自学小项目
2024-01-04
毕业设计:51单片机采集环境数据并使用MQTT协议上传至阿里云,阿里云使用AMQP消息队列下发至业务服务器,在前端页面展示数据
2024-01-04
《TCP/IP网络编程》学习笔记
2024-01-04
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人