自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1363)
  • 资源 (1)
  • 收藏
  • 关注

原创 软件设计:统一过程(RUP)的辉煌历史与现代应用探讨

统一过程(Rational Unified Process,RUP)是由Rational Software公司开发,后被IBM收购的软件开发过程框架。RUP采用迭代和增量开发模型,将开发过程分为初始、细化、构建和交付四个阶段,每个阶段都有明确的目标和产出物。RUP在20世纪90年代末和21世纪初达到顶峰,通过其系统化和结构化的方法解决了软件开发中的诸多问题,如需求变更频繁、项目管理复杂和软件质量不高等。然而,RUP的复杂性、高成本和灵活性不足导致其逐渐被更灵活的敏捷方法所取代。尽管如此,RUP在大型、复杂项

2025-05-10 22:14:38 922

原创 linux加密框架 crypto 算法管理 - 动态和静态算法管理

如果是当前查找线程发布的创建动态算法通知,则larval为待创建算法同名的注册用算法幼虫,用于向创建动态算法的内核线程传递待创建算法的算法名、算法类型等信息,此时算法管理链表如下所示,其中cbc_aes_larval_r表示"cbc(aes)"算法对应的注册用算法幼虫。加密框架中的算法分为静态算法和动态算法两种,其中静态算法指的是以"算法名.ko"形式存在的静态编译的算法模块,如aes.ko表示AES算法模块,md5.ko表示MD5算法模块。tb:参数名(T)列表,不含参数值,以NULL结尾。

2025-05-06 22:50:08 846

原创 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_larval_lookup

6)如果前两次查找命中,但查找到的是算法幼虫(可能是注册用算法幼虫也可能是检测用算法幼虫),说明符合要求的算法正在注册中,调用crypto_larval_wait函数等待算法注册完成,返回注册成功的算法。crypto_larval_add函数要么返回第三次查找命中的算法(如果是算法幼虫,则调用crypto_larval_wait函数等待算法注册完成,返回新注册的算法)要么返回创建的注册用算法幼虫(已添加到算法管理链表中)。1)在算法查找前首先确认算法名是否有效,如果算法名为空,终止查找流程,返回异常。

2025-05-06 22:49:34 288

原创 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_alg_mod_lookup

4)如果查找到的是算法幼虫,即当前线程创建的注册用算法幼虫,在加密通知链发布创建动态算法的通知,由专门的内核线程负责创建并注册动态算法,算法查找线程调用crypto_larval_wait函数等待算法注册完成,然后调用crypto_larval_kill函数清理注册用算法幼虫。2)外部应用使用的算法必须是经过正确性检验(即算法标志中已置CRYPTO_ALG_TESTED状态位)的,因此在查找前更新待查找算法的算法类型type和算法类型屏蔽位mask,确保后续查找到的算法是经过正确性检验的、可用的算法。

2025-05-06 22:48:48 368

原创 linux加密框架 crypto 算法管理 - 算法查找接口 crypto_find_alg

异步哈希算法实例前端crypto_ahash_type中,type=CRYPTO_ALG_TYPE_AHASH(0x09)表示最佳的算法类型为异步哈希算法,mask=CRYPTO_ALG_TYPE_AHASH_MASK(0x0C),而type&mask=0x08(CRYPTO_ALG_TYPE_HASH)表示只要是哈希算法就行,不强求实现方式。crypto_alg_mod_lookup,这样crypto_find_alg函数相当于crypto_alg_mod_lookup函数的包裹函数。

2025-05-06 22:48:18 314

原创 linux加密框架 crypto 静态哈希算法crypto_register_shash注册流程

2)准备工作完成后,静态哈希算法的注册流程也是由静态算法注册函数crypto_register_alg完成,注意的是crypto_register_shash函数的输入参数为哈希算法说明alg,而调用crypto_register_alg函数时的输入参数为哈希算法说明对应的通用算法说明base(=&alg->base)。3)crypto_register_shash函数中接口调用情况如下所示,其中salg为待注册哈希算法的同步哈希算法说明,alg为待注册哈希算法的通用算法说明。

2025-05-06 22:47:46 137

原创 linux加密框架 crypto 算法crypto_register_alg的注册流程

从流程上看,算法正确性检验的结果不影响算法注册的正常结束,但是通过正确性校验的算法的算法标志cra_flags会设置算法已检测状态位(CRYPTO_ALG_TESTED)。1)crypto_check_alg函数实现检查算法说明alg的有效性(包括地址对齐要求、块大小、优先级等)和设置算法驱动名cra_driver_name两项功能,其中设置算法驱动名的功能由crypto_set_driver_name函数实现,如果未设置算法驱动名,则按照“算法名-generic”格式设置算法驱动名。

2025-05-06 22:46:41 231

原创 Zircon - Fuchsia 内核分析 - 启动(平台初始化)

2.SCR_EL3_HCE:开关 HVC 指令;ELR_ELX(X = 1-3) 64 异常链接寄存器,用于保存异常进入ELX的异常地址,在返回异常现场的时候,可以使用 ELR_ELX(x = 1/2/3) 来恢复PC值, 异常迁移到哪一个 exception level 就使用哪一个 ELR 同样的,由于不会有异常把系统状态迁移到EL0,因此也就不存在ELR_EL0了。而在内核引导的早期阶段,也就是本文所介绍的这个过程中,MMU 是处于关闭状态的,这段时间内核实际是跑在物理地址上的。

2025-05-05 22:36:53 126

原创 Fuchsia - 简析

这个库在 Fuchsia 中被称为 fdio,在用户态以 libfdio.so 呈现。当然 Handler 不仅仅可以在用户态持有,前面说过 Zircon 是一个 Object-Base 的内核,Handler 在内核态就是一个 C++ 对象,在用户态时才表示得像一个“句柄”,其实是一个 32 位整数,表示内核对象的 ID。顾名思义,核心驱动管理着一组类似的硬件实例并把他们抽象成了一个统一的硬件接口,比如网卡核心驱动,与特定的网卡型号无关,用户只需要把它当作网卡设备就好了,无需关注它是哪种特定型号的网卡。

2025-05-05 22:35:55 99

原创 探究Linux Kernel内核架构,让你成为真正的内核专家

本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。

2025-05-05 22:34:25 1079

原创 Linux内核 - regmap子系统详解与实战

regmap_bus 的结构体,它用于描述一种与寄存器映射(regmap)交互的硬件总线或接口的属性和功能。在regmap_config,定义了寄存器的各种信息,比如寄存器地址长度,寄存器值的长度,读写寄存器的地址范围的信息,寄存器地址和值的大小端以及缓冲方式。通过 regmap 模型提供的统一接口函数来访问器件的寄存器,SOC 内部的寄存器也可以使用 regmap 接口函数来访问。

2025-05-03 09:45:08 860

原创 Linux内核总线 - UART/LIN驱动框架

UART/LIN驱动框架。

2025-05-03 09:43:29 95

原创 Linux内核网络 - 电话驱动

电话驱动。

2025-05-03 09:39:40 95

原创 Linux内核网络 - 蓝牙驱动

蓝牙驱动。

2025-05-03 09:39:06 103

原创 Linux内核驱动 - CAN驱动

CAN驱动。

2025-05-03 09:37:28 100

原创 Linux内核总线 - PCI架构

PCI架构。

2025-05-03 09:36:51 99

原创 Linux内核总线 - USB驱动架构

USB驱动架构。

2025-05-03 09:35:55 97

原创 Linux内核总线 - I3C驱动

I3C驱动框架。

2025-05-03 09:34:16 113

原创 Linux内核总线 - SPI驱动

Linux内核SPI驱动。

2025-05-03 09:21:36 94

原创 Linux内核总线 - I2C驱动架构

Linux内核驱动。

2025-05-03 09:20:09 73

原创 核间通信-Linux下RPMsg使用与源码框架分析

Mailbox内部维护了controller控制队列,外层通过接口注册的controller将被放到该队列中,这意味者,mailbox 框架支持多个硬件mailbox同时接入,用户作为client时,将绑定每个硬件chan的回调,下层收到chan数据时,将根据chan的编号,调用不同注册回调,在数据接收上,当mailbox硬件模块收到数据时进入中断,此时调用mbox_chan_received_data通知mailbox框架,mailbox框架将进行上层回调直到将数据上送给上层。

2025-05-03 09:19:22 741

原创 Linux加密框架 crypto算法模板 以及HMAC算法模板实例

本文详细介绍了Linux加密框架中HMAC算法模板实例的创建方法,通过hmac_create函数展示了如何使用crypto_template结构和rtattr参数,以及关键步骤如检查算法类型、实例注册等。输入的参数包括 算法模板 tmpl 和 算法模板实例参数 tb。hmac_cretae函数返回的结果为0表示算法模板实例已经创建注册。HMAC算法模板的创建实例的接口是hmac_create函数。hmac_create函数创建并且注册的流程如下图所示。HMAC算法模板实例。

2025-05-03 09:11:29 226

原创 Linux加密框架 crypto算法模板 以及CBC算法模板实例

每个参数都是TLV格式,类型T有CRYPTOA_TYPE(算法类型)、CRYPTOA_ALG(基础算法名)、CRYPTOA_U32等多种类型,而每种类型的参数值不同,因此接口输入参数tb的数据类型struct rtattr只包括rta_len和rta_type两个成员变量,分别对应着TLV结构的L和T,参数值数据结构根据参数类型定义。CBC算法模板的创建实例接口为crypto_cbc_alloc,输入参数为创建CBC算法模板实例的参数tb,返回值为新创建的算法模板实例。

2025-05-02 08:31:48 624

原创 Linux内核crypto子系统的调用逻辑

毕竟crypto_alg这个结构里的.cra_init, .cra_exit, .cra_u里的.coa_compress都需要这个执行上下文。主要的逻辑就三个函数, 首先需要分配一个压缩的上下文(本文用压缩的例子), 其实它就是crypto_tfm的包装,和cryto_tfm是一样的: 紫色的删去 ,我没找到这个压缩的例子。处于用户态的程序想要调用处于内核态的密码算法,需要使用crypto_register_alg函数提交对应的相关信息,进行注册,将一个内核支持的算法注册到crypto系统里。

2025-05-02 08:31:18 572

原创 Linux加密框架 crypto 算法模板 HMAC模板举例

模版

2025-05-02 08:30:47 133

原创 Linux加密框架 crypto 算法模板 CBC模板举例

本文解析了Linux加密框架中的CBC算法模板,深入探讨了cbc.c文件中crypto_cbc_create接口及其内部实现,以及skcipher.c中的skcipher_alloc_instance_simple函数,展示了如何为CBC算法实例化内存分配。skcipher.c - crypto/skcipher.c - Linux source code (v5.15.11) - Bootlin 内存分配。2)CBC算法模板定义的创建实例接口为crypto_cbc_create,内部调用。

2025-05-02 08:30:02 275

原创 Linux加密框架 crypto 算法模板

每个参数都是TLV格式,类型T有CRYPTOA_TYPE(算法类型)、CRYPTOA_ALG(基础算法名)、CRYPTOA_U32等多种类型,而每种类型的参数值不同,因此接口输入参数tb的数据类型struct rtattr只包括rta_len和rta_type两个成员变量,分别对应着TLV结构的L和T,参数值数据结构根据参数类型定义。7)create:创建算法模板实例的接口。5)alloc:创建算法模板实例(struct crypto_instance)的接口,返回值为新创建的算法模板实例。

2025-05-02 08:29:32 236

原创 Linux加密框架 crypto 哈希算法举例 MD5

分组算法不同,某些外部应用可能调用静态哈希算法(如MD5算法)计算输入消息的摘要值(如某些文件的MD5值),但是MD5算法的通用算法说明md5_alg中未设置算法类型常量cra_type,而是在哈希算法注册的准备阶段(shash_prepare_alg函数)统一设置为crypto_shash_type。对外部应用来说,不关心哈希算法的实现方式,因此将使用的哈希算法的算法类型标注为CRYPTO_ALG_TYPE_HASH,如IPSEC将使用的哈希算法标记为CRYPTO_ALG_TYPE_HASH。

2025-05-02 08:29:00 250

原创 Linux加密框架 crypto 哈希算法说明 同步哈希shash_alg | 异步哈希 ahash_alg | 通用部分抽象 hash_alg_common

个性化属性数据结构中的算法接口是静态哈希算法和动态哈希算法的算法接口合集,如静态哈希算法不用实现setkey接口(将默认的shash_no_setkey作为setkey接口实现),而HMAC算法是与密钥相关的,涉及到密钥输入必须实现setkey接口。同步哈希算法说明数据结构中的算法接口为哈希算法接口全集,包括最小集的三段式调用接口(init、update和final),也包括在最小集基础上衍生出来的两段式调用接口(init和finup)以及一段式调用接口(digest)。

2025-05-02 08:28:29 834

原创 Linux加密框架 crypto RC4

RC4算法虽然是一个序列算法,但在加密框架中按照分组长度为1的分组算法实现,因此其算法类型为CRYPTO_ALG_TYPE_CIPHER(待定 存疑),个性化属性中密钥长度的下限和上限分别为ARC4_MIN_KEY_SIZE(1)、ARC4_MAX_KEY_SIZE(256)三个算法接口为密钥设置接口crypto_arc4_set_key、加密接口和解密接口均为crypto_arc4_crypt。使用序列算法时,其加密/解密操作都是密码流和明文/密文的异或过程,因此其加密接口和解密接口相同。

2025-05-02 08:27:57 192

原创 Linux加密框架crypto crypto_alg|cipher_alg数据结构|AES例子

crypto_alg中各成员变量含义如下所示,其中前缀。请使用手机"扫一扫"x。

2025-05-02 08:27:26 787

原创 Linux加密框架crypto AES代码相关

AES算法的三个算法接口分别为crypto_aes_set_key、aes_encrypt和aes_decrypt。分组算法的算法接口,包括密钥设置接口cia_setkey、加密接口cia_encrypt和解密接口cia_decrypt,算法运行的上下文空间由算法实例tfm提供。注:由于算法应用不会直接使用AES算法的算法接口,因此其算法说明aes_alg未设置算法类型常量cra_type。分组算法输入密钥长度的下限cia_min_keysize和上限cia_max_keysize。

2025-05-02 08:26:56 801

原创 Linux加密框架中的算法和算法模式

算法

2025-05-02 08:26:23 476

原创 Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式

若第一个块的下标为1,则CBC模式的加密过程为Ci=Ek(Pi⊕Ci-1),C0=IV,而其解密过程为Pi=Dk(Ci)⊕Ci-1,C0=IV,其中Pi表示第i个明文块,Ci表示第i个密文块,E和D分别为加密器和解密器,k为密钥。HMAC运算表达式为HMAC(K,M)=H((K’⊕opad)||H((K’⊕ipad)||M)),其中⊕表示异或运算,||表示级联运算,M为一个输入消息,opad为与数据块等长的0x5C,ipad为与数据块等长的0x36,K’为密钥K以0x00填充的与数据块等长的字符串。

2025-05-02 08:23:22 520

原创 Linux crypto相关知识的汇总 Linux加密框架crypto中的算法和算法模式(一)

SHA系列算法的摘要长度分贝为:SHA1为20字节(160位)、SHA256为32字节(256位)、SHA384位48字节(384位)、SHA512为64字节(512位),其中SHA1应用较为广泛,主要应用于CA和数字证书中,但已被中国山东大学王小云教授攻破,可以快速找到碰撞。3DES(即Triple DES)是DES向AES过渡的加密算法,是比DES更安全的一种变形,3DES使用2条56位的密钥对数据执行三次DES算法,加密过程是加密e-解密d-加密e,解密过程是解密e-加密d-解密e。

2025-05-02 08:22:13 705

原创 Linux内核 crypto文件夹 密码学知识学习

crypto_type就是用于重载crypto_alg中的cra_u中的各个类中的成员函数,当通过crypto_alloc_base,crypto_create_tfm等接口申请相应的crypto的TFM上下文时,若有传入crypto_type参数,TFM优先使用crypto_type中的init_tfm成员函数去初始化crypto_tfm衍生类的操作方法。type指算法类型;CRYPTO_MINALIGN_ATTR的含义是通过可能的字节填充,使得ctx是以最大的对齐标准对齐的,防止出现对齐错误。

2025-05-02 08:21:23 927

原创 Linux内核学习笔记——Crypto基础框架

这里会涉及到“算法动态注册”,即如果在crypto_alg_list链表中没有找到name为”ecb(aes)”的crypto_alg对象,那crypto子系统会通过一个名为”cryptomgr_probe”的内核线程查找到name为“ecb”的crypto_template对象,以及查找到name为”aes”的crypto_alg对象,动态创建出一个name为“ecb(aes)”的crypto_alg并注册到链表当中。那我们在使用kernel中的算法时,框架内部是如何做处理的呢?

2025-05-02 07:58:38 155

原创 Linux 内核源码目录结构与内容说明

在上一篇博客中 , 使用了 Visual Studio Code 查看 Linux 内核源码 , 本篇博客开始分析 Linux 内核源码结构;

2025-05-01 20:45:20 933

原创 深入探讨Linux V4L2子系统的结构与应用

Linux视频子系统是管理视频设备的核心框架,旨在支持各类视频设备如摄像头、视频采集卡等的数据高效采集和流畅传输。它为多媒体应用提供了一个标准化的接口,从而极大简化了视频设备的开发流程。作为Linux视频子系统的关键组成部分,Video4Linux2(V4L2)不仅定义了众多接口和驱动架构,还支持视频采集、编码及解码等多样化操作。自Linux 2.6版本起,V4L2开始发挥其核心作用,不仅标准化了视频接口,更统一了应用控制接口,为Video设备提供了全面的管理解决方案。

2025-05-01 15:43:55 737

原创 [架构之路-244]:目标系统 - 设计方法 - 软件工程 - 软件开发方法(代码):结构化、面向对象、面向服务、面向组件的开发方法

无结构化方法(语句):无结构化方法是早期的软件开发方法,应用于早期的编程语言,如机器语言、汇编语言等,这些编程语言没有明确的语法规则和结构形式,因此使用无结构化方法进行开发。面向组件的开发方法是一种以组件为中心思想的软件开发方法,它将现实世界中的实体抽象为组件,并通过组件的封装、复用、替换来描述软件系统中的各种功能和服务。常见的面向对象的编程语言包括Java、C++、C#、Python和Ruby等,这些语言提供了丰富的面向对象的特性和语法,使得开发人员能够更方便地应用面向对象的开发方法。

2025-04-06 19:35:12 795

ARM A系列芯片对比表

ARM A系列芯片对比表

2024-04-30

国嵌 数据结构课件

国嵌经典课程,值得拥有

2016-05-12

空空如也

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

TA关注的人

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