官方认定好文
码龄12年
关注
提问 私信
  • 博客:88,294
    社区:269
    问答:2,686
    91,249
    总访问量
  • 65
    原创
  • 32,520
    排名
  • 148
    粉丝
  • 0
    铁粉
  • 学习成就
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:山东省
  • 加入CSDN时间: 2012-10-15
博客简介:

lichao201005的专栏

查看详细资料
  • 原力等级
    成就
    当前等级
    4
    当前总分
    583
    当月
    13
个人成就
  • 获得156次点赞
  • 内容获得47次评论
  • 获得332次收藏
  • 代码片获得453次分享
创作历程
  • 18篇
    2024年
  • 4篇
    2023年
  • 13篇
    2022年
  • 4篇
    2021年
  • 14篇
    2020年
  • 1篇
    2019年
  • 3篇
    2018年
  • 5篇
    2016年
  • 3篇
    2013年
成就勋章
TA的专栏
  • linux问题专栏
    5篇
  • SSD
    5篇
  • Linux内核
    7篇
  • UEFI
    2篇
  • c++
    10篇
  • c++框架
    1篇
  • CTP
    3篇
  • Qt
    8篇
  • 数据库
    5篇
  • linux
    14篇
兴趣领域 设置
  • 大数据
    flink
  • 人工智能
    opencv语音识别计算机视觉机器学习深度学习神经网络自然语言处理tensorflowpytorch图像处理nlp数据分析
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Redhat创建本地源 和 网络源

redhat未注册通过创建本地源或网络源进行yum安装
原创
发布博客 2024.11.19 ·
417 阅读 ·
4 点赞 ·
0 评论 ·
9 收藏

删除ssh key

背景,通过ssh远程机器,第一次都会给出关于key的提示,输入:yes 可继续,此时远程机器的ssh key就保留本地,以后使用就能直接ssh。如果远程机器重装系统了,我们再ssh,由于本地存储的是之前远端机器的ssh key,就造成无言验证通过。
原创
发布博客 2024.10.18 ·
249 阅读 ·
2 点赞 ·
0 评论 ·
5 收藏

编译gcc-8.3

由于目标版本上的gcc工具很低(gcc version 4.8.5 ),此版本下无法编译驱动,故通过编译gcc-8.3源码的方式升级gcc版本;如果成功ok,如果失败。则需要分别下载download_prerequisites文件内的四个软件压缩包;(要先编译gmp);分别执行configure;会自动替换系统默认的gcc。执行完毕,再看gcc版本已经变为8.3。
原创
发布博客 2024.10.08 ·
385 阅读 ·
6 点赞 ·
0 评论 ·
2 收藏

5、闪存简述

如下图所示浮栅晶体管,当判断是0或1的时候,是在加电,当源极和漏极能导通则为1,否则为0;源极和漏极能导通的前提是源极和漏极之间充满电子。假如在加电(电子具有向电性),衬底的电子就会被吸到浮栅极,源极和漏极之间就无法导通了,此时就为0,即浮栅极充满电子为0;如在加电,电子又会从浮栅极吸出,源-漏极之间就能导电,即为1。这就是浮栅晶体管能标识0/1的原理。当随着控制极-衬底之间加电次数的增多,隧道氧化层会变得越来越薄,导致浮栅极-衬底之间电子可以相互逃逸,次数晶体管的状态就不稳定了,也就坏了。
原创
发布博客 2024.07.10 ·
483 阅读 ·
14 点赞 ·
0 评论 ·
13 收藏

4、SSD主控

主控中也有与主机中对应的队列,主控会把主机SQ中的命令搬到自己的队列中,此时的命令传输就是PCIe接口完成的,PCIe的报文格式是TLP,也就是说nvme_commnad会被封装为TLP经过PCIe传输到设备后再恢复为nvme_command;比如写,I/O请求时携带数据的,所携带的数据是不放在提交队列中的,也不会随着命令下发到主控的队列中;其次在控制器与后端闪存接口模块中,可以看到后端闪存接口模块也有自己的SRAM/DDR,此时控制器中有SQ、CQ,闪存接口模块中也有对等的队列。
原创
发布博客 2024.07.04 ·
1009 阅读 ·
5 点赞 ·
0 评论 ·
9 收藏

3、FTL基本工作过程

上文说到。
原创
发布博客 2024.07.03 ·
237 阅读 ·
6 点赞 ·
0 评论 ·
5 收藏

2、SSD基本技术

NVMe SSD有稍微区别,区别点就在于底层驱动不同,SATA/SAS接口(不管是SSD,还是HDD),底层驱动用的是SCSI,而NVMe SSD,底层驱动用的是NVMe驱动。HDD是靠磁存储,SSD是靠电存储;虽然1967年就发明了浮栅晶体管,但直到上世纪90年代,一些厂商才尝试用闪存制造SSD,闪存SSD逐渐代替RAM SSD,称为SSD市场的主流,甚至在存储市场能跟HDD抗衡。前端的接口和通信协议是标准化的,后端和闪存的接口和操作也是标准化的,所以体现不同SSD差异的地方就在FTL的算法。
原创
发布博客 2024.07.02 ·
274 阅读 ·
8 点赞 ·
0 评论 ·
6 收藏

1、什么是SSD?

闪存的基本结构是浮栅晶体管,他与HDD存储介质最大的区别是写之前要先进性擦除操作,但由于NAND不能只擦除一个字节,而是一次擦除一个固定大小的区域,所以即使我们只写一个字节,也要擦除整个区域,为了避免影响到这个区域的其他数据,就要先进行读取,然后再内存中进行修改,然后擦除这个区域,再把整个修改后的数据写进去;可见闪存介质的写入是比较麻烦的,要经过。NOR的特点,读快写慢,容量较小,多用于存储系统的启动程序,如BIOS,或设备的FW,这种一次写入的场合。闪存,也就是常说的flash,分为。
原创
发布博客 2024.07.01 ·
218 阅读 ·
1 点赞 ·
0 评论 ·
4 收藏

ffmpeg压缩视频

最近需要压缩视频,windows下没找到好的工具(大部分工具需要收费),于是想到通过ffmpeg工具进行压缩;ffmpeg不仅是一款强大的视频、图片处理工具,还是一款开源的多媒体框架。需要调整的参数就是-cfr的值,这里使用的是20,它的取值范围是 [0(无损)到51(最糟)], 值越低得到的文件质量越高,一般使用18-28之间的值。
原创
发布博客 2024.06.18 ·
467 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

7、软中断原理

函数如下,不再深入介绍,我们只需要知道,通过如下函数引发中断后,内核就会通过do_softirq() 函数循环处理中断数组中的所有中断;至于如何禁用中断、如何清除软中断位图等操作也不再深入。,当并不深入介绍软中断,仅仅记录以下软中断的结构类型;毕竟用户不会直接用到软中断。结构体,只有一个成员函数指针,自然是用于绑定软中断要执行的函数:;事实上内核用一个数组表示所有的软中断,数组名为。, 每个元素的类型为。
原创
发布博客 2024.05.06 ·
182 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

ubuntu开启message文件

环境:ubuntu 20.04。
原创
发布博客 2024.04.29 ·
580 阅读 ·
2 点赞 ·
0 评论 ·
0 收藏

6、tasklet原理与软中断

由于硬中断执行期间不能被调度且会屏蔽同类型的中断,所以它的执行时间要特别短,就需要把不紧急的任务放在所谓的“下半部”延后处理;软中的类型和编号如下,可见其资源确实比较稀缺,但由于它主要作为其他延时机制的基础,所以其限制不算大;但内核对tasklet做了更多的限制,同类型的tasklet只能串行的在一个cpu上执行;就激活了tasklet,处理器就能择机尽快执行tasklet绑定的函数了;我们上节介绍的是常规tasklet;使用软中断,只有中枢的内核代码才会用到软中断,因为软中断是很稀缺的资源;
原创
发布博客 2024.04.29 ·
366 阅读 ·
10 点赞 ·
0 评论 ·
1 收藏

5、tasklet

tasklet也是用于中断下半部的一种方法,而且是I/O驱动程序的首选方案;守护线程大部分时间都在睡眠,当进程会把工作项添加到进程所在的处理器上,守护线程被唤醒;2、初始化: 参数1,是tasklet变量;参数3,是传给函数的参数。我们首先仍然只看tasklet的用法,只需如下几部,以megaraid博通Raid。但是要注意,守护线程可以在本cpu上运行,也可以调度到其他cpu上运行。),它会创建一个cpu数量的数组,且每个数组项有一个守护线程;介绍完工作队列,不得不说一下tasklet;
原创
发布博客 2024.04.28 ·
184 阅读 ·
5 点赞 ·
0 评论 ·
1 收藏

4、工作队列用法

内核创建了一个标准的工作队列,称为events(注:每个处理器都有这样一个工作队列);故用户无需在创建工作队列,只需创建工作项;基本上每个内核模块都会自定义工作队列,一个队列上可以有多个工作项,包括延时工作项;工作队列是用内核线程去实现所需的工作,这样看来比用户空间编程还方便些,毕竟用户空间需要用户自己创建线程。由于工作队列的实现比等待队列复杂,我们不深入介绍,这里还是只看一下工作队列的用法。这种方式适合执行时间短的工作,如果执行时间长就延误了其他工作项的执行。:内核自带了工作队列,用户只需定义工作项;
原创
发布博客 2024.04.25 ·
468 阅读 ·
5 点赞 ·
0 评论 ·
8 收藏

3、完成量

这就意味着 进程不必要等待已经发生的事件;因为事件发生已经调用了complete() ,此时done已经++,而后在调用wait_for_completion()时,发现done!=0,进程就不会睡眠;这就是完成量与等待队列的差别支持!(名称上区别信号量),是根据等待队列实现的,看如下定义,可见它就是一个。函数,这俩函数我们不再展开介绍,我们主要看一下这俩函数对。但wait_for_completion()只有在。complete() 时。等待队列另加一个计数器。
原创
发布博客 2024.04.22 ·
229 阅读 ·
3 点赞 ·
0 评论 ·
0 收藏

2、等待队列原理深入

在上一节从使用者的角度分布介绍了等待队列、完成量和工作队列的使用场景和使用步骤;本节我们稍微深入一下,先看一下等待队列的基本工作原理,当然不会太深入,因为那是内核的工作。
原创
发布博客 2024.04.18 ·
184 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

1、等待队列、完成量、工作队列的使用场景

首先创建一个工作队列,然后加入工作项,这些工作项稍后由内核线程去执行;完成量跟等待队列的使用场景非常类似,起始完成量就是通过等待队列实现的,我们在后续介绍原理的时候看完成量的定义就一目了然了。关键在“等待”二字,用于使进程(线程)等待某一特定事件发生,进程在等待期间会睡眠,在事件发生时由内核唤醒。在名称上区分于“等待队列”;以上是我们自定义了工作队列,其实系统自带了标准的工作队列,我们只需要将新的工作项添加到该队列就行了;,但如果我们在开始等待时,起始事情已经发生,这样就永远无法唤醒睡眠的进程了;
原创
发布博客 2024.04.17 ·
635 阅读 ·
12 点赞 ·
0 评论 ·
19 收藏

Linux系统报错锦集二: engine libaio not loadable

本来我以为不需要fio源码编译了,毕竟我下载的是3.26版本的,这里已经有fio-3.27的rpm包了,但是rpm -ivh fio-3.27xxxx.rpm 后,没有找到fio的可执行文件,但安装libaio-devle需要依赖fio-3.27.幸亏还安装了redhat9.1 的vmware虚拟机,经查,在目录 /run/media/qwe123/RHEL-9-1-0-BaseOS-x86_64/AppStream/Packages/ 下存有rpm包,把需要安装的报拷贝到服务器上,
原创
发布博客 2024.01.05 ·
1948 阅读 ·
8 点赞 ·
0 评论 ·
6 收藏

Linux系统报错锦集一

我编译软Raid1.ko后,拷贝到 /lib/modules/5.15.78/kernel/drivers/md/ 目录下,重启系统依然加载的是原驱动(我驱动里面增加了日志,但是没有打印);这个问题的原因,是因为系统镜像initramfs文件的,默认先从initramfs中加载,只有镜像文件中不存在才会去标准目录下加载,所以编译ko文件,并拷贝到标准目录后,要重新生成镜像文件,命令是。只需要增大虚拟机的内存(我原虚拟机已经给了4G,给到8G后启动正常)。:Ubuntu 编译驱动,替换原驱动。
原创
发布博客 2023.12.27 ·
516 阅读 ·
7 点赞 ·
0 评论 ·
9 收藏

.png图片文件生成.h c数组文件

默认携带的头文件说是用bin2h.exe生成的,但是没有查到用法,我大概试了下无法生成.h文件;背景是edk2的开发包中背景和图标都是图片,若要修改仅仅替换图片是不行的,必须替换图片生成的.h的头文件;需要注意的是新图片和原图片尽量大小一致,不然若新图片过大,素组就会太大,可能会导致图片无法加载。之前处理文件都是通过base64编码,但在UEFI中的图片文件是通过c数组来表示的。对生成的.h文件修改数组大小的变量名及数组名,即可。重新编译edk2,发现图片已更换。
原创
发布博客 2023.10.25 ·
381 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多