- 博客(1271)
- 资源 (16)
- 收藏
- 关注
原创 linux存储技术学习资料
是一个用于调试文件系统的工具,可以用于查看和修改文件系统的内部状态。是一个用于显示 ext2、ext3、ext4 文件系统信息的命令行工具。可能会对文件系统造成不可逆的损坏,因此在使用之前请务必备份数据。是要显示信息的文件系统所在的设备文件名,例如。用法(来自chatgpt)是要调试的文件系统)bmap imap
2023-05-22 19:38:19 2381 1
原创 为什么通过clear_refs可以使进程触发缺页?
https://www.cnblogs.com/pengdonglin137/p/18375784
2024-08-23 16:20:25 112
原创 使用perf、ftrace抓取指定发生指定事件时的调用栈(内核态+用户态)
有时我们会有这样的需求,我们希望获得发生某个内核事件时的调用栈,从内核态一直到用户态。
2024-08-20 16:07:37 82
原创 统计内存外碎片事件
这个trace_event的路径是:/sys/kernel/tracing/events/kmem/mm_page_alloc_extfrag。上面将借用成功的信息通过trace输出了出来,这样我们就可以在上层利用各种监控机制统计。定义如下:include\trace\events\kmem.h。
2024-08-02 11:31:06 292
原创 使用9p在guest和host共享文件系统时遇到9pnet_virtio: no channels available for device hostshare
【代码】使用9p在guest和host共享文件系统时遇到9pnet_virtio: no channels available for device hostshare。
2024-05-11 12:52:14 380
原创 在ubuntu20上编译bcc时遇到:Could NOT find LibDebuginfod
参考:https://github.com/iovisor/bcc/issues/3601。
2024-04-22 10:07:19 590
原创 Linux系统调用流程、参数传递以及返回值
应用程序运行在用户态,需要通过内核提供的系统调用陷入到内核态来完成一些特权操作,比如创建、打开以及读写文件等。实际开发中,为了可移植性和便捷性,应用一般不会直接调用系统调用,而是使用C库封装的接口,由C库去调用。系统调用的实现机制入参是如何传递的返回值是如何传递的系统调用返回值、errno、perror。
2024-04-21 17:54:52 169
原创 远程管理HP笔记本
我的HP笔记本的型号是AMD的战99,平时放在家里,有时想远程用一下,但是又不想让笔记本一直处于开机状态,下面介绍一下我的做法。
2024-04-20 08:53:23 364
原创 Android系统学习 —— 替换crash_dump文件
可以看到,crash_dump放在了/apex/com.android.runtime下面。但是这个目录下的文件即使remount了也无法修改,而是需要通过/system/apex来修改。
2024-04-17 15:07:40 370 1
原创 T620折腾 —— 给虚拟机配置大页
虚拟机访问物理内存需要经过两级页表翻译,如果使用大页,以方便可以降低缺页发生的频率,同时也可以降低TLB Miss的频率,对于提升虚拟机的运行性能有一定作用
2024-04-14 07:20:49 393 1
原创 搭建Android内核和Framework开发和调试环境
作为一名系统软件工程师,除了工作中用到的公司提供的Android硬件设备外,如果能有一个纯软件模拟的Android系统开发调试环境,对工作和学习都会有极大的便利,为此Android为我们提供了Cuttlefish这个模拟器
2024-04-13 10:27:38 563
原创 ARM64架构 —— 异常返回地址
以EL0为例,正常情况下执行SVC系统调用指令可以陷入EL1,此时ELR_EL1中记录的时SVC指令后面的那条指令的地址。但是如果EL0上直接调用HVC或者SMC,因为EL0上没有权限使用HVC和SMC,那么返回地址就是HVC或者SMC指令的地址。那么这里的异常返回地址ELR的值具体是如何规定的呢?
2024-04-10 15:11:20 349
原创 深入理解Linux系统中的几种栈以及栈的切换
栈在进程运行过程中的起着至关重要的作用,进程可以使用栈来保存函数参数、局部变量以及返回地址等,还可以利用栈回溯技术获取程序的函数调用关系。那么在Linux系统中,一个进程会用到哪些栈呢?进程执行过程中,或者处于用户态或者处于内核态,所以在用户态和内核态分别有各自的栈。在用户态,一个进程中的主线程跟其他线程用的是不同的栈。在内核态,根据是通过系统调用还是中断的原因进入内核,栈又有所区分。另外进程在用户态异步执行信号处理程序时又使用的是哪个栈呢?下面讨论一下,使用的是基于ARM64的Linux平台,Linux内
2024-04-07 13:13:32 238
原创 Linux的信号栈的实现(1)
在前一篇文章中介绍了Linux系统中的几种栈以及它们之间的切换,进程在用户态和内核态会使用不同的栈,在用户态的主线程和其他线程都有各自的栈,此外进程在执行信号处理程序时也需要栈,那么这个栈来自哪呢?
2024-04-01 16:13:32 1147
原创 Linux内存管理 —— 通过实验学习和理解CoW(2)
前一篇通过实验的方法理解了一下CoW,下面大致分析一下Linux内核源码实现。我们知道,CoW是父进程在fork时,将自己的私有可写的页面的映射属性设置为只读,然后映射信息跟子进程共享,后面fork完成后,父子进程先发起写操作的一方会触发CoW,而后发起的也会触发缺页,但是不会CoW,而是复用已有的页面。
2024-04-01 14:23:44 763
原创 Linux内存管理 —— 通过实验学习和理解CoW(1)
我们知道,Linux内核为了提高进程fork的效率,实现了CoW技术,即将进程的私有的可写区域的Page的映射属性改成只读,父子进程的任何一方先发起写操作的将触发CoW:分配一个新的物理页,然后将要写的区域页的内容拷贝到这个物理页,最后将这个物理页映射到要写的用户虚拟地址上。下面我们通过实验和源码分析来理解这个过程。
2024-03-31 19:34:20 987
原创 使用crash、funcgraph以及kprobe使用案例 —— 跟踪文件写缺页和脏页回写
内核版本linux-6.5需求通过mmap将一个文件以SHARE的方式映射到进程的虚拟地址空间,然后写其中一段数据,此时会发生缺页异常,内核会分配页缓存并根据偏移将文件指定位置的内容读到页缓存,最后再修改进程的页表,将这个页缓存映射给用户,不过第一次映射的时候PTE里面RW位是0,当进程真正写的时候,会再次触发缺页,并将对应的文件页设置为脏页,Linux会定期将脏页回写到磁盘上,在回写操作执行之前清除脏页标记,同时也会清除RW位。下面利用crash、funcgraph以及kprobe结合的方式来学习
2023-11-29 11:29:19 1115
原创 关闭Thunderbird的自动换行
参考https://blog.csdn.net/cuma2369/article/details/107667731https://support.mozilla.org/en-US/questions/1307935点击设置 -> 配置编辑器:然后搜索mailnews.wraplength,把值修改为0:...
2023-09-13 17:11:00 1889
原创 分析结构体的内存空间布局 —— pahole
pahole这个工具可以用来分析结构体的内部布局信息,参考下面的文章:https://lwn.net/Articles/335942/
2023-09-10 23:25:00 2047
原创 在t620上使用串口重定向
参考DELL R730 iDRAC与IPMI的使用Linux上使用IPMITool常用的命令使用IPMI管理Dell服务器配置iDRACBIOS上面“Serial Port Address”用于设置串口设备的对应关系,上图这种配置ttyS0是COM0,ttyS1是COM2,如果选择的是下面这种:那么ttyS0对应的是COM2.grub参数修改/etc/defa...
2023-09-03 14:11:00 1807
原创 用qemu模拟scsi设备
参考A study of the Linux kernel PCI subsystem with QEMUHow to emulate block devices with QEMU实验建立下面的PCI总线拓扑,然后来模拟scsi磁盘的添加和删除PCI总线拓扑root@ubuntu-vm:~# lspci -tv-[0000:00]-+-00.0 Intel Corpor...
2023-09-01 16:53:00 1940
原创 利用ESXi学习设备vfio设备直通
参考公开 VMware 硬件辅助的虚拟化《KVM实战 原理、进阶与性能优化》场景需要在Guest操作系统中使用硬件虚拟化的能力,此时需要Host向Guest暴露硬件虚拟化能力。配置可以通过下面这个方法:启动Guest后,编辑GRUB参数,使能IOMMU,以Ubuntu为例:编译/etc/default/grub增加了intel_iommu=on更新grubu...
2023-08-20 23:32:00 1694
原创 一台UPS实现NAS、PC和服务器的自动关机
参考如何用一台UPS控制多台主机的断电自动关机?NetworkUPSTools(NUT)的安装与配置家用UPS同时给NAS和PC使用实现自动关机https://networkupstools.org/作者pengdonglin137@163.com概述之前在买NAS时配了一台UPS,有自动关机功能。最近买了台T620服务器,又不想再给它配一台UPS,所以在网上查找如何跟NAS共...
2023-08-19 12:07:00 4291
原创 UEFI学习资料
书籍《UEFI编程实践》技术博客罗冰的UEFI开发专栏https://www.lab-z.com/iof/UEFI入门必读的12本书
2023-08-17 20:24:00 1677
原创 搭建edk2编译环境
参考《UEFI编程实践》https://github.com/tianocore/edk2作者pengdonglin137@163.com概述在Ubuntu中安装ubuntu18.04的容器环境,在其中搭建编译和开发环境,支持运行UEFI模拟器。步骤安装dockerDocker安装及使用下载容器镜像$ sudo docker pull ubuntu:18.04启动...
2023-08-17 16:58:00 1978
原创 在T620上安装系统遇到的问题
由于买的T620主要是自己玩,不需要特别高的配置,不需要组raid,就让卖家把H710阵列卡换成了直通的H310阵列卡(non raid),这样家里富裕的sata固态和机械硬盘就可以直接差到阵列卡上了,因为sas接口兼容sata接口,反之则不行。下面是在折腾时遇到的一些问题。不支持UEFI的方式从硬盘启动开机检测可以探测到下面两块硬盘:1TB的固态盘和一个8TB的机械盘在装系统时,...
2023-08-15 21:05:00 2377
原创 用kvmtool启动一个虚拟机
参考https://www.cnblogs.com/pengdonglin137/p/6431234.htmlhttps://github.com/kvmtool/kvmtoolKVM-api学习--基于kvmtool脚本#!/bin/bash./vm run \ -c 4 \ -m 4G \ -k ../linux-6.2/a...
2023-08-14 17:51:00 1661
原创 在低版本glibc的环境里运行基于高版本glibc编译的可执行程序
背景在工作过程中,我们经常会遇到可执行程序依赖的glibc跟当前运行环境的版本不兼容,导致应用程序无法运行,比如:/lib64/libc.so.6: version `GLIBC_2.14’ not found原因是运行环境的glibc的版本比编译环境的glibc的版本低。几种可行的方法1. 升级当前运行环境的glibchttps://blog.csdn.net/u01126225...
2023-08-11 16:13:00 2964 2
原创 使用rootfs制作docker容器镜像
参考基于rootfs构建Docker镜像将rootfs.tar.gz制作成docker image基于rootfs制作镜像How to Create Your Own Docker Base Images From 制作rootfs这里为了简化,直接使用dracut生成initramfs。生成initramfs# dracut -H --keep initramfs.im...
2023-08-11 15:25:00 2039
原创 dell T620使用汇总
前些天从淘宝上买了一台不知道几手的dell T620塔式服务器,主要用来瞎折腾,下面记录一些使用经验。T620PowerEdge T620Dell PowerEdge T620 Systems Owner's ManualTechnical Guidedell技术支持https://www.dell.com/support/home/zh-cn版本...
2023-08-10 16:07:00 1862
原创 把电脑显示器当作另一个视频输出设备的显示器
需求有一个笔记本电脑和一个支持HDMI输出的机顶盒,希望机顶盒的内容输出到笔记本的屏幕上。硬件hdmi转usb的视频采集卡。绿联视频采集卡海备思usb采集卡软件配置以Potlayer为例。采集卡怎么用?电脑怎么成为其他设备的显示器?potplayer设置教程/采集卡连接电脑软件操作方法完。...
2023-07-27 11:23:00 1791
原创 通过qemu和docker搭建交叉编译环境
背景在工作中我们经常需要交叉编译一些可执行程序或者动态库,有时要编译的程序过于复杂,如果靠纯的交叉编译,费事又费力,需要解决大量的编译依赖以及报错。解决方案 docker + qemu-user利用qemu-user可以运行不同架构的用户态程序,而docker可以创建一个运行不同架构的用户程序的环境。原理这里用到了linux提供的binfmt_misc,可以根据可执行程序的格式来调用不...
2023-07-27 09:17:00 2229
原创 内核文档翻译 —— Building External Modules(编译外部模块)
原文:https://www.kernel.org/doc/html/latest/kbuild/modules.htmlThis document describes how to build an out-of-tree kernel module.1. Introduction"kbuild" is the build system used by the Linux kernel....
2023-06-30 20:18:00 1899
原创 ftrace学习 —— user_events的用法
要使用user_event,大致要经过:注册、使能跟踪、写入跟踪信息、读取跟踪信息、关闭跟踪、反注册、删除。通过user_event可以实现对应用程序的跟踪,类似linux内核中的tracepoint那样。,不过,user_event提供的方法功能更加强大,可以配合perf等工具使用。文件节点的值时,check变量的相应bit会随之改变。写入0,那么check变量的bit31是0,向。写入0,那么check变量的bit30是0,向。写入1,那么check变量的bit31是1.
2023-06-11 19:13:38 3184
原创 如何从linux社区下载和合入内核patch?
其中v13_20230526_mhiramat_tracing_add_fprobe_tracepoint_events.mbx的内容是实际补丁集的内容,v13_20230526_mhiramat_tracing_add_fprobe_tracepoint_events.cover中是cover letter的内容。可以看到,这个命令会把整个补丁集都下载下来,链接可以是这个补丁集中的任意一个,最后可以用提示git am打入patch。下面是b4这个工具的安装和使用说明。命令下载和合入社区的一个补丁集。
2023-06-11 00:19:18 5315 1
原创 linux内核分析 —— zone结构体对齐
可以看到,这两个宏默认都是按L1的cache line大小对齐,对结构体整体的修饰表示zone结构体类型的变量的起始地址按L1 cacheline对齐,在结构体内部表示紧跟在后面结构体成员变量的地址按L1 cacheline对齐。在很多linux内核资料上都说为了防止伪cache共享,对zone结构体进行了特殊的设计。以我自己的测试环境为例,是x86_64架构的,L1 cacheline的长度定义在。可以看到上面的这些zone的起始地址都是对齐的,而且是512字节对齐。在这个结构体内部利用。
2023-06-09 23:01:51 2656
基于容器的bpftrace,版本为0.16.0
2022-09-03
半静态编译的bpftrace:v0.16.0
2022-09-02
静态编译的bpftrace可执行程序v0.12.0
2022-09-02
操作系统导论(英文版)+ 代码
2019-06-30
u-boot-2014_04移植文档(tq2440)以及补丁文件
2014-06-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人