冰块的博客

日拱一卒 不期而至

opensbi 启动流程

fw_base.S 和 sbi_init代码分析

主要关注 fw_base.S 和 sbi_init firmware/fw_base.S ... // 为每个hart 都准备好了各自的struct sbi_scatch call sbi_init fw_jump.elf编译命令 riscv64-unknown-linux-gnu-gcc -g -Wall -nostdlib -fno-omit-frame-pointer...

Preempt-RT 优先级继承

Priority Inheritance

Preempt-RT 是一个用于嵌入式系统的补丁,旨在提高 Linux 内核的实时性能。 实时系统需要能够在实时约束下及时响应事件,同时保证系统稳定和可靠性。 Preempt-RT 补丁在 Linux 内核中引入了实时抢占,允许内核在更短的时间内响应实时事件,提高了系统的实时性能。 优先级反转 优先级反转是一个经典的实时系统问题,可能会影响实时系统的性能。 它发生在低优先级任务持有系统资源...

网络协议栈知识点

kernel network protocol

套接字缓冲区 sk_buff 套接字缓冲区,用于内核协议栈管理报文收发的结构体,在网络实现的各个层次之间交换数据,而无需来回复制分组数据,对性能提高很可观。 套接字缓冲区管理方式 struct sk_buff { ... }; struct sk_buff_head { /* These two members must be first to match sk_buff...

riscv相关组件编译

qemu启动riscv镜像

编译 qemu-system-riscv64 git clone https://github.com/qemu/qemu cd qemu git checkout v7.2.0 mkdir build cd build ../configure --prefix=/home/linux/riscv/qemu-7.2.0-install/ \ --target-list=riscv3...

系统时间慢于世界时间

System time is slower than real-world time

2.6.26内核 loongson3a2000系统上遇到一个系统时间比世界时间慢的问题 内核中mips_hpt_frequency全局变量记录了CPU主频 cpu主频是在bootware初始化硬件的时候,写入倍频系数到寄存器,这就决定了cpu的工作频率,也就是时钟周期 也决定了counter计数器的cycle递增速率,每秒钟递增多大数值   系统启动时,内核从RTC real-...

文件系统扩展属性

fs xattr

xattr extended attributes扩展属性   文件常规属性之外另行定义的可以关联到文件的(或多或少)任意属性 linux上所有主要的硬盘文件系统(Ext3/4 xfs btrfs)都支持扩展属性   概述 一个扩展属性就是与文件系统对象关联的一个”名称/值”对 名称就是普通字符串;值可以是文本,也可以是二进制数据,内核对值的内容没有限制 属性可以定义,也可以不定义...

riscv内核启动

riscv内核启动早期代码走读

arch/riscv/kernel/head.S arch/riscv/kernel/head.S 是 RISC-V架构Linux内核的一个汇编语言源文件,其作用是初始化内核和启动CPU。 具体来说,head.S包含了以下几个主要的功能: 设置栈顶指针。在RISC-V架构中,栈顶指针存储在寄存器sp中。head.S将sp设置为内核栈的起始地址,这是内核使用的栈空间。 ...

内核实时性

preempt-rt

实时内核提高实时性的关键在于降低延迟 PREEMPT_RT主要是想尽可能的达成如下两个目标 降低中断响应延迟(中断线程化) 大多数硬中断实现极为精简,每个架构相关代码都只有几十行,减少了禁中断的时间 只负责配置中断控制器,屏蔽中断请求线,确认中断,然后就返回,剩余任务都交给中断线程去处理 硬中断返回了就可以及时调度高优先级实时任务 中断线程执行的时候,开中断,也可以被抢占,...

ftrace原理与实现

Ftrace Principle and Implementation

编译阶段 gcc -pg -mfentry -mrecord-mcount (或者scripts/recordmcount.pl) 如果不加 -pg参数,后面两个参数就不会生效 gcc 5 added -mrecord-mcount (to do this for us) 如果gcc支持编译参数-mrecord-mcount,那么编译器自己生成__mcount_loc section ...

x86 nmi

kernel space processing

x86 nmi 简介 NMI(Nonmaskable Interrupt)中断之所以称之为NMI的原因是: 这种类型的中断不能被CPU的EFLAGS寄存器的IF标志位所屏蔽。 而对于可屏蔽中断而言只要IF标志位被清理(例如:CPU执行了cli指令),那么处理器就会禁止INTR Pin和Local APIC上接收到的内部中断请求。 NMI中断有两种触发方式: 外部硬件通过CPU的 N...