自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(32)
  • 资源 (4)
  • 收藏
  • 关注

原创 SHA512/384 原理及C语言实现(附源码)

闲来无事,造个哈希轮子,SHA384/SHA512这两者原理及实现一样的,只是输出和初始化的向量不一样。原型hash_val = sha512/384(message). hash_val: SHA512输出是512bit(64个byte),SHA384输出是384bit(48个byte) message: 0 < bits(message) < 2^128,messa...

2018-03-03 15:51:40 10189 2

原创 自制嵌入式操作系统 DAY1

遥想当年刚学习操作系统的时候,很难理解教科书中关于线程/进程的描述。原因还是在于操作系统书上的内容太过抽象,对于一个没有看过内核代码的初学者来说,很难理解各种数据结构的调度。后来自己也买了一些造轮子的书,照着好几本书也造了几个玩具操作系统,有X86,有ARM的。经过实践之后回头再去看操作系统的书,才恍然大悟操作系统书中所写的知识点。 看了许多操作系统实践类的书籍后,有些书只是浅尝辄止,试图用30...

2018-02-19 19:26:06 5759 1

原创 ARMCC/GCC下的stack protector

Stack overflow攻击是一种很常见的代码攻击,armcc和gcc等编译器都实现了stack protector来避免stack overflow攻击。虽然armcc和gcc在汇编代码生成有些不同,但其原理是相同的。这篇文章以armcc为例,看一看编译器的stack protector。armcc提供了三个编译选项来打开/关闭stack protector。–no_protect_stac

2017-05-20 15:59:59 4694

原创 Android 中的dm-verity

Android 中的Verified Boot之dm-verity之前做了一个Verified Boot模块相关的工作,但是在网上只有找到google的文档和一个nexus的patch。虽然有patch,但在不同版本的代码上实现起来却可能有一些bug,所以特此记录一下debug这个东西的过程。之前debug的过程一直没找到问题,归根到底还是这个原理没搞清楚就下手,所以我分成原理,接口和应用来说明dm

2016-07-09 17:28:38 46259 8

原创 ATF SMC处理

ATF SMC

2022-11-17 14:32:40 681 1

原创 UEFI源码学习3.7 - NorFlashDxe

文章目录1. 数据结构2. 初始化3. 读写实现4. 测试代码1. 数据结构2. 初始化3. 读写实现4. 测试代码

2022-05-30 13:34:25 1080

原创 UEFI 学习3.6 - ARM QEMU上的ACPI表

文章目录ACPI 表结构RSDPXSDTFADTDSDTMADTSPCR如果对ACPI概念不熟悉,可以先参考这篇【UEFI基础】ACPI基础解析代码github地址: TestPkgACPI 表结构ACPI的第一张表示RSDP(Root System Description Pointer),它里面存放了R(X)DST的地址。RDST是32位地址,XDST是64位地址,其功能是一样的。后面用的是AARCH64架构,所以用的64位地址的XDST。根据RSDP找到XDST后,就可以根据XDST找出一

2022-05-25 14:28:26 2673

原创 UEFI源码学习3 - DXE

目录UEFI源码学习3.1 - DXE DispatcherUEFI源码学习3.2 - DXE Protocol实现UEFI源码学习3.3 - DXE Event实现

2022-05-08 12:35:52 731 4

原创 UEFI源码学习3.3 - DXE Event实现

文章目录1. CoreCreateEvent / CoreCreateEventEx2. CoreSignalEvent3.CoreWaitForEvent / CoreCheckEventedk2/MdeModulePkg/Core/Dxe/Event/Event.cedk2/MdeModulePkg/Core/Dxe/Event/Tpl.c1. CoreCreateEvent / CoreCreateEventExCoreCreateEvent/CoreCreateEventEx用于创建一个Ev

2022-05-07 22:37:56 776

原创 UEFI源码学习3.2 - DXE Protocol实现

DXE Protocol实现

2022-05-06 21:47:02 1206

原创 UEFI源码学习01-ARM AARCH64编译、ArmPlatformPriPeiCore(SEC)

文章目录1. AARCH64编译环境搭建2. ArmPlatformPriPeiCore2.1 QEMU_EFI.fd包含了什么2.2 QEMU virt aarch64相关2.3 从第一条指令到ArmPlatformPrePeiCore入口2.4 ArmPlatformPrePeiCore做了点什么_ModuleEntryPointCEntryPointPrimaryMain1. AARCH64编译环境搭建git clone https://github.com/tianocore/edk2-plat

2022-04-21 15:51:01 2996 2

原创 LPDDR4笔记

LPDDR4

2022-04-06 12:33:03 1847

原创 如何利用qemu搭建SOC protoype:80行代码实现一个Cortex M4 模拟器

随着国内芯片公司越来越多,越来越多的底层程序员需要在pre silicon阶段就要开发代码。而在pre silicon阶段测试方式有多种:方式优点缺点RTL simulation可以验证最准确的硬件行为,可以测试SOC相关代码仿真速度非常慢,且rtl freeze之前硬件有bugFPGA/ZEBU emulation可以验证部分硬件行为,速度相对RTL simulation快价格昂贵,难以布署大量测试,且有些硬件没法仿真软件模拟器,如QEMU速度最快,可以布署大

2021-01-22 14:51:52 4731 8

原创 scons 搭建嵌入式arm编译

最近发现scons真的很好用,python语法比makefile友好很多。准备用scons 替换掉项目中的makefile,重新搭建build system。本文是之前自己刚开始学习scons的一个小demo,用来编译一个嵌入式arm的项目。项目目录-scons_demo - boot.s - cm4.ld - compiler.py - main.c - SConstruct - driver - SConscript - qemu_print.c - sub_driver

2021-01-08 17:25:15 1350 1

原创 imx6ull-qemu 裸机教程2:USDHC SD卡

文章目录1 6UL的USDHC简介1.1 USDHC Block Diagram1.2 USDHC支持的模式1.3 外部信号1.4 Data Buffer1.5 ADMA1.5.1 ADMA Engine1.5.2 ADMA2 Descriptor格式1.6 Register2 SD协议简介2.1 SD总线拓扑2.2 SD总线协议2.3 SD卡功能描述3 QEMU SD卡读写demo3.1 USD...

2020-01-29 21:50:25 5276

原创 imx6ull-qemu 裸机教程1:GPIO,IOMUX,I2C

无意间搜到了韦东山老师的6ul网站,上面有一个6ul的qemu仿真器,下载下来用了用,非常好用,有UI,比原装的qemu-system-arm提供的6ul开发板多了很多功能。下面贴出的就是韦东山老师的qemu网站:百问网imx6ull-qemu但是默认的跑了linux,没有裸机的例程。所以本文写了几个裸机的程序以供参考学习6UL芯片。本教程源码目标实现以下模块的裸机程序:GPIO L...

2020-01-29 09:53:07 5437 9

原创 armv8m(cortex m33) MPU实战

文章目录1 MPU1.1 Memory attributes summary1.2 MPU寄存器1.2.1 MPU Type Register1.2.2 MPU Control Register1.2.3 MPU Region Number Register1.2.4 MPU Region Base Address Register1.2.5 MPU Region Limit Address Re...

2020-01-08 20:37:33 6200 6

原创 SPI NAND FLASH小结

文章目录1 SPI NAND接口2 寻址常用型号3 Feature寄存器MX35LFxGE4AB4 读时序1 SPI NAND接口一般来说,SPI的接口就是6个IO,CS, CLK, SI, SO, WP, HOLD。IO位数输入输出SingleSISODualSISI(IO0), SO(IO1)QuadSISI(IO0), SO(IO1), ...

2019-07-12 16:41:31 18154

原创 x509解析

文章目录X509X509X509的ASN.1定义:[Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING}首先,一张x509证书最顶层包含三个东西。TBSCertificate是X509里最重要...

2019-05-09 17:39:56 5912 2

原创 FATFS FAT32学习小记

FAT32概述FAT32文件系统由DBR及其保留扇区,FAT1,FAT2 和 DATA 四个部分组成,其机构如下图: 这些结构是在分区被格式化时创建出来的,含义解释如下:DBR及其保留扇区:DBR的含义是DOS引导记录,也称为操作系统引导记录,在DBR之后往往会有一些保留扇区。 FAT1:FAT的含义是文件分配表,FAT32一般有两份FAT,FAT1是第一份,也是主FAT。 FA...

2018-08-01 13:22:35 6623 3

原创 AMBA协议学习小记

AMBAAPBAPB2接口PCLK -Peripheral clockPADDR[..] -Peripheral address busPWRITE -Peripheral read/write signalPWDATA[..] -Peripheral write data busPRDATA[..] ...

2018-07-15 13:45:16 9764 4

原创 EMMC/SD学习小记

eMMC之分区管理、总线协议和工作模式 JDEDC EMMC 协议中文 SD卡协议中文2.0 3.0EMMC4.4 非Boot模式读流程等待74个时钟CMD0 复位emmc至idle状态 命令索引 类型 参数 应答 缩写 命令说明 CMD0 bc 00000000 - GO_IDLE_STATE 复位设备至idle状态...

2018-04-15 12:51:53 3979

原创 ECDSA 签名验证原理及C语言实现

这两天总算把ECDSA搞明白了,本来想造个ECDSA轮子,但最近有点忙,而ECDSA轮子又不像HASH那样简单,所以就直接拿现成的轮子来记录一些ECDSA学习心得。 这里贴上github上一个比较适合学习的ECDSA代码,当然这个版本的代码没有openssl等商业级的代码专业,但是它足够简单,用来学习ECDSA原理非常合适。 easy-ecc非对称加密算法签名/验证无非包括三步: 1. ...

2018-03-25 20:13:28 29153 16

原创 CMSIS CM3源码注解

文中截图摘自《Cortex_M3权威指南》core_cm3.h1 Memory Map/* Memory mapping of Cortex-M3 Hardware */#define SCS_BASE (0xE000E000) /*!< System Control Space Base Ad...

2018-03-18 13:16:05 1875

原创 自制嵌入式操作系统 DAY3

今天实现事件控制块,存储管理以及定时器。1 事件控制块本节代码位于12_event中什么是事件控制块呢?可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本质的过程就是初始化这个事件控制块...

2018-03-04 20:13:11 665

原创 自制嵌入式操作系统 DAY2

话不多说,直接进入正题,今天要实现的便是RTOS任务相关的所有功能1 临界区保护本节代码在05_critical下为什么需要临界区保护呢,请看下图: 当task1要对共享资源进行读-改-写操作时,在写回之前被某一事件中断打断切换到task2,而此时task2恰巧也有修改共享资源x的代码,此时task2将共享资源修改成了11,当完成这个操作后,task2交出cpu控制权,此时R...

2018-02-21 18:17:22 686

原创 Python RSA, ECDSA384签名/验证

工作中用到了RSA和ECDSA的签名,整理一下脚本代码,分享给有需要的人。RSA支持多种bit位数, ECDSA暂时只支持ECDSA384。RSA的脚本用的python2,ECDSA用python3写的。RSA#!/usr/bin/pythonfrom cryptography.exceptions import InvalidSignaturefrom cryptograph...

2017-11-11 21:05:52 4371

原创 HyperBus Nor Flash小记

InterfaceMandatory I/O Summary Symbol Type Description CS# 主设备输出,从设备输入 Chip Select:当改信号从High变为Low时,HyperBus开始传输。 当该信号从低变为高时, HyperBus结束传输。 CK,CK# 主设备输出,从设备输入 Differential Clock:comma

2017-11-06 21:01:32 8484 6

原创 armv7a中的SMC指令应用

工作中用到了smc指令,感觉除了arm的手册介绍这个指令的资料并不是太多,所以写这篇文章记录一下。 SMC是TrustZone的一部分。Non-Secure world要切换到Secure-World的时候需要进入Monitor模式才能进行操作,而在armv7a中就是通过SMC指令进入到TrustZone。本文中只介绍跟SMC指令相关的东西,并不介绍TrustZone。本文中的所以指令的运行都是运

2017-08-19 09:15:47 12645 1

原创 Android BLE开发: BLE Peripheral开发流程

BLE原理不多说了,网上有很多。 Android从lolipop开始支持了BLE Peripheral开发。网上也有关于Framework的文章。反而真的关于应用开发的确不多,google官网也只给出了一个Central的Demo。之前实习的时候做了一个BLE Peripheral的Demo,这里将Peripheral开发的一些流程简单整理一下。不多说,直接上代码。初始化//初始化Bluetooth

2016-07-04 14:51:03 6068 7

原创 Android Native进程内存泄露检测

Android Native进程内存泄露检测简介对于Android的native进程, Android源码中的Bionic库提供了一个很棒的API,get_malloc_leak_info用来检测Native代码内存泄露。相关原理相关的Property使用这个API需要设置libc.debug.malloc这个property。这个property用来控制malloc信息的debug等级。在使用这个

2016-07-04 13:26:28 10147 2

原创 Android6.0 动态权限(Runtime Permission)

Android6.0 动态权限Android 6.0中将Runtime Permission分成了普通权限(Normal Permission)以及危险权限(Dangerous Permission),普通权限在AndroidManifest.xml中注册的时候是默认打开的,而被认为危险的权限在注册的时候是关闭的,需要用户去打开或者在代码里动态申请。当APP的API < 23时,危险权限还是默认打开

2016-07-04 11:31:23 8326 1

mps2 cortex m33 开发板手册

mps2 cortex m33 开发板手册 ARMV8M, MPU, Memory Map, Application Note AN505 Example IoT Subsystem design for V2M-MPS2+

2020-01-08

JEDEC SPI NOR FLASH

This standard was prepared by the JEDEC SFDP Task Group authorize by the JC-42.4

2018-08-05

SD协议中文2.0 3.0

Sd 存储卡,是为了满足安全、容量、性能、和环境需求的新型音视频电子存储卡。 Sd 卡包含一个内容保护机制,符合SDMI 标准,并且有更快的速度和更高的容量。 Sd 卡的安全系统采用双向认证和“新密码算法”来防止卡的内容被非法使用。也可以 对用户自己的数据进行非安全访问。 SD 卡也支持基于常用标准的第二安全系统,比如ISO-7816,这样就可以用于将SD 卡连 接到共用网络和其他系统,来支持移动电子商务和数字签名的应用。 除了SD 卡外,还有SDIO 卡。SDIO 卡规范在一个单独的规范中定义,命名为“SDIO 卡 规范”(可以从SD 协会得到)。SDIO 规范定义了一个SD 卡可能包含不同的IO 单元同SD host 之间的接口。SDIO 卡可以包含存储功能,以及IO 功能。SDIO 卡的存储部分应该完全兼容 SD 卡规范。SDIO 卡基于并兼容SD 卡。这种兼容包括机械、电气、电源、信号和软件。Sdio 卡的意图是为移动电子设备在低功耗情况下提供高速数据读写。一个主要目标是一个IO 卡 插到非SDIO 主机中,不会引起物理损坏或者设备和软件的中断。这种情况下IO 卡应该被简

2018-04-16

JDEDC EMMC 协议中文

本文档提供了一个对e•MMC电气接口及其环境和处理的全面的定义。它还提供了设计导则,并定义了降低设计开销的宏函数和算法的工具箱。

2018-04-10

空空如也

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

TA关注的人

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