linux内核 订阅
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 [1]  Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。 展开全文
Linux是一种开源电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。 [1]  Linux最早是由芬兰 Linus Torvalds为尝试在英特尔x86架构上提供自由的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。
信息
软件授权
免费
软件名称
Linux内核
发明者
Linus Torvalds
使用时间
1991年
软件语言
C语言
Linux内核内核结构
操作系统是一个用来和硬件打交道并为用户程序提供一个有限服务集的低级支撑软件。一个计算机系统是一个硬件和软件的共生体,它们互相依赖,不可分割。计算机的硬件,含有外围设备、处理器、内存、硬盘和其他的电子设备组成计算机的发动机。但是没有软件来操作和控制它,自身是不能工作的。完成这个控制工作的软件就称为操作系统,在Linux的术语中被称为“内核”,也可以称为“核心”。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。Linux内核使用三种不同的版本编号方式。  第一种方式用于1.0版本之前(包括1.0)。第一个版本是0.01,紧接着是0.02、0.03、0.10、0.11、0.12、0.95、0.96、0.97、0.98、0.99和之后的1.0。第二种方式用于1.0之后到2.6,数字由三部分“A.B.C”,A代表主版本号,B代表次主版本号,C代表较小的末版本号。只有在内核发生很大变化时(历史上只发生过两次,1994年的1.0,1996年的2.0),A才变化。可以通过数字B来判断Linux是否稳定,偶数的B代表稳定版,奇数的B代表开发版。C代表一些bug修复,安全更新,新特性和驱动的次数。以版本2.4.0为例,2代表主版本号,4代表次版本号,0代表改动较小的末版本号。在版本号中,序号的第二位为偶数的版本表明这是一个可以使用的稳定版本,如2.2.5,而序号的第二位为奇数的版本一般有一些新的东西加入,是个不一定很稳定的测试版本,如2.3.1。这样稳定版本来源于上一个测试版升级版本号,而一个稳定版本发展到完全成熟后就不再发展。第三种方式从2004年2.6.0版本开始,使用一种“time-based”的方式。3.0版本之前,是一种“A.B.C.D”的格式。七年里,前两个数字A.B即“2.6”保持不变,C随着新版本的发布而增加,D代表一些bug修复,安全更新,添加新特性和驱动的次数。3.0版本之后是“A.B.C”格式,B随着新版本的发布而增加,C代表一些bug修复,安全更新,新特性和驱动的次数。第三种方式中不再使用偶数代表稳定版,奇数代表开发版这样的命名方式。举个例子:3.7.0代表的不是开发版,而是稳定版!Linux最早是由芬兰人Linus Torvalds设计的。当时由于UNⅨ的 商业化,Andrew Tannebaum教授开发了Minix操作系统以便于不受AT&T许可协议的约束,为教学科研提供一个操作系统。当时发布在Internet上,免费给全世界的学生使用。Minix具有较多UNⅨ的特点,但与UNⅨ不完全兼容。1991年10月5日,Linus为了给Minix用户设计一个比较有效的UNⅨ PC版本,自己动手写了一个“类Minix”的操作系统。整个故事从两个在终端上打印AAAA...和BBBB...的进程开始的,当时最初的内核版本是0.02。Linus Torvalds将它发到了Minix新闻组,很快就得到了反应。Linus Torvalds在这种简单的任务切换机制上进行扩展,并在很多热心支持者的帮助下开发和推出了Linux的第一个稳定的工作版本。1991年11月,Linux0.10版本推出,0.11版本随后在1991年12月推出,当时将它发布在Internet上,免费供人们使用。当Linux非常接近于一种可靠的/稳定的系统时,Linus决定将0.13版本称为0.95版本。1994年3月,正式的Linux 1.0出现了,这差不多是一种正式的独立宣言。截至那时为止,它的用户基数已经发展得很大,而且Linux的核心开发队伍也建立起来了。在讨论大型而复杂的系统的体系结构时,可以从很多角度来审视系统。体系结构分析的一个目标是提供一种方法更好地理解源代码。Linux 内核实现了很多重要的体系结构属性。在或高或低的层次上,内核被划分为多个子系统。Linux 也可以看作是一个整体,因为它会将所有这些基本服务都集成到内核中。这与微内核的体系结构不同,后者会提供一些基本的服务,例如通信、I/O、内存和进程管理,更具体的服务都是插入到微内核层中的。随着时间的流逝,Linux 内核在内存和 CPU 使用方面具有较高的效率,并且非常稳定。但是对于 Linux 来说,最为有趣的是在这种大小和复杂性的前提下,依然具有良好的可移植性。Linux 编译后可在大量处理器和具有不同体系结构约束和需求的平台上运行。一个例子是 Linux 可以在一个具有内存管理单元(MMU)的处理器上运行,也可以在那些不提供MMU的处理器上运行。Linux 内核的uClinux移植提供了对非 MMU 的支持。核心的开发和规范一直是由Linux社区控制着,版本也是唯一的。实际上,操作系统的内核版本指的是在Linus本人领导下的开发小组开发出的系统内核的版本号。自1994年3月14日发布了第一个正式版本Linux 1.0以来,每隔一段时间就有新的版本或其修订版公布。Linux将标准的GNU许可协议改称Copyleft,以便与Copyright相对照。通用的公共许可(GPL)允许用户销售、拷贝和改变具有Copyleft的应用程序。当然这些程序也可以是Copyright的,但是你必须允许进一步的销售、拷贝和对其代码进行改变,同时也必须使他人可以免费得到修改后的源代码。事实证明,GPL对于Linux的成功起到了极大的作用。它启动了一个十分繁荣的商用Linux阶段,还为编程人员提供了一种凝聚力,诱使大家加入这个充满了慈善精神的Linux运动。
收起全文
精华内容
下载资源
问答
  • 鉴于此,《Linux内核精髓:精通Linux内核必会的75个绝技》选取了资源管理(CPU、内存、进程等)、文件系统、网络、虚拟化、省电、调试、概要分析、追踪、内核调整等Linux内核的核心主题进行了深入剖析和讲解,总结出...
  • Linux内核

    千次阅读 2009-01-07 17:30:00
    Linux内核一、Linux内核Linux内核的源码树已经有超过20000个文件,超过600万行代码。这还是几年前的数据。需要工具、根文件系统、Linux应用程序共同建立一个可用的系统。1、内核版本当前的Linux内核版本为2.6.28。...
    Linux内核


    一、Linux内核
    Linux内核的源码树已经有超过20000个文件,超过600万行代码。这还是几年前的数据。
    需要工具、根文件系统、Linux应用程序共同建立一个可用的系统。

    1、内核版本
    当前的Linux内核版本为2.6.28。版本命名规则如下:
    VERSION = 2
    PATCHLEVEL = 6
    SUBLEVEL = 28
    EXTRAVERSION = 
    NAME = 
    内核包含的文件:/include/linux/version.h

    2、内核结构
    Linux内核的布局、组织和结构
    (1) 顶层源目录
    顶层内核源目录包含下列子目录:
    arch crypto Documentation drivers fs include init ipc kernel
    lib mm net scripts security sound usr
    这些子目录又包含几级带源码、makefiles和配置文件的子目录。至今为止,Linux内核源码树的最大分支为drivers子目录。drivers子目录包含Linux内核所支持的以太网卡、USB控制器、大量的硬件设备。
    arch子目录是第二大分支,包含了对超过20种的处理器架构的支持。

    顶层目录还包括顶层makefile、隐藏的配置文件、各种信息文件。
    顶层内核源码树还包括两个重要的build target:System.map和vmlinux。

    (2) 编译内核
    Linux内核太大,分析内核是一项令人沮丧的任务。多线程、优先级(preemption)增加了分析的复杂度。实际上,即使是定位入口点,也是一项挑战。理解二进制映像的有效方法是检查其构建组件。

    内核建立系统的输出产生几个普通文件(common files)以及特定架构的二进制模块。
    普通文件与架构无关。System.map和vmlinux是其中的两个普通文件。

    System.map在内核调试期间有用,它包含了易读的内核符号和各自的地址列表。
    vmlinux是特定架构的可执行格式的ELF文件。它由每个架构的顶层内核makefile产生。

    如果内核被编译,且带符号调试信息,那么内核会包含vmlinux映像。
    尽管它是可执行的ELF文件,它还是不会直接引导。

    以ARM XScale架构的Indel IXP425网络处理器为例,使用如下命令:
    make ARCH=arm CROSS_COMPILE=xscale_be- ixp4xx_defconfig
    此命令不建立内核,为XScale架构准备源码树,包括此架构和处理器的初始缺省配置。
    CROSS_COMPILE=xscale_be- 让make强制使用XScale toolchain建立内核映像
    ARCH=arm 让make强制使用内核源码树的arm分支

    (3) 正确的内核——vmlinux
    LD /arch/arm/boot/compressed/vmlinux
    vmlinux文件是实际的正确内核。它是一个完全独立的、巨大的单个映像。在vmlinux二进制文件中,没有未解决的外部引用存在。

    (4) 内核映像组件
    vmlinux映像由几个二进制映像组合而成。
    vmlinux映像组件的描述
    ------------------------------------------
    组件 描述
    ------------------------------------------
    arch/arm/kernel/head.o 指定的内核架构启动代码
    init_task.o 内核所需的初始化线程和任务
    init/built-in.o 主要的内核初始化代码
    usr/built-in.o 内建的initramfs映像
    arch/arm/kernel/built-in.o 指定架构的内核代码
    arch/arm/mm/built-in.o 指定架构的内存管理代码
    arch/arm/common/built-in.o 指定架构的类属(generic)代码
    arch/arm/mach-ixp4xx/built-in.o 指定机器的代码,通常是初始化
    arch/arm/nwfpe/built-in.o 指定架构的浮点仿真代码
    kernel/built-in.o 内核自身的通用组件
    mm/built-in.o 内存管理的通用组件代码
    ipc/built-in.o 进程间通信,例如SysV IPC
    security/built-in.o Linux安全组件
    lib/lib.a 各种帮助函数文档
    arch/arm/lib/lib.a 指定架构的通用工具,随架构而变
    lib/built-in.o 通用内核帮助函数
    drivers/built-in.o 所有内建驱动器可载入模块
    sound/built-in.o 声音驱动器
    net/built-in.o Linux网络
    .tmp_kallsyms2.o 符号表
    ------------------------------------------

    很少直接启动内核映像,内核映像一般是被压缩了的,bootloader负责解压映像。
    Makefile和Kconfig文件驱使内核配置和建立过程。

    二、内核建立系统
    Linux内核配置和建立系统相当复杂。使用Kbuild来建立内核系统。
    Linux 2.6内核使用Kbuild来编译内核模块。

    Kbuild能够编译内核树目录内的内核模块,也能够编译内核树目录外的内核模块。
    Kbuild文件倾向于"Makefile"这个名字,"Kbuild"也是可以用的。但如果"Makefile"和"Kbuild"同时出现的话,使用的将会是"Kbuild"文件。

    1、Dot-config文件
    Dot-config文件是用于建立Linux内核映像的配置“蓝图”。可编辑配置文件,命名为.config,定位在顶层源目录,驱使内核的建立。

    make mrproper 命令会删除配置文件,且无任何提示。因为其目标是返回内核源码树为纯洁的、无配置的状态。它包括从源码树移除所有配置数据,即删除你的.config。
    Linux的“.”+扩展名的文件是Linux的隐藏文件。

    Linux 2.6 的.config 文件片段
    ------------------------------
    ...
    # USB support
    #
    CONFIG_USB=m
    # CONFIG_USB_DEBUG is not set


    # Miscellaneous USB options
    #
    CONFIG_USB_DEVICEFS=y
    # CONFIG_USB_BANDWIDTH is not set
    # CONFIG_USB_DYNAMIC_MINORS is not set

    # USB Host Controller Drivers
    #
    CONFIG_USB_EHCI_HCD=m
    # CONFIG_USB_EHCI_SPLIT_ISO is not set
    # CONFIG_USB_EHCI_ROOT_HUB_TT is not set
    CONFIG_USB_OHCI_HCD=m
    CONFIG_USB_UHCI_HCD=m
    ...
    ------------------------------
    要理解.config文件,需要理解Linux内核的基本面。

    Linux有庞大的结构,整个内核作为一单个静态链接可执行而编译。然而,还可能编译和“增量链接”源集到单个对象模块,动态插入到正在运行的内核。
    一般的设备驱动经常采用此方法。在Linux中,这称为可载入模块,也称为设备驱动器。内核引导后,调用指定的应用程序,插入可载入的模块进正在运行的内核。

    2、配置编辑器
    早期的内核使用一个简单的命令行驱动脚本来配置内核——> 很笨拙
    内核配置子系统使用了几个图形化的前端。新的Linux内核版本包括了10个配置目标。
    概述如下,可从make help看到:
      -config 使用命令行程序更新当前配置
      -menuconfig 使用基于菜单的程序更新当前配置
      -xconfig 使用基于Qt的前端更新当前配置
      -gconfig 使用基于GTK的前端更新当前配置
      -oldconfig 以提供的.config更新当前配置
      -randconfig 用随机回答所有选项的新配置
      -defconfig 使用所有缺省选项的新配置
      -allmodconfig 选择模块的新配置
      -allyesconfig 所有选项均回答yes的新配置
      -allnoconfig 所有选项均回答no的新配置

    使用make gconfig可显示GTK图形的配置编辑窗口。

    大多数内核软件模块也要读.config配置文件。在建立过程期间,.config文件被放入一个C头文件,位于/include/linux目录下,名为:autoconf.h。
    Linux的autoconf.h文件片段:
    ------------------------------
    /*
     * USB support
     */
    #define CONFIG_USB_MODULE 1
    #undef CONFIG_USB_DEBUG

    /*
     * Miscellaneous USB options
     */
    #define CONFIG_USB_DEVICEFS 1
    #undef CONFIG_USB_BANDWIDTH
    #undef CONFIG_USB_DYNAMIC_MINORS

    /*
     * USB Host Controller Drivers
     */
    #define CONFIG_USB_EHCI_HCD_MODULE 1
    #undef CONFIG_USB_EHCI_SPLIT_ISO
    #undef CONFIG_USB_EHCI_ROOT_HUB_TT
    #define CONFIG_USB_OHCI_HCD_MODULE 1
    #define CONFIG_USB_UHCI_HCD_MODULE 1
    ------------------------------


    展开全文
  • linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析linux内核完全剖析
  • Linux内核学习路线 学习linux内核的建议

    千次阅读 多人点赞 2019-03-04 15:17:11
    学习linux内核是需要一步一步循序渐进,掌握正确的linux内核学习路线对学习至关重要,本篇文章就来分享学习linux内核的一些建议吧。 1. 了解操作系统基本概念。如果不会,可以学习《操作系统:设计与实现》Andrew S...

    学习linux内核,这个可不像学一门语言,c或者java一个月或者3月你就能精通掌握。学习linux内核是需要一步一步循序渐进,掌握正确的linux内核学习路线对学习至关重要,本篇文章就来分享学习linux内核的一些建议吧。

    1. 了解操作系统基本概念。如果不会,可以学习《操作系统:设计与实现》Andrew S.Tanenbaum 写的那本。以MINIX为例子讲解操作系统的概念。非常推荐。

    2. 有了操作系统的基本概念以后,可以了解Linux的机制了。推荐《Linux内核设计与实现》Robert Love 写的。这本书从概念上讲解了Linux有什么,他们是怎么运行的。这本书要反复认真看透。

    3. 有了Linux内核的了解,还需要具体研究Linux内核源码。经典的就是《深入理解Linux内核》Daniel P. Bovet 写的。学习这本书的时候,要对着内核代码看着学。这本书学起来相当费力了,那么多多代码要研究。不过这本书如果学明白了,恭喜你,Linux内核你已经很熟悉了。

    4. 如果要开发设备驱动,可以学习《linux设备驱动程序》O'Reilly出版社的。这本作为驱动的入门是很好的资料。另外还有一本《精通Linux 驱动程序开发》也是不错的教材,可以参考着看。学习驱动,免不了要学习一些硬件的协议和资料,研究哪个就找到相应的硬件文档,把硬件的工作原理搞明白。这些就不细说了。

    5. 网络部分,学些Linux网络部分就学习《深入理解LINUX网络技术内幕》。这本书把Linux的网络部分讲的非常清晰透彻。但是通常不做这方面的工作研究,也不用研究这么深,毕竟现在相关职位较少。

    6. 现在Linux相关的工作,多集中在一些嵌入式开发领域,arm,mips等,要学习以下这些体系架构的的资料,了解CPU的设计和工作方式。ARM就看对应的芯片手册,讲的很细致。MIPS就看 《see mips run》,有一二两版,两版内容有些差异,推荐都看。

    7. 补充一点经验。不要认为Linux很庞大,很复杂,就觉的很难学。任何东西认真学下来都是能学会的,看你都恒心和毅力了。另外,不要走弯路,不要看市面上讲什么Linux0.11的那些书,直接学你要学的东西。就像学C语言看什么谭浩强一样,弯路走了,力气没少花,还严重影响学习效果。

    关于linux内核学习路线,再多说几句应用编程,有时候经常会需要的:

    1. 学习Linux应用编程,建议看《unix环境高级编程》,把里面的例子都做一遍,会对整个Linux编程有系统都认识。

    2. 针对Linux,有本 《Linux系统编程》,学完上一本,这本很快看一遍就懂了。主要是针对Linux具体懂一些内容,讲的挺全了,很实用。

    3. Linux网络编程,系统的学习一下《unix网络编程.卷1,套接字联网api》,基本上网络应用相关的程序就都没问题了。

    这些内容,分几年时间,分步计划学习,就会成为Linux高手了

    展开全文
  • Linux内核设计与实现_第三版_中文版

    千次下载 热门讨论 2013-08-28 15:35:22
    Linux内核设计与实现》第三版,中文版。基于Linux 2.6.34内核,本书详细介绍了Linux内核系统,覆盖了从核心内核系统的应用到内核设计与实现等各方面内容。
  • Linux内核编译流程(Menuconfig图形化方式)Menuconfig配置内核原理:在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析...

    更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦:
    在这里插入图片描述



    详解Linux内核编译配置(menuconfig)、文件系统制作

    • Linux内核配置原理
    • Menuconfig主要功能选项介绍
    • 编译配置内核步骤
    • 制作文件系统步骤
    • 文件系统和根文件系统区别联系

    一、Linux内核配置原理

    Linux内核的配置系统由三个部分组成,

    分别是:
    1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;
    2、配置文件(config.in):给用户提供配置选择的功能;
    3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。

    Linux 内核的编译菜单有3中方法:

    1)make config:进入命令行,可以一行一行的配置,这不方便使用,但用命令执行一遍会对编译过程有更深了解,这里不具体介绍。
    2)make menuconfig:进入我们熟悉的 menuconfig 菜单,图形化界面选择配置
    3)make xconfig:在2.4.X 以及以前版本中 xconfig 菜单是基于 TCL/TK 的图形库的,没有接触过。。貌似淘汰了。

    Menuconfig配置内核原理:

    在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析Kconfig。
      通常会在Kconfig里面编写以下四项:
      1、模块的名字,用module开头;
      2、选项,通常设为bool(二选一)或者trastate(三选一);
      3、默认选项;
      4、帮助说明。
    关于KConfig 详细介绍可参考 http://blog.sina.com.cn/s/blog_4ba5b45e0102e6vp.html


    二、Menuconfig主要功能选项介绍:

    在源码目录键入# make menuconfig ARCH=arm 后出现下面Menu:(Menuconfig主界面)
    这里写图片描述

    其中General setup 中重要的选项包括:

    • Cross-compiler tool prefix 交叉编译工具前缀(如arm-linux-);
    • Local version - append to kernel release 内核显示的版本信息;
    • System V IPC 表示系统的进程间通信Inter Process
    • Communication,它用于处理器在程序之间同步和交换信息
    • Enable eventpoll support:支持事件轮循的系统调用。

    2、Enable loadable module support 重要的选项包括:(内核模块配置)

    • Module unloading 允许卸载已经加载的模块
    • Module versioning support 允许使用其他内核版本的模块(可能会出问题)
    • Source checksum for all modules 为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能。

    3、Enable the block layer 块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备可以从内核移除。。重要的选项包括:

    • Support for large (2TB+) block devices and files 仅在使用大于2TB的块设备时需要
    • Block layer bio throttling support 可用于限制设备的IO速度
    • IO Schedulers IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必须的东西。这里提供了三个IO调度器。

    4、Processor type and features (处理器类型及特点)

    • Symmetric multi-processing support 对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上
    • Processor family (Pentium-Pro)处理器系列, 请按照实际使用的CPU选择,这里是处理器的类型
    • Generic x86 support 这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,
    • Multi-core scheduler support 针对多核CPU进行调度策略优化多核调度机制支持,双核的CPU要选

    5、 Power management and ACPI options (电源管理相关)
    6、Bus options(PCI 、ISA 等总线的支持和配置.)
    7、Executable file formats / Emulations (没用过,不大了解)
    8、Networking support (网络配置,重要)

    • Networking options 网络协议和网络包参数配置(其中TCP/IP相关协议必须打开)
    • Wireless 使用无线网卡支持
      RF switch subsystem support RF 切换设备

    9、Device Drivers (设备驱动)

    • Generic Driver Options
    • Block devices 想要支持的块设备,比如ramdisk , 磁盘阵列,CD/DVD 刻录等
    • Misc devices 需要支持的杂项设备
    • SCSI device support SCSI 设备驱动
    • Serial ATA and Parallel ATA drivers SATA 设备驱动
    • IEEE 1394 (FireWire) support
    • Network device support 如Ethernet (1000 Mbit) 选择自己对应的硬件
    • Character devices 字符设备,一般自己写的传感器类驱动都是字符型,需要在里面配置,包括串口TTY等。
    • SPI/I2C support
    • Sound card support 声卡

    10、Firmware Drivers (BIOS相关,部分系统管理工具可能会用到 )
    11、File systems (文件系统支持,重要!)

    • The Extended 4 (ext4) filesystem
    • Ext4 Security Labels <=== 取消 SELinux 支持
    • XFS filesystem support
    • ISO 9660 CDROM file system support
    • NTFS file system support

    12、Kernel hacking (内核调试相关,木有用过)
    13、Security options (安全相关选项)

    • Cryptographic API —> // 加密API ,这部分选项会根据此前的优化自动调整

    三、编译配置内核步骤

    以Linux3.5内核版本为例,先解压linux-3.5源码,
    然后cd到目录中输入:

    make menuconfig ARCH=arm

    这里写图片描述

    根据硬件选择处理器选型(配置):

    这里写图片描述
    网络协议配置(可根据软硬件需求对其进行裁剪):

    这里写图片描述

    这里写图片描述

    设备驱动:图是网卡驱动
    这里写图片描述
    根据自己的芯片选择相应的网卡驱动
    这里写图片描述

    文件系统选择:比如系统想使用ex4文件系统 就空格勾选上
    这里写图片描述
    图中取值方式:<>为不选择, <*> 则压缩到内核映像zImage放到内存中运行,< M>为编译成moudule内核模块,存放在ROM中,使用时由zImage调用动态加载到内存

    在makemenuconfig里面选中的 都会在.config文件中查询到:(相关Cofig配置成y,则编译内核代码时会将此相关代码编译,此时为静态编译)

    这里写图片描述

    选择好后就make进行编译内核,编译完成会在arch/arm/boot目录下生成zImage,这就是内核映像文件,直接可以烧进板子(SD卡或者USB)


    四、文件系统制作步骤

    首先安装工具包linux_tools.tgz

    tar xvzf linux_tools.tgz -C /

    然后生成文件系统镜像文件(qtopia_qt4.img)

    make_ext4fs -s -l 314572800 -a root -L linux rootfs_qtopia_qt4.img rootfs_qtopia_qt4

    执行make_ext4fs命令之后即会将rootfs_qtopia_qt4文件打包成 rootfs_qtopia_qt4.img 文件系统镜像。

    • l314572800“是分区大小 -s就是生成ext4的S模式制作;
    • 314572800/1024/1024 = 300M
    • -a root 是指这个img用于Linux系统(若为-a system即表示为android系统,挂载点即是/system。
    • ./rootfs_qtopia_qt4.img 表示在当前目录下生成镜像文件。
    • ./rootfs_qtopia_qt4 指定根文件系统源路径

    可以把自己写的应用程序放到rootfs_qtopia_qt4这个里面,然后打包成ext4文件系统镜像文件,这样应用程序就在固定在系统里,不用再二次安装了。

    重点解释下:make_ext4fs 命令用来制作ext4文件系统的镜像,首先要把工具包解压到usr/bin 。使用方法参考:

    make_ext4fs -s -l 512M -a system system_new.img system

    512M表分区大小 第一个system表示挂载点为/system, 第二个system表示system目录。
    新生成的system_new.img就可以用来烧写了。


    五、文件系统和根文件系统区别联系

    很多人分不清文件系统根文件系统的区别和联系:

    个人理解,所谓**根文件系统(Root Filesytem)**就是要包括linux启动时所必须的目录和关键性的文件、命令,所组成整个文件目录结构,即为根文件系统。
    例如linux启动时所需要的init文件 linuxrc 挂载分区时linux去找的/etc/fstab 这个挂载文件等,根文件系统还包括许多应用程序bin、sbin目录等。
    根文件系统可以用busybox直接生成

    所谓文件系统(File System):指的是用来方便管理文件存储和数据组织的一种方法。常见的linux文件系统:NFS 网络根文件系统、YAFFS2针对nandflash, EXT3,EXT4 等。还有如大家熟悉的Windows下FAT、FAT32、NTFS系统等
    文件系统需要根据系统类型和硬件支持,使用打包工具(如Make_ext4)生成


    博主热门文章推荐:

    一篇读懂系列:

    LoRa Mesh系列:

    网络安全系列:

    嵌入式开发系列:

    AI / 机器学习系列:


    在这里插入图片描述

    展开全文
  • Linux内核简介

    万次阅读 多人点赞 2018-06-16 18:56:29
    大纲:理解Linux内核最好预备的知识点Linux内核的特点Linux内核的任务内核的组成部分哪些地方用到了内核机制?Linux进程 Linux创建新进程的机制Linux线程 内核线程地址空间与特权级别 虚拟地址与物理地址 特权级别...

    大纲:

    理解Linux内核最好预备的知识点
    Linux内核的特点
    Linux内核的任务
    内核的组成部分
    哪些地方用到了内核机制?
    Linux进程
    Linux创建新进程的机制
    Linux线程
    内核线程
    地址空间与特权级别
            虚拟地址与物理地址
            特权级别(Linux的两种状态)
            系统调用
    设备驱动程序、块设备和字符设备
    网络
    文件系统

    模块和热插拔

    注:本文为《深入Linux内核架构》 的学习笔记


    理解Linux内核最好预备的知识点:

    • 懂C语言
    • 懂一点操作系统的知识
    • 熟悉少量相关算法
    • 懂计算机体系结构


    Linux内核的特点:

    结合了unix操作系统的一些基础概念


    Linux内核的任务:

    1.从技术层面讲,内核是硬件与软件之间的一个中间层。作用是将应用层序的请求传递给硬件,并充当底层驱动程序,对系统中的各种设备和组件进行寻址。
    2.从应用程序的层面讲,应用程序与硬件没有联系,只与内核有联系,内核是应用程序知道的层次中的最底层。在实际工作中内核抽象了相关细节。
    3.内核是一个资源管理程序。负责将可用的共享资源(CPU时间、磁盘空间、网络连接等)分配得到各个系统进程。

    4.内核就像一个库,提供了一组面向系统的命令。系统调用对于应用程序来说,就像调用普通函数一样。


    内核实现策略:

    1.微内核。最基本的功能由中央内核(微内核)实现。所有其他的功能都委托给一些独立进程,这些进程通过明确定义的通信接口与中心内核通信。

    2.宏内核。内核的所有代码,包括子系统(如内存管理、文件管理、设备驱动程序)都打包到一个文件中。内核中的每一个函数都可以访问到内核中所有其他部分。目前支持模块的动态装卸(裁剪)。Linux内核就是基于这个策略实现的。


    内核的组成部分:

    1.用户空间(在“地址空间与特权级别”小节会详细介绍):
    应用程序:
    C库


    2.内核空间(在“地址空间与特权级别”小节会详细介绍):
    核心内核
    设备驱动程序

    硬件

    详细可参考图1


    图1 Linux内核组成部分


    哪些地方用到了内核机制?

    1.进程(在cpu的虚拟内存中分配地址空间,各个进程的地址空间完全独立;同时执行的进程数最多不超过cpu数目)之间进行通   信,需要使用特定的内核机制。
    2.进程间切换(同时执行的进程数最多不超过cpu数目),也需要用到内核机制。
        进程切换也需要像FreeRTOS任务切换一样保存状态,并将进程置于闲置状态/恢复状态。

    3.进程的调度。确认哪个进程运行多长的时间。


    Linux进程

    1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接起源于该进程。
    2.通过pstree命令查询。实际上得系统第一个进程是systemd,而不是init(这也是疑问点)

    3.系统中每一个进程都有一个唯一标识符(ID),用户(或其他进程)可以使用ID来访问进程。

    • Linux创建新进程的机制;
            1.使用fork函数。
    功能:创建当前进程的一个副本。父进程和子进程只有PID(进程ID)不同。父进程的内容被复制。(写时复制:可以了解下这个概念)


            2.使用exec函数。

    功能:将一个新程序加载到当前进程的内存中并执行。旧程序的内存页将刷出,其内容替换为新的数据。然后开始执行新程序。


    Linux线程

    进程可以看成是一个正在执行的程序,而线程则是与主程序并行运行的程序函数或例程。

    • Linux创建新线程 

            采用clone方法创建线程。

    • 内核线程
            特点:
    1.不与任何特定的用户空间进程相关联。
    2.与中断上下文运转的内核相比,内核线程可以进入睡眠状态,也可以像系统中的普通进程一样被调度器跟踪。

    用途:
    1.从内存和块设备之间的数据同步。
    2.帮助调度器在CPU上分配进程。

    如何查看内核线程:
    命令:ps fax   方括号内的就是内核线程。


    地址空间与特权级别

    在正式介绍之前先介绍几个单位:

    KiB  2^10字节
    MiB  2^20

    GiB  2^30

    • 地址空间

        虚拟地址与物理地址:

            虚拟地址:在计算机的专用术语中是指标识一个虚拟(非物理地址)的实体地址。

            物理地址:切切实实存在的地址。在存储器里以字节为单位存储信息,为正确地存放或取得信息,每一个字节单元给以一个唯一的存储器地址,称为物理地址。

            映射关系:
                用页表为物理地址分配虚拟地址
        注意:未必虚拟地址的所有页都映射到某个页帧。
        原因:
    1.页没有内存可以使用
    2.数据尚不需要使用而没有载入内存。
    3.页已经换出硬盘,需要时再换回内存。


        页帧:物理内存页
        页:专指虚拟地址空间中的页。
        页表:将虚拟地址空间映射到物理地址空间的数据结构。
        多级分页:建立虚拟地址到物理地址映射的一种方法,能有效减少内存用量。


        CPU加速内存的访问过程,方法:
        1.MMU(Memory Management Unit)内存管理单元
        2.TLB(Translation Lookaside Buffer)地址转换后备缓冲器

        IA-32位结构的CPU只需要使用二级页表,Linux内核总是使用四级页表,剩余部分由内核通过控页表对缺少的页表进行仿真。

        概念注意:

        1.CPU的字长决定了所能管理的地址空间的最大长度。对于32位系统是2^32 B = 4GiB
        2.虚拟地址空间:地址空间的最大长度与实际可用的物理内存的数量无关。
    虚拟地址空间划分为两个部分:
    内核空间

    用户空间

                    如图2所示:


    图2 虚拟内存的划分

            有个等价名称值得一提:
    用户层:指应用程序本身。指不属于内核的东西。
    用户空间:不仅可以表示应用程序,还指代应用程序所运行的虚拟地址空间的一部分。与内核空间相对。

    注意:每一个进程都有上述独立的虚拟地址空间。对于图2所示,每个进程有4GiB的内存空间。

    • 特权级别
            Linux有两种状态,两种状态代表两种特权级别:
           核心态:在虚拟地址的内核空间运行的状态。
           用户状态:在虚拟地址的用户空间运行的状态。
        注意:在用户状态禁止访问内核空间


            这两种状态的差别在于:对高于TASK_SIZE的内存区域的访问。

    • 系统调用
            定义:从用户状态到核心态的切换通过系统调用的特定手段完成。
    方法:
    1.内核代表用户程序执行代码
    2.异步硬件中断激活,然后在中断上下文中进行。注意:在中断上下文运行时,内核不能进入睡眠状态。
            注意:

    CPU大多数在执行用户空间中的代码。当应用程序执行系统调用时,则会切换到核心态,内核将完成其请求。在此期间,内核可以访问虚拟地址空间的用户部分。在系统调用完成之后,CPU切换回用户状态。 

            硬件中断也使CPU切换到核心态,但这种情况下内核不能访问用户空间。

            系统调用有哪些:

                    进程管理
    信号
    文件
    目录和文件系统
    保护机制
    定时器函数

    如:在IA-32处理器上,Linux使用一个专用软件中断执行系统调用。

    设备驱动程序、块设备和字符设备
    设备驱动程序的任务:是在于支持应用程序经由设备文件与设备通信。换言之,使得能按恰当的方式在设备上读取/写入数据。
    设备驱动程序的定义:用于与系统连接的输入/输出装置通信。如硬盘、软驱、各种接口、声卡等。


    外设分为两类:
    1.字符设备。提供连续的数据流,数据可以顺序读取,通常不支持随机存取。支持按字节/字符来读写数据。
    典型:调制解调器
    2.块设备。可以随机访问设备数据,程序可以自行确定读取数据的位置。不支持基于字符寻址,数据读写只能以块的倍数进行。
    典型:硬盘。
    复杂性:比字符设备复杂,因为设计到缓存机制。


    网络
    网卡也可以通过设备驱动程序控制。
    但在内核中,网卡不能以设备文件访问。因为网络通信期间数据打包到各种协议层,内存处理数据必须针对协议层处理,才能有效将数据对接应用程序。
            为了支持用文件接口处理网络连接。Linux提供了套接字抽象,套接字可以看成是应用程序、文件接口、内核的网络实现之间的代理。


    文件系统
    文件存储在硬盘或者其他块设备(如光盘等),采用层次式文件系统。
    文件系统使用目录结构主治存储的数据,并将其他原信息(如所有者、访问权限等)关联起来。


    Linux支持许多不同的文件系统:
    如标准的Ext2和Ext3文件系统、ReiserFS、XFS、VFAT等

    注意:软件层(Virtual Filesystem虚拟文件系统)内核必须提供一个额外的软件层,将各种底层的文件系统的具体特征与应用层隔离开。如图3所示。


    图3 文件系统的额外软件层

    参考文献:

    [1]Wolfgang Mauerer.《深入Linux内核架构》 Wolfgang Mauerer著 郭旭译 人民邮电出版社


    展开全文
  • Linux内核编程

    热门讨论 2013-04-29 17:28:11
    内核编程 Linux内核 Linux源代码 内核编程 内核分析
  • linux 内核学习3-自己编译一个ARM Linux内核 1. 目的 编译一个ARM版本的内核镜像,谁让我是做Android的呢!并且在QEMU上运行。 2. 准备工作 2.1 开发环境 ubuntu 18.4虚拟机 linux内核版本 4.19.67 linux内核地址 ...
  • 其实Linux内核是一个庞大而复杂的操作系统的核心,学习linux内核有五大作用,下面我们来盘点linux内核五大作用。 1、管理进程:内核负责创建和销毁进程, 并处理它们与外部世界的联系(输入和输出),不同进程间通讯...
  • linux内核编译原理

    2011-08-15 11:26:29
    linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核编译2.6.39linux内核...
  • Linux内核体系结构 Linux内核模式 操作系统内核结构模式分为整体式的单内核结构和层次式的微内核结构。 Linux0.11为单内核结构,后期的Linux一如既往的是单内核结构,但是其吸收的微内核结构的优点。 单内核机构中...
  • 之前在读《APUE》的时候,更多的是从上层去了解如何使用Linux系统的API,那个时候就十分喜欢Linux的...在linux内核方面,目前打算阅读两本书,《Linux内核设计与实现》就是其中一本,另一本是《深入理解linux内核》。
  • Linux内核修炼之道》 之 高效学习Linux内核

    万次阅读 多人点赞 2010-07-15 23:10:00
    这本《Linux内核修炼之道》在卓越、当当、china-pub上也已经开卖了,虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到写上去的每段话能够让读者产生什么疑惑,...
  • linux内核编译详解

    万次阅读 多人点赞 2018-04-28 04:36:26
    前言Linux内核是Linux操作系统的核心,也是整个Linux功能体现的核心,就如同发动机在汽车中的重要性。内核主要功能包括进程管理、内存管理、文件管理、设备管理、网络管理等。Linux内核是单内核设计,但却采用了微...
  • Linux内核学习笔记(1)—— 什么是Linux内核? 1. 什么是操作系统? 操作系统是负责完成整个系统中最基本功能和系统管理,包括内核、设备驱动程序、启动引导程序、命令行shell或其它种类的用户界面、基本的文件...
  • ARM Linux内核源码剖析.pdfARM Linux内核源码剖析.pdfARM Linux内核源码剖析.pdfARM Linux内核源码剖析.pdf 完整书签
  • Linux Device Drivers,3rd Edition.chm The Linux Kernel Module Programming Guide 2.6.pdf linux-api-2.6.22.chm 深入理解linux内核.pdf linux 2.6 device model资料
  • Linux内核从原理到代码详解 链接: http://pan.baidu.com/s/1sj0Szj3 密码: ywyv 网盘失效的话,请加QQ: 3113533060 课程内容: 第一周 1. 初识Linux内核 1.1 认识操作系统 1.2 开放源代码的UNIX...
  • CentOS 7 升级 Linux 内核

    万次阅读 多人点赞 2018-02-28 16:52:37
    升级 CentOS 内核参考资料 1 ...Linux 内核分两种:官方内核(通常是内核开发人员用)和各大 Linux 发行版内核(一般用户常用)。 1.1 官方内核 在使用 Docker 时,发现其对 Linux 内核版本的最低要求...
  • Linux内核设计的艺术

    千次下载 热门讨论 2012-06-21 09:48:17
    Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理 422页完整扫描版
  • Linux内核驱动编写

    万次阅读 2020-04-04 22:40:16
    开发过单片机的小伙伴可以看下我之前的一篇文章从单片机开发到linux内核驱动,以浅显易懂的方式带你敲开Linux驱动开发的大门。 # 正文 用户空间的每个函数(用于使用设备或者文件的),在内核空间中都有一个对应的...
  • Linux内核编译

    千次阅读 2019-03-19 14:56:39
    Linux内核编译 下载Linux内核源码 Linux内核官方网站 内核编译 环境配置 sudo apt-get install libncurses5-dev openssl libssl-dev sudo apt-get install build-essential openssl sudo apt-get install ...
  • Linux内核

    千次阅读 2018-04-11 19:08:15
    Linux 内核
  • 升级Linux内核

    千次阅读 2016-01-25 12:25:33
    升级Linux内核,包括Linux内核版本的介绍、下载、编译、升级,以及Linux内核升级过程中出现的错误及其解决方法。
  • Linux内核及其发行版本

    千次阅读 2020-08-27 01:14:29
    文章目录Linux内核Linux发行版Linux发行版本发展图: Linux内核 Linux内核是操作系统内部操作和控制硬件设备的核心程序,它是由芬兰人林纳斯开发的。 内核效果图: 说明: 真正操作和控制硬件是由内核来完成的,...
  • Linux内核的整体架构简介

    万次阅读 多人点赞 2017-10-23 17:44:42
    本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统。之后,会介绍Linux内核源文件的目录结构,并和各个软件子系统对应。 注:本文和...
  • Linux内核就是基于这个策略实现的。Linux进程1.采用层次结构,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程。该进程负责进一步的系统初始化操作。init进程是进程树的根,所有的进程都直接或者间接...
  • 1.4 Linux内核和传统Unix内核的比较 由于所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行库。也就是说,Unix必须以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 806,492
精华内容 322,596
关键字:

linux内核

linux 订阅