自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 kasan排查kernel内存越界示例(linux5.18.11)

参考资料:1,内核源码目录中的Documentation\dev-tools\kasan.rst2,

2024-03-07 17:19:17 933

原创 Ethercat“APWR配置从站地址”报文分析(0x0010:0x0011)

基于IgH主站接了3个从站,分析报文。一条Ethercat报文中可以包含多个子报文,每个子报文的地址由ADP+ADO组成,ADP即16 bit High Addr,ADO即16 bit Low Addr。APWR模式下,ADP代表的是从站在网络中按连线顺序的地址,比如与master连接的第一个从站的ADP=0x00,第二个从站的ADP=0x01,第三个从站的ADP=0x02,以此类推。ADO代表的是从站物理寄存器地址,寄存器地址可参考。

2024-01-02 16:35:00 964

原创 Ethercat“BWR配置从站地址”报文分析(0x0010:0x0011)

涉及的从站寄存器:Configured Station Address (0x0010:0x0010)。使用场景举例:IgH启动后,通过“配置从站地址”报文将所有从站地址清零,然后通过APWR指令+“配置从站地址”报文,设置各个从站的地址。

2023-12-23 18:29:41 563

原创 Ethercat “BRD读从站状态”报文分析(0x0130:0x0131)

涉及的从站寄存器:Register AL Status 0x0130:0x0131。

2023-12-22 20:31:26 484 1

原创 IgH调试注意事项

现象:虚拟机中运行IgH master并绑定网卡后,主站由ORPHANED状态转换成IDLE状态,但无法收发数据报。这是因为虚拟机用的是虚拟网卡,需通过iptables将数据包到转发到真实的网卡上,实现收发数据的目的。但IgH替换了网卡驱动程序,收到数据包后,处理流程没有走内核的网络协议栈,所以工作中tcp/ip层的iptables就不起作用,导致IgH无法正常收发报文。解决:物理机安装ubuntu用来测试IgH。

2023-12-21 19:48:30 1011

原创 IgH Master环境搭建

在ubuntu20.04中搭建一个IgH主站。目标:实时linux内核中运行IgH主站,ethercat的用户态工具能看到主站信息。

2023-11-17 13:09:08 458

原创 nat journal

f2fs一些零散的问题,记录一下(文章不完整)。

2023-09-12 18:00:26 133

原创 android存储4--初始化.emulated设备的挂载

在正式介绍挂载视图前,需要讲一下bind mount。绑定挂载命令:bindmount --bind olddir newdir1)将olddir绑定到newdir。绑定后,olddir和newdir看到的都是olddir中的内容(newdir中绑定前的内容变不可见)。2)命令中的olddir对应内核mount函数的dev_name参数,newdir对应mount的dir_name参数。

2023-07-28 21:00:00 1441 1

原创 android存储3--初始化.unlock事件的处理

SystemServiceManager收到unlock事件后,遍历service链表,依次执行各个service的onUserUnlocking,对于存储service,执行的是StorageManagerService$Lifecycle中的onUserUnlocking,在这个方法中,存储的StorageSessionController、vold、storaged模块进行各自初始化操作。

2023-06-22 17:38:41 1251

原创 android存储2--初始化.存储service的启动

存储有3个关键service:mount、vold、storaged,通过adb shell "service list"可以看到。service代码路径system/vold 目录(注意,虽然vold是一个用户态程序,但它的log默认在内核里,需通过dmesg查看)system/core/storaged 目录mount service负责mount和umount存储设备或存储卷,提供文件系统的访问接口。它的mount、umount请求下发给native层的vold处理。

2023-06-19 12:52:34 695

原创 android存储1--初始化.清理环境

开机后,StorageManagerService收到开机广播消息H_BOOT_COMPLETED,按时间顺序完成以下5件事情:代码整体逻辑如下: 代码路径:StorageManagerServiceHandler::handleMessage --> handleBootCompleted --> initIfBootedAndConnected分两种情况:1)用户目录采用硬件加解密(native encryption),此阶段什么事也不做,函数直接返回2)用户目录采用软件加解密(enmulated

2023-04-18 12:42:48 824 1

原创 f2fs函数: current_nat_addr(linux 5.18.11)

一个block中含有NAT_ENTRY_PER_BLOCK个entry(455个),根据nid可以算出nat entry在第N个block中(见NAT_BLOCK_OFFSET宏),由于2个segment一组进行备份,所以nat entry实际在第【N*2】个block上(如果nat entry位于segment B中),或者在第【N*2-segment B中nid所在block的偏移量】个block上(如果nat entry位于segment A中)。

2023-04-14 20:00:00 152

原创 StorageManagerService.java中的mVold.mount

StorageManagerService.java中的mVold.mount

2023-04-07 22:01:21 565

原创 linux trace point机制2--增加trace event

include\trace\events目录下新增fuse.h文件/* 在/d/tracing(软链接指向/sys/kernel/debug/tracing)生成fuse目录,对应fuse子系统 *//* _TRACE_FUSE_H尾缀与本头文件名fuse.h对应*/#if!/* fuse_lookup_pre_inode对应trace event函数名即通过trace_fuse_lookup_pre_inode可以调用本trace*/

2023-03-15 07:45:00 495

原创 fuse文件系统调试环境

qemu如何运行自己编译的kernel,请参考《linux调试专栏》的其他文章。meson configure --default-library static 配置静态编译。pip install pytest (编译fuse自测模块用到,可选,一般不需要)kernel编译后,qemu启动该kernel,会有/sys/fs/fuse目录。default_library选项,Current Value已经是static。(可选,fuse自测模块,一般不需要)4,编译fuse文件系统。

2023-03-06 20:45:00 1207

原创 win10搭建android monkeyrunner自动化测试环境

本文记录一下monkeyrunner环境搭建遇到的各种坑,以免以后再次踩坑。首先要提一下巨坑,务必要安装java 8(本文记录于2023.3),安装其他版本java,运行monneyrunner会有很多问题,见第七节。

2023-03-02 15:41:14 938 9

原创 ubuntu20.04 搭建kernel调试环境第五篇--命令行调试kernel

前一篇文章介绍了eclipse图形化调试kernel,操作比较繁琐。这篇文章介绍gdb命令行方式,更为简单。

2022-12-12 14:28:50 738

原创 ubuntu20.04 搭建kernel调试环境第四篇--图形化调试kernel

1)官网下载对应的版本(eclipse-inst-jre-linux64.tar.gz)2)解压3)进入解压后的eclipse-installer目录,运行安装程序4)运行eclipse5)安装CDTHelp --> Eclipse Marketplace,搜索“cdt”,安装Bracketeer for C/C++(CDT)二、编译rootfs及kernel iamge参考,制作rootfs。参考,编译kernel image。三、配置eclipse远程调试kernel。

2022-12-12 14:18:05 1038

原创 ubuntu20.04 搭建kernel调试环境第六篇(下)-网络原理

ubuntu中qemu启动多个guest虚拟机,guest如何访问外网?guest之间如何实现网络通信?我常用qemu调试自己编译的kernel,需要在guest和host之间共享一些调试文件,如何达到这个目的?开发人员经常遇到环境差异(ubuntu宿主机、自己编译的kernel config、rootfs、qemu等等因素)导致"别人成功的经验”不能复制到自己机器上,所以有必要深入了解一下qemu的网络是怎么实现的,遇到问题才能快速解决。参考ubuntu20.04 搭建kernel调试环境第四篇--网络

2022-12-06 17:44:41 563

原创 F2FS nat entry涉及的数据结构(linux 5.18.11)

只要内存中生成ne,都会缓存在nat cache中(最大数量10万个,见宏定义DEF_NAT_CACHE_THRESHOLD),系统内存压力大的时候,需要回收clean状态的ne,避免f2fs对系统内存的影响。f2fs_fill_super --> f2fs_build_segment_manager --> build_curseg --> restore_curseg_summaries --> read_compacted_summaries 或 read_normal_summaries。

2022-10-25 20:00:00 927

原创 ubuntu 20.04 自动重启网络

开机执行net-restart.sh,每CHECK_INTERVAL秒检测网络,如果外网不通,就重启wifi。

2022-10-17 13:44:12 2191

原创 linux 预读机制 (linux4.14)

文件一般是顺序访问的,访问[A, B]范围的数据后,接下来很可能访问[B+1, B+N]数据。由于访问磁盘、flash等存储器件比较耗时,在访问 [A, B]的时候,如果提前把[B+1, B+N]数据从存储器件读取到ram中,那么后继需要用[B+1, B+N]数据时,就不需要耗时的disk io从存储器件读取数据了,从而提高性能。

2022-10-12 09:44:27 1383 1

原创 F2FS数据块寻址(linux5.18.11)

存储元数据(比如ino、寻址数据块用到的一些信息等等)的block。node block有三种类型:inode block、direct node block、indirect node block。node block在内存中以struct f2fs_node表示。存储文件数据的block。F2FS的每个分区disk layout简化后如下图所示,Main area区按照section划分成多个单元,每个section又包含多个segment(默认情况下1个section含1个segment)。

2022-10-09 17:51:02 1300

原创 ubuntu20.04 搭建kernel调试环境第八篇gdb调试技巧

b [函数名] if $_streq(函数参数可得到的变量名, "自己定义的字符串")$_streq(str1, str2)是gdb的内置函数,用于判断两个字符串是否相等。c---------设置条件断点后,按C键继续执行--------终端执行cat fio命令,触发断点str中是否包含regex字符串(str2指定待匹配的字符串模式)

2022-09-29 16:13:43 918

原创 F2FS lfs模式buffered write写流程(linux 5.18.11)

f2fs lfs模式buffered write写流程

2022-09-26 11:42:38 790

原创 linux module crash分析

# insmod khttp.ko[ 47.885272] blk_dequeue_request: 2 callbacks suppressed[ 47.961228] khttp sysfs init begin v4[ 47.974411] khttp:khttp installed success[ 48.012894] khttp:Connecting to ..[ 48.094931] khttp:connect success[ 48.183118] up

2022-02-10 10:33:38 1224

原创 ubuntu20.04 搭建kernel调试环境第七篇--gdb调试module

qemu调试动态加载的内核模块

2021-12-12 14:41:38 1867

原创 ubuntu20.04 搭建kernel调试环境第六篇(上)--网络配置

qemu访问外网,qemu访问samba

2021-12-03 11:21:39 2757

原创 linux block layer第二篇bio 的操作

摘要linux block layer第一篇介绍了bio数据结构及bio内存管理,本文章介绍bio的提交、拆分、io请求合并、io请求完成时的回调处理。由于“bio的提交”涉及内容太多,所以该小节只描述一些概要信息,在介绍完multi-queue机制后(待整理),再对着代码细说submit_bio流程。内核源码:linux-5.10.3一、bio的提交(submit)提交bio的函数是submit_bio,这个函数做完account工作统计读写量后,调用submit_bio_noacct进行

2021-10-02 23:31:01 6238 5

原创 linux block layer第一篇bio 子系统数据结构及初始化

介绍:block layer在内核中起着承上(文件系统层)启下(设备驱动层)的作用,struct bio是block层的基本数据结构,可以理解成将bio输入block层,由block layer对其加工处理,然后再输出给底层。与bio相关的代码涉及bio内存管理、提交、合并拆分、完成时的回调处理等内容,是内核中一个很小的子系统,该文对其中涉及的代码进行分析,作为笔记,以备查阅。内核源码:linux-5.10.3bio数据结构bio是block层最基本的结构,用来描述io请求属性及状态。从内

2021-08-27 22:01:59 5889 3

原创 ubuntu20.04 搭建kernel调试环境第三篇--kernel编译及运行

目标:基于ubuntu20.04,创建一个可以调试linux-5.10.3kernel的环境。用buildroot制作rootfs。编译X86架构的kernel。gdb命令调试。含disk存储,可以调试存储功能,也可以调试IO调度器、Multi-queue功能。一、编译rootfsroot@linux:~#wget https://buildroot.org/downloads/buildroot-2020.02.8.tar.gzroot@linux:~#tar zxvf .

2021-08-23 21:16:43 2488 1

原创 ubuntu20.04 搭建kernel调试环境第二篇--制作rootfs

rootfs是linux的根文件系统,就是我们看到的 /目录及其中一些重要的子目录,比如/etc ,/lib,/sbin等等,在linux中,一切都是文件,一切都是从/目录开始的,没有rootfs,linux就没法运行。可以通过buildroot制作rootfs(比较方便,建议用这种方式),也可以通过busybox制作rootfs。root@linux:~#wget https://buildroot.org/downloads/buildroot-2020.02.8.tar.gzroot@linux:~#

2021-08-23 15:35:33 2144 2

原创 ubuntu20.04 搭建kernel调试环境第一篇--安装系统

ubuntu20.04环境安装记录,sourceinsight4破解安装

2021-01-01 10:47:45 4013 1

原创 基于netfilter抓包

网络数据包监听系统背景本文介绍一种监听网络数据包的方法,基本思想是通过netfilter/iptables在TCP /IP网络层抓取网络数据包,然后将数据压缩、加密后,上传至云端服务器分析。采集的数据为上行的原始的TCP报文,包括MAC首部、PPP首部(如果是PPPOE连接), IP首部、TCP首部以及部分或全部用户数据。代码基于linux3.14.10验证...

2020-12-11 21:01:04 1355 1

原创 linux debug code---记录文件操作(linux4.4)

背景系统中一些文件丢失了,需要查明丢失的原因,对这个问题有很多方法可以debug,比如ftrace、fsnotify、在unlink、rename函数中加printk等方法,因为ftrace、fsnotify不能获取进程名,并且我们系统中printk默认是关闭的,所以采取了“内核记录文件,存储在磁盘中”的方法,以便异常复现后进行分析。示例代码不依赖于任何平台,在节尾的一些解释中,比如acc...

2019-10-01 23:48:39 447 1

原创 linux trace point机制1---原理描述(linux5.1.6)

一、引入trace point的背景当需要获取内核的debug信息时,通常你会通过以下printk的方式打印信息: void trace_func() { …… printk输出信息 …… } 缺点:内核中printk是统一控制的,各个模块的printk都会被打印,无法只打印需要关注的模块。 如果需要修改/新增打印信息,需要修...

2019-06-30 22:34:03 6568

原创 ARM中的linux页表与硬件页表(linux4.0)

背景:在看内核代码初始化arm页表的时候,发现linux内核做了一些特殊处理,引入了硬件页表、linux页表的概念,这篇文章描述为何需要这样处理以及具体的实现方式。原因:linux中ARM32采用2级页表映射方式,MMU映射过程如下: 图1 ARM MMU映射过程从...

2019-04-26 18:51:41 2940

原创 系统启动流程

问题:1)加电后CPU从哪里执行代码?2)boot loader如何加载到RAM?3)内核镜像如何加载到RAM并运行的?注意分两次加载,需要解压。4)protect mode何时开启?分页模式何时开启?5)0号进程、1号进程何时创建的?一、流程CPU加电复位后处于real mode且CS、EIP被设为固定值,这两个寄存器决定了CPU执行的第一条指令的地址。该地址被映射到ROM中...

2019-02-14 10:56:14 313

原创 inode的i_nlink(linux4.0.4)

一、背景1)通过命令ln a b创建硬链接b->a后(a是一个普通文件),stat a命令看到Links值是多少? gsf@ubuntu:~$ stat a   File: 'a'   Size: 0             Blocks: 0          IO Block: 4096   regular empty file Device: 80...

2019-02-11 23:58:11 1557 1

原创 fork-父子进程读写文件的偏移量(linux4.0.4)

一、背景本文阐述的问题是:fork进程后父子进程操作文件的偏移量是否相同?该问题可以用以下代码来展示,如您能知道代码执行后forkfile文件的内容是什么,那么请略过此文。 #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include &lt...

2019-02-10 14:24:05 1206

空空如也

空空如也

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

TA关注的人

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