Archlinux安装btrfs文件系统
以北外镜像站为例,在/etc/pacman.d/mirrorlist文件最开头添加这样一行:
1Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch
硬盘分区如下:
123456789$ lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTSsda 8:0 0 465.8G 0 disk├─sda1 8:1 0 512M 0 part /boot├─sda2 8:2 0 16G 0 part [SWAP]└─sda3 8:3 0 449.3G 0 part /home /var/log /var/cache/pacman/pkg /
格式化分区:
123mkfs.fat -F 32 /dev/sda1 # 格式化 b ...
KVM与实体机共享目录
virtiofs12345678<filesystem type="mount" accessmode="passthrough"> <driver type="virtiofs"/> <binary path="/usr/lib/virtiofsd"/> <source dir="/home/ansore/DATADISK/DISK3/virt_mount/project"/> <target dir="/home/ansore/project"/> <alias name="fs0"/> <address type="pci" domain="0x0000" bus="0x08" slot="0x00" function="0x0"/></fil ...
Linux中找到并删除重复文件的工具
Rdfind
Fdupes
FSlint
RdfindRdfind 意即 redundant data find(冗余数据查找),是一个通过访问目录和子目录来找出重复文件的自由开源的工具。它是基于文件内容而不是文件名来比较。Rdfind 使用排序算法来区分原始文件和重复文件。如果你有两个或者更多的相同文件,Rdfind 会很智能的找到原始文件并认定剩下的文件为重复文件。一旦找到副本文件,它会向你报告。你可以决定是删除还是使用硬链接或者符号(软)链接代替它们。
安装 Rdfind
Rdfind 存在于 AUR 中。因此,在基于 Arch 的系统中,你可以像下面一样使用任一如 Yay AUR 程序助手安装它。
1yay -S rdfind
在 Debian、Ubuntu、Linux Mint 上:
1sudo apt-get install rdfind
在 Fedora 上:
1sudo dnf install rdfind
在 RHEL、CentOS 上:
12sudo yum install epel-releasesudo yum install rdfind
用法
一 ...
QEMU搭建ARM32环境
环境基于ubuntu18.04
编译内核1234567891011121314151617#获取内核源码wget https://mirrors.tuna.tsinghua.edu.cn/kernel/v5.x/linux-5.4.18.tar.xztar -vxf linux-5.4.18.tar.xz#编译内核mkdir -p outputKERNEL_OUT=$PWD/outputcd linux-5.4.18export ARCH=armexport CROSS_COMPILE=/usr/local/arm/gcc-arm-11.2-2022.02-x86_64-arm-none-linux-gnueabihf/bin/arm-none-linux-gnueabihf-make O=$KERNEL_OUT vexpress_defconfigmake O=$KERNEL_OUT zImage -j12make O=$KERNEL_OUT modules -j12make O=$KERNEL_OUT dtbs -j12
等待编译完成
12内核镜像在:arch/arm/boot/z ...
64位操作系统-地址空间
虚拟地址虚拟地址是抽象的地址统称,大多数不能独立为物理地址,像逻辑地址、有效地址、线性地址和平坦地址皆属于虚拟地址的管理范畴。
逻辑地址。通常格式位Segment:Offset。段内偏移地址Offset也叫做有效地址,在C语言或其他高级编程语言里,获取变量或函数的地址就是获取其有效地址。逻辑地址最终都会转换位线性地址,但不同运行模式下的 转换过程各不相同。
线性地址。通过逻辑地址中的段基地址与段内偏移地址组合而成,这使得程序无法直接访问线性地址。平坦地址作为一种的线性地址,将段基地址和段长度覆盖了整个线性地址空间,而非线性地址空间的某一部分区域。
物理地址物理地址空间中不仅包含物理内存(RAM、ROM)还有硬件设备。在处理器开启分页机制的情况下,线性地址需要经过页表映射才能转换为物理地址;否则线性地址将直接映射为物理地址。
I/O地址。I/O地址空间与内存地址空间相互隔离,它必须借助特殊的IN/OUT指令才能访问。I/O地址空间由65536个可独立寻址的I/O端口组成,寻址范围0~FFFFh,其中的端口地址F8h~FFh保留使用
内存地址。 ...
64位操作系统-处理器架构
运行模式
实模式
保护模式。32位处理器的主要模式。
系统管理模式。
虚拟8086模式
IA-32e模式。64位吃处理器的主要运行模式。
体系结构各运行模式间切换过程:
处理器上电或重启之后首先运行实模式。CR0控制寄存器的PE标志位控制处理器运行在实模式或者保护模式。EFLAGS标志寄存器的VM标志位可使处理器在保护模式可使处理器在保护模式与虚拟8086模式间切换,切换过程往往通过任务切换或中断/异常返回程序实现。 在开启分页机制的保护模式下,置位IA32-EFER寄存器的LME标志位(位于IA32-EFER寄存器的第8位)可使处理器进入IA-32e模式。通过IA32-EFER寄存器的LMA标志位(位于IA32-EFER寄存器的第10位)可以判断处理器是否运行在IA-32e模式下。当前处理器运行与IA-32e模式,代码段描述符的L标志位可确定处理器运行于64位模式还是兼容模式。不管处理器正处于什么模式,一旦收到SMI信号便会进入SMM模式。只有在执行RSM指令后,处理器会返回到产生SMI信号前。
通用寄存器IA32体系下的通用寄存器有EAX、EBX、ECX、EDX、ES ...
构建RPM包
Archlinux下安装RPM包管理工具rpm-tools是RPM的包管理工具,包括rpm、rpmbuild等命令,安装:
1yay -S rpm-tools
准备下载示例项目:https://github.com/opensourceway/how-to-rpm
解压:tar -xvf utils.tar
查看目录结构:
1234567891011121314$ tree development development├── license│ ├── Copyright.and.GPL.Notice.txt│ └── GPL_LICENSE.txt├── scripts│ ├── create_motd│ ├── die│ ├── mymotd│ └── sysdata└── spec └── utils.spec3 directories, 7 files
spec文件每个spec文件有许多部分,其中一部分可能会忽略,取决于rpm包的具体情况。这个特定的 spec 文件不是工作所需的最小文件的示例,但它是一个包含不需要编译的文件的中等复杂 spe ...
64位操作系统-实现系统调用处理函数
实现一个sys_printf的系统调用:
123456789101112131415unsigned long sys_printf(struct pt_regs *regs) { color_printk(BLACK, WHITE, (char*)regs->rdi); return 1;}unsigned long no_system_call(struct pt_regs *regs) { color_printk(RED, BLACK, "no_system_call is called, NR: %#04x\n", regs->rax); return -1;}system_call_t system_call_table[MAX_SYSTEM_CALL_NR] = { [0] = no_system_call, [1] = sys_printf, [2 ... MAX_SYSTEM_CALL_NR-1] = no_system_call};
sys_printf的系 ...
64位操作系统-实现系统调用
SYSENTER指令SYSENTER指令可以实现应用层到内核层的跳转。在执行SYSENTER之前,处理器必须为其提供0特权级的衔接程序以及0特权级的栈空间,这些数据将会保存在MSR寄存器组和通用寄存器中。
IA32_SYSENTER_CS,位于MSR寄存器组的地址174h处,这个MSR寄存器的低16位装载的是0特权级的代码段选择子,该值也用于所以0特权级的栈段选择子(IA32_SYSENTER_CS[15:0]+8),所以该值不能为NULL
IA32_SYSENTER_ESP,位于MSR寄存器组的地址175h处,这个MSR寄存器里的值会被载入RSP寄存器中,该值必须是Canonical型地址。在保护模式下,只有寄存器的低32位会被载入RSP寄存器。
IA32_SYSENTER_EIP,位于MSR寄存器组的地址176h处,这个MSR寄存器里的值会被载入RIP寄存器中,该值必须是Canonical型地址。在保护模式下,只有寄存器的低32位会被载入RIP寄存器。
在执行SYSENTER指令的过程中,处理器会根据IA32_SYSENTER_CS寄存器的值加载相应的段选择子到CS和SS ...
64位操作系统-跳转到应用层
跳转过程 系统内核位于0特权级,应用程序位于3特权级,如果想从内核层进入应用层,在特权级跳转的过程中必须提供目标代码段和栈段以及其他跳转信息。
检测目标程序的访问权限,针对段模式的特权级进行检查
临时把SS、ESP、CS、EIP寄存器的当前值保存在处理器内部,以备调用返回使用
根据目标代码段的特权级,处理器从TSS结构中提取处相应特权级的段选择子和栈基地址,并将其作为目标程序的栈空间更新到SS和ESP寄存器
将步骤2临时保存的SS和ESP寄存器存入内目标程序的栈空间
根据调用门描述符记录的参数个数,从调用者栈空间复制参数到目标程序栈
将步骤2临时保存的CS和EIP寄存器值存入目标程序的栈空间
将调用门描述符记录的目标代码段选择子和程序的起始地址加载到CS和EIP寄存器中
处理器在目标代码段特权级下执行程序
对于相同特权级的程序访问,处理器并不会切换程序的栈空间,所以只有参数、EIP寄存器以及CS寄存器会存入栈空间
还原调用者的执行环境:
检测目标程序的访问权限,此处同样针对段模式的特权级进行检查
还原调用者的CS和EIP寄存器值,它们在调用过程中以保存在被调用者的栈空间
如果R ...



