
kernel
文章平均质量分 73
Fybon
这个作者很懒,什么都没留下…
展开
-
Linux 原子操作
所谓原子操作,就是该操作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。 原子操作需要硬件的支持,因此是架构相关的,其API和原子类型的定义都定义在内核源码树的include/asm/atomic.h文件中,它们都使用汇编语言实现,因为C语言并不能实现这样的操作。转载 2014-03-11 16:30:43 · 1088 阅读 · 0 评论 -
Linux内核kprobe机制实现浅析
Kprobe机制是内核提供的一种调试机制,它提供了一种方法,能够在不修改现有代码的基础上,灵活的跟踪内核函数的执行。它的基本工作原理是:用户指定一个探测点,并把一个用户定义的处理函数关联到该探测点,当内核执行到该探测点时,相应的关联函数被执行,然后继续执行正常的代码路径。 Kprobe提供了三种形式的探测点,一种是最基本的kprobe,能够在指定代码执行前、执行后进行探测,但此时不转载 2013-12-10 13:56:09 · 1311 阅读 · 0 评论 -
linux 同步IO: sync、fsync, O_SYNC
sync和fsync baidu一下,有大量文章说明其作用。下面举一个来自csdn的blog文章:http://blog.youkuaiyun.com/cywosp/article/details/8767327其中说明如下:sync函数只是将所有修改过的块缓冲区排入写队列,然后就返回,它并不等待实际写磁盘操作结束。fsync函数只对由文件描述符filedes指定的单一文件起作原创 2014-03-20 15:36:45 · 3061 阅读 · 0 评论 -
Linux内核 container_of 宏和 offsetof 宏分析
1、#define offsetof(TYPE, MEMBER) ((size_t) & ((TYPE *)0)->MEMBER )宏功能:获得一个结构体变量成员在此结构体中的偏移量。1. ( (TYPE *)0 ) 将零转型为TYPE类型指针;2. ((TYPE *)0)->MEMBER 访问结构中的数据成员;3. &( ( (TYPE *)0 )->MEMBER )取出转载 2014-04-18 14:08:32 · 889 阅读 · 0 评论 -
kmalloc VS kmem_cache_alloc
Linux内核为需要动态分配内存的内核程序提供了kmalloc/kfree/kcalloc/krealloc函数接口,它们分别对应于C标准库的malloc/free/calloc/krealloc。除此之外,Linux还提供了kmem_cache_xxx系列系统调用,以提供比上述接口更低的时间复杂度和空间复杂度,那么两者的效率究竟能差多少,它们又各自适合于何种场合呢?Linux内存系统的层转载 2014-05-07 18:14:40 · 1638 阅读 · 0 评论 -
Linux内核中的init_task进程和idle进程
当Power on PC时,BIOS的代码开始执行,然后是Linux初始化的代码,这其中大约很长一段时间Linux都没有进程这一概念,但是这不影响CPU执行它的二进制代码。如果不是多任务以及进程调度的需要,Linux内核可以一直这样走下去。但是因为多任务的需求,Linux必须能支持任务这一特性,任务即进程,或者更简单地说由task_struct对象实例所代表的一段代码的集合,用以完成特定的任务转载 2014-04-23 11:46:20 · 1730 阅读 · 0 评论 -
Linux inotify功能及实现原理
1. inotify主要功能它是一个内核用于通知用户空间程序文件系统变化的机制。众所周知,Linux 桌面系统与 MAC 或 Windows 相比有许多不如人意的地方,为了改善这种状况,开源社区提出用户态需要内核提供一些机制,以便用户态能够及时地得知内核或底层硬件设备发生了什么,从而能够更好地管理设备,给用户提供更好的服务,如 hotplug、udev 和 inotify 就是转载 2014-05-16 17:31:50 · 814 阅读 · 0 评论 -
ramfs,tmpfs,rootfs,initramfs和romfs
作者:张志强 发布于:2013-7-9 21:02 Tuesday 分类:Linux学习笔记1. ramfs其实tmpfs, rootfs, initramfs都是ramfs的一种,它们或者是对它的一些特殊的应用,或者是对它某一方面能力的改进加强.1.1. ramfs是什么ramfs是一个非常简单的文件系统,它输出Linux的磁盘缓存机制(页缓存和目录缓转载 2014-05-20 18:06:31 · 1877 阅读 · 0 评论 -
Linux设备模型浅析之uevent篇
Linux设备模型浅析之uevent篇本文属本人原创,欢迎转载,转载请注明出处。由于个人的见识和能力有限,不可能面面俱到,也可能存在谬误,敬请网友指出,本人的邮箱是yzq.seen@gmail.com,博客是http://zhiqiang0071.cublog.cn 。Linux设备模型,仅仅看理论介绍,比如LDD3的第十四章,会感觉太抽象不易理解,而通过阅读内核代码就更具体更转载 2014-05-14 14:12:38 · 1356 阅读 · 0 评论 -
Android & Linux的suspent和resume执行流程
Linux休眠/唤醒简介休眠/唤醒在嵌入式Linux中是非常重要的部分,嵌入式设备尽可能的进入休眠状态来延长电池的续航时间。这篇文章就详细介绍一下Linux中休眠/唤醒是如何工作的,还有Android中如何把这部分和Linux的机制联系起来的.在Linux中,休眠主要分三个主要的步骤:1)冻结用户态进程和内核态任务2)调用注册的设备的suspend的回调函数,顺序是按照注册转载 2014-06-02 16:36:55 · 1716 阅读 · 0 评论 -
linux kernel 运行状态全局标识作用
/* Values used for system_state */extern enum system_states {SYSTEM_BOOTING,SYSTEM_RUNNING,SYSTEM_HALT,SYSTEM_POWER_OFF,SYSTEM_RESTART,SYSTEM_SUSPEND_DISK,} system_state;原创 2014-06-03 15:07:39 · 1851 阅读 · 0 评论 -
Linux中硬链接和软链接的区别和联系
首先要弄清楚,在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存在,从而实现文件的快速访问。 链接是一种在共享文件和访问它的用户的若干目录项之间建立联系的一种方法。Linux中包括两种链接:硬链接(Hard Link)和软链接(Soft Link),软链接又称为符号转载 2014-06-03 17:24:26 · 888 阅读 · 0 评论 -
内核中的 likely() 与 unlikely()
内核中的 likely() 与 unlikely()在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也转载 2014-06-04 09:36:39 · 647 阅读 · 0 评论 -
Linux VFS 之 open系统调用(kernel 3.4)
参考:http://blog.youkuaiyun.com/chenjin_zhong/article/details/8452453http://blog.youkuaiyun.com/chenjin_zhong/article/details/8452487原创 2014-06-18 15:24:19 · 3352 阅读 · 0 评论 -
Ext4文件系统架构分析(一)
本文描述Ext4文件系统磁盘布局和元数据的一些分析,同样适用于Ext3和Ext2文件系统,除了它们不支持的Ext4的特性外。整个分析分两篇博文,分别概述布局和详细介绍各个布局的数据结构及组织寻址方式等。感兴趣的看官敬请留意和指导!1. Ext4文件系统布局综述一个Ext4文件系统被分成一系列块组。为减少磁盘碎片产生的性能瓶颈,块分配器尽量保持每个文件的数据块都在同一个块组中,从而减转载 2014-07-18 10:15:16 · 1563 阅读 · 0 评论 -
F2FS文件系统架构与原理分析(二)——磁盘布局
from : http://blog.chinaunix.net/uid-28989651-id-3890455.html转载 2014-06-30 16:21:19 · 3802 阅读 · 0 评论 -
android linux层检测sd卡是否已经mount
需要在底层去检测sd卡是否mount上开机启动过程中,sd卡没有挂载上,/sdcard这个目录也是可写的,只是会把写入的数据都保存到ram里面.直到sd卡mount上之后,数据才会写到sd卡里.中间/sdcard文件系统的类型会从ramfs改变到msdos[cpp] view plaincopyprint?struct转载 2014-06-10 11:05:20 · 3141 阅读 · 0 评论 -
说说内核线程(kthread_create 和 kernel_thread的区别就在于前者多加了个链表)
貌似很神秘的一个东西,我们就来"强行"揭开她的面纱......说实话,我们不是第一次见她了!你说是不?(什么?不是?今天我们DOTA校队去和人家比赛,正因为没看上郁闷着呢,你还来给我添点油是吧...)话说曾经我们在看serio.c的时候,遇到了这么一个模糊的面孔(说模糊是因为我们没对她过多深入): serio_task = kthread_run(serio_thread, NU转载 2014-05-28 14:18:22 · 2310 阅读 · 0 评论 -
module_param 模块参数
模块参数引导模块时,可以向它传递参数。要使用模块参数加载模块,这样写:insmod module.ko [param1=value param2=value ...]为了使用这些参数的值,要在模块中声明变量来保存它们,并在所有函数之外的某个地方使用宏MODULE_PARM(variable, type) 和 MODULE_PARM_DESC(variable转载 2014-05-28 11:10:00 · 1721 阅读 · 0 评论 -
使用kprobes查看内核内部信息
前言:使用printk打印变量等方法,是调试内核的有效方法之一,但是这种方法必须重新构建并用新内核启动,调试效率比较低。以内核模块的方式使用kprobes、jprobes,就可以在任意地址插入侦测器,执行包括printk在内的各种调试工作,而无须重新构建内核,也无须重启。一、首先内核必须支持kprobes、jprobes:#make menuconfigGenera转载 2013-12-07 20:57:05 · 1247 阅读 · 0 评论 -
ARM Linux 3.x的设备树(Device Tree)
宋宝华 Barry Song 1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/p转载 2013-12-29 20:54:59 · 1355 阅读 · 0 评论 -
Linux 3.10 ARM Device Tree 的初始化
本文代码均来自标准 linux kernel 3.10,可以到这里下载 https://www.kernel.org/ 以 arch/arm/mach-msm/board-dt-8960.c 为例,在该文件中的 msm_dt_init 函数的作用就是利用 dt(device tree)结构初始化 platform device。点击(此处)折叠或打开转载 2013-12-30 10:24:16 · 1237 阅读 · 0 评论 -
zram
http://zh.wikipedia.org/wiki/Zram转载 2014-06-12 17:57:25 · 4698 阅读 · 0 评论 -
内核线程、轻量级进程、用户线程
转载:http://www.cnitblog.com/tarius.wu/articles/2277.html转载:http://www.fansoo.com/blog/2011/kernel-threads-lightweight-processes-threads-and-linuxthreads-library-users/内核线程内核线程只运行在内核态,不受用户转载 2014-05-30 17:40:50 · 1195 阅读 · 0 评论 -
浅析linux内核内存管理之kmalloc
在SLAB的高速缓存中有普通高速缓存和专用高速缓存,平时用kmem_cache_create创建的是专用高速缓存,比如存放task_struct,mm_struct的高速缓存。普通高速缓存主要供kmalloc使用。第一个高速缓存叫kmem_cache,存放在cache_cache变量中,这个cache专门用于为其他cache分配描述符。[cpp] view plai转载 2014-05-30 17:39:27 · 1205 阅读 · 0 评论 -
Linux Notifier Chains
Linux Notifier Chains1. 引言Linux是单内核架构(monolithic kernel),大多数内核子系统和模块是相互独立的,它们被动态地加载或卸载,以使内核变得小巧和可扩展。然而,子系统或模块之间需要通信,或者说某个特定模块扑捉到的事件可能其它模块对此感兴趣,这就需要一种机制来满足子系统或模块之间交互的需求。Linux使用通知链表来实现这一需求,它是一个转载 2014-06-03 09:25:32 · 920 阅读 · 0 评论 -
Linux VFS 之 mount系统调用(kernel 3.4)
linux version: 3.4.67kernel 代码fs/namespace.c , mount.hstruct vfsmount {struct dentry *mnt_root;/*挂载点根目录的dentry */struct super_block *mnt_sb;/* 挂载点批向superblock的指针*/int mnt_flag原创 2014-06-18 15:33:07 · 2944 阅读 · 0 评论 -
Linux VFS 之 write/read系统调用(kernel 3.4)
linux version: 3.4.67kernel 代码fs/read_write.c原创 2014-06-20 16:06:54 · 4672 阅读 · 0 评论 -
dump_stack 和 trigger_all_cpu_backtrace
182 /* 183 * The architecture-independent dump_stack generator184 */185 void dump_stack(void) 186 { 187 unsigned long bp; 188 unsigned long stack; 189转载 2014-08-08 11:30:20 · 2071 阅读 · 0 评论 -
linux oops产生过程之dump_backtrace
linux oops产生过程之dump_backtrace 什么是Oops?从语言学的角度说,Oops应该是一个拟声词。当出了点小事故,或者做了比较尴尬的事之后,你可以说"Oops",翻译成中国话就叫做“哎呦”。“哎呦,对不起,对不起,我真不是故意打碎您的杯子的”。看,Oops就是这个意思。在Linux内核开发中的Oops是什么呢?其实,它和上面的解释也没什么本质的差别,只转载 2014-08-08 11:23:08 · 1557 阅读 · 0 评论 -
add_partition 函数学习
add_partition,是添加磁盘分区信息的函数,负责向通用磁盘数据结构添加一个新的分区: 通用磁盘数据结构如下:struct gendisk { int major; /* major number of driver */ int first_minor; int minors转载 2014-08-08 11:34:41 · 6665 阅读 · 0 评论 -
高通 MSM8K bootloader 之三: LK
原创 2014-08-09 11:29:28 · 3988 阅读 · 0 评论 -
高通 MSM8K GPT异常导致无法开机问题分析
高通 MSM8K GPT原创 2014-08-09 14:02:10 · 8332 阅读 · 2 评论 -
Linux那些事儿之我是Block层(2)注册一个块设备驱动
Linux那些事儿之我是Block层(2)注册一个块设备驱动转载 2014-08-29 14:44:19 · 1893 阅读 · 0 评论 -
Mmap Internals
欢迎转载,转载请注明出处:http://forever.blog.chinaunix.net!Mmap InternalsAuthor: Tony tingw.liu@gmail.com 1. Why write memory which is mmaped from file can be blocked?最近在调试一个应用层程序的时候发现,尝试转载 2014-09-29 16:47:43 · 1739 阅读 · 0 评论 -
Linux 内核中的 Device Mapper 机制
本文结合具体代码对 Linux 内核中的 device mapper 映射机制进行了介绍。Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(En转载 2014-10-14 15:06:05 · 1075 阅读 · 0 评论 -
Linux块设备加密之dm-crypt分析
相关的分析工作一年前就做完了,一直懒得写下来。现在觉得还是写下来,以来怕自己忘记了,二来可以给大家分享一下自己的研究经验。 这篇文章算是《Device Mapper代码分析》的后续篇,因为dm-crypt是基于dm框架的,因此与上一篇一样,也以2.6.33内核代码为基础来讲述代码的分析过程。但是本文侧重点不同在于着重分析一下三个方面:1、Linux密码管理2、d转载 2014-10-14 16:09:30 · 2820 阅读 · 0 评论 -
Device Mapper 代码分析
Device Mapper(DM)是Linux 2.6全面引入的块设备新构架,通过DM可以灵活地管理系统中所有的真实或虚拟的块设备。DM以块设备的形式注册到Linux内核中,凡是挂载(或者说“映射”)于DM结构下的块设备,不管他们是如何组织,如何通讯,在Linux看来都是一个完整的DM块设备。因此DM让不同组织形式的块设备或者块设备集群在Linux内核面前有一个完整统一的DM表示。转载 2014-10-14 16:15:47 · 1110 阅读 · 0 评论 -
android L arm64 kernel image压缩、解压
kernel/Documentation/arm64/booting.txt原创 2014-11-13 14:35:49 · 9182 阅读 · 5 评论 -
block:ROW scheduling algorithm
Documentation/block/row-iosched.txtrefer to : http://lwn.net/Articles/509829/Introduction============The ROW scheduling algorithm will be used in mobile devices as defaultblock layer I转载 2015-01-07 11:21:24 · 1732 阅读 · 3 评论