- 博客(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 10789 2
原创 自制嵌入式操作系统 DAY1
遥想当年刚学习操作系统的时候,很难理解教科书中关于线程/进程的描述。原因还是在于操作系统书上的内容太过抽象,对于一个没有看过内核代码的初学者来说,很难理解各种数据结构的调度。后来自己也买了一些造轮子的书,照着好几本书也造了几个玩具操作系统,有X86,有ARM的。经过实践之后回头再去看操作系统的书,才恍然大悟操作系统书中所写的知识点。 看了许多操作系统实践类的书籍后,有些书只是浅尝辄止,试图用30...
2018-02-19 19:26:06 6128 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 4983
原创 Android 中的dm-verity
Android 中的Verified Boot之dm-verity之前做了一个Verified Boot模块相关的工作,但是在网上只有找到google的文档和一个nexus的patch。虽然有patch,但在不同版本的代码上实现起来却可能有一些bug,所以特此记录一下debug这个东西的过程。之前debug的过程一直没找到问题,归根到底还是这个原理没搞清楚就下手,所以我分成原理,接口和应用来说明dm
2016-07-09 17:28:38 47136 8
原创 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 716
原创 UEFI源码学习3.7 - NorFlashDxe
文章目录1. 数据结构2. 初始化3. 读写实现4. 测试代码1. 数据结构2. 初始化3. 读写实现4. 测试代码
2022-05-30 13:34:25 1261
原创 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 3273
原创 UEFI源码学习3 - DXE
目录UEFI源码学习3.1 - DXE DispatcherUEFI源码学习3.2 - DXE Protocol实现UEFI源码学习3.3 - DXE Event实现
2022-05-08 12:35:52 793 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 862
原创 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 3370 2
原创 如何利用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 5276 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 1513 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 5749
原创 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 6010 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 6935 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 18822
原创 x509解析
文章目录X509X509X509的ASN.1定义:[Certificate ::= SEQUENCE { tbsCertificate TBSCertificate, signatureAlgorithm AlgorithmIdentifier, signature BIT STRING}首先,一张x509证书最顶层包含三个东西。TBSCertificate是X509里最重要...
2019-05-09 17:39:56 6080 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 7050 3
原创 AMBA协议学习小记
AMBAAPBAPB2接口PCLK -Peripheral clockPADDR[..] -Peripheral address busPWRITE -Peripheral read/write signalPWDATA[..] -Peripheral write data busPRDATA[..] ...
2018-07-15 13:45:16 9989 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 4191
原创 ECDSA 签名验证原理及C语言实现
这两天总算把ECDSA搞明白了,本来想造个ECDSA轮子,但最近有点忙,而ECDSA轮子又不像HASH那样简单,所以就直接拿现成的轮子来记录一些ECDSA学习心得。 这里贴上github上一个比较适合学习的ECDSA代码,当然这个版本的代码没有openssl等商业级的代码专业,但是它足够简单,用来学习ECDSA原理非常合适。 easy-ecc非对称加密算法签名/验证无非包括三步: 1. ...
2018-03-25 20:13:28 30175 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 1986
原创 自制嵌入式操作系统 DAY3
今天实现事件控制块,存储管理以及定时器。1 事件控制块本节代码位于12_event中什么是事件控制块呢?可以这样理解,前面学习我们已经知道,创建一个任务需要给这个任务分配一个任务控制块,这个任务控制块存储着关于这个任务的重要信息。那么,事件控制块就好比任务里的任务控制块。它存储着这个事件的重要信息,我们说创建一个事件(信号,邮箱,消息队列),其本质的过程就是初始化这个事件控制块...
2018-03-04 20:13:11 737
原创 自制嵌入式操作系统 DAY2
话不多说,直接进入正题,今天要实现的便是RTOS任务相关的所有功能1 临界区保护本节代码在05_critical下为什么需要临界区保护呢,请看下图: 当task1要对共享资源进行读-改-写操作时,在写回之前被某一事件中断打断切换到task2,而此时task2恰巧也有修改共享资源x的代码,此时task2将共享资源修改成了11,当完成这个操作后,task2交出cpu控制权,此时R...
2018-02-21 18:17:22 743
原创 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 4502
原创 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 8905 6
原创 armv7a中的SMC指令应用
工作中用到了smc指令,感觉除了arm的手册介绍这个指令的资料并不是太多,所以写这篇文章记录一下。 SMC是TrustZone的一部分。Non-Secure world要切换到Secure-World的时候需要进入Monitor模式才能进行操作,而在armv7a中就是通过SMC指令进入到TrustZone。本文中只介绍跟SMC指令相关的东西,并不介绍TrustZone。本文中的所以指令的运行都是运
2017-08-19 09:15:47 13223 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 6172 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 10254 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 8419 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关注的人