冰块的博客

日拱一卒 不期而至

overlayfs usage

嵌入式 overlayfs 玩法

手记:嵌入式init脚本里的overlay+squashfs玩法 用只读的squashfs做系统底包,再用内存里的tmpfs做可写层,拼出一个能读写但重启就还原的根文件系统。 下面是脚本的完整逻辑,我按执行顺序说一下。 1. 先把基础环境搭起来 mount -t proc proc /proc mount -t sysfs sysfs /sys mount -t devtmpfs d...

kfuzztest introduction

kfuzztest 原理与实践

功能简介 KFuzzTest的主要是简化对低级、相对无状态函数(如数据解析器、格式转换器)的模糊测试,这些函数很难通过系统调用边界有效覆盖。 从系统调用边界作为入口时,会存在一些代码路径比较难以执行到,但是利用kfuzztest可以覆盖这些路径。 支持直接在内核环境中进行模糊测试,无需将代码构建为单独的用户空间库或模拟其依赖项。 开发者只需使用基于宏的简单API,就能以最简模板代码添...

slab location migration

slab 位置迁移

slab 位置 系统运行过程中,一个slab在某一时刻所处的位置,可能的情况如下: 作为满状态的slab,悬空状态,不被任何cpu或者node跟踪 作为满状态的slab,调试模式下,位于node->full上 作为active活动slab,位于c->slab上(slab上空闲objects由c->freelist管理 ) 作为inactive非活动sl...

userspace rcu

urcu

用户态rcu锁 点我看清晰大图 读者角度 写者角度-同步 写者角度-异步 urcu_qsbr_gp.ctr 读者状态(ctr)和全局状态(gp.ctr)之间的交互关系图 urcu_qsbr_gp.futex 第一个写者同步等待gp结束,在urcu_qsbr_gp.futex上休眠, 其它写者在局部链表waiters上休眠,等待被第一个写者唤醒。 sychr...

dma & cma

dma misc knowledge points

没有IOMMU的arm64架构嵌入式设备上,跟了下代码执行流程,记录了一些DMA相关知识点。 有点流水账。 有三种方式分配CMA内存(dts/内核传参/系统默认),CMA预留用的memblock接口,时间点早于DMA初始化时间。 DMA首选从CMA分配,没有的话__get_free_pages动态获取。 需要打开配置项CONFIG_DMA_CMA,DMA才可以利用CMA分配内存。...

kvm gpa to hva

内存虚拟化之地址转换

映射关系 GVA -> GPA 映射关系 保存在 Guest OS 页表中。 GPA -> HVA 映射关系 保存在 kvm memslot 数组中。 GPA -> HPA 映射关系 保存在 kvm ept 页表中(或者影子页表)。 HVA -> HPA 映射关系 保存在 Host OS 页表中。 相关代码 qemu 进程会准备好可用虚拟内存空间,类似于物理机的内存...

using ebpf in embeded env

嵌入式环境使用ebpf

不借助其它bpf调试工具,开发人员需要自行编写bpf 内核态类C代码和用户态C代码, 内核态代码用于生成字节码,用户态代码负责load并attach字节码到系统 1 借助开源库 libbpf-bootstrap 生成示例demo 先生成libbpf.so,再编译demo程序,最后把应用程序 (比如kprobe)打包进rootfs中 git clone --recursive http...

malloc trigger oom

malloc分配大块内存触发oom

问题描述 一般遇到的OOM,那就是OOM,确实可用内存剩余很少,申请不到触发的。 有一次的OOM,从应用角度看明明还有好几百M,但就是分配失败了触发系统OOM异常。 root:/$ free -m total used free shared buffers cached Mem: 19...

stack memory corruption trigger spinlock lockup

栈内存被写坏触发了系统死锁

死锁异常 产品反馈设备死锁,异常信息如下: [530.486893] BUG: spinlock lockup suspected on CPU#0, prd/22535 [530.557833] Unable to handle kernel paging request at virtual address d280003552829470 [530.652719] pgd = ffff...

async serial port recv data delayed

异步串口收包延迟问题

背景 路由器产品反馈应用程序epoll_wait等着读串口驱动数据出现30ms左右延迟。 业务场景 转报机–(串口码流)–> 路由器 –(UDP/TCP/XXX)–> 路由器 –(串口码流)-> 远端转报机 其实串口驱动收到的码流数据可以在内核态直接从网口转出去,没必要经tty交由上层再打个转。 询问产品,反馈说是历史设计原因,搞得有点复杂,因交付时间原因当下改不动。...