精华内容
下载资源
问答
  • Linux内核由哪几个子系统组成

    千次阅读 2018-05-24 09:32:12
    *Linux内核由哪几个子系统组成?** Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序...

    *Linux内核由哪几个子系统组成?**

    Linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,网络接口,进程间通信。
    1.进程调度(SCHED):控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。
    2.内存管理(MM)允许多个进程安全的
    共享主内存区域。Linux
    的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余
    的程序块则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映
    射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。
    3.虚拟文件系统
    (Virtual File
    System,VFS)隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件
    系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。
    4.网络接口(NET)提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。
    5.进程间通讯(IPC) 支持进程间各种通信机制。

    内核分为进程管理系统、内存管理系统、I/O管理系统和文件管理系统等四个子系统.

    转载于:https://blog.51cto.com/13669173/2119711

    展开全文
  • Linux内核中的pinctrl子系统应用实例

    万次阅读 多人点赞 2017-05-31 10:48:23
     由于近期在做一项目用到了pinctrl子系统,但是对pinctrl子系统了解又不是很多,所以遇到了麻烦,但是找度娘发现很少同行对pinctrl的具体用法做出说明,所以只能自己去搞了,在经过一段时间对Linux内核源码的...

    Linux内核中的pinctrl子系统应用实例


    由于近期在做一个项目用到了pinctrl子系统,但是对pinctrl子系统了解又不是很多,所以遇到了麻烦,但是找度娘发现很少有同行对pinctrl的具体用法做出说明,所以只能自己去搞了,在经过一段时间对Linux内核源码的折腾,最终搞定,并将我所应用的实例给展示一下,希望对大家有所帮助。

    关于pinctrl是什么,为什么要用pinctrl,源码深度剖析我在这就不赘述了,有位博友总结的非常好,大家可以参考http://www.wowotech.net/sort/gpio_subsystem

    下面我介绍一下如何去使用内核中的pinctrl子系统以device tree设备树为例,当你需要控制某些pin的时候,你首先要在devicetree中去按照pinctrl的规则去描述它,然后才能在driver中去使用:

    案例1:

    xxx这个设备要用到gpg0_1这个pin的TE_DECON_INT功能,并分别将这两个状态取了个名字turnon_tes和turnoff_tes.这个名字是随便起的。重点是看pinctrl-0和pinctrl-1,根据示例,它们分别引用了disp_teson和disp_tesoff这两个节点。


    xxx {
        ....
        pinctrl-names = "turnon_tes", "turnoff_tes";
        pinctrl-0 = <&disp_teson>;
        pinctrl-1 = <&disp_tesoff>;
    };

    两个重要的属性必须有:pins 和 pin-function分别是pin的名字和要把pin配置成什么功能,还有gpg0属于pinctrl_2,所以这个地方引用的是pinctrl_2而不是其他。

    &disp_teson_pinctrl {                           //#define disp_teson_pinctrl	pinctrl_2
        disp_teson: disp_teson {
            samsung,pins = disp_teson_pin;          //#define disp_teson_pin    "gpg0-1"
            samsung,pin-function = <disp_teson_con>;//#define disp_teson_con    2 -- 对应0x2 = TEDECON_INT
        };
    };
    &disp_tesoff_pinctrl {
        disp_tesoff: disp_tesoff {
            samsung,pins = disp_tesoff_pin;          //#define disp_teson_pin        "gpg0-1"
            samsung,pin-function = <disp_tesoff_con>;//#define disp_teson_con         0
        };
    };

    那么driver如何去操作这个pin呢?首先需要大家熟悉几个内核的API:

    1. 获取一个pinctrl句柄,参数是dev是包含这个pin的device结构体即xxx这个设备的device

    /**
     * struct devm_pinctrl_get() - Resource managed pinctrl_get()
     * @dev: the device to obtain the handle for
     *
     * If there is a need to explicitly destroy the returned struct pinctrl,
     * devm_pinctrl_put() should be used, rather than plain pinctrl_put().
     */
    struct pinctrl *devm_pinctrl_get(struct device *dev)
    


    2. 获取这个pin对应pin_state(引脚状态-turnon_tes/turnoff_tes)
    /**
     * pinctrl_lookup_state() - retrieves a state handle from a pinctrl handle
     * @p: the pinctrl handle to retrieve the state from
     * @name: the state name to retrieve
     */
    struct pinctrl_state *pinctrl_lookup_state(struct pinctrl *p, const char *name)

    3. 设置引脚为为某个stata -- turnon_tes/turnoff_tes

    /**
     * pinctrl_select_state() - select/activate/program a pinctrl state to HW
     * @p: the pinctrl handle for the device that requests configuration
     * @state: the state handle to select/activate/program
     */
    int pinctrl_select_state(struct pinctrl *p, struct pinctrl_state *state)

    具体操作:

    /* 获取pin control state holder 的句柄 */
    pinctrl = devm_pinctrl_get(dev);                                     
    /* 得到名字为turnon_tes和turnoff_tes对应的pin state */
    struct pinctrl_state * turnon_tes = pinctrl_lookup_state(pinctrl, "turnon_tes");     
    struct pinctrl_state * turnoff_tes = pinctrl_lookup_state(pinctrl, "turnoff_tes");
    /* 设置名字为turnon_tes这个pinctrl对应引脚(gpg0-1)的pin state,即gpg0_1对应的寄存器位域设置为2 */
    pinctrl_select_state(pinctrl, turnon_tes)。
    经过以上操作,gpg_1引脚对应的con寄存器的对应的位域被配置成2,即0x2 = TE_DECON_INT功能。同意,根据此方法也可以设置turnoff_tes的状态。

    案例2 -- 一个背光灯device需要使用pwm的输出pin:
    device tree:
    背光系统中要用到gpd2_4这个pin的TOUT_0功能和gpd4_3这个pin的输出功能并输出1,需要在backlight这个node中做以下描述,这两个pin只有一个状态(pwm-on),同样,这个名字也是可以随便起的。bl_pwm_ctrl和bl_pwm_en_ctrl分别是对这两个pin的描述。


    backlight {
        ...
        ...
        pinctrl-names = "pwm-on";
        pinctrl-0 = <&bl_pwm_ctrl @bl_pwm_en_ctrl>;
    };
    /* 这个和上面一样,就不多说了 */
    &bl_pwm_ctrl_pinctrl{                                     //#define bl_pwm_ctrl_pinctrl   pinctrl_2   
    	bl_pwm_ctrl: bl_pwm_ctrl {
    		samsung,pins = bl_pwm_ctrl_pin;           //#define bl_pwm_ctrl_pin	  "gpd2-4"
    		samsung,pin-function = <bl_pwm_ctrl_con>; //#define bl_pwm_ctrl_con		2
    		samsung,pin-pud = <bl_pwm_ctrl_pull>;     //#define bl_pwm_ctrl_pull		3
    		samsung,pin-drv = <bl_pwm_ctrl_drv>;      //#define bl_pwm_ctrl_drv		0
    	};
    };
    这个描述比上面多了个pin-val,因为这个引脚不仅要配置成输出功能,还要输出1,所以pin-val = 1。
    &bl_pwm_en_ctrl_pinctrl{
    	bl_pwm_en_ctrl: bl_pwm_en_ctrl {
    		samsung,pins = bl_pwm_en_ctrl_pin;           //#define bl_pwm_en_ctrl_pin     "gpd4-3"
    		samsung,pin-function = <bl_pwm_en_ctrl_con>; //#define bl_pwm_en_ctrl_con      1
    		samsung,pin-val = <1>;
    		samsung,pin-pud = <bl_pwm_en_ctrl_pull>;
    		samsung,pin-drv = <bl_pwm_en_ctrl_drv>;
    	};
    };
    driver的操作:

    在backlight的driver的probe中:

    struct pinctrl * p = devm_pinctrl_get(&pdev->dev);
    struct pinctrl_state * default_state = pinctrl_lookup_state(p, "pwm-on");
    pinctrl_select_state(p, default_state);
    执行完以上操作,可以发现gpd2_4引脚被配置成了TOUT_0功能,gpd4_3引脚被配置成为了输出功能,并且输出1(高电平)。
    以上就是pinctrl子系统的应用实例。如果有解释不太正确的地方请指教。

    展开全文
  • 内核时间子系统的配置

    千次阅读 2016-06-02 13:26:30
    内核中的时间子系统主要向上层提供两种功能,一就是时间功能,另一就是timer定时器功能。时间功能: 时间功能是由内核中的timekeeper模块来负责维护,该模块需要clocksource的支持。内核中的模块划分为如下: ...

    内核中的时间子系统主要向上层提供两种功能,一个就是时间功能,另一个就是timer定时器功能。

    时间功能:
    时间功能是由内核中的timekeeper模块来负责维护,该模块需要clocksource的支持。内核中的模块划分为如下:
    Timekeeper—>clocksource—>hardware

    定时器功能:
    从原理上说,定时器需要有一个定期到来的tick来驱动它运行,每个tick到来时检查一下定时器是否到时,由此来实现定时器的功能。所以定时器的实现可以分为tick device设备和基于tick device的上层timer定时器实现。在内核中的模块划分如下所示:
    timer—>tick device—>clockevent—>hardware

    基于tick device的timer定时器还分为两种类型,一种是低精度timer,一种是高精度timer。
    低精度timer是旧的内核中的实现,一直延续至今,也就是我们熟悉的基于jiffies系统滴答来实现的,旧的内核中只有这种定时器实现。
    高精度timer是为了满足新的需求而诞生的hrtimer。高精度基本可以满足任何情况下的需求了,但是由于历史原因低精度timer不能直接从内核中删除,必须保持兼容性。
    一个CPU内可能有多个local clock硬件,但是只会有一个被设置为该CPU的tick设备,每个CPU有且只有一个tick设备。

    内核配置

    1、通用clock source和clock event的内核配置

    (1)clock event是为tick设备提供支持的模块,它分为了新版和旧版两种架构。新架构采用的是通用模型,旧架构采用的是平台相关的实现。
    相关的配置项为:CONFIG_GENERIC_CLOCKEVENTS和CONFIG_GENERIC_CLOCKEVENTS_BUILD。
    如果配置了这两个选项,就会使用新的时间子系统的构架,如果不配置,将使用旧的时间子系统架构。 这一项的配置一般是在arch中选择的。比如arch/arm/Kconfig中,而其余的需要根据情况在menuconfig中配置,对应的Kconfig为kernel/kernel/time/Kconfig。

    arch/arm/Kconfig
    config ARCH_OMAP1
        bool "TI OMAP1"
        depends on MMU
        select ARCH_HAS_CPUFREQ
        select ARCH_HAS_HOLES_MEMORYMODEL
        select ARCH_OMAP
        select ARCH_REQUIRE_GPIOLIB
        select CLKDEV_LOOKUP
        select CLKSRC_MMIO
        select GENERIC_CLOCKEVENTS---选择通用时间框架
        select GENERIC_IRQ_CHIP
        select HAVE_CLK
        select HAVE_IDE
        select IRQ_DOMAIN
        select NEED_MACH_IO_H if PCCARD
        select NEED_MACH_MEMORY_H
        help
          Support for older TI OMAP1 (omap7xx, omap15xx or omap16xx)
    

    如上所示,定义ARCH_OMAP1的时候就已经select GENERIC_CLOCKEVENTS作为时间子系统的框架。

    (2)clocksource是为timekeeper提供支持的模块,目前的内核都是使用新的通用框架。不过为了兼容性考虑,kernel也保留了CONFIG_ARCH_USES_GETTIMEOFFSET这个配置项.

    2、tick device的配置

    如果选择了新的时间子系统的软件架构(配置了CONFIG_GENERIC_CLOCKEVENTS),那么内核会打开Timers subsystem的配置选项,主要是和tick以及高精度timer配置相关。

    tick相关的配置:

    CONFIG_HZ_PERIODIC
    

    无论何时,都启用周期性的tick,即便是在系统idle的时候。

    CONFIG_NO_HZ_IDLE
    

    Idle dynticks system (tickless idle)。在系统idle的时候,停掉tick。使能该选项会自动使能CONFIG_NO_HZ_COMMON选项。

    CONFIG_NO_HZ_FULL
    

    Full dynticks system (tickless)。即便在非idle的状态下,也就是说cpu上还运行在task时,也可能会停掉tick,这个选项和实时应用相关。使能该选项会自动使能CONFIG_NO_HZ_COMMON选项。

    上面的三个选项只能是配置其一,上面描述的是新的内核配置方法。对于旧的内核,只有CONFIG_NO_HZ一个配置项,用来配置idle dynticks system(非idle时有周期性tick,idle时无周期性tick),为了兼容旧的系统,新的内核仍然支持了这个选项。

    除此之外还有一个用来配置tick模式的选项:

    CONFIG_TICK_ONESHOT
    

    如果配置了这个选项,就决定了系统中所有的tick设备都是oneshot mode,否则就是periodic mode。
    当配置了CONFIG_NO_HZ_COMMON或者CONFIG_HIGH_RES_TIMERS的时候,这个选项就会一起被配置上,也就是说采用了dynticks或者hrtimer的系统中,它的tick设备模式必须是oneshot类型的。

    3、timer模块的配置

    CONFIG_HIGH_RES_TIMERS
    

    和高精度timer相关的配置只有一个的配置项。如果配置了高精度hrtimer,那么就会自动配置上CONFIG_TICK_ONESHOT,表示系统只支持one-shot类型的tick device。

    4、 time配置示例

    选择一个时间子系统的构架:
    (1)新的通用时间子系统软件框架(配置了CONFIG_GENERIC_CLOCKEVENTS)
    (2)传统时间子系统软件框架(不配置CONFIG_GENERIC_CLOCKEVENTS,配置CONFIG_ARCH_USES_GETTIMEOFFSET)
    除非维护一个旧的系统,否则建议用新的通用时间子系统框架了,这时候可能的配置包括如下几种情况:
    (1)使用低精度timer和不停的tick(HZ_PERIODIC)
    这种是旧的处理方式
    (2)使用低精度timer和dynamic tick(CONFIG_NO_HZ_IDLE)
    (3)使用高精度timer和不停的tick(HZ_PERIODIC)
    (4)使用高精度timer和dynamic tick(CONFIG_NO_HZ_IDLE)
    这种是时下较流行的配置
    注:上面描述的dynamic tick指的是Idle dynticks system。我们不考虑Full dynticks system的情况。
    采用了dynticks或者hrtimer的系统中,它的tick设备模式必须是oneshot类型的,也就是说上面4种情况,只有第1种情况下的tick 是周期模式的,其他三种都是oneshot mode。

    展开全文
  • 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处... Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示。
    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://liucw.blog.51cto.com/6751239/1201601

    Perface

       Linux内核主要由进程调度(SCHED)、内存管理(MM)、虚拟文件系统(VFS)、网络接口(NET)和进程间通信(IPC)5个子系统组成,如图1所示。



    图1 Linux内核的组成部分与关系



    1.进程调度

       进程调度控制系统中的多个进程对CPU的访问,使得多个进程能在CPU中“微观串行,宏观并行”地执行。进程调度处于系统的中心位置,内核中其他的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。


    图2 Linux进程状态转换

       如上图2所示,Linux的进程在几个状态间进行切换。在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,并使本进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪态。

       睡眠分成可被打断的睡眠和不可被打断的睡眠,两者的区别在于可被打断的睡眠在收到信号的时候会醒。

       在设备驱动编程中,当请求的资源不能得到满足时,驱动一般会调度其他进程执行,其对应进程进入睡眠状态,直到它请求的资源被释放,才会被唤醒而进入就绪态。

       设备驱动中,如果需要几个并发执行的任务,可以启动内核线程,启动内核线程的函数为:

       pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags);




    2.内存管理

       内存管理的主要作用是控制多个进程安全地共享主内存区域。当CPU提供内存管理单元(MMU)时,Linux内存管理完成为每个进程进行虚拟内存到物理内存的转换。Linux 2.6引入了对无MMU CPU的支持。

       如下图3所示,一般而言,Linux的每个进程享有4GB的内存空间,0~3GB属于用户空间,3~4GB属于内核空间,内核空间对常规内存、I/O设备内存以及高端内存存在不同的处理方式。

    图3 Linux进程地址空间



    3.虚拟文件系统

       如下图4所示,Linux虚拟文件系统(VFS)隐藏各种了硬件的具体细节,为所有的设备提供了统一的接口。而且,它独立于各个具体的文件系统,是对各种文件系统的一个抽象,使用超级块super block存放文件系统相关信息使用索引节点inode存放文件的物理信息使用目录项dentry存放文件的逻辑信息。

    图4 Linux文件系统




    4.网络接口

       网络接口提供了对各种网络标准的存取和各种网络硬件的支持。如下图5所示,在Linux中网络接口可分为网络协议和网络驱动程序,网络协议部分负责实现每一种可能的网络传输协议网络设备驱动程序负责与硬件设备通信,每一种可能的硬件设备都有相应的设备驱动程序。

    图5 Linux网络体系结构



    5.进程通信

       进程通信支持提供进程之间的通信,Linux支持进程间的多种通信机制,包含信号量、共享内存、管道等,这些机制可协助多个进程、多资源的互斥访问、进程间的同步和消息传递。



    依赖关系

        Linux内核的5个组成部分之间的依赖关系如下:

    ·进程调度与内存管理之间的关系:这两个子系统互相依赖。在多道程序环境下,程序要运行必须为之创建进程,而创建进程的第一件事情,就是将程序和数据装入内存。

    ·进程间通信与内存管理的关系:进程间通信子系统要依赖内存管理支持共享内存通信机制,这种机制允许两个进程除了拥有自己的私有空间,还可以存取共同的内存区域。

    ·虚拟文件系统与网络接口之间的关系:虚拟文件系统利用网络接口支持网络文件系统(NFS),也利用内存管理支持RAMDISK设备。

    ·内存管理与虚拟文件系统之间的关系:内存管理利用虚拟文件系统支持交换,交换进程(swapd)定期由调度程序调度,这也是内存管理依赖于进程调度的惟一原因。当一个进程存取的内存映射被换出时,内存管理向文件系统发出请求,同时,挂起当前正在运行的进程。

       除了这些依赖关系外,内核中的所有子系统还要依赖于一些共同的资源。这些资源包括所有子系统都用到的例程,如分配和释放内存空间的函数、打印警告或错误信息的函数及系统提供的调试例程等。

    展开全文
  • Linux 内核 SCSI IO 子系统分析

    千次阅读 2015-07-30 21:57:54
    本文基于 LINUX2.6.18 内核,从 SCSI 设备访问请求的提交,SCSI 命令的处理、错误恢复几个方面浅析了 LINUX 内核中 SCSI 子系统的 IO 的处理机制。 0 评论: 方 敏 (fminsh@cn.ibm.com),
  • Linux的几个子系统

    千次阅读 2015-07-14 23:41:03
    Linux系统的性能是和几个子系统相关的。这些子系统包括以下四个方面: 1、CPU; 2、内存使用情况; 3、I/O情况; 4、网络状态; 这些子系统的性能互相依赖,其中任意一个高利用率都会很容易引起其他子系统的问题,...
  • Linux内核的中断子系统

    千次阅读 2013-04-12 14:58:13
    Linux中断子系统主要包括了三部分,一部分和体系结构相关,位于最底层,主要负责在中断发生之后保护CPU现场,调用内核统一的中断处理入口函数,负责从中断处理过程恢复到中断之前的流程等比较底层的工作。...
  • 年前,我记得写过好篇关于Linux去除对路由cache支持的文章,路由cache的下课来源于一次对路由子系统的重构,具体原因就不再重复说了,本文将介绍这次重构对Redirect路由以及neighbour子系统的影响。事实上,直到...
  • 表示时间的结构 在内核当中有几个不同的结构用于表示时间。
  • 构建Linux内核驱动demo子系统示例

    千次阅读 2016-02-09 15:51:25
    本文参考内核RTC子系统并提取出一简单的demo驱动子系统框架示例程序,可作为模板,适用于一些简单的具有类似多外设Linux设备驱动归一化开发。
  • Linux内核之mmc子系统-sdio

    万次阅读 2014-06-30 14:36:06
    现在的Linux内核中,mmc不仅是一个驱动,而是一个子系统。这里通过分析Linux3.2.0内核,结合TI的arm335x平台及omap_hsmmcd host分析下mmc子系统,重点关注sdio及架构在其上的具体sdio IP驱动实现。 1. General ...
  • Linux内核工程导论——CGroup子系统

    千次阅读 2015-08-27 19:47:46
    cgroup子系统  cgroup是现代andriod的基础,最初提出也是andriod内部的人员提出的,后来被实现在linux内核内。通过cgroup可以将定额的系统资源(如CPU、内存等)分配给特定的一组进程。默认情况下编译内核时打开...
  • Linux内核crypto子系统学习笔记

    千次阅读 2018-04-15 18:02:26
    crypto note v0.1 2017/12/19 Sherlock init v0.2 2017/3/25 Sherlock add sync/asyns code...本文分析Linux kernel里crypto子系统的大概实现,写crypto子系统下的加速器驱动的时候 可以参考下。crypto子系统支持...
  • WiMax Wifi 内核一个rfkill子系统,使用这...Linux中倾向于通用架构子系统,各个设备其实都是实现这个子系统规定的函数。这些子系统向上就提供操作同类函数的完整接口。这就是类似于面向对象编程的Interface概念。
  • Linux3.5内核对路由子系统的重构对Redirect路由以及neighbour子系统的影响: https://blog.csdn.net/dog250/article/details/50754780 好吧,下面才是细节。 正文 别以为数据包出了路由子系统,拿到了 下一...
  • 上次博文我们分析了linux的内存管理子系统,本来我不想对接下来的进程管理子系统、网络子系统、虚拟文件系统在这个阶段进行分析的,但是为了让大家对内核有个整体的把握,今天还是简单的介绍一下剩余的几个子系统,...
  • 一种是关键的,必须完成的而且必须以特定的顺序来完成的初始化,这部分的代码往往是直接便如内核的而且是直接调用的另一种是非关键的的子系统(或者说模块、功能)的初始化,这部分根据配置可以不加载,可以以built-...
  •  内核设备模型主要的模块和用户之间能看到的相关部分就是sysfs文件系统了。内核在启动的时候会注册sysfs文件系统,并且在启动系统的初期。通过mount命令挂载sysfs文件系统到/sys挂载点。  Mount -t sysfs sysfs...
  • amp;px=Linux-Hardware-Accel-Subsystem...由于近年来为减轻CPU对某些特定任务的的计算负载,尤其是那些近来市场上刚刚普及的多芯片深度/机器学习任务,硬件加速被快速应用起来, 也因此Linux内核可能为这些不同...
  • Linux内核主要由那几个部分组成?

    万次阅读 2018-04-01 10:32:17
    linux内核分为进程管理系统 、 内存管理系统 、 i/o管理系统 和文件管理系统四个子系统。   linux内核主要由哪几个部分组成: Linux内核的主要模块分以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理...
  • 几个重要的内核文件介绍

    千次阅读 2007-11-26 17:38:00
    几个重要的内核文件介绍 Linux服务器内核编译基础 --几个重要的RedHat Linux内核文件介绍 在网络中,不少服务器采用的是Linux系统。为了进一步提高服务器的性能,可能需要根据特定的硬件及需求重新编译Linux内核。...
  • 摘要:本文主要讲述Linux进程的要素、Linux进程的调度 1、Linux进程的要素 1.1程序与进程 程序:存放在磁盘上的一系列代码和数据的可执行映像,是一静止的实体。。 进程:是一正在执行的...1.2.3-->在内核
  • Linux内核的5个子系统

    千次阅读 2014-03-13 21:17:44
    首先一张熟悉的图来说明GNU/linux的基本体系结构:  体系的上部分是用户(或应用程序)空间,这是用户应用程序执行的地方。...系统调用接口之下是内核代码,可以更精确地定义为独立于体系结构的内核
  • linux 网络子系统

    千次阅读 2014-01-02 15:27:13
    网络子系统是一个层次化的结构,可分为以下几个层次:  1、 Socket 层 Linux 在发展过程中,采用 BSD socket APIs 作为自己的网络相关的 API 接口。同时, Linux 的目标又要能支持各种不同的协议族,而且这些协议族...
  • linux内核编译系统-kbuild系统详解

    千次阅读 2011-04-19 17:30:00
    <br />众所周知,内核的编译系统kbuild是很庞大的系统。但是,它所使用的make和我们平时用的make是一模一样的。kbuild只是通过预定义一些变量(obj-m,obj-y等等)和目标(bzImage ,menuconfig等等),使内核...
  • linux内核移植和根文件系统的制作

    千次阅读 2013-11-17 01:11:10
    在动手进行Linux内核移植之前,非常必要对Linux内核进行一定的了解,下面从Linux内核的版本和分类说起。 1.1.1 Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的...
  • Linux内核启动及根文件系统加载过程

    千次阅读 2016-08-11 17:00:41
    Linux内核启动及文件系统加载过程当u-boot开始执行bootcmd命令,就进入Linux内核启动阶段,与u-boot类似,普通Linux内核的启动过程也可以分为阶段,但针对压缩了的内核如uImage就要包括内核自解压过程了。...
  • Linux内核KBuild系统

    千次阅读 2014-09-02 11:35:20
    kbuild系统主要涉及几个文件。 Makefile:内核源代码顶层目录的Makefile文件。 scripts/Makefile.build:通常在进行递归make时会用到的Makefile文件。 scripts/Makefile.host:如果需要生成可执行文件时会用到的...
  • 原网址:... 1.1.1 Linux版本 Linux内核的版本号可以从源代码的顶层目录下的Makefile中看到,比如2.6.29.1内核的Makefile中: VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 2
  • 嵌入式软硬件架构 软件:根文件系统、Linux内核、Bootloader 硬件:底层硬件嵌入式Linux系统由Linux内核与根文件系统两部分组成,缺一不可一、内核制作 采用默认的模板来作为.config,模板在/arch/arm/configs...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 158,021
精华内容 63,208
关键字:

内核分为几个子系统