
linux内核架构
xiaoshengqdlg
这个作者很懒,什么都没留下…
展开
-
UNIX文件系统中各种文件、概念和函数之间的关系
unlink、硬链接、文件描述符、符号链接,文件名真正指向文件内容的是inode结构体(i节点)。文件描述符--------------->打开的文件表--------->v节点表---------------->i节点----------->文件内容原创 2015-03-12 17:31:43 · 720 阅读 · 0 评论 -
linux init程序分析
1、init程序剖析 init进程是内核引导过程完成时创建的第一个进程。Linux使用了init进程来对组成Linux的服务和应用程序进行初始化。 当 init 进程启动时(使用传统的sysvinit版本),它会打开一个名为 /etc/inittab 的文件。这个文件是 init 的配置文件,定义了如何对系统进行初始化。这个文件还包含了有关出现电源故障时执行的操作(如果系统支持转载 2014-07-12 14:45:28 · 1099 阅读 · 0 评论 -
Linux 可加载内核模块剖析
2.6 内核透视图Linux® 可加载内核模块(从内核的 1.2 版本开始引入)是 Linux 内核的最重要创新之一。它们提供了可伸缩的、动态的内核。探索隐藏在可加载模块后面的原理,并学习这些独立的对象如何动态地转换成 Linux 内核的一部分。0 评论:M. Tim Jones, 顾问工程师, Emulex Corp.2008 年 8转载 2014-09-11 10:49:18 · 592 阅读 · 0 评论 -
动态链接库的装载过程
《程序员的自我修养》动态链接章动态链接程序运行时地址空间分布: 在可执行文件中有各种符合和函数的地址,这个地址实际上是进程的虚拟地址。.so文件中也有各种符号地址以及装载地址等。但是.so文件中的这个地址是不确定的,即是不固定的。只有在这个so文件被装载时才会解析出一个合理的装载地址,从而装载进物理内存。(这里的装载地址和符号地址实际上都是进程的虚拟地址)。那么问题来了,为原创 2015-04-19 22:45:59 · 3162 阅读 · 1 评论 -
Linux中断浅析http://bbs.chinaunix.net/thread-3566316-1-1.html
本文描述内容针对2.6.31+x86平台,不包含硬件相关的细节。作者:独孤九贱;版权所有,转载请注明出处。有问题欢迎与我交流讨论。一、概述中断,本质上是一个电信号,早期的计算的并没有中断这一概念,这使得CPU与外围设备的交互变得困难,CPU需要不断的轮询,以探测外围设备是否有数据需要处理。这浪费大量的资源。中断的出现,将CPU从这一任务中解放出来,CPU与外设的处理,变为异转载 2014-08-11 20:17:32 · 939 阅读 · 0 评论 -
Linux信号处理机制
本文简单介绍下Linux信号处理机制,为介绍二进制翻译下信号处理机制做一个铺垫。本文主要参考书目《Linux内核源代码情景分析》《独辟蹊径品内核:Linux内核源代码导读》首先,先说一下什么是信号。信号本质上是在软件层次上对中断机制的一种模拟,其主要有以下几种来源:程序错误:除零,非法内存访问…外部信号:终端Ctrl-C产生SGINT信号,定时器到期产生SIGALRM…转载 2015-03-14 14:27:28 · 617 阅读 · 0 评论 -
创建proc文件
首先介绍函数:create_proc_entry(const char *name,mode_t mode,struct proc_dir_entry *base);name是要创建的文件的名称,mode是该文件的保护掩码(可传入0表示系统默认值)base指定该文件所在目录(如果base为NULL,则该文件将创建在/proc的根目录)关于proc文件的使用在《linu设备驱原创 2014-11-29 11:16:57 · 737 阅读 · 0 评论 -
kthread_create函数和kernel_thread函数的区别
在看linux驱动代码的时候,经常惠会碰到kthread_create这个函数,google一下,发现很多人在讲二者的区别,但是都在讲源码的区别而已,总结不够,感觉没有说出二者之间的本质区别,自己总结下。 一. 源码分析(linux-2.6.39)1. kthread_create源码分析#define kthread_create( threadfn, data, n转载 2014-09-17 09:42:27 · 886 阅读 · 0 评论 -
内核栈与用户栈
内核栈和用户栈区别:intel的cpu分为四个运行级别ring0~ring3内核创建进程,创建进程的同时创建进程控制块,创建进程自己的堆栈一个进程有两个堆栈,用户栈和系统栈用户堆栈的空间指向用户地址空间,内核堆栈的空间指向内核地址空间。有个CPU堆栈指针寄存器,进程运行的状态有用户态和内核态,当进程运行在用户态时。CPU堆栈指针寄存器指向的是用户堆栈地址,使转载 2014-09-03 17:16:35 · 494 阅读 · 0 评论 -
工作笔记:linux绑定CPU、软中断
linux绑定CPU分为三种:原创 2014-09-17 10:00:28 · 1724 阅读 · 0 评论 -
skb_buf数据结构
linux 内核的sk_buf数据结构中原创 2014-11-25 11:46:51 · 1007 阅读 · 0 评论 -
linux内核线程的创建
在 Linux 中有很多的内核线程,可以通过 ps command 查看到,比如: kthreadd ksoftirqd watchdog 等等等 … 它们都是由内核从无到有创建的,通过它们的 pid 以及 ppid 可以得出以下几点:在内核初始化 rest_init 函数中,由进程 0 (swapper 进程)创建了两个 processinit 进程 (pid = 1转载 2014-09-17 10:36:18 · 1507 阅读 · 0 评论 -
寄存器地址以及用软件通过寄存器控制硬件
寄存器就是内存中的一段特殊的地址原创 2014-11-01 16:30:23 · 1927 阅读 · 0 评论 -
kernel_execve函数
内核空间调用用户空间的应用程序,通过kernel_execve()实现。 其实现比较简单: arch/arm/kernel/sys_arm.c 在init/main.c中最后会通过kernel_execve()来调用用户空间的init进程(如/sbin/init, /etc/init, /bin/init等)。 在kernel/kmod.c中的___call_u转载 2014-09-30 09:24:36 · 2862 阅读 · 0 评论 -
Linux进程地址空间-------vma基本操作
在32位的系统上,线性地址空间可达到4GB,这4GB一般按照3:1的比例进行分配,也就是说用户进程享有前3GB线性地址空间,而内核独享最后1GB线性地址空间。由于虚拟内存的引入,每个进程都可拥有3GB的虚拟内存,并且用户进程之间的地址空间是互不可见、互不影响的,也就是说即使两个进程对同一个地址进行操作,也不会产生问题。在前面介绍的一些分配内存的途径中,无论是伙伴系统中分配页的函数,还是slab分配转载 2015-04-18 23:00:40 · 1090 阅读 · 0 评论 -
linux设备模型的inode,cdev,kobj_map,char_device_struct
Char Device Driver 相关数据结构: struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; struct list_head list; dev_t dev; unsigned int count;转载 2015-03-16 13:27:17 · 1772 阅读 · 0 评论 -
Linux内核分析(供参考)
Linux的内核源代码可以从很多途径得到,我一般常常去kernel.org看看。一般来讲,在安装的linux系统下,usr/src/linux目录下的东西就是内核源代码。源码的版本号有一个非常简单的编号约定:任何偶数的核心(例如2.0.30)都是一个稳定地发行的核心,而任何奇数的核心(例如2.1.42)都是一个开发中的核心。另外还可以从互连网上下载,解压缩后文件一般也都位于linux目录下。内核源转载 2014-07-11 20:07:30 · 452 阅读 · 0 评论