自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 内核crash定位

内核crash调试

2025-04-03 10:26:03 13

原创 usb hub眼图测试程序

【代码】usb hub眼图测试程序。

2025-01-13 14:28:25 294

原创 git push推送了多余的文件想删掉

【代码】git push推送了多余的文件想删掉。

2024-11-13 18:13:54 218 1

原创 buildroot制作自己的软件包(可以理解为应用程序)

可以看到生成的可执行程序。

2024-10-28 17:59:53 373

原创 工作常用命令

【代码】todo--

2024-09-20 15:42:06 346

原创 linux内核顺序锁

顺序锁

2024-09-05 22:46:53 125

原创 linux内核大内核锁

大内核锁

2024-09-05 22:45:56 333

原创 linux内核完成量

完成变量

2024-09-05 22:44:09 173

原创 linux内核互斥量

互斥量

2024-09-05 22:42:45 156

原创 linux内核读写信号量

读写信号量

2024-09-05 22:39:24 138

原创 linux内核信号量

内核信号量

2024-09-05 22:37:34 150

原创 linux内核读写自旋锁

读写自旋锁

2024-09-05 22:33:30 161

原创 linux内核自旋锁

自旋锁

2024-09-05 22:32:01 459

原创 linux内核原子变量和位操作

原子变量

2024-09-05 22:29:10 199

原创 linux内核同步方法汇总

原子操作自旋锁读-写自旋锁信号量读-写信号量互斥量完成变量大内核锁顺序锁

2024-09-05 22:27:00 198

原创 virt-manager的安装与使用(创建虚拟机)

p=1272。

2024-05-30 09:45:36 952

原创 kvm使用virt-clone克隆虚拟机-主机和虚拟机之间共享文件

f是生成的新的虚拟机磁盘文件路径(一般是/var/lib/libvirt/images/这个路径)如果创建虚拟机过多,导致系统无法开机,可参考如下链接解决。使用命令查看磁盘空间,大概可以知道最多创建多少个虚拟机。克隆好以后,再次通过命令可以看到新增的虚拟机。-o后面要克隆的虚拟机名称。-n是新的虚拟机的名称。

2024-04-24 16:10:33 619 1

原创 在驱动中,利用Makefile增加宏定义

即在驱动源代码当中添加了DEBUG宏定义。即在驱动源代码当中添加了DEBUG宏定义。可以通过增加打印进行验证。可以通过增加打印进行验证。

2024-03-25 16:59:20 731

原创 ubuntu环境下openssl库的简单使用

编译:gcc aes.c -lssl -lcrypto -o aes。

2024-02-22 20:46:43 1106

原创 linux deadline调度算法源码阅读记录

内核版本:3.13deadline-iosched.c#include <linux/kernel.h>#include <linux/fs.h>#include <linux/blkdev.h>#include <linux/elevator.h>#include <linux/bio.h>#include <linux/module.h>#include <linux/slab.h>#include &

2023-12-26 10:43:03 245

原创 linux block noop调度算法源码阅读记录

【代码】linux block noop调度算法源码阅读记录。

2023-12-21 15:19:32 180

原创 linux block-plug形式的io合并代码分析

具体的合并代码就不分析了,比较重要的是,合并过程当中还有考虑一些值的限制情况,在符合这些值的限制下,才会进行合并,如果合并不了,则要重新分配一个request了。

2023-12-15 16:27:01 218

原创 struct queue_limits结构体参数学习

参考:内核版本:4.19.1内核提供了相关的API接口去设置这些相关的参数,在blk-settings.c文件。

2023-12-05 18:02:07 254

原创 linux内核bio子系统学习记录一:

主要源码目录 :block/bio.c include/linux/bio.h内核版本:4.19.1这部分先总结下bio子系统的初始化部分,后续再总结bio的申请以及释放,还有其它api的使用等介绍。bio的涉及到频繁的内存申请以及释放,包括bio结构体本身以及它比较重要的成员bi_io_vec*的内存申请和释放,所以初始化部分主要是相关的内存池的初始化,用于后面bio和bi_io_vec的内存申请和释放。defined。

2023-12-03 16:37:14 488

原创 blk_mq_init_queue函数学习记录

blk-mq编程,主要要调用两个函数进行初始化工作,blk_mq_init_queue这是第二个。该函数先是申请了struct request_queue结构,这个请求队列后面用于赋值给磁盘那个结构体的相应成员。

2023-11-24 11:04:05 558

原创 linux 3.13版本nvme驱动阅读记录四

调用完以后在dev目录下也可以看到相关的设备节点了。

2023-11-08 17:09:26 328

原创 linux 3.13版本nvme驱动阅读记录三

在调用完这个函数以后,就可以在dev目录下看到响应的设备了。

2023-11-08 16:54:43 319

原创 linux 3.13版本nvme驱动阅读记录二

内核3.13版本。该函数主要做了4减事情。1:nvme_dev_map,主要就是pci bar 那一套编程套路2:管理队列的配置3:dev_list?4:io队列的配置。

2023-11-06 09:17:10 411

原创 linux 3.13版本nvme驱动阅读记录一

2:dev->entry申请内存,大小是num_possible_cpus() * sizeof(*dev->entry),后面用于保存向量的相关信息,因为nvme是支持多队列的,所以后面可以将队列和特定的中断向量进行绑定,这个后面遇到相关代码再说。5:nvme_set_instance函数的调用,里面怎么实现的不用管,主要知道调用完它以后,dev->instance得到一个值就行了,这个值用于磁盘的命名,比如在dev目录下看到的/dev/nvmexxx就和这个值有关系。

2023-11-02 17:33:22 528

原创 简单的块设备驱动例程

代码在linux3.13版本下可以编译通过,装载驱动以后,可以用fio工具进行读写测试。

2023-10-16 15:21:39 198

原创 scsi READ CAPACITY (10)命令总结

READ CAPACITY(10)命令(参见表119)请求设备服务器将描述直接访问块设备的容量和介质格式的8字节参数数据传输到数据缓存中。这个命令可以被处理,就好像它有一个HEAD OF QUEUE任务属性。如果逻辑单元支持保护信息,应用客户端应使用READ CAPACITY(16)命令,而不应使用theREAD CAPACITY(10)命令。

2023-10-12 18:06:21 940

原创 scsi MODE SENSE(6)命令 和 MODE SENSE(10)命令总结

MODE SENSE(6)命令(参见表73)为设备服务器向应用程序客户机报告参数提供了一种方法。它是MODE SELECT(6)命令的补充命令。执行MODE SENSE(6)命令的设备服务器也应执行MODE SELECT(6)命令。

2023-10-12 16:58:23 1868

原创 nvme prp模型代码处理流程分析

一般来说,如果sge只有1个时,那么只需要在下发的nvme rw命令时填写prp1字段的值,这个值是64bit的,所以这个64bit的字段即需要有dma的地址,也需要有传输的长度,这个64bit所以它需要一些特定的bit记录地址,一些特定的bit记录长度,同理prp2也是。2:需要多个prp时,因为prp_list是只记录地址的,但是有时候一个IO请求时,数据量没那么巧怎么办?1:怎么知道prp2记录的是数据的地址还是prp_list的起始地址?最后看一下,关于选择sgl还是prp的依据。

2023-09-22 09:35:56 528 1

原创 nvme_queue_rq函数分析一

先说结论,这个是为了后面通过pool申请内存时记录这些内存用的,因为这些内存地址是64位的所以这里要用 sizeof(__le64 *) 乘以 nvme_pci_npages_sgl(nseg),至于nvme_pci_npages_sgl(nseg)这个函数不多说了,自己看看也很容易理解,这里要说的是NVME_MAX_KB_SZ和NVME_MAX_SEGS值的大小是可以调整的。接着先看nvme_pci_setup_sgls函数,然后在看nvme_pci_setup_prps函数。这个值是怎么来的呢?

2023-09-21 18:07:24 648

原创 nvme各模块间的关系总结

其中,在nvme-core.ko当中,trace.c,multipath.c, multipath.c fault_inject.c是可选的。目录:driver/host/nvme/makefile。

2023-09-20 09:53:47 254

原创 中断和cpu的绑定,驱动代码实现

最后通过irq_set_affinity_hint函数,将cpumask设置到中断向量号里,这样就完成了,中断和特定cpu的绑定。所以,zalloc_cpumask_var函数是为cpu_mask变量申请内存的,如果cpumask_set_cpu(1, cpu_mask);其中cpu_mask变量的类型为cpumask_var_t。那么cpu_mask的值变为2,,也就是第1个bit是1。而cpumask_set_cpu函数,来看看怎么使用吧。该函数调用完以后,cpu_mask变量的值为0.

2023-09-02 12:26:00 945

原创 linux scatterlist阅读三

函数实现比较复杂,还涉及了struct sg_mapping_iter 结构体,这里比较重要的是skip参数,是指拷贝时跳过的字节数。

2023-08-26 11:40:02 1019 1

原创 virt_to_page和page_address使用总结

其余的还有类似于页帧号转struct page结构的函数。内核逻辑地址转struct page 结构体指针。truct page 结构体指针转内核逻辑地址。

2023-08-26 00:12:22 344

原创 is_vmalloc_addr函数总结

【代码】is_vmalloc_addr函数总结。

2023-08-23 08:43:06 239

原创 linux异步信号驱动

参考:https://www.cnblogs.com/mrlayfolk/p/15858989.html。

2023-08-15 09:46:48 254

空空如也

空空如也

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

TA关注的人

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