linux文件系统之读流程 SYSCALL_DEFINE3(read, xxx)

SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count);fget_light();fcheck_files();ssize_t vfs_read(struct file *file, char __use...

2016-05-05 00:50:55

阅读数:1477

评论数:0

linux内存管理之初始化zonelists

初始化后zonelists: m1 == node1 movable ; h1 == node1 highmen; n1 == node1 normal; d32.1 == node1 DMA32; d1 == node1 DMA m2 == node2 movable; ...

2016-02-28 13:06:32

阅读数:1235

评论数:0

加载模块报错:version magic '2.6.32-504.el6.i686 SMP mod_unload 686 ' should

hello: module_layout: kernel tainted. Disabling lock debugging due to kernel taint hello: version magic '2.6.32-504.el6.i686 SMP mod_unload 686 ' sho...

2015-04-11 10:46:00

阅读数:1772

评论数:0

Linux内核源码分析--文件系统(九、File_dev.c)

file_dev.c程序是用于访问文件数据的读写程序; file_read() int file_read(struct m_inode * inode, struct file * filp, char * buf, int count)函数,从i节点为inode的文件中 fil...

2015-03-26 15:41:46

阅读数:1398

评论数:0

Linux内核源码分析--文件系统(八、Block_dev.c)

由于是块设备的读写操作,所以每一次都是以块为单位(1024)进行操作;pos是文件的位置光标,用pos可以得到文件现在所处在哪块逻辑块上,并且在该逻辑块上偏移了多少。再根据块的大小 可以得到该逻辑块还剩下多少空间。最后跟需要写入的字符数比较,如果该逻辑块剩下的空间足够存放需要写入的字符,则读取该...

2015-03-26 14:27:29

阅读数:1642

评论数:0

Linux内核源码分析--文件系统(七、Namei.c)

1、功能和stncmp()函数一样,都是对指定字符串进行比较。比较指定长度len的name和de结构体中的name进行比较,相等返回1,否则返回0; //字符串匹配,参数分别为:比较长度,文件名指针,目录项结构体 static int match(int len,const char * na...

2015-03-04 15:02:25

阅读数:1887

评论数:0

Linux内核源码分析--文件系统(六、Super.c)

1、释放指定设备的超级块:首先是对设备块号检查以及检查设备块号对应的超级块的合法性;然后释放8块i节点位图和逻辑块位图,最后释放掉超级块; //释放指定设备的超级块, //释放设备所使用的超级块数组项(s_dev=0),并释放该设备i节点位图和逻辑块所占用的高速缓存块 //如果超级块对应的是文件系...

2015-02-26 17:07:06

阅读数:2526

评论数:0

Linux内核源码分析--文件系统(五、Inode.c)

//把文件上的数据存放在磁盘上,inode 文件i节点;block 文件中数据块号,create是否创建标志 static int _bmap(struct m_inode * inode,int block,int create) { struct buffer_head * bh; int...

2015-02-26 10:54:41

阅读数:2970

评论数:1

Linux内核源码分析--文件系统(四、Bitmap.c)

总结的来说其实Bitmap.c程序就是操作文件系统中的两个位图:i节点位图和逻辑块位图;拿逻辑块位图来说吧,申请一个新的逻辑块时,首先是在8块逻辑块位图中查找一个空闲的比特位,找到以后转换成逻辑块号,然后就通过逻辑块号找到真正的逻辑块,通过函数把该逻辑块映射到缓存区中,当然最后要对缓存区做些属性设...

2015-02-21 16:17:41

阅读数:1830

评论数:0

全面解析C语言中可变参数列表

全面解析c语言中可变参数列表问题:1、大众版:大家习惯的使用方式;2、真实版:真正的使用方式;3、实际原理:具体原理,本质;4、自己实现可变参数列表:理解本质后,自己用自己的方法来实现可变参数列表;5、可变参数列表缺陷:可变参数列表中存在的一些缺陷,以及提供的修改思路和方案。

2015-02-11 15:27:15

阅读数:9124

评论数:1

Linux内核源码分析--文件系统(三、buffer.c)

前面已经大概的分析了下高速缓存区相关知识,这里再来分析下几个重要的函数;1、清缓存:把缓存区数据和设备进行同步; 2、缓存块插入到双链表/hash链表中,从双链表/hash链表中删除缓存块; 3、查找缓存块号; 4、从设备上读取数据到缓存中; 5、缓存区初始化函数;

2015-02-10 14:52:56

阅读数:2560

评论数:0

Linux内核源码分析--文件系统(二、高速缓存区)

从块设备中读取数据是很慢的(I/O操作相对于内存操作来说是比较慢的),所以为了不让CPU浪费宝贵的时间来等待读取块设备上的数据,就在内存中开辟了一段内存地址用来预获取最近使用过的多块设备块上的数据。当CPU需要访问块设备上的数据时,首先会在缓冲区中查找,如果有幸能找到,那么就直接拿过来使用;如果找...

2015-02-09 22:14:06

阅读数:2852

评论数:0

memcopy()函数c语言实现和汇编实现比较

首先来看汇编实现的memcpy函数,是利用宏函数来实现的,用汇编指令rep和movsb配合循环把数据以字节为单位从ds:esi传送到es:edi中,把循环次数放在ecx中。当然这样拷贝的才是真正的内存拷贝,其他的函数都稍微有点牵强;其实我感觉c语言来实现还是比较简单的,就是把输入的数据强制转换成字...

2015-02-07 11:06:25

阅读数:1387

评论数:0

Linux 新内核中主次设备号范围

作者:李强,华清远见嵌入式学院讲师。      设备驱动中,设备号设一个很重要的概念和变量。不论是主设备号,还是次设备号,在设备驱动中都占据了很重要的地位。那么他在Kernel中是如何操作的?这个数据结构都是通过那些函数可以很容易的在我们写Linux设备驱动模块时被我们所使用呢? ...

2015-01-28 15:58:02

阅读数:830

评论数:0

Linux内核源码分析--内存管理(二、函数实现技巧)

仔细的分析了一下各个内存管理函数的实现,发现里面涉及到了几个技巧,如果知道了这几个技巧,那么阅读内存管理源码将会事半功倍(主要是这几个技巧在几个函数中都出现过),当然也会选择性的分析几个比较重要的函数实现; 1、向上取整:以一个页面为了例,如果地址是1,那么向上取整就是4096;如果...

2015-01-23 17:33:24

阅读数:2197

评论数:1

Linux内核源码分析--内存管理(一、分页机制)

最开始的地方是在head汇编中,如果看boot中那三个汇编的应该记得(那三个汇编还是比较重要的)。首先是分页机制,在CR0的第31位(PG位)置1表示开启分页机制,顺便也介绍下其他几个控制寄存器:CR1保留,没用;CR2 用来记录页面异常时线性地址(不懂没关系,后面会介绍);CR3 当前CPU使用...

2015-01-22 16:30:52

阅读数:3668

评论数:4

Linux内核源码分析--系统时间初始化(kernel_mktime()函数)

从boot文件中的几个汇编程序执行后跳转到init文件中的main.c程序开始继续执行,该main.c函数式为系统运行的环境进行初始化的。首先来看系统时间的初始化(因为系统时间的初始化开始程序就在init文件中),其中主要还是由kernel中的mktime.c程序中的kernel_mktime函数...

2015-01-19 23:14:24

阅读数:2222

评论数:0

Linux上电初始化--BOSI启动和boot环境设置

BIOS: 上电启动时,最开始由硬件控制进入BIOS,BIOS代码一般存放在0xfe000~0xfffff最后几kb中;  启动中cs:eip == 0xffff:0x00000 === 0xffff0 这是最开始启动的(BIOS执行的第一条指令) 下面是BIOS程序执行的内容: 1、在0x000...

2015-01-15 18:08:08

阅读数:1206

评论数:0

openVswitch(OVS)源代码分析 upcall调用(之linux中的NetLink通信机制)

如果看了前面的源码分析的就会知道,在什么情况下会调用upcall函数呢?就是在一个数据包查找不到相应的流表项时,才会调用upcall函数(比如一个数据包第一次进入这个内核,里面没有为这个数据包设定相应的流表规则)。upcall函数的调用其实就是把数据包的信息下发到用户 空间去,而由内核空间到用户空...

2014-11-04 19:13:12

阅读数:3172

评论数:0

linux内核驱动模块编程框架---(hello world模块)

linux内核驱动模块编程框架,模块Makefile文件,模块的常用操作命令(模块的加载卸载命令);重点来说下注册的回调函数,static int __init hello_init(void)和static void __exit hello_exit(void)函数; 一、模块...

2014-10-18 13:55:15

阅读数:2915

评论数:0

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