删除ssh key 背景,通过ssh远程机器,第一次都会给出关于key的提示,输入:yes 可继续,此时远程机器的ssh key就保留本地,以后使用就能直接ssh。如果远程机器重装系统了,我们再ssh,由于本地存储的是之前远端机器的ssh key,就造成无言验证通过。
编译gcc-8.3 由于目标版本上的gcc工具很低(gcc version 4.8.5 ),此版本下无法编译驱动,故通过编译gcc-8.3源码的方式升级gcc版本;如果成功ok,如果失败。则需要分别下载download_prerequisites文件内的四个软件压缩包;(要先编译gmp);分别执行configure;会自动替换系统默认的gcc。执行完毕,再看gcc版本已经变为8.3。
5、闪存简述 如下图所示浮栅晶体管,当判断是0或1的时候,是在加电,当源极和漏极能导通则为1,否则为0;源极和漏极能导通的前提是源极和漏极之间充满电子。假如在加电(电子具有向电性),衬底的电子就会被吸到浮栅极,源极和漏极之间就无法导通了,此时就为0,即浮栅极充满电子为0;如在加电,电子又会从浮栅极吸出,源-漏极之间就能导电,即为1。这就是浮栅晶体管能标识0/1的原理。当随着控制极-衬底之间加电次数的增多,隧道氧化层会变得越来越薄,导致浮栅极-衬底之间电子可以相互逃逸,次数晶体管的状态就不稳定了,也就坏了。
4、SSD主控 主控中也有与主机中对应的队列,主控会把主机SQ中的命令搬到自己的队列中,此时的命令传输就是PCIe接口完成的,PCIe的报文格式是TLP,也就是说nvme_commnad会被封装为TLP经过PCIe传输到设备后再恢复为nvme_command;比如写,I/O请求时携带数据的,所携带的数据是不放在提交队列中的,也不会随着命令下发到主控的队列中;其次在控制器与后端闪存接口模块中,可以看到后端闪存接口模块也有自己的SRAM/DDR,此时控制器中有SQ、CQ,闪存接口模块中也有对等的队列。
2、SSD基本技术 NVMe SSD有稍微区别,区别点就在于底层驱动不同,SATA/SAS接口(不管是SSD,还是HDD),底层驱动用的是SCSI,而NVMe SSD,底层驱动用的是NVMe驱动。HDD是靠磁存储,SSD是靠电存储;虽然1967年就发明了浮栅晶体管,但直到上世纪90年代,一些厂商才尝试用闪存制造SSD,闪存SSD逐渐代替RAM SSD,称为SSD市场的主流,甚至在存储市场能跟HDD抗衡。前端的接口和通信协议是标准化的,后端和闪存的接口和操作也是标准化的,所以体现不同SSD差异的地方就在FTL的算法。
1、什么是SSD? 闪存的基本结构是浮栅晶体管,他与HDD存储介质最大的区别是写之前要先进性擦除操作,但由于NAND不能只擦除一个字节,而是一次擦除一个固定大小的区域,所以即使我们只写一个字节,也要擦除整个区域,为了避免影响到这个区域的其他数据,就要先进行读取,然后再内存中进行修改,然后擦除这个区域,再把整个修改后的数据写进去;可见闪存介质的写入是比较麻烦的,要经过。NOR的特点,读快写慢,容量较小,多用于存储系统的启动程序,如BIOS,或设备的FW,这种一次写入的场合。闪存,也就是常说的flash,分为。
ffmpeg压缩视频 最近需要压缩视频,windows下没找到好的工具(大部分工具需要收费),于是想到通过ffmpeg工具进行压缩;ffmpeg不仅是一款强大的视频、图片处理工具,还是一款开源的多媒体框架。需要调整的参数就是-cfr的值,这里使用的是20,它的取值范围是 [0(无损)到51(最糟)], 值越低得到的文件质量越高,一般使用18-28之间的值。
7、软中断原理 函数如下,不再深入介绍,我们只需要知道,通过如下函数引发中断后,内核就会通过do_softirq() 函数循环处理中断数组中的所有中断;至于如何禁用中断、如何清除软中断位图等操作也不再深入。,当并不深入介绍软中断,仅仅记录以下软中断的结构类型;毕竟用户不会直接用到软中断。结构体,只有一个成员函数指针,自然是用于绑定软中断要执行的函数:;事实上内核用一个数组表示所有的软中断,数组名为。, 每个元素的类型为。
6、tasklet原理与软中断 由于硬中断执行期间不能被调度且会屏蔽同类型的中断,所以它的执行时间要特别短,就需要把不紧急的任务放在所谓的“下半部”延后处理;软中的类型和编号如下,可见其资源确实比较稀缺,但由于它主要作为其他延时机制的基础,所以其限制不算大;但内核对tasklet做了更多的限制,同类型的tasklet只能串行的在一个cpu上执行;就激活了tasklet,处理器就能择机尽快执行tasklet绑定的函数了;我们上节介绍的是常规tasklet;使用软中断,只有中枢的内核代码才会用到软中断,因为软中断是很稀缺的资源;
5、tasklet tasklet也是用于中断下半部的一种方法,而且是I/O驱动程序的首选方案;守护线程大部分时间都在睡眠,当进程会把工作项添加到进程所在的处理器上,守护线程被唤醒;2、初始化: 参数1,是tasklet变量;参数3,是传给函数的参数。我们首先仍然只看tasklet的用法,只需如下几部,以megaraid博通Raid。但是要注意,守护线程可以在本cpu上运行,也可以调度到其他cpu上运行。),它会创建一个cpu数量的数组,且每个数组项有一个守护线程;介绍完工作队列,不得不说一下tasklet;
4、工作队列用法 内核创建了一个标准的工作队列,称为events(注:每个处理器都有这样一个工作队列);故用户无需在创建工作队列,只需创建工作项;基本上每个内核模块都会自定义工作队列,一个队列上可以有多个工作项,包括延时工作项;工作队列是用内核线程去实现所需的工作,这样看来比用户空间编程还方便些,毕竟用户空间需要用户自己创建线程。由于工作队列的实现比等待队列复杂,我们不深入介绍,这里还是只看一下工作队列的用法。这种方式适合执行时间短的工作,如果执行时间长就延误了其他工作项的执行。:内核自带了工作队列,用户只需定义工作项;
3、完成量 这就意味着 进程不必要等待已经发生的事件;因为事件发生已经调用了complete() ,此时done已经++,而后在调用wait_for_completion()时,发现done!=0,进程就不会睡眠;这就是完成量与等待队列的差别支持!(名称上区别信号量),是根据等待队列实现的,看如下定义,可见它就是一个。函数,这俩函数我们不再展开介绍,我们主要看一下这俩函数对。但wait_for_completion()只有在。complete() 时。等待队列另加一个计数器。
1、等待队列、完成量、工作队列的使用场景 首先创建一个工作队列,然后加入工作项,这些工作项稍后由内核线程去执行;完成量跟等待队列的使用场景非常类似,起始完成量就是通过等待队列实现的,我们在后续介绍原理的时候看完成量的定义就一目了然了。关键在“等待”二字,用于使进程(线程)等待某一特定事件发生,进程在等待期间会睡眠,在事件发生时由内核唤醒。在名称上区分于“等待队列”;以上是我们自定义了工作队列,其实系统自带了标准的工作队列,我们只需要将新的工作项添加到该队列就行了;,但如果我们在开始等待时,起始事情已经发生,这样就永远无法唤醒睡眠的进程了;
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包,把需要安装的报拷贝到服务器上,
Linux系统报错锦集一 我编译软Raid1.ko后,拷贝到 /lib/modules/5.15.78/kernel/drivers/md/ 目录下,重启系统依然加载的是原驱动(我驱动里面增加了日志,但是没有打印);这个问题的原因,是因为系统镜像initramfs文件的,默认先从initramfs中加载,只有镜像文件中不存在才会去标准目录下加载,所以编译ko文件,并拷贝到标准目录后,要重新生成镜像文件,命令是。只需要增大虚拟机的内存(我原虚拟机已经给了4G,给到8G后启动正常)。:Ubuntu 编译驱动,替换原驱动。
.png图片文件生成.h c数组文件 默认携带的头文件说是用bin2h.exe生成的,但是没有查到用法,我大概试了下无法生成.h文件;背景是edk2的开发包中背景和图标都是图片,若要修改仅仅替换图片是不行的,必须替换图片生成的.h的头文件;需要注意的是新图片和原图片尽量大小一致,不然若新图片过大,素组就会太大,可能会导致图片无法加载。之前处理文件都是通过base64编码,但在UEFI中的图片文件是通过c数组来表示的。对生成的.h文件修改数组大小的变量名及数组名,即可。重新编译edk2,发现图片已更换。