• Linux内核开发基础


    1.Linux内核简介

     1.1.Linux系统如何构成

    内核空间(Kernel Space)+用户空间(User Space)

    用户空间 = 用户程序 + C语言库(例如:GNC C Library)

    内核空间 = Kernel + 系统调用接口(System Call Interface) + 体系结构相关代码

    Linux系统被划分用户空间 内核空间 原因?

    现在CPU实现不同的工作模式,以ARM为例

    A.用户模式(usr)

    B.系统模式(sys)

    C.外部中断模式(irq)

    D.管理模式(svc)

    E.快速中断模式(fiq)

    F.数据访问中止(abt)

    G.未定义指令异常(und)

    Linux系统利用CPU使用了耳机指令分别运行Linux内核与应用程序,使操作系统本身得到充分保护。

    内核空间与用户空间是程序执行的两种不同状态。

    用户空间->内核空间

    通过系统调用和硬件中断完成用户空间到内核空间的转移

    1.2 内核构成

     7个组成部分

    SCI:system Call interface 系统调用接口

    PM:Process Management 进程管理,进程创建、进程调度、进程通信、

    MM:Memory Management 内存管理,虚拟地址和物理地址转换、内存回收、(区地址)

    Arch:体系结构相关代码(ARM体系)这个地方需要自己修改相关内容

    DD:Device Drivers 设备驱动程序

    Network Stack:网络协议栈 (Linux支持网络协议多)

    VFS:Virtual File System 虚拟文件系统

     2.Linux内核源代码

    2.1目录结构

    Linux内核源代码采用树形结构进行组织

    把相关功能放在同一个文件夹下 

    源代码下载网址:

    Linux最新内核源代码:http://www.kernel.org/

    Linux早期内核源代码:http://www.oldlinux.org/index_cn.html

    arch目录(常用目录之一)

    architecture缩写 内核所支持的每种CPU体系,在该目录下有对应的子目录,每一个CPU的子目录下进一步分解boot系统引导、mm内存管理、kernel系统调用等子目录

     block目录

    部分块设备驱动程序

    crypto目录

    加密、压缩、CRC校验算法

    documentation目录

    内核的文档

    drivers目录(常用目录之一)

    设备驱动程序

    fs目录file system

    文件系统

    存放各种文件系统的实现代码,用于实现虚拟文件系统vfs

    include目录

    存放内核所需的头文件,与平台无关的头文件放在include/liunx子目录,与平台相关的头文件则放在相对应的子目录中。

    lib目录

    库文件代码

    mm目录

    用于实现内存管理中与体系结构无关的部分

    net目录

    网络协议实现代码

    802 802无线通讯协议核心支持代码

    appletalk 苹果系统连网协议

    ax25 AX25无线Internet协议

    bridge 桥接设备

    ipv4/ipv6 ip协议族

    samples目录

    一些内核编程的范例

    scripts目录

    配置内核脚本

    security目录

    SElinux的模块

    Sound目录

    音频设备驱动文件

    usr目录

    cpio命令实现

    cpio是根文件系统制作时所需要的命令,将文件系统和内核系统放置一起

    virt目录

    内核虚拟机

    3.Linux内核配置与编译

    必备技能之一

    Linux内核具有可定制的优点

    A.清除临时文件、中间文件和配置文件

    make clean

    remove most generated files but keep the config

    make mrproper

    remove all generated files and config files

    make distclean

    mrproper + remove editor backup and patch files

    B.确定目标系统的软硬件配置情况,比如CPU的类型、网卡类型、所需要支持的网络协议

    C.使用以下命令之一配置内核

    make config:基于文本模式的交互式配置 

    make menucofig:基于文本模式的菜单型配置(推荐配置)

    make oldconfig:使用已有的配置文件

    make xconfig:图形化配置(需要安装图像化系统)

     3.1 配置选项内容

    linux内核提供一系列可供参考的内核配置模式位于Arch/$cpu/cofigs

    3.2 内核编译

    make zImage

    make bzImage

    在X86平台下,zImage只能用于小于512K的内核

    make ZImage V=1 提供编译信息

    make bzImage V=1 提供编译信息

    编译好的内核位于arch/$cpu/boot

    3.3 编译内核模块

    3.4 安装内核模块

  • 相关阅读:
    mockito测试final类/static方法/自己new的对象
    flink 1.11.2 学习笔记(5)-处理消息延时/乱序的三种机制
    linux查找操作
    分析MongoDB架构案例
    legend3---bootstrap modal框出现蒙层,无法点击modal框内容(z-index问题)
    legend3---laravel报419错误
    laravel自定义中间件实例
    laravel中间件Middleware原理解析及实例
    git: Failed to connect to github.com port 443: Timed out
    记忆规律
  • 原文地址:https://www.cnblogs.com/wanglinsheng/p/5873883.html
Copyright © 2020-2023  润新知