- 博客(33)
- 资源 (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
11191
2

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

原创 Android 中的dm-verity
Android 中的Verified Boot之dm-verity之前做了一个Verified Boot模块相关的工作,但是在网上只有找到google的文档和一个nexus的patch。虽然有patch,但在不同版本的代码上实现起来却可能有一些bug,所以特此记录一下debug这个东西的过程。之前debug的过程一直没找到问题,归根到底还是这个原理没搞清楚就下手,所以我分成原理,接口和应用来说明dm
2016-07-09 17:28:38
48179
2
原创 ATF UFS初始化笔记
在此阶段结束时,应完成 UniPro 引导序列,并且UTP层应能够访问设备描述符(如果设备描述符的 bDescrAccessEn(描述符访问使能)字段为 01h)并交换读取命令和测试单元就绪命令的 UPIU。在主机和设备两侧的 UFS 互连层初始化结束后,主机应发送 NOP OUT UPIU 以验证设备的 UTP 层是否就绪。ufshc_dme_link_startup实现非常简单,就是调用了UFSHC DME的寄存器发送了DME_LINKSTARTUP的UIC opcode给UNIPRO,使能链路层。
2024-09-12 10:07:06
986
原创 UEFI源码学习3.7 - NorFlashDxe
文章目录1. 数据结构2. 初始化3. 读写实现4. 测试代码1. 数据结构2. 初始化3. 读写实现4. 测试代码
2022-05-30 13:34:25
1482
原创 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
4169
原创 UEFI源码学习3 - DXE
目录UEFI源码学习3.1 - DXE DispatcherUEFI源码学习3.2 - DXE Protocol实现UEFI源码学习3.3 - DXE Event实现
2022-05-08 12:35:52
858
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
954
原创 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
3910
3
原创 如何利用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
5901
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
1677
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
6096
原创 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
6825
10
原创 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
7546
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
19443
原创 x509解析
文章目录X509X509X509的ASN.1定义:[Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING}首先,一张x509证书最顶层包含三个东西。TBSCertificate是X509里最重要...
2019-05-09 17:39:56
6276
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
7395
3
原创 AMBA协议学习小记
AMBAAPBAPB2接口PCLK -Peripheral clockPADDR[..] -Peripheral address busPWRITE -Peripheral read/write signalPWDATA[..] -Peripheral write data busPRDATA[..] ...
2018-07-15 13:45:16
10198
5
原创 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
4334
2
原创 ECDSA 签名验证原理及C语言实现
这两天总算把ECDSA搞明白了,本来想造个ECDSA轮子,但最近有点忙,而ECDSA轮子又不像HASH那样简单,所以就直接拿现成的轮子来记录一些ECDSA学习心得。 这里贴上github上一个比较适合学习的ECDSA代码,当然这个版本的代码没有openssl等商业级的代码专业,但是它足够简单,用来学习ECDSA原理非常合适。 easy-ecc非对称加密算法签名/验证无非包括三步: 1. ...
2018-03-25 20:13:28
31271
17
原创 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
2109
原创 自制嵌入式操作系统 DAY3
今天实现事件控制块,存储管理以及定时器。1 事件控制块本节代码位于12_event中什么是事件控制块呢?可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本质的过程就是初始化这个事件控制块...
2018-03-04 20:13:11
799
原创 自制嵌入式操作系统 DAY2
话不多说,直接进入正题,今天要实现的便是RTOS任务相关的所有功能1 临界区保护本节代码在05_critical下为什么需要临界区保护呢,请看下图: 当task1要对共享资源进行读-改-写操作时,在写回之前被某一事件中断打断切换到task2,而此时task2恰巧也有修改共享资源x的代码,此时task2将共享资源修改成了11,当完成这个操作后,task2交出cpu控制权,此时R...
2018-02-21 18:17:22
811
原创 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
4667
原创 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
9400
6
原创 armv7a中的SMC指令应用
工作中用到了smc指令,感觉除了arm的手册介绍这个指令的资料并不是太多,所以写这篇文章记录一下。 SMC是TrustZone的一部分。Non-Secure world要切换到Secure-World的时候需要进入Monitor模式才能进行操作,而在armv7a中就是通过SMC指令进入到TrustZone。本文中只介绍跟SMC指令相关的东西,并不介绍TrustZone。本文中的所以指令的运行都是运
2017-08-19 09:15:47
13793
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
6255
原创 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
10358
原创 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
8510
1
mps2 cortex m33 开发板手册
2020-01-08
JEDEC SPI NOR FLASH
2018-08-05
SD协议中文2.0 3.0
2018-04-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人