linux内核第一记
 
1.linux体系结构




 
从上图可知,Linux分为:用户空间和内核空间。内核空间和用户空间是程序执行的两种不同的状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。
  www.2cto.com  
2.linux内核架构




 
2.1系统调用接口(SCI)
SCI层为用户空间提供了一套标准的系统调用函数来访问Linux内核,搭起了用户空间到内核的桥梁。
2.2进程管理(PM)
进程管理的重点是创建进程(fork,exec),停止进程(kill,exit),并控制他们之间的通信(singal或POSIX机制),进程管理还包括控制活动进程如何共享CPU(进程调度).。

 
2.3内存管理(MM)
内存管理的主要作用是控制多个进程安全的共享内存区域。
2.4网络协议栈(NS)
网络协议栈为Linux提供了丰富的网络协议实现。
2.5虚拟文件系统(VFS)  www.2cto.com  
VFS隐藏各种文件系统的具体细节,为文件操作提供统一的接口。




 
2.6设备驱动(DD)
Linux内核中有大量的代码都在设备驱动程序中,他们控制特定的硬件设备。
2.7 Arch
Arch中包含内核所支持的每种CPU体系,在Arch目录中,都有每种CPU体系对应的子目录,子目录中又包含boot,mm,kenerl等子目录,分别控制系统引导,内存管理,系统调用等。如X86体系如下图:
 

linux内核第二记
 
目录结构(一般修改Arch和Drivers目录中的文件)
  www.2cto.com  
1.block目录
部分块设备驱动程序
2.crypto目录
加密、压缩、CRC校验算法
3.documentation
内核的文档
4.drivers目录
设备驱动程序
5.fs目录
存放各种文件系统的实现代码。每个子目录对应一中文件系统的实现,公用的源程序用于实现虚拟文件系统VFS
  www.2cto.com  



 
6.include目录
内核所需要的头文件。与平台无关的头文件在include/linux子目录下,与平台相关的都文件则放在相应的子目录中。
7.init目录
内核初始化代码
8.ipc目录
进程间通信实现代码
9.kenerl目录
Linux大多数核心功能都在这个目录实现(调度程序、进程控制、模块化)。
10.lib目录
库文件代码
11.mm目录
mm目录中的文件用于实现内存管理中与体系结构无关的部分
12.net目录
网络实现的协议代码
  www.2cto.com  





13.samples目录
一些内核编程的范例
14.script目录
配置内核的脚本
15.security目录
SElinux的模块
16.sound目录
音频设备的驱动程序
17.usr目录
cpio命令实现
18.virt目录
内核虚拟机



linux内核第三记
 
Linux内核配置
Linux内核具有可定制的优点,具体步骤如下:

 
1.清理临时文件,中间文件和配置文件
·make clean:删除大部分产生文件(如编译中的.o文件)但是把配置保留下来。
·make mrproper:删除所有产生文件并把配置文件也删除了。
·make distclean:在make mrproper的基础上,还要删除编辑器文件和补丁文件。




 
2.确定目标系统的软硬件配置情况,比如CPU的型号,网卡的型号,所支持的网络协议等。

 
3.使下列的命令之一配置内核:

 
·make config:基于文本模式的交互式配置(以提问的方式配置)。




 
·make menuconfig:基于文本模式的菜单型配置(推荐使用)。




 
·make oldconfig:使用已有的配置文件(.config),但是会询问新增的配置选项。




 
·make xconfig:图形化的配置(需要安装图形化系统)

 
如果没有安装qt:  www.2cto.com  
sudo apt-get install libqt3-mt
sudo apt-get install libqt3-mt-dev
sudo make xconfig:


 
在make menuconfig后,ls -a:注意多了一个.config文件








 
一般情况下都用make menuconfig:如上图,y=*、n=[]、M,y或*代表的是将这个项目编译到内核中,n或空为不选择,M表示编译成模块。

 
[*]A.c---->A.o\
                        --->zimage(*要经历编译和连接)
[*]B.c---->B.o/
[M]D.c---->D.o(指编译)
[]E.c---X(不编译不连接)
 
配置项的选择:
参见内核配置参考.doc
常常利用已有的内核配置参考进行修改。例如进入arm中的s3c2410的配置:
 




 
把该配置拷贝到liunx内核下的.config中,然后在此基础上进行修改。
如:cp s3c2410_defconfig ../../../.config  www.2cto.com  
 
假如我要将我修改本身系统运行的内核:
 
 
 

linux内核体系结构的更多相关文章

  1. Linux内核剖析(二)Linux内核绪论

    什么是内核 内核是操作系统最基本的部分.它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间.内核的分类可分为单内核和双内 ...

  2. 和菜鸟一起学linux内核源码之基础准备篇

    来源:http://blog.csdn.net/eastmoon502136/article/details/8711104 推荐阅读:linux内核源码最初版linux内核源代码,简单易懂,适合初学 ...

  3. 查看Linux内核版本

    您可能因多种原因需要确切知道GNU / Linux操作系统上运行的内核版本. 也许您正在调试与硬件相关的问题,或者了解影响旧内核版本的新安全漏洞,并且您想知道您的内核是否易受攻击. 无论是什么原因,从 ...

  4. Linux基础系列—Linux体系结构和Linux内核结构

    /** ****************************************************************************** * @author    暴走的小 ...

  5. Linux内核异常处理体系结构详解(一)【转】

    转自:http://www.techbulo.com/1841.html 2015年11月30日 ⁄ 基础知识 ⁄ 共 6653字 ⁄ 字号 小 中 大 ⁄ Linux内核异常处理体系结构详解(一)已 ...

  6. Linux内核0.11体系结构 ——《Linux内核完全注释》笔记打卡

    0 总体介绍 一个完整的操作系统主要由4部分组成:硬件.操作系统内核.操作系统服务和用户应用程序,如图0.1所示.操作系统内核程序主要用于对硬件资源的抽象和访问调度. 图0.1 操作系统组成部分 内核 ...

  7. Linux内核启动过程概述

    版权声明:本文原创,转载需声明作者ID和原文链接地址. Hi!大家好,我是CrazyCatJack.今天给大家带来的是Linux内核启动过程概述.希望能够帮助大家更好的理解Linux内核的启动,并且创 ...

  8. Linux内核--内核数据类型

    转自:http://www.linuxidc.com/Linux/2013-12/93637.htm 将Linux 移植到新的体系结构时,开发者遇到的若干问题都与不正确的数据类型有关.坚持使用严格的数 ...

  9. linux内核分析作业8:理解进程调度时机跟踪分析进程调度与进程切换的过程

    1. 实验目的 选择一个系统调用(13号系统调用time除外),系统调用列表,使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用 分析汇编代码调用系统调用的工作过程,特别是参数的传递的方 ...

随机推荐

  1. CSS——类和ID选择器的区别

    1.相同点,可以应用在任何元素. 2.不同点,ID选择器只能在元素里只能分别引用,不能同时引用. 如: <style type="text/css">.stress{( ...

  2. mysql备份

    工具 mysql mysqldump 应用举例 导出 命令行下具体用法如下: mysqldump -u用戶名 -p密码 -d 数据库名 表名 脚本名; 1.导出数据库为dbname的表结构(其中用戶名 ...

  3. Spring 当 @PathVariable 遇上 【. # /】等特殊字符

    @PathVariable注解应该不是新鲜东西了Spring3.0就开始有了 URL中通过加占位符把参数传向后台 举个栗子,如下比较要说的内容比较简单就大概齐的写一下 画面侧 $.ajax({ typ ...

  4. [squid] kid1| ERROR: No forward-proxy ports configured.

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. C++——带默认参数值的函数

    函数在声明时可以预先给出默认的形参值,调用时如给出实参,则采用实参值,否则采用预先给出的默认参数值. ,) { return x + y;} int main() { add(,);//10+20 a ...

  6. spring jdbc踩坑日记,new JdbcTemplate 为null导致UserDao一直为null

    private DataSource datasource; private JdbcTemplate jdbcTemplateObject; //设置注入 public void setdataso ...

  7. 济南清北学堂游记 Day 6.

    还剩一天半我就该回去了. 说实话今天挺可惜的,有很多本来可以得到的分数评测时没有拿到.上午的第一题和第二题我都想出了正解,T3敲了一个暴力,虽然暴力写坏了.预计是可以拿210的但是实际上只有很少的分数 ...

  8. SPOJ DIVCNT2 [我也不知道是什么分类了反正是数论]

    SPOJ DIVCNT2 - Counting Divisors (square) 题意:求 \[ \sum_{i=1}^n\sigma_0(i^2) \] 好棒啊! 带着平方没法做,考虑用其他函数表 ...

  9. Go终端读写

    终端读写 操作终端相关文件句柄常量 os.Stdin:标准输入 os.Stdout:标准输出 os.Stderr:标准错误输出 终端读写实例: package main import ( " ...

  10. Hive metastore表结构设计分析

    今天总结下,Hive metastore的结构设计.什么是metadata呢,对于它的描述,可以理解为数据的数据,主要是描述数据的属性的信息.它是用来支持如存储位置.历史数据.资源查找.文件记录等功能 ...