- 博客(22)
- 资源 (1)
- 收藏
- 关注
原创 UBIFS文件系统(五)
UBIFS文件系统(五)本文主要解释如下几个问题:为什么data node在空间索引时,并不从freeable_list中查找,而为index node索引剩余空间的时候则会?写data node时,当该node对应的key在TNC中存在时,会发生node的替换,原node所在LEB的dirty值增加,该LEB可能会成为freeable LEB,但是写数据时该LEB并不在索引的范围之内,这是由于将该存在于该LEB中的node编成脏的新的node可能此时正存在于jhead的wbuf中,还没有同步到f
2022-03-06 19:12:23
1416
原创 ELF文件——DWARF源码解析
前言此前LEF文件——栈回溯中只描述了通过exidx进行栈回溯的过程,本文将描述根据eh_frame进行栈回溯的原理及过程。原理说明dwarf的核心是一张表格,该表格根据函数的压栈过程获取,以一个函数的汇编代码为例:0000000000023c80 <_dl_start>:_dl_start():/usr/src/debug/glibc/2.31+gitAUTOINC+f84949f1c4-r0/git/csu/init-first.c:96 23c80: a9bf7bfd
2021-12-21 17:32:00
4040
2
原创 ELF文件——映射
前言主要描述的是动态库的映射。动态库映射动态库加载时会根据动态库的program header table进行内存映射,主要是对具有LOAD属性的segment进行映射,以一例说明:通过readelf得到的其program header的内容为:Elf file type is DYN (Shared object file)Entry point 0x1ab19There are 10 program headers, starting at offset 52Program Heade
2021-12-03 16:11:54
1302
原创 ELF文件——栈回溯
前言本文以libunwind库对栈回溯流程进行描述。libunwind栈回溯流程libunwind包含两套使用接口,分别以前缀unw_和_Unwind标识,其中_Unwind前缀的接口是供C++异常处理的高级函数接口,unw前缀的则是更为底层通用的接口。根据libunwind代码中的configure.ac文件,在arm架构下是不使能C++的异常处理的,所以栈回溯使用的接口均为前缀位unw的函数接口。AC_MSG_CHECKING([whether to enable C++ exception s
2021-09-26 19:32:26
2995
原创 ELF文件——动态链接
前言下文所示案例为运行在armV7架构、linux平台之下的动态库文件。ELF文件格式链接器以ELF文件的固定格式对目标程序进行链接,程序加载器以ELF文件的固定格式对其进行解析。ELF文件的组成框架在链接器和加载器的视角中分别如下:如上图所示,链接器以section为单位对数据进行组织,以section header table对section进行描述,而忽略program header table中的内容;加载器以segment为单位对数据进行组织,以program header table对
2021-09-22 17:00:14
1557
原创 UBIFS文件系统(三)
UBIFS文件系统(三)ubifs文件系统为异地更新,数据总是写到日志区中,只有当page cache中的数据达到一定条件时,才会将日志区的文件数据同步到flash。将日志区的内容同步到flash的操作称之为commit,本文主要对ubifs的commit过程进行描述。...
2021-07-26 21:07:27
1294
原创 UBIFS文件系统(二)
UBIFS文件系统(二)本文主要对ubifs文件系统数据回写过程进行描述,即将处于page cache中的数据写入flash的过程。下文以ubifs_data_node为例描述ubifs中数据回写到flash的过程,其他类型node的回写过程与此类似。ubifs_data_node的数据回写过程由ubifs_jnl_write_data函数实现:将待回写的数据(固定为一个block大小)封装成为一个ubifs_data_node;在journal head中查找足够存储该ubifs_data_node的
2021-07-07 22:29:18
1412
1
原创 UBIFS文件系统(一)
UBIFS文件系统(一)UBIFS磁盘结构ubifs文件系统将整个磁盘空间划分为superblock、master、log、lpt、orphan和main六个区域,其区域划分如下所图所示:
2021-06-21 22:22:29
4855
原创 yocto中的init manager
前言根据前文Linux根文件系统挂载流程中的分析,内核通过调用根文件系统中的init程序跳转到用户空间,并对用户空间所需的基础框架进行初始化。类比于内核启动时,需要对各个功能模块初始化进行初始化,当进入用户空间时,也需要启动各项服务来搭建基础的应用环境。对于不同的init系统管理器,服务启动的方式有所区别,下文主要对yocto中使用的sysVinit、busybox init和systemd进行...
2020-04-21 20:09:10
2415
1
原创 Linux根文件系统挂载流程
根文件系统的概念根文件系统是控制权从linux内核转移到用户空间的一个桥梁。linux内核就类似于一个黑匣子,只向用户提供各种功能的接口,但是功能的具体实现不可见,用户程序通过对这些功能接口的不同整合实现不同的功能需求。以用户的角度来说,应用程序调用内核的接口实现不同的功能,此时系统的控制权在用户手中,但是实际上却是先有内核的初始化提供这些接口,用户才可以使用这些接口的,也就是系统的控制权最初应...
2020-04-11 19:34:56
2358
1
原创 Linux内核makefile框架
前瞻官方文档位置:Linux/Documentation/Kbuild/makefiles.txt内核makefile框架linux内核makefile由五部分组成:Makefile:顶层makefile,主makefile,用于定义vmlinux(kernel image)和module这两个目标的编译和构建及其在软件层面的依赖。arch/$(ARCH)/Makefile:arch相关...
2020-03-29 22:11:22
710
原创 yocto基本概念
前瞻https://blog.youkuaiyun.com/qq_28992301/article/details/52872209https://www.jianshu.com/p/2b5df45e614fyocto元数据recipe:后缀为.bb的文件,是bitbake最基本的元数据文件,定义了如何构建一个target的全过程,该target的输出为一个或多个package。即当使用bitbake...
2020-03-22 11:01:16
4763
1
原创 Linux文件写缓存
问题1.应用发起的写操作何时将内容真正写入文件?2.如何保证在异常掉电的情况下,应用写入文件的数据不丢失?文件的写流程应用对文件的操作一般基于标准库函数fopen、fread、fwrite、fclose实现,本文主要是针对fwrite操作的阐述。当应用调用fwrite向文件中写入数据时,实际上经过用户空间和内核空间中的两层缓冲区,如下图所示:当用户只调用fwrite写文件时,数据首先被...
2020-03-04 22:03:07
915
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人