原文:Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装

Linux内核分析(一)

从本篇博文开始我将对linux内核进行学习和分析,整个过程必将十分艰辛,但我会坚持到底,同时在博文中如果那些地方有问题还请各位大神为我讲解。

今天我们会分析到以下内容:

1.      Linux体系结构简介

2.      Linux内核源码简介

3.      Linux内核配置、编译、安装

Linux体系结构简介

1.       Linux体系结构(linux系统构成)

Linux可以分为两部分,分别为用户空间和内核空间具体如下图:

a)        用户空间包括:用户的应用程序、C库

b)        内核空间包括:系统调用接口、内核(狭义内核)、平台架构相关的代码

2.       为什么要分为内核空间和用户空间

我们在分析u-boot的时候就说到过,我们的cpu在不同的工作模式下可以访问的寄存器是不一样的,所以为了保护我们的操作系统,避免用户程序将内核搞崩,所以进行了内核空间和用户空间的划分。

a)        Arm处理器工作模式划分:usr、FIQ、IRQ、svc、abt、und、sys(具体介绍在http://www.cnblogs.com/wrjvszq/p/4199682.html

b)        X86处理器工作模式划分:Ring0—Ring3,Ring0下可以执行特权指令,可以访问IO设备,Ring3则有很多的限制

注:我们可以通过系统调用和硬件中断来完成用户空间到内核空间的转移

3.       Linux内核结构(广义内核)

Linux内核由七个部分构成,具体如下图:

a)        系统调用接口(SCI):open、read、write等系统调用

b)        进程管理(PM):创建进程、删除进程、调度进程等

c)        内存管理(MM):内存分配、管理等

d)        虚拟文件系统(VFS):为多种文件系统提供统一的操作接口

e)        网络协议栈:提供各种网络协议

f)         CPU架构相关代码(Arch):为的是提高至移植性

g)        设备驱动程序(DD):各种设备驱动,占到内核的70%左右代码

Linux内核源码简介

1.       源码获取

Linux内核获取有两种方法,一种是在www.kernel.org 直接获取,另一种是使用git获取(具体方法参考网络)。

2.       源码目录简介

其源码主要有以下目录(介绍重要目录):

a)        Arch目录:存放处理器相关的代码。下设子目录,分别对应具体的CPU,每个子目录有boot,mm,以及kernel三个子目录,分别对应系统引导以及存储管理,和系统调用

b)        Include目录:内核所需要的大部分头文件目录。与平台无关的在include/linux子目录下,与平台相关的则放在include相应的子目录中。

c)        fs目录:存放各种文件系统的实现代码。

d)        init目录:init子目录包含核心的初始化代码(不是系统的引导代码)。其包含两个文件main.c和version.c,可以用来研究核心如何工作。

e)        ipc目录:包含核心进程间的通信代码。

f)         kernel目录:包含内核管理的核心代码。与硬件相关代码放在arch/*/kernel目录下。

g)        mm目录:包含了所有的内存管理代码。与硬件相关的内存管理代码位于arch/*/mm目录下。

h)        scripts目录:包含用于配置核心的脚本文件。

i)          lib目录:包含了核心的库代码,与硬件相关的库代码被放在arch/*/lib/目录下

Linux内核配置、编译、安装

1.       X86配置

Linux内核的编译有两种方法,具体如下:

a)        交互式:在内核顶层的目录下运行make config,按照提示一步一步的按照自己的需求对内核进行配置。

b)        菜单式:在内核顶层的目录下运行make menuconfig,菜单式的按照自己的需求对内核进行配置。

2.       X86编译

Linux内核的编译要经过以下步骤,具体如下:

1.        内核编译:linux内核的编译有以下两种方法。

make zImage编译出的内核小于512k(老版本内核)

make bzImage通用编译命令

注:在以上两个命令中加V=1可查看编译过程中的详细信息

2.        内核模块编译:执行make modules编译内核模块。

3.        内核模块安装:执行make modules_install将编译好的内核模块复制到当前系统的/lib/modules下的**目录下。

4.        内核模块打包:执行mkinitrd initrd-$version $version对内核模块进行打包,其中initrd-$version表示要打包为的文件的名字,$version表示要打包的目录即我们上一步生成的目录。

3.       X86安装

Linux内核的安装要经过以下步骤,具体如下:

a)        拷贝内核:复制1编译出来的内核映像到启动目录cp arch/$cpu/boot/bzImage(1编译出来的bzimage)/boot/vmlinuz-$version

b)        拷贝内核模块文件:执行cp initrd-$version(4生成的文件) /boot/ 将4生成的文件拷贝到boot下

c)        修改启动配置文件:修改/etc/grub.conf文件

Linux内核分析(一)---linux体系简介|内核源码简介|内核配置编译安装的更多相关文章

  1. linux内核分析第二周-完成一个简单的时间片轮转多道程序内核代码

    中断时计算机运行的一个非常重要的功能.之所以重要,是因为由于种种原因,计算机不能将一个程序从头执行到尾不间断,而是可能会出现很多像等待输入设备输出设备的过程,如果没有中断系统,CPU只能等待,造成资源 ...

  2. 【嵌入式开发】 Linux Kernel 下载 配置 编译 安装 及 驱动简介

    作者 : 韩曙亮 转载请出名出处 : http://blog.csdn.net/shulianghan/article/details/38636827 一. Linux 内核简介 1. 内核功能简介 ...

  3. 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 百篇博客分析OpenHarmony源码 | v18.04

    百篇博客系列篇.本篇为: v18.xx 鸿蒙内核源码分析(源码结构篇) | 内核每个文件的含义 | 51.c.h .o 前因后果相关篇为: v08.xx 鸿蒙内核源码分析(总目录) | 百万汉字注解 ...

  4. 【转】编译Android系统源码和内核源码

    原文网址:http://blog.csdn.net/jiangwei0910410003/article/details/37988637 好长时间没有写blog了,之所以没有写,主要还是工作上的事, ...

  5. FW 编译Android系统源码和内核源码

    编译Android系统源码和内核源码 分类: Android2014-07-21 20:58 7287人阅读 评论(28) 收藏 举报 好长时间没有写blog了,之所以没有写,主要还是工作上的事,发现 ...

  6. 编译Android系统源码和内核源码

    [日期:2016-01-11] 来源:Linux社区  作者:jiangwei [字体:大 中 小]     把我之前编译Android系统源码和内核源码的过程记录一下,因为这个过程真的是受益匪浅,看 ...

  7. Android源码、内核编译

    Android源码和内核的编译就是一场马拉松,每一个节点都耗时漫长,下载源码.编译源码.下载内核.编译内核,下载中途会断掉,编译中间会失败,求解再重来,又是一轮马拉松,于是每一步都要做好备份和记录,可 ...

  8. linux设备驱动程序-i2c(0)-i2c设备驱动源码实现

    (基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程.匹配过程.以及设备驱动程序源码实现. 在介绍linu ...

  9. centos6.5源码升级内核

    centos6.5源码升级内核 升级前 系统版本:  CentOS5.5 内核版本:  2.6.18-194.el5 升级前做过简单配置文件修改 yum -y upgrade    升级后 系统版本: ...

随机推荐

  1. Oracle SQL Lesson (9) - 操作数据(增删改)

    使用INSERT语句INSERT INTO table [(column [, column...])]VALUES (value [, value...]); INSERT INTO departm ...

  2. Prototype Pattern 原型模式

    7.6 原型模式总结 原型模式作为一种快速创建大量相同或相似对象的方式,在软件开发中应用较为广泛,很多软件提供的复制(Ctrl + C)和粘贴(Ctrl + V)操作就是原型模式的典型应用,下面对该模 ...

  3. Java执行批处理.bat文件(有问题???求高手帮忙解答!!!)

                           Java执行批处理.bat文件(有问题???求高手帮忙解答!!!) 在项目开发中常常都会遇到需要在代码中调用批处理bat脚本,把自己在项目中遇到过的总结下 ...

  4. C++习题 对象转换

    [Submit][Status][Web Board] Description 定义一个Teacher(教师)类(教师号,姓名,性别,薪金)和一个Student(学生)类(学号,姓名,性别,成绩),二 ...

  5. WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示

    原文:WPF/Silverlight中图形的平移,缩放,旋转,倾斜变换演示 为方便描述, 这里仅以正方形来做演示, 其他图形从略. 运行时效果图:XAML代码:// Transform.XAML< ...

  6. 使用crontab创建 linux 系统定时任务#

    任务1: 每隔1分钟,运行一次 /home/sn/yeelink.sh文件 ,用于上传数据到www.yeelink.net 1. 先在当时目录里面创建一个cronfile文件 vim cronfile ...

  7. 用golang写的 分解x86 intel boot/recovery工具

    源代码地址: https://github.com/sndnvaps/pack-unpack-intel

  8. 重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表

    原文:重新想象 Windows 8 Store Apps (23) - 文件系统: 文本的读写, 二进制的读写, 流的读写, 最近访问列表和未来访问列表 [源码下载] 重新想象 Windows 8 S ...

  9. ASP.NET执行循序

    首先第一次运行一个应用程序(WebSite或者WebApplication都是Web应用程序)第一次请求 -> 1,IIS -> 2,aspnet_isapi(非托管dll) -> ...

  10. 手动安装英特尔® 凌动™ Android* x86 模拟器映像

    android的模拟器实在是太慢了,慢的让人欲仙欲死,欲罢不能.猛然发现我的电脑是intel的CPU,我勒个去,换x86模拟器.然后悲剧了,伟大的gfw 我要装sdk,我要研究android开发,到底 ...