自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(1265)
  • 资源 (16)
  • 收藏
  • 关注

原创 linux存储技术学习资料

是一个用于调试文件系统的工具,可以用于查看和修改文件系统的内部状态。是一个用于显示 ext2、ext3、ext4 文件系统信息的命令行工具。可能会对文件系统造成不可逆的损坏,因此在使用之前请务必备份数据。是要显示信息的文件系统所在的设备文件名,例如。用法(来自chatgpt)是要调试的文件系统)bmap imap

2023-05-22 19:38:19 2252 1

原创 在ubuntu20上编译bcc时遇到:Could NOT find LibDebuginfod

参考:https://github.com/iovisor/bcc/issues/3601。

2024-04-22 10:07:19 110

原创 Linux系统调用流程、参数传递以及返回值

应用程序运行在用户态,需要通过内核提供的系统调用陷入到内核态来完成一些特权操作,比如创建、打开以及读写文件等。实际开发中,为了可移植性和便捷性,应用一般不会直接调用系统调用,而是使用C库封装的接口,由C库去调用。系统调用的实现机制入参是如何传递的返回值是如何传递的系统调用返回值、errno、perror。

2024-04-21 17:54:52 24

原创 远程管理HP笔记本

我的HP笔记本的型号是AMD的战99,平时放在家里,有时想远程用一下,但是又不想让笔记本一直处于开机状态,下面介绍一下我的做法。

2024-04-20 08:53:23 255

原创 Android系统学习 —— 替换crash_dump文件

可以看到,crash_dump放在了/apex/com.android.runtime下面。但是这个目录下的文件即使remount了也无法修改,而是需要通过/system/apex来修改。

2024-04-17 15:07:40 212 2

原创 T620折腾 —— 给虚拟机配置大页

虚拟机访问物理内存需要经过两级页表翻译,如果使用大页,以方便可以降低缺页发生的频率,同时也可以降低TLB Miss的频率,对于提升虚拟机的运行性能有一定作用

2024-04-14 07:20:49 229 1

原创 搭建Android内核和Framework开发和调试环境

作为一名系统软件工程师,除了工作中用到的公司提供的Android硬件设备外,如果能有一个纯软件模拟的Android系统开发调试环境,对工作和学习都会有极大的便利,为此Android为我们提供了Cuttlefish这个模拟器

2024-04-13 10:27:38 256 2

原创 ARM64架构 —— 异常返回地址

以EL0为例,正常情况下执行SVC系统调用指令可以陷入EL1,此时ELR_EL1中记录的时SVC指令后面的那条指令的地址。但是如果EL0上直接调用HVC或者SMC,因为EL0上没有权限使用HVC和SMC,那么返回地址就是HVC或者SMC指令的地址。那么这里的异常返回地址ELR的值具体是如何规定的呢?

2024-04-10 15:11:20 193

原创 深入理解Linux系统中的几种栈以及栈的切换

栈在进程运行过程中的起着至关重要的作用,进程可以使用栈来保存函数参数、局部变量以及返回地址等,还可以利用栈回溯技术获取程序的函数调用关系。那么在Linux系统中,一个进程会用到哪些栈呢?进程执行过程中,或者处于用户态或者处于内核态,所以在用户态和内核态分别有各自的栈。在用户态,一个进程中的主线程跟其他线程用的是不同的栈。在内核态,根据是通过系统调用还是中断的原因进入内核,栈又有所区分。另外进程在用户态异步执行信号处理程序时又使用的是哪个栈呢?下面讨论一下,使用的是基于ARM64的Linux平台,Linux内

2024-04-07 13:13:32 51

原创 Linux的信号栈的实现(1)

在前一篇文章中介绍了Linux系统中的几种栈以及它们之间的切换,进程在用户态和内核态会使用不同的栈,在用户态的主线程和其他线程都有各自的栈,此外进程在执行信号处理程序时也需要栈,那么这个栈来自哪呢?

2024-04-01 16:13:32 998

原创 Linux内存管理 —— 通过实验学习和理解CoW(2)

前一篇通过实验的方法理解了一下CoW,下面大致分析一下Linux内核源码实现。我们知道,CoW是父进程在fork时,将自己的私有可写的页面的映射属性设置为只读,然后映射信息跟子进程共享,后面fork完成后,父子进程先发起写操作的一方会触发CoW,而后发起的也会触发缺页,但是不会CoW,而是复用已有的页面。

2024-04-01 14:23:44 680

原创 Linux内存管理 —— 通过实验学习和理解CoW(1)

我们知道,Linux内核为了提高进程fork的效率,实现了CoW技术,即将进程的私有的可写区域的Page的映射属性改成只读,父子进程的任何一方先发起写操作的将触发CoW:分配一个新的物理页,然后将要写的区域页的内容拷贝到这个物理页,最后将这个物理页映射到要写的用户虚拟地址上。下面我们通过实验和源码分析来理解这个过程。

2024-03-31 19:34:20 855

原创 使用crash、funcgraph以及kprobe使用案例 —— 跟踪文件写缺页和脏页回写

内核版本linux-6.5需求通过mmap将一个文件以SHARE的方式映射到进程的虚拟地址空间,然后写其中一段数据,此时会发生缺页异常,内核会分配页缓存并根据偏移将文件指定位置的内容读到页缓存,最后再修改进程的页表,将这个页缓存映射给用户,不过第一次映射的时候PTE里面RW位是0,当进程真正写的时候,会再次触发缺页,并将对应的文件页设置为脏页,Linux会定期将脏页回写到磁盘上,在回写操作执行之前清除脏页标记,同时也会清除RW位。下面利用crash、funcgraph以及kprobe结合的方式来学习

2023-11-29 11:29:19 995

原创 关闭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 1762

原创 分析结构体的内存空间布局 —— pahole

pahole这个工具可以用来分析结构体的内部布局信息,参考下面的文章:https://lwn.net/Articles/335942/

2023-09-10 23:25:00 1851

原创 在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 1719

原创 用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 1784

原创 利用ESXi学习设备vfio设备直通

参考公开 VMware 硬件辅助的虚拟化《KVM实战 原理、进阶与性能优化》场景需要在Guest操作系统中使用硬件虚拟化的能力,此时需要Host向Guest暴露硬件虚拟化能力。配置可以通过下面这个方法:启动Guest后,编辑GRUB参数,使能IOMMU,以Ubuntu为例:编译/etc/default/grub增加了intel_iommu=on更新grubu...

2023-08-20 23:32:00 1629

原创 一台UPS实现NAS、PC和服务器的自动关机

参考如何用一台UPS控制多台主机的断电自动关机?NetworkUPSTools(NUT)的安装与配置家用UPS同时给NAS和PC使用实现自动关机https://networkupstools.org/作者[email protected]概述之前在买NAS时配了一台UPS,有自动关机功能。最近买了台T620服务器,又不想再给它配一台UPS,所以在网上查找如何跟NAS共...

2023-08-19 12:07:00 2940

原创 UEFI学习资料

书籍《UEFI编程实践》技术博客罗冰的UEFI开发专栏https://www.lab-z.com/iof/UEFI入门必读的12本书

2023-08-17 20:24:00 1656

原创 搭建edk2编译环境

参考《UEFI编程实践》https://github.com/tianocore/edk2作者[email protected]概述在Ubuntu中安装ubuntu18.04的容器环境,在其中搭建编译和开发环境,支持运行UEFI模拟器。步骤安装dockerDocker安装及使用下载容器镜像$ sudo docker pull ubuntu:18.04启动...

2023-08-17 16:58:00 1851

原创 在T620上安装系统遇到的问题

由于买的T620主要是自己玩,不需要特别高的配置,不需要组raid,就让卖家把H710阵列卡换成了直通的H310阵列卡(non raid),这样家里富裕的sata固态和机械硬盘就可以直接差到阵列卡上了,因为sas接口兼容sata接口,反之则不行。下面是在折腾时遇到的一些问题。不支持UEFI的方式从硬盘启动开机检测可以探测到下面两块硬盘:1TB的固态盘和一个8TB的机械盘在装系统时,...

2023-08-15 21:05:00 2019

原创 用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 1630

原创 在低版本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 2402

原创 使用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 1836

原创 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 1741

原创 读取内核变量的几种方法

下面我们通过几种办法从内存里得到其内容。

2023-08-07 14:08:00 1658

原创 把电脑显示器当作另一个视频输出设备的显示器

需求有一个笔记本电脑和一个支持HDMI输出的机顶盒,希望机顶盒的内容输出到笔记本的屏幕上。硬件hdmi转usb的视频采集卡。绿联视频采集卡海备思usb采集卡软件配置以Potlayer为例。采集卡怎么用?电脑怎么成为其他设备的显示器?potplayer设置教程/采集卡连接电脑软件操作方法完。...

2023-07-27 11:23:00 1748

原创 通过qemu和docker搭建交叉编译环境

背景在工作中我们经常需要交叉编译一些可执行程序或者动态库,有时要编译的程序过于复杂,如果靠纯的交叉编译,费事又费力,需要解决大量的编译依赖以及报错。解决方案 docker + qemu-user利用qemu-user可以运行不同架构的用户态程序,而docker可以创建一个运行不同架构的用户程序的环境。原理这里用到了linux提供的binfmt_misc,可以根据可执行程序的格式来调用不...

2023-07-27 09:17:00 1994

原创 内核文档翻译 —— 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 1811

原创 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 3124

原创 如何从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 4719 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 2601

原创 设置typora编辑器的宽度

参考Typora修改代码编译器部分的宽度值打开主题文件夹打开要使用的主题切换一下主题

2023-06-03 10:15:00 94

原创 编辑器设置

在线编辑器https://markdown.com.cn/Typora修改编辑器宽度SourceInsight【Source Insight】SI工具栏误触导致的恶心排版错乱问题恢复VS CodeVSCode 点击按钮实现前进和后退捡到枪的系统软件工程师 - wayling 老师常用插件clangdindent-rainbowText Marker (H...

2023-06-01 09:46:00 32

原创 Linux学习资料

内核地图

2023-05-28 23:54:34 1947

原创 pagefault_disable的效果

在内核代码中经常看到下面的用法:/** * copy_to_user_nofault(): safely attempt to write to a user-space location * @dst: address to write to * @src: pointer to the data that shall be written * @size: size of the ...

2023-04-27 00:04:00 46

原创 技术文档翻译 (by chatgpt)

为了学习linux内核,计划陆续将一些内核文档以及LWN上的文章通过chatgpt翻译成中文。下面是网络上已经存在的一些内核文档翻译项目:LWN 中文翻译公众号 Linux News搬运工内核文档 -- 中文翻译内核文档RCUWhat is RCU? – “Read, Copy, Update”What is RCU, Fundamentally?What is RCU?...

2023-04-05 15:43:00 30

原创 Available flags for AddressSanitizer

quarantine_sizeDeprecated, please use quarantine_size_mb.quarantine_size_mbSize (in Mb) of quarantine used to detect use-after-free errors. Lower value may reduce memory usage but increase ...

2023-03-10 19:28:00 44

原创 ASAN使用

参考https://github.com/google/sanitizers/wiki/AddressSanitizerProgram Instrumentation Options工欲善其事必先利其器——AddressSanitizerLinux下内存检测工具:asanASAN_OPTIONSSanitizerCommonFlags可以使用的一些标志位及其含义kerne...

2023-03-10 15:26:00 36

基于eadb的eBPF开发环境

在Android上搭建eBPF开发环境,同时也适用于Ubuntu20.04等发行版,支持bcc、bpftrace、libbpf等

2024-04-23

ASfP: Android Studio for Platform

ASfP: Android Studio for Platform, version2023.2.1.20

2024-02-28

静态编译的git,版本2.42.1

静态编译的git,版本是2.42.1,用于x86_64上

2023-11-17

git-static x86-64 v2.9.5

静态编译的git可执行程序,x86_64架构,版本是v2.9.5

2023-09-09

静态编译的trace-cmd,arm64版本,v3.1.4

静态编译的trace-cmd,arm64版本,v3.1.4

2022-11-28

静态编译的trace-cmd,x86版本,v3.1.4

静态编译的trace-cmd,x86版本,v3.1.4

2022-11-28

静态编译的tmux,ARM64版本,v3.3a

静态编译的tmux,ARM64版本,v3.3a

2022-11-25

静态编译的tmux,x86版本,v3.3a

静态编译的tmux,x86版本,v3.3a

2022-11-25

静态编译的tig,ARM64版本,v2.5.7

静态编译的tig,ARM64版本,v2.5.7

2022-11-24

静态编译的tig,x86版本,v2.5.7

静态编译的tig,x86版本,v2.5.7

2022-11-24

基于容器的bpftrace,版本为0.16.0

将bpftrace放到容器中,容器使用的是ubunt focal。 解压之后: bpftrace_docker$ ./bpftrace.sh ./trace.bt 或者 bpftrace_docker$ ./bpftrace.sh -e 'BEGIN {printf("Hello\n");}'

2022-09-03

半静态编译的bpftrace:v0.16.0

半静态编译的bpftrace,版本v0.16.0,库依赖如下: $ ldd bpftrace_v0_16_0 linux-vdso.so.1 (0x00007ffec589f000) librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fef1540d000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fef15408000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fef15403000) libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fef1531c000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fef11fd8000) /lib64

2022-09-02

静态编译的bpftrace可执行程序v0.12.0

静态编译的bpftrace,不依赖任何动态库,版本为:0.12.0. https://github.com/iovisor/bpftrace https://github.com/iovisor/bpftrace/releases/tag/v0.12.0

2022-09-02

Linux内核内存管理技术分享

linux内核内存管理技术

2022-08-27

Linux自解压算法调研.pdf

Linux自解压算法调研

2021-03-08

sd host和sdcard 协议3.0 加书签.zip

sd host和sdcard的3.0协议,加入了书签,方便阅读和索引

2019-10-18

ARMv8_5寄存器和指令_f_SVE.zip

关于ARMv8.5的寄存器资料,汇编指令资料,SVE指令和寄存器资料,HTML和XML格式,便于检索和跳转

2019-09-16

操作系统导论(英文版)+ 代码

美国知名操作系统教材 紧紧围绕操作系统的三大主题元素:虚拟化 并发和持久性进行讲解 豆瓣原版评分9.7 本书围绕虚拟化、并发和持久性这三个主要概念展开,介绍了所有现代系统的主要组件(包括调度、虚拟内存管理、磁盘和I/O子系统、文件系统)。全书共50章,分为3个部分,分别讲述虚拟化、并发和持久性的相关内容。作者以对话形式引入所介绍的主题概念,行文诙谐幽默却又鞭辟入里,力求帮助读者理解操作系统中虚拟化、并发和持久性的原理。 本书内容全面,并给出了真实可运行的代码(而非伪代码),还提供了相应的练习,很适合高等院校相关专业的教师开展教学和高校学生进行自学。

2019-06-30

u-boot-2018-09 分析

本文分析了u-boot-2018.09,对于学习和移植u-boot的朋友会有帮助

2018-12-17

ARMv8寄存器手册,网页版

从DS5工程里拷贝出来的ARMv8寄存器资料,通过浏览器既可以查看,非常方便。

2018-11-05

eMMC官网下载的四份文档4.5_5.0_5.01_5.1

包含:eMMC v4.51 v5.01 v5.0 v5.1四个规范,以及几份emmc芯片手册

2018-08-09

H_264和MPEG-4视频压缩:新一代多媒体的视频编码技术.pdf

H_264和MPEG-4视频压缩:新一代多媒体的视频编码技术

2016-01-05

u-boot-2014_04移植文档(tq2440)以及补丁文件

本文详细介绍了如何将u-boot-2014_04移植到TQ2440上,并给出了补丁文件。目前已经支持从NandFlash启动。

2014-06-30

u-boot_2014_04初步分析

采用的uboot版本是u-boot-2014.04,以smdk2410为例进行分析,分析了它的配置、启动流程、代码重定位以及内存布局。

2014-06-17

shell脚本打印出带颜色的字符的脚本

打印出带颜色的字符用到的脚本包color

2013-08-21

Notepad++插件包

Notepad++插件包,可以将绝对好的插件复制到notepad++的安装目录中的plugins目录下

2013-02-26

C语言函数大全_CHM

C语言函数大全,共分为12项。制作它花了我不少时间。

2013-01-25

keil头文件路径设置

总结了keil中常见的几种头文件添加的方法。

2013-01-15

嵌入式入门笔记

嵌入式入门笔记

2012-12-14

空空如也

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

TA关注的人

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