原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert Love,陈莉君等译. 1.操作系统和内核简介 Linux内核是自由公开软件,使用GNU的General Public License(GPL)第二版作为限制条款.大多数软件许可证决意剥夺你共享和修改软件的自由.相比之下,GNU通用公共许可证试图保证你共享和修改自由软件的自由. 通常一个内核负责响应中…
获取linux内核源码,自己选择版本(我下载的是linux-3.1.10.tar.gz ,我是直接下载到/usr/src文件夹的) 下载地址传送门 https://www.kernel.org/pub/linux/kernel/ 也可以去我的网盘下载: https://pan.baidu.com/s/1i5dyfkT 甚至直接在命令行下载 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.1.tar.gz 进入/usr/sr…
一 内存管理 默认情况下,运行在Linux系统上的每个进程都有各自的内存页面:进程不能访问其他进程正在使用的内存页面. 内核维护着自己的内存区域 用户进程不能访问内核进程的内存 可以创建一些共享内存页面,多个进程可在同一块共用内存区域进行读取和写入操作:内核负责维护和管理这块共用内存区域并控制每个进程访问这块共享区域. 内核的系统内存管理主要是对1.物理内存和虚拟内存(交换空间)2.共享内存的管理 二 软件程序管理 内核创建第一个进程(init进程)来启动系统上所有其他进程 内核启动时,将ini…
1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统.之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应. 注:本文和其它的“Linux内核分析”文章都基于如下约定:  a) 内核版本为Linux 3.10.29(该版本是一个long term的版本,会被Linux社区持续维护至少2年),可以从下面的链接获取:https://www.kernel.org/pub/linux/kernel/…
1.linux历史 Linux最初是由芬兰赫尔辛基大学学生Linus Torvalds由于自己不满意教学中使用的MINIX操作系统, 所以在1990年底由于个人爱好设计出了LINUX系统核心.后来发布于芬兰最大的ftp服务器上,用户可以免费下载,所以它的周边的程序越来越多,Linux本身也逐渐发展壮大起来,之后Linux在不到三年的时间里成为了一个功能完善,稳定可靠的操作系统. 2.Linux简介 Linux也是和这些Windows.Mac一样,都是系统,只是不同的形式呈现出来给用户体验. Li…
1. vmlinux.lds 首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以找到 Linux 内核的第一行程序是从哪里执行的: 第 493 行的 ENTRY 指明了了 Linux 内核入口,入口为 stext,stext 定义在文件arch/arm/kernel/head.S 中 , 因 此 要 分 析 Linux 内核的启动流程,就得先从文件arch/arm/kernel/head.S 的 stext 处开始分析 2. 内核启…
我们已经了解可以使用下面的几天命令来查看Linux内核版本及Ubuntu发行版本的信息: uname -r uname -a cat /proc/version lsb-release -a 等等 可以看到当前Ubuntu12.04.5lts的内核版本为linux 3.2.0-23-generic-pae,那么版本编号的规则如何? generic及pae又表示什么意思呢? 一.Linux内核版本编号规则 Linux的内核版本编号一般为: 主版本号.次版本号.修订版本号 主版本号:目前使用的内核主…
最近做了一个关于Linux内核编程的项目,主要实现的功能是对文件系统的监控. 我采用的方式是将监控的功能做成一个可加载模块(LKM)的形式,动态加载到Linux内核中.在这个内核层的“监控模块”中,我实现了对open系统调用的截获,因为在操作文件之前,都是先调用open系统调用获得文件描述符fd. 在截获系统调用后,获取当前调用open的进程是哪一个,然后获取open操作的文件是哪一个.通过与事先制定好的监控策略(以文件的形式定义的,在加载模块的时候,从文件中读取到监控模块中)比对,看现在正在操…
概述 可换出页 只有少量几种页可以换出到交换区,对其他页来说,换出到块设备上与之对应的后备存储器即可,如下所述. 类别为 MAP_ANONYMOUS 的页,没有关联到文件,例如,这可能是进程的栈或是使用 mmap 匿名映射的内存区. 进程的私有映射用于映射修改后不向底层块设备回写的文件,通常换出到交换区. 所有属于进程堆以及使用 malloc 分配的页 用于实现某种进程间通信机制的页.例如,用于在进程之间交换数据的共享内存页. 页颠簸 这个问题涉及交换区和物理内存之间密集的数据传输问题归结为页的…
网络命名空间 struct net { atomic_t count; /* To decided when the network * namespace should be freed. */ atomic_t use_count; /* To track references we * destroy on demand */ struct list_head list; /* list of network namespaces *///所有命名空间链接到net_namespace_li…