📒
Notes
  • 个人笔记
  • Machine Learning
    • Tensorflow
      • Text
        • Keras构建RNN
        • 字词嵌入
        • 字词嵌入示例程序
      • Data processing
        • tf.data数据加载
      • Tensorflow Tricks
    • 循环神经网络概览
    • Pix2Pix
  • Assembly Language
    • DOS中的Debug模式
    • LOOP指令
    • 8086CPU
    • 标志位寄存器
    • 汇编指令
    • 汇编语言源程序格式
  • Linux System
    • Systemctl 服务脚本
    • Linux端口占用
    • Btrfs文件系统
    • C Socket网络编程细节问题
  • Hexo
    • Hexo下的Tag/Categories栏
    • Git备份博客
    • Hexo博客基本部署
  • Kernel
    • C语言中消息队列实现
    • Linux内核的进程调度函数
    • Linux内核模块的编译
    • Linux Kernel概述
  • Linux Software
    • Linux软件安装与配置
  • Docker
    • OVS+Docker网络构建
    • Docker分层垃圾清理
  • C
    • CMakeList语法
Powered by GitBook
On this page
  • 内核态与用户态
  • 编译内核
  • 配置内核
  • 内核安装
  • 内核开发的特点

Was this helpful?

  1. Kernel

Linux Kernel概述

Linux系统的基础包含了内核、C库、工具集和系统的基本工具。

内核态与用户态

内核运行的时候,系统是以内核态进入到内核空间运行的。而不同用户执行程序的时候,是以用户态在用户空间中运行的。

编译内核

配置内核

内核中有许多可以配置的选项,以CONFIG_FEATURE的形式表示。 这些配置项的值只有两种选择:

  1. yes或no二选一,代表是否开启某一项功能。

  2. yes、no或module三选一,其中module表示了功能会被安装,但是是以模块的形式。

使用make config即可开始配置相关设置(只是有极为多的条目需要一一配置),另外还可以借助一些工具。 配置完成后进行编译,使用make即可,由于内核内容众多,花费的时间会很长。

内核安装

内核的安装取决于使用的引导器,不过目前一般都在使用grub引导。 具体安装流程待补充。

内核开发的特点

  1. 不能访问C库,也不能访问标准的C头文件。

    主要原因在于速度和大小,对于内核来说都不合适。

    虽然如此,但是大部分常用的C库函数都已经在内核中实现了,如操作字符串的函数可以通过包含<linux/string.h>来获得。

    这些能够访问的属于内核头文件。

  2. 必须使用GUN C。

  3. 没有内存保护机制

    原本在非法访问内存时的内存保护机制就是由内核提供的,内核内部是没人来保护的。

    所以在内核中就需要注意非法的地址访问,否则很有可能会直接挂掉。

    另外内核中的内存是不分页的,用多少物理内存就少多少,注意内存占用。

  4. 尽量不要在内核中使用浮点数

    内核不能完美支持浮点操作,使用浮点数会需要处理许多额外的东西,所以最好干脆不要使用。

  5. 使用容积小而固定的栈

    内核中栈的大小有限,无法实现动态增长。

    内核栈的大小因体系结构不同而不同,但都为两页。

  6. 同步和并发

    内核中许多特性都要求并发地访问共享数据,这要求有同步机制以防止冲突。

    常见的解决方法是自旋锁和信号量。

  7. 可移植性

PreviousLinux内核模块的编译NextLinux Software

Last updated 5 years ago

Was this helpful?