自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 sysfs 设备模型

在open时,首先通过file取得kobject,指定ops为kobject内的ktype上的,检查写与 store、检查读与 show,没问题的话就分配一个 sysfs_buffer,最后将 file 指标中的 关连到 sysfs_buffer。kset 是包含了多个 kobject 的集合,也就是说 kset 用来打包 kobject,例如现在我们需要在。/sys 目录下出创建多个目录或者文件,那么就需要使用 kset 来指定这些目录在同一级目录下。// 装载 module。对象读写行为和释放逻辑。

2025-04-11 15:59:59 854

原创 记一次 Git Fetch 后切换分支为空的情况

git fetch只更新远程分支信息,不会自动创建或切换工作空间。git clone会自动创建新的工作空间并拉取所有文件。如果遇到切换分支后为空的情况,可以通过git init初始化本地仓库,然后再切换分支。通过以上步骤,你可以确保在切换分支时,工作目录中有正确的文件内容。

2025-02-18 09:10:45 400

原创 riscv64-unknown-elf-gdb 安装

要安装 riscv64-unknown-elf-gdb,你需要按照以下步骤进行操作。riscv64-unknown-elf-gdb 是 RISC-V 架构的 GNU 调试器,用于调试 RISC-V 程序。如果你需要完整的 RISC-V 工具链(包括编译器、汇编器等),可以安装 riscv64-unknown-elf-gcc。安装完成后,你可以使用 riscv64-unknown-elf-gdb 调试 RISC-V 程序。这会安装 RISC-V 工具链,包括 riscv64-unknown-elf-gdb。

2025-02-08 15:05:00 760

原创 MIT 6.S081 Lab9 File System

下创建一个新的 inode,类型为符号链接(T_SYMLINK)。)写入新创建的符号链接inode的数据块中。,就是linux中的软链接,本质上还是一个文件,存有的内容是指向文件的路径。时,首先需要从用户空间获取两个字符串参数:目标路径和符号链接路径。标志的作用是防止符号链接的自动解析,从而避免潜在的安全风险。在这个例子中,假设两个路径都是有效的,则继续执行。分别获取这两个路径,并存储在。是读出目标文件的路径 ,即。

2025-01-10 16:58:30 697

原创 MIT6.S081笔记-14.0文件系统

此外,UNIX特殊的地方在于可以给一个文件指定多个名字,通过link进行调用,这里其实link 名称应该与文件的inode 有关系,所以link是对inode进行操作。我们每天无时无刻都在接触文件系统,但是我们不知道文件系统什么原理,他是怎么实现的,就像亲密的朋友,一些东西总是觉得是自然而然的,没有剖析他的底层。其实在inode table 里面排第一位的 root inode,所以最后的更新是新建文件之后的重新更新root 目录。系统奔溃的文件保护,数据是天价或者是无价的,要有完善的保护机制。

2025-01-08 14:57:37 709

原创 300行实现文件系统

【代码】300行实现文件系统。

2024-12-20 10:54:39 232

原创 ftrace 监控 io读写操作

bash复制代码#!/bin/bashif [[ $EUID -ne 0 ]]; thenecho “错误: 此脚本必须以root权限运行。”exit 1fiTRACE_OUTPUT=“/tmp/ftrace_dd_output.txt”if ! mount | grep -q “debugfs on /sys/kernel/debug”; thenecho “挂载 debugfs…”mount -t debugfs none /sys/kernel/debugif [[ $? -ne 0

2024-12-05 11:56:37 871

原创 SCSI驱动与 UFS 驱动交互概况

我们再回顾一下创建文件的整体流程吧,从用户态到硬件层起始并没有我们想象的哪么简单,需要涉及到用户端—>系统调用(open or write)—>文件系统(vfs)—>实际文件系统(f2fs_open or f2fs_write)—>块设备处理-封装IO请求(封装 IO)—>SCSI—> UFS ,真的再一次感受代码改变世界。最终,UFS 主控接收并处理 UPIU 命令,UFS 存储设备执行数据写入操作,并返回状态信息(成功或错误),将结果返回给 UFS 驱动。块层的请求被传递到 SCSI 子系统。

2024-10-30 17:28:03 1641

原创 SCSI-8.UFS_RPMB

*RPMB(Replay Protected Memory Block)**是一种基于硬件的安全存储区域,其结构设计旨在确保数据的机密性、完整性以及防重放攻击的能力。RPMB通常嵌入在eMMC、UFS等存储设备中,由专用硬件电路管理和访问。在UFS里,有这么一个LU,,主机往该LU写数据时,UFS设备会校验数据的合法性,只有特定的主机才能写入;

2024-10-12 17:11:34 892

原创 SCSI-UFS子系统-7.UFS数据安全模式

- CD-ROM/DVD-ROM的永久只读模式 - BIOS固件永久写保护 - 安全关键设备的永久只读存储 - 加密狗等硬件中的授权数据保护 | - SD卡的写保护开关 - 硬盘或SSD的上电写保护功能 - 嵌入式设备在运行期间的临时写保护 - 服务器/工作站的上电写保护模式 |**也就是说,对删除的照片,如果UFS设备执行的是舍弃操作,那么主机还可能获得原图片;前面都是保证删除数据的有效性,防止数据泄漏,这里也应该强调一下写保护的重要性,有些数据是不能修改的,比如某些硬件配置信息。

2024-10-09 19:36:37 764

原创 SCSI-UFS子系统-6.UFS 之 SCSI 命令集

UFS 的基本 SCSI 命令与 SCSI 主命令集和块命令集兼容,确保了通用性和广泛的支持。,所以我们应该先进行数据的读写入手,然后其他的命令是围绕他服务的, 根据UAP的三个组成。这些命令涵盖了设备操作的基本功能,如读、写、格式化、容量查询和设备状态检查等。命令用于安全协议的传输,特别是在 RPMB 逻辑单元中,用于保护数据的完整性和安全性。这些命令用于获取设备信息、状态和配置,以便主机了解设备的能力和当前状态。这些命令用于控制设备的状态、配置和执行特定的管理操作。这些命令的主要目的就是数据的。

2024-10-09 15:28:24 1464 1

原创 SCSI-UFS子系统-5.UFS 之 UTP 协议以及UPIU 数据包

UFS 模型传输流程:UFS 传输过程: 数据包UPIU通过Unipro 在设备间进行传输,最终完成LU数据存储。我们知道 UFS 应用层分三个部分:**UFS命令、设备管理器、任务管理器,**传输层根据不同模块产生不同的UPIU。

2024-10-09 10:28:42 922

原创 CPU与UFS设备的通信

物理层:CPU通过MIPI M-PHY与UFS设备通信。控制层:UFS主机控制器负责管理通信。协议层:使用SCSI和UFS传输协议封装命令和数据。操作系统层:操作系统通过UFS驱动程序和文件系统接口与UFS设备进行交互。CPU最终通过这些分层的通信协议与UFS设备实现数据的读写和控制。

2024-09-29 09:59:52 746

原创 内存的单页和多页分层机制

多级页表为了缓解内存占用的问题,提出了多层机制,我们可以这样理解,仍然以4GB 内存空间为例,分成简单的二级页表为例,在上面我们知道如果是单级页表我们就需要。,假设只有20%的一级页表项被用了,那么页表占用空间是4KB + 4MB*0.2 = 0.804MB. 相当于用1028 页表项覆盖了所有空间。每个虚拟页号在页表中有一个对应的条目(页表项,PTE),该条目记录了。维护,在4G空间中,一个进程的需要4MB的内存空间存储页表,一个阿里云服务器大概有。,如果映射,则记录物理页框的地址。

2024-08-22 13:59:22 1049

原创 Git 分支回退

在一般情况下,只需要使用即可将你的本地分支推送到远程对应的分支。如果你在操作远程和本地不同名的分支,或者需要设定上游分支,则可以使用更详细的命令来指定。

2024-08-19 23:06:40 312

原创 ARM 寄存器内存增长与消减

对于数据处理指令,X或W的选择决定了操作的size。使用X寄存器将导致64位的计算,使用W寄存器将导致32位的计算。纸上谈来终觉浅,觉知此事要躬行,在艰难的理解之后,决定以实际例子入手,结合图示来描述自己对于程序运行的一些理解。初看起来好混乱,当整个问题看起来复杂的时候,我们需要代码进行拆解,结合图示理解里面的思想。),然后立即将本函数的栈底数据保存到fp指针, 函数调用结束,到栈空间,这里的被保存fp指针是上一个函数的数据(的地址是该函数的起始地址,便于释放内存、的地址是该函数的起始地址,便于释放内存。

2024-08-13 19:05:25 1249

原创 析构函数为什么是虚函数解析

将析构函数声明为虚函数是一种良好的面向对象设计实践,尤其是在使用多态和继承时。这样做可以保证对象在被删除时,无论它的实际类型是什么,都会执行正确的析构过程,从而避免资源泄漏和其他相关问题。

2023-11-26 22:17:43 174 1

原创 代码随想录day 7刷题 哈希表 977 209 59

给定四个包含整数的数组列表 A , B , C , D ,计算元组 (i, j, k, l) ,使得 A[i] + B[j] + C[k] + D[l] = 0。为了使问题简单化,所有的 A, B, C, D 具有相同的长度 N,且 0 ≤ N ≤ 500。所有整数的范围在 -2^28 到 2^28 - 1 之间,最终结果不会超过 2^31 - 1。输出:2的情况。在一个数组中,我们是需要考虑的。1.惯用思路是,利用四个for进行累加,但是这种方式在四个循环下特别费时。

2023-06-04 01:13:44 217

原创 代码随想录刷题打卡记录 day 6 |242|349|202|1

哈希表是由数组和哈希函数组成的数据结构。数组用于,而哈希函数用于将键到数组的索引。通过使用哈希函数,哈希表可以实现高效的数据插入、查找和删除操作。

2023-06-01 22:19:00 290 1

原创 代码随想录day 2刷题 数组 977 209 59

如何覆盖,从小到大覆盖还是从大到小覆盖?1.假设用从小到大覆盖,要找到最小值,就要正数最小,负数最大中去取,操作比较麻烦。2.假设用从大到小覆盖,要找到最大值只需从两端开始指针移动,数组也从后往前赋值。// solution 2 双指针public:i < size;i++) {j --;else {i ++;

2023-05-28 22:51:00 305 1

原创 代码随想录刷题打卡记录1day 704, 27

leet code 704 / 27

2023-05-24 23:10:40 500 1

原创 PointNEXT阅读:重铸PointNet荣光

PointNEXT

2022-08-15 08:39:54 3011 3

原创 记一次ubuntu20.04无法进入系统解决办法

ubuntu 无法进入桌面

2022-08-01 13:13:49 5777 1

原创 Openpcdet yaml 配置文件解读

Openpcdet yaml配置文件解读。

2022-07-25 15:21:39 1576

原创 Openpcdet 安装过程

Openpcdet 部署

2022-07-03 13:54:52 7456 12

原创 RepVGG论文笔记

RepVGG makes VGG great again

2022-04-02 19:39:17 4187 2

原创 2、torch.nn.Flatten()的参数实例

2、torch.nn.Flatten()的参数实例# 默认参数import torcha = torch.randn(8,3,64,64)F = torch.nn.Flatten()a1 = F(a)a的大小:torch.Size([8, 3, 64, 64])a1的大小:torch.Size([8, 12288])默认将第0维保留下来,其余拍成一维# 一个参数import torcha = torch.randn(8,3,64,64)F = torch.nn.Flatt

2022-03-18 12:24:27 2879

原创 Softmax分类以及交叉熵详解

Softmax分类以及交叉熵详解Softmax分类写这篇文章的目的是记录下实现分类时所遇到的问题在李沐的动手学深度学习中有这样的代码y = torch.tensor([0, 2])y_hat = torch.tensor([[0.1, 0.3, 0.6], [0.3, 0.2, 0.5]])y_hat[[0, 1], y]即使有如下解释:我们[创建一个数据样本y_hat,其中包含2个样本在3个类别的预测概率, 以及它们对应的标签y。] 有了y,我们知道在第一个样本中,第一类是正确的预测; 而

2022-03-14 16:04:19 5352 3

空空如也

空空如也

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

TA关注的人

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