读linux内核需要的基础知识_深入linux内核架构和深入理解linux内核先读哪本 - CSDN
  • Linux内核基础知识

    2015-11-25 17:29:46
    今天有点时间,从一个具体的驱动着手,认识看了一下linux内核基本知识: 1、Linux 下的 CONFIG_OF 选项,很多的项目中都有把这个宏打开。没有了解得很透彻,但是有了一个大体的印象。 Open Firmware. This was...

    今天有点时间,从一个具体的驱动着手,认识看了一下linux的内核基本知识:


    1、Linux 下的 CONFIG_OF 选项,很多的项目中都有把这个宏打开。没有了解得很透彻,但是有了一个大体的印象。

    Open Firmware. This was invented long time ago when Apple was producing laptops based on PowerPC CPUs. Openfirmware provides a good description of the devices connected to the platform. In Linux kernel the part that works with device data is called Device Tree (DT). More details in the Usage model.


    2、late_initcall(battery_init)和module_init(battery_init);

    late_initcall的优先级比module_init的低。


    3、ret = alloc_chrdev_region(&adc_cali_devno, 0, 1, ADC_CALI_DEVNAME);

    alloc_chrdev_region 动态分配设备编号。


    4、CLOCK_MONOTONIC 字面意思是单调的时间,指的是自系统开机时间

          CLOCK_REALTIME真实的时间。

          HRTIMER_MODE_REL是相对时间

          标准hrtimer,使用api:

    {      ktime_t ktime;

    ktime = ktime_set(1, 0); /* 3s, 10* 1000 ms */
    hrtimer_init(&battery_kthread_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
    battery_kthread_timer.function = battery_kthread_hrtimer_func;
    hrtimer_start(&battery_kthread_timer, ktime, HRTIMER_MODE_REL);

    }



    展开全文
  • Linux内核设计与实现》读书笔记 - 目录 (完结) 完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个《Linux内核设计与实现》读书笔记...

    《Linux内核设计与实现》读书笔记 - 目录 (完结)

     

    读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!).

    为了方便以后查看, 做个《Linux内核设计与实现》读书笔记 的目录:

     

    1. 《Linux内核设计与实现》读书笔记(一)-内核简介
    2. 《Linux内核设计与实现》读书笔记(二)- 内核开发的准备
    3. 《Linux内核设计与实现》读书笔记(三)- Linux的进程
    4. 《Linux内核设计与实现》读书笔记(四)- 进程的调度
    5. 《Linux内核设计与实现》读书笔记(五)- 系统调用
    6. 《Linux内核设计与实现》读书笔记(六)- 内核数据结构
    7. 《Linux内核设计与实现》读书笔记(七)- 中断处理
    8. 《Linux内核设计与实现》读书笔记(八)- 中断下半部的处理
    9. 《Linux内核设计与实现》读书笔记(九)- 内核同步介绍
    10. 《Linux内核设计与实现》读书笔记(十)- 内核同步方法
    11. 《Linux内核设计与实现》读书笔记(十一)- 定时器和时间管理
    12. 《Linux内核设计与实现》读书笔记(十二)- 内存管理
    13. 《Linux内核设计与实现》读书笔记(十三)- 虚拟文件系统
    14. 《Linux内核设计与实现》读书笔记(十四)- 块I/O层
    15. 《Linux内核设计与实现》读书笔记(十五)- 进程地址空间(kernel 2.6.32.60)
    16. 《Linux内核设计与实现》读书笔记(十六)- 页高速缓存和页回写
    17. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块
    18. 《Linux内核设计与实现》读书笔记(十八)- 内核调试
    19. 《Linux内核设计与实现》读书笔记(十九)- 可移植性
    20. 《Linux内核设计与实现》读书笔记(二十)- 补丁, 开发和社区

     

    读书笔记虽然结束了, 但内核的探索才刚刚开始!

    个人公众号:程序员黄小斜

    微信公众号【程序员黄小斜】新生代青年聚集地,程序员成长充电站。作者黄小斜,职业是阿里程序员,身份是斜杠青年,希望和更多的程序员交朋友,一起进步和成长!专注于分享技术、面试、职场等成长干货,这一次,我们一起出发。

    关注公众号后回复“2019”领取我这两年整理的学习资料,涵盖自学编程、求职面试、算法刷题、Java技术学习、计算机基础和考研等8000G资料合集。

    技术公众号:Java技术江湖

    微信公众号【Java技术江湖】一位阿里 Java 工程师的技术小站,专注于 Java 相关技术:SSM、SpringBoot、MySQL、分布式、中间件、集群、Linux、网络、多线程,偶尔讲点Docker、ELK,同时也分享技术干货和学习经验,致力于Java全栈开发!

    关注公众号后回复“PDF”即可领取200+页的《Java工程师面试指南》强烈推荐,几乎涵盖所有Java工程师必知必会的知识点。

    展开全文
  • Linux内核入门简介

    2016-07-21 16:31:27
    可以说,Linux内核无处不在,Linux内核是一个最普遍最复杂的开源项目之一,Linux内核之大,代码量之多,在我感觉就像是一个原始森林,要想精通实在是不容易,但是,不求精通,但求理解内核的工作原理,工作机制,...

    往大了说,几乎所有互联网都是运行在Linux服务器上的;往小了说,嵌入式系统很大一部分也都是Linux内核的。可以说,Linux内核无处不在,Linux内核是一个最普遍最复杂的开源项目之一,Linux内核之大,代码量之多,在我感觉就像是一个原始森林,要想精通实在是不容易,但是,不求精通,但求理解内核的工作原理,工作机制,了解一下Linux内核架构也是好的。

    内核是操作系统的一部分,是介于应用程序和底层硬件的一个桥梁,同时因为是操作系统的核心大脑
    这里写图片描述

    总结来说内核的功能有以下四个:

    • 负责响应中断的中断服务程序
    • 负责管理多进程从而分享处理器时间的调度程序
    • 负责管理进程地址空间的内存管理程序
    • 网络 进程间通信等系统服务程序

    说到操作系统的内核,可以简略分为单内核和微内核:

    • 单内核:运行于独立的地址空间,均运行于内核态。内核间通信微不足道。可直接调用函数
    • 微内核:功能被划分为多个独立的过程,每个过程叫做一个服务器,一般都运行在用户空间,各自运行在独立的地址空间,进程间通信花销比较大

    Linux内核就是属于单内核,独立的地址空间,且是模块化设计,抢占式内核,支持内核线程及动态装载内核模块。

    内核开发特点:

    • 内核开发不能访问C库也不能使用C头文件
    • 必须使用GNU C
    • 内核编程不像用户空间那样有内存保护机制
    • 难以执行浮点操作
    • 内核给每个进程只有很小的一个定长的堆栈
    • 由于内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发

    哦,对了,要学习内核没有内核源程序怎么能行,官网 随时能下载Linux内核源代码。推荐使用Git分布式版本控制系统来下载,保持与官网代码书一致。

    下载:
    $ git clone git://git.kernel.org/pub/scm/linux/kernit/torvalds/linux-2.6.git
    更新:
    $ git pull
    展开全文
  • 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著 郭旭译 人民邮电出版社


    展开全文
  • 学完C语言之后,最终是要应用到某个领域的,比如后端开发,应用开发或者Linux内核开发等。本文将介绍一下Linux内核相关的内容,Linux内核开发是相对比较难的领域,主要是门槛相对较高。虽然门槛较高,但有它的好处,...
  • 学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。   二、实验内容 在Linux操作系统环境下重新编译内核。实验主要内容: A. 查找并且下载一份内核源代码,本实验使用最新的Linux内核...
  • linux设备驱动归纳总结(一):内核的相关基础概念 linux设备驱动归纳总结(二):模块的相关基础概念 linux设备驱动归纳总结(三):1字符型设备之设备申请 linux设备驱动归纳总结(三):2open.close.read....
  •  通常我们想弄清楚linux内核是怎么样工作的,如何使用内核接口来编写linux内核代码的第一步都是搭建一个实验环境来做试验的;这里总结一下实验环境的搭建步骤,和我的一些经验; 步骤一、搭建实验环境 这里资源...
  • 其实我认为这本书不仅仅适合作为入门教材,同时也是一部真正算得上是深入理解Linux内核的凤毛麟角之作;这本书不仅在Linux内核类书籍中出类拔萃,甚至与计算机其他领域的经典巨著相比也毫不逊色。这本书就是《Linux...
  • Linux操作系统 Linux操作系统博大精深,其中对线程,IO,文件系统等概念的实现都很有借鉴意义。 文件系统和VFS 文件系统的inode上面讲过了。VFS主要用于屏蔽底层的不同文件系统,比如接入网络中的nfs文件系统,...
  • 而做到这一步的基础,就是你要看得懂Linux内核源码,了解其基本的框架和具体实现,了解其内核API的使用方法,然后才能根据自己的需求写出高质量的内核驱动程序。 说易行难,很多新人、甚至工作1-2年的开发者刚接触...
  • 首先,要有一个内核文件,比如我的是Linux-2.6.38,当然如果要选择Linux版本的话,应了解相应Linux版本的基础知识Linux内核版本有两种:稳定版和开发版 ,Linux内核版本号由3组数字组成:第一位数.第二位数.第三...
  • 文章目录1.1 linux内核简介linux发展路线图linux目录结构GPL许可证1.2 Intel X86系列的寻址方式1.3 i386的页式内存管理机制1.4 linux内核源代码中的C语言代码1.5 linux内核源代码中的汇编语言代码 1.1 linux内核简介...
  • [14本经典Android开发教程] 8 Linux内核阅读心得体会 核感悟 2 核感悟 Linux内核启动 内核的生成 2 核感悟 Linux内核启动 从hello world说起 3 核感悟 Linux内核启动 BIOS 5 核感悟 Linux内核启动 setup...
  • 从题目中可以看到,这篇文章是以我Linux内核设计与实现》而想到的其他我过的书,所以,这篇文章的主要支撑点是《Linux内核》。 开始这本书已经是很久以前的事了,不过,由于时间和精力原因,没有认真的分析...
  • 嵌入式Linux内核相关的基础知识,笔记中所指的内核为Linux2.6版本
  • 关于Linux内核学习

    2012-12-13 21:18:49
    常常有人问:我想学习内核需要什么基础吗?Linus Torvalds本人是这样回答的:你必须使用过Linux。 这个……还是有点太泛了吧,我想下面几个基础可能还是需要的,尽管不一定必需:  1, 关于操作系统理论的最初...
  • Linux内核长什么样?这幅漫画是以一个房子的侧方刨面图来绘画的。使用这样的一个房子来代表 Linux 内核。你能给这幅漫画分析一下读图路径吗? 完这么路径清晰的图,让我们看一下刚刚上架的内核新书及书单推荐。...
  • Linux 内核分析及应用

    2018-11-06 11:55:57
    本书分模块介绍了 Linux 操作系统的内核设计和实现,针对关键概念、算法和数据结构做了重点的讲解。同时,对诸多经典应用程序进行了剖析,如 Nginx、Memcached、Redis、LVS 等,讲解如何利用操作系统提供的底层支持...
  • 1.1 Linux内核基础知识 1.1.1 Linux版本 1.1.2 什么是标准内核 1.1.3 Linux操作系统的分类 1.1.4 linux内核的选择 1.2 Linux内核启动过程概述 1.2.1 Bootloader启动过程 1.2.2 Linux启动...
1 2 3 4 5 ... 20
收藏数 58,166
精华内容 23,266
关键字:

读linux内核需要的基础知识