- 博客(64)
- 资源 (6)
- 收藏
- 关注
原创 optee RPC
RPC 是从 secure world 向 内核驱动程序 或 tee-supplicant 发出的请求。RPC由来自OPTEE_SMC_CALL_WITH_ARG 的一组特殊的SMCCC返回值来标识。用于内核的RPC消息由内核驱动程序处理。除了切换共享内存缓冲区表示外,其他RPC消息将被转发到tee-supplicant,而无需驱动程序进一步参与。
2024-02-17 10:11:45 1357 7
原创 optee CA/TA flow
前面的执行流程相同,只是到了opteed_smc_handler函数,跳过了前面caller is secure的分支,因为我们是从secure的环境进入的,直接到了后面 switch(smc_fid) 的逻辑。执行完返回,最后调用 smc #0,触发异常,跳转到EL3。由于从secure el1返回的时候,x0带的参数是TEESMC_OPTEED_RETURN_CALL_DONE,即smc_fid = TEESMC_OPTEED_RETURN_CALL_DONE。所以我们直接看这个分支的处理函数。
2024-02-17 09:59:36 772 1
原创 optee UTA加载
动态TA按照存储位置的不同分为REE filesystem TA:存放在REE侧文件系统里的TA;Early TA:被嵌入到optee os里的在supplicant启动之前就可用了。这里我们讲的是常规的存放在REE侧文件系统里的TA。通过GP标准调用的与TA通信的命令(opensession\invoke\closession)其实都是std smc call,该smc调用后,会进入到TEE中的tee_entry_std中。
2024-02-16 20:03:50 1084 1
原创 socket
Unix Domain Socket(UDS,Unix 域套接字),它还有另一个名字叫 IPC(inter-process communication,进程间通信)。使用 UDS 的好处显而易见:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC 机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。
2023-07-30 15:33:16 275
原创 uboot源码分析图
arch/arm/cpu/u-boot.ldsOUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")OUTPUT_ARCH(arm)ENTRY(_start)SECTIONS{ . = 0x00000000; . = ALIGN(4); .text : { __image_copy_start = .; CPUDIR/start.o (.text) *(.text) } . = A.
2021-08-22 22:48:11 189
原创 tiny210 uboot源码分析
u-boot-2012.10tiny210board_init_farch/arm/lib/board.c/board_init_fvoid board_init_f(ulong bootflag) arch/arm/lib/board.c{ ... ... for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) { if ((*init_fnc_ptr)() != 0) { h
2021-08-22 22:37:53 294
原创 qemu vexpress
uboot版本:u-boot-2018.091、生成配置文件,make ARCH=arm vexpress_ca9x4_defconfig2、图形配置make menuconfig3、编译Ubootmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j44、qemu启动ubootqemu-system-arm -M vexpress-a9 -cpu cortex-a9 -m 256 -kernel u-boot --nographic5、退出Q
2021-08-15 19:12:26 468
原创 ARM NVIC GIC
STM321. 中断向量表2. NVIC(内嵌向量中断控制器)3. 中断使能4. 中断服务函数1、中断向量表中断向量表是一个表,这个表里面存放的是中断向量。中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量,因此中断向量表是一系列中断服务程序入口地址组成的表。这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序(函数)入口地址处。中断向量表在整个程序的最前面,比如 STM32F103 的中断向量表如下所示:
2021-08-14 11:53:25 2413 1
转载 Linux任务前后台的切换 命令
原文Shell支持作用控制,有以下命令实现前后台切换: 1. command & 让进程在后台运行 2. jobs 查看后台运行的进程 3. fg %n 让后台运行的进程n到前台来 4. bg %n 让进程n到后台去 5. kill %n 杀死job PS:”n”为jobs命令查看到的job编号,不是进程编号. fg、bg、jobs、&...
2018-09-04 22:21:06 437
转载 linux设备树详解
原文 在Linux3.x版本后,arch/arm/plat-xxx和arch/arm/mach-xxx中,描述板级细节的代码(比如platform_device、i2c_board_info等)被大量取消,取而代之的是设备树,其目录位于arch/arm/boot/dts1.设备树的组成1个dts文件+n个dtsi文件,它们编译而成的dtb文件就是真正的设备树soc厂商会把soc公共的...
2018-09-01 09:17:23 4528
原创 linux 驱动调试问题记录
1、非root用户文件操作权限不够文件属性 rwx rwx rwx — — — sudo chmod 777 /dev/xxx 其中 R = 4, W = 2, X = 1 详细https://www.cnblogs.com/ccEmily/p/5672749.html2、控制台不打印消息sudo dmesg 详细https://blog.csdn.net/a29562...
2018-08-31 21:36:09 521
转载 进程的挂起、阻塞和睡眠
原文 要说挂起、阻塞、睡眠难免让人想到进程生命周期中的阻塞态或者等待状态,而挂起和睡眠却没有出现在进程生命周期中,说明这三个其实在本质上区别并不那么大,但是既然称呼不同,应该就有不同的道理。先说阻塞,既然它能出现在进程生命周期,必然是每个进程都会经历的一个阶段,众所周知,进程在运行过程中必然要获取资源,暂且不说CPU,进程运行肯定要和磁盘进行交互,继而发生IO操作,IO操作势必要引起等待,在...
2018-08-31 10:53:05 1182
转载 线程 进程
链接:https://www.zhihu.com/question/25532384/answer/81152571首先来一句概括的总论:进程和线程都是一个时间段的描述,是CPU工作时间段的描述。下面细说背景: CPU+RAM+各种资源(比如显卡,光驱,键盘,GPS, 等等外设)构成我们的电脑,但是电脑的运行,实际就是CPU和相关寄存器以及RAM之间的事情。 **一个最最基础的事实:*...
2018-08-26 19:20:15 291
转载 arm-linux-gcc常用参数 gcc编译器使用方法
我们需要编译出运行在ARM平台上的代码,所使用的交叉编译器为 arm-linux-gcc。下面将arm-linux-gcc编译工具的一些常用命令参数介绍给大家。 在此之前首先介绍下编译器的工作过程,在使用GCC编译程序时,编译过程分为四个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling) 链接(Linking)Linux程序员可...
2018-08-25 12:25:34 984
原创 stm32 + W5500 实现一个简单的 CoAP 服务器
硬件:stm32f103+W5500 软件:microcoap开源库void CoAP_Server(void){ coap_packet_t pkt; switch(getSn_SR(SOCK_UDPS)) /*获取socket的状态*/ { case SOCK_CLOSED: /*socket处于关闭状态*/ ...
2018-08-16 10:50:31 3710 1
原创 OneNET NB 学习笔记四 基本 AT 指令流程
/* 1、上电检查流程 */(1) AT //判断模组是否上电开机成功(2) AT+CIMI //读取 IMSI, 判断 SIM 卡初始化是否成功(3) AT+CSQ //信号质量检查(4) AT+CEREG? //判断 PS 域附着状态,标识位返回 1 或 5 表示附着正常(5) AT+CGATT? //检查模组 PS 附着状态//如果需要使用网络信号变更提示主动上报,可以使用如下 ...
2018-08-13 10:08:06 7024 3
原创 OneNET NB 学习笔记三 接收数据处理与回复过程
//main函数中,循环调用 do { ret = nbiot_device_step( dev, 1); // 处理上下行数据的总入口 if ( ret ) printf( "device step error, code = %d.\r\n&qu
2018-08-11 15:36:54 2724 1
原创 stm32 USART接收总线空闲中断--USART_IT_IDLE
串口DMA接收:接收数据的流程: 串口接收DMA在初始化的时候就处于开启状态,一直等待数据的到来,在软件上无需做任何事情,只要在初始化配置的时候设置好配置就可以了。 判断数据数据接收完成: 这里判断接收完成是通过串口空闲中断的方式实现,即当串口数据流停止后,就会产生IDLE中断。这个中断里面做如下几件事: 1. 关闭串口接收DMA通道,2点原因:1.防止后面又有...
2018-08-10 11:21:08 26534 9
原创 OneNET NB 学习笔记二 内存管理 memb fifo ringbuf
#define CC_CONCAT2(s1, s2) s1##s2 //将s1和s2连接#define CC_CONCAT(s1, s2) CC_CONCAT2(s1, s2)#define MEMB(name, structure, num) \ static char CC_CONCAT(name,_memb_count)[num]; \ static...
2018-08-09 08:07:43 928
原创 OneNET NB 学习笔记一 终端创建设备、资源过程
终端设备在应用程序中创建设备(dev),在设备中配置好接入机地址、endpoint name(也即鉴权信息 IMEI、 IMSI 等信息)、 lifetime 以及回调函数(读、写和执行函数)后,应用程序中创建完成的设备会在基础通信套件中创建同样的设备,在设备登录 OneNET 平台成功后,基础通信套件中的设备会上传到平台。 目前 OneNET 平台支持 LWM2M 和 IPSO 定义的资源模型...
2018-08-08 19:43:20 5660 4
原创 MCU LSB MSB接收、发送
char Data = 0; //放置接收的数据for(char i = 0; i < 8; i++) //MCU LSB接收数据组 字节{ Data >>= 1; //先移位 if(GPIO) Data |= 0x80;}for(char i = 0; i < 8; i++) //MCU MSB接收{ Data <<= 1...
2018-08-04 17:18:51 1011
原创 最大公约数 欧几里得算法 最小公倍数
Gcd(m, n) = Gcd(n, m%n)int Gcd(int m, int n){ if(n == 0) return m; else return Gcd(n, m%n);}int Gcd(int m, int n){ int c; while(m != 0) { c = m; ...
2018-08-01 23:00:10 475
原创 字符串与整型互相转化的库函数
将整型转化成字符串:sprintf,在string.h#include <string.h>int sprintf( char *buffer, const char *format, [ argument] … );参数列表 buffer:char型指针,指向将要写入的字符串的缓冲区。 format:格式化字符串。 [argument]…:可选参
2018-08-01 20:34:59 1870
转载 PC817线性光耦
PC817线性光耦作用及原理pc817是常用的线性光藕,在各种要求比较精密的功能电路中常常被当作耦合器件,具有上下级电路完全隔离的作用,相互不产生影响。 pc817主要特点:1、电流传输比 (CTR: MIN. 50% at IF=5mA ,VCE=5V) 2、高隔离电压:5000V有效值 3、紧凑型双列直插封装,PC817为单通道光耦,PC827为双通道光耦,PC837为三通道...
2018-08-01 10:44:44 17338 1
转载 STM32 USART1一键下载电路
要想了解一键下载电路的工作过程,首先要了解STM32的几种启动模式。STM32的几种启动模式如下表所示: 从表中可知,我们想用串口下载代码,就要配置BOOT0为1,BOOT1为0,但是如果想让STM32一复位就运行代码,就要配置BOOT0为0,BOOT1配置为什么都可以,为了解决这个问题,我们可以设计一个电路,通过串口转USB芯片CH340G的DTR#和RTS#引脚的信号来控制一键下载...
2018-08-01 08:20:45 17938 1
原创 二维数组 作为 参数传递
void func(char (*arr)[50], int n){}void func1(char arr[][50], int n){}void func2(char arr[100][50], int n){}int main(){ char arr[100][50] = {0}; int n; scanf("%d", &n
2018-07-31 19:21:46 1080
原创 链表反转
#include <stdio.h>#include <stdlib.h>struct stu{ int age; struct stu* next;};typedef struct stu STU;int len = sizeof(STU);STU* CreateNode(int n)//创建n个节点{ STU *head, *p...
2018-07-29 22:41:17 206
原创 typedef与#define
typedef 声明新类型名代替原来的类型1、简单的用一个新的类型名代替原有的类型名typedef int Integer; //指定Integer为类型名,作用与int相同Integer i, j; //作用与int i, j;相同,都是定义两个int类型的变量2、命名一个简单的类型名代替复杂的类型表示方法(1)命名一个新的类型名代替结构体类型...
2018-07-29 10:38:10 400
原创 CAN
CAN:controller area network,控制器区域网络,异步半双工 节点:由控制器和收发器组成。 CAN控制器:STM32 CAN收发器:TJA1050,是控制器区域网络(CAN)协议控制器和物理总线之间的接口,是一种标准的高速CAN收发器,将普通逻辑电平转化成差分信号,通过差分线CAN_HIGH和CAN_LOW输出到CAN总线。 CAN通讯节点由一个CAN控制器及CA...
2018-07-28 10:00:17 1594
原创 按键 连续与不连续
int key_scan(mode);int main(){ int key = 0; while(1) { while((key = key_scan(x))) //扫描按键。x为0或者1 { switch(key) { case 1: ...
2018-07-25 15:38:44 2590
原创 一点关于func(++i, i++)和func(++i, i)的问题
#include <iostream>using namespace std;//void func(int v1, int v2)void func(const int& v1, const int& v2){ cout << v1 << ' ' << &v1 << endl; cou...
2018-07-24 23:30:30 1550 1
原创 stm32程序运行时间 简单测试记录
int main(void) { const char *topics[] = {"HelloNUAA"};------------------------------------------0.3us uint8_t Key = 4;--------------------------------------------------------------...
2018-07-24 10:48:45 6409
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人