`
diecui1202
  • 浏览: 98504 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

kernel-3 从内核出发

阅读更多
  1. 编译内核:
    • 在编译内核之前,必须配置它;
    • 配置的选项以CONFIG_FEATURE形式表示,如对称多处理器(SMP)的配置选项为:CONFIG_SMP=y/n;y表示启用,n表示不起作用;
    • make config:该工具会挨个遍历所有配置项,要求用户选择yes,no或是module;
    • make menuconfig:基于X11的图形工具;
    • make xconfig:基于gtk+图形工具;
    • make gconfig:
    • make defconfig:创建一个默认配置;
    • 配置文件存放在代码树根目录的.config文件中,可以直接修改或用它来配置新的代码树,此时需要验证和更新配置:make oldconfig;
    • 配置好后,就可以用make命令来编译它了;
    • 编译时,会在内核代码树的根目录下创建一个System.map文件;这是一份符号对照表,用以将内核符号和它们的起始地址对应起来。调试的时候,如果把内存地址翻译成容易理解的函数名以及变量名会很有用;
  2. 安装内核:
    • 如何安装和体系结构以及启动引导工具有关;如在使用grub的x86的系统上,把arch/i386/boot/bzImage拷贝到/boot目录下,使用vmlinuz-version来命令它,并编译/boot/grub/grub.cfg文件(ubuntu 10.04),为新内核建立一个新的启动项;
  3. 内核开发的特点:
    • 内核编程时不能访问C库:主要原因是速度和大小的问题;不过,大部分常用的C库函数在内核中都已经得到了实现;如操作字符串的函数组就位于lib/string.c文件中,只要包含<linux/string.h>头文件,就可以使用它们;
    • 内核编程时必须使用GNU C:内核开发者总是要用到gcc提供的许多语言扩展部分(gcc是多种GNU编译器的集合,它包含了的C编译器即可以编译内核,也可以编译Linux系统上用C写的其他代码);最让人感兴趣的C语言扩展是:
      • 内联函数:GNU的C编译器支持内联函数;在内核中,为了类型安全的原因,优先使用内联函数而不是宏;
      • 内联汇编:gcc编译器支持在C函数中嵌入汇编语句;
      • 分支声明:对于条件选择语句,gcc内建了一条指令用于优化;在一个条件经常出现或只有很少才会出现时,编译器可以根据这条指令对分支条件进行优化;内核把这条指令封装成宏:如likely()和unlikely();
    • 没有内存保护机制:在内核中,不应该去做内存非法的地址访问,引用空指针等,否则内核会死掉;另外,内核中内存都不分页;
    • 不要轻易在内核中使用浮点数:
    • 容积小而固定的栈;
    • 考虑同步和并发;
      • Linux是抢占多任务操作系统:内核的进程调度程序对进程进行调度,内核必须对这些任务同步;
      • Linux内核支持多处理器系统:多个处理器运行的代码很可能会同时访问共享的同一个资源;
      • 中断是异常的,因此中断处理程序有可能访问同一资源;
      • Linux内核可以被抢占,因此几段代码可能同时访问相同的资源;
    • 可移植性的重要性;
分享到:
评论

相关推荐

    S5PV210的Linux-2.6.35内核移植

    3. **配置内核**:运行`make menuconfig`命令,配置内核以适应S5PV210。这包括选择正确的体系结构(ARM)、处理器类型(例如,S5PV210)、设备树(Device Tree)支持以及必要的硬件驱动。 4. **设备树**:S5PV210...

    北大 linux讲义 入门 内核开发 驱动

    - **自顶向下教学法:** 从宏观角度出发,逐步深入到具体的内核实现细节,使学生能够系统地掌握知识。 - **案例分析:** 通过分析具体的案例,帮助学生更好地理解抽象概念。 #### 七、结语 通过本课程的学习,学生...

    Linux Kernel Development完美版

    在《Linux Kernel Development: 完美版》这份文档中,作者Randy Dunlap详细介绍了Linux内核开发的相关知识和实践经验。作为一份全面深入的技术指南,该文档不仅涵盖了基础知识,还深入探讨了Linux社区的文化与价值观...

    Linux内核设计的艺术

    不过,可以从标题“Linux内核设计的艺术”出发,展开关于Linux内核设计方面的知识点。以下为对Linux内核设计相关的知识点详细说明: Linux内核是操作系统的核心部分,负责管理系统资源,包括CPU、内存、设备驱动...

    linux kernel 0.01 commentary

    文档还提供了一个宏观视角,展示了Linux 0.01内核的源码组织结构,从目录层级出发,解析了各个主要目录的作用与功能,如boot目录下的引导程序、kernel目录下的核心模块、mm目录下的内存管理、fs目录下的文件系统支持...

    linux 内存管理 start_kernel

    在start_kernel函数中,尽管内核初始化过程中涉及到大量的代码和复杂的逻辑,但从物理内存管理角度出发,可以通过对关键函数调用的分析,来理解Linux内核是如何逐步建立起对物理内存的管理能力的。值得注意的是,...

    讯为4418GPIO口调用过程

    从这个文件出发,开发者可以追踪到整个GPIO操作的代码路径。 在代码中,可以看到对一个名为gpio_set_value的函数的调用,这个函数是一个宏定义。要找到这个宏定义对应的代码,需要查看E:\iTOP4418\linux\kernel\...

    Linux内核设计的艺术 图解Linux操作系统架构设计与实现原理.pdf

    本书内容的组织方式突破了传统讲解方法的局限,从操作系统的实际运行过程出发,分析了每一个动作的设计意图和实现原理。其创新性的写作方式不仅注重理论知识的传授,还通过实际案例和图解方式,让读者能够透彻地理解...

    《Windows 内核情景分析 下》.(毛德操).[PDF]&ckook;.pdf

    《Windows 内核情景分析 下》是毛德操先生撰写的一本深入探讨Windows操作系统内核的书籍,专注于从实际场景出发解析Windows内核的工作机制。这本书对于深入理解Windows操作系统、进行系统级编程以及优化有着极高的...

    TensorFlow 内核剖析

    - **单层感知器**:从理论基础出发,逐步介绍如何在TensorFlow中定义模型、选择优化算法并训练模型。 - **多层感知器**:进一步探讨多层感知器的理论和实践,包括模型定义、优化技术等。 - **卷积网络**:重点...

    A Guide to Kernel Exploitation

    - **视角转换**: 从攻击者的角度出发,理解内核的设计缺陷及其利用方法。 - **策略制定**: 基于对内核的理解,制定有效的攻击策略。 **6. 用户空间进程与调度器** - **进程管理**: 解释操作系统是如何管理和调度...

    Linux Kernel validationtool

    在《Linux Kernel Validation Tools》这份资料中,作者Nicholas McGuire从兰州大学分布式与嵌入式系统实验室出发,详细介绍了针对Linux内核开发的一系列工具和技术。该文档不仅为内核开发者提供了宝贵的资源,而且...

    Linux内核编译宝典

    在深入了解Linux内核编译的过程中,本篇文章将从Linux内核编译的基础概念出发,详细介绍编译过程中的注意事项及技巧,帮助读者更好地掌握这一技能。 #### 二、理解Linux内核 1. **核心的概念**:核心(Kernel)是...

    Professional Linux Kernel Architecture

    本章从网络协议栈的角度出发,详细解析了TCP/IP协议簇的各个层次,包括网络接口、IP层、传输层等。此外,还介绍了Linux内核如何处理网络数据包的接收和发送过程,以及如何实现路由选择等功能。 #### 十三、系统调用...

    Introduction to the linux kernel

    我们可以从这些关键点出发,探讨操作系统的基本概念及其在技术史上的演变。 操作系统是一套管理计算机硬件与软件资源的程序,它为应用软件提供抽象的、高级的接口,而不是直接的机器码。例如,操作系统的文件系统...

    关于微内核的对话.pdf

    真正的技术成熟应该是能跳脱出这些无谓的争论,从“计算的本质”出发来理解事物。 作者通过与朋友的对话,提出了关于微内核与宏内核的新见解,认为微内核系统可能并不比宏内核系统慢,这在文档中提及了Minix3与...

    ArmLinux BOOTLOADER全程详解

    《ArmLinux BOOTLOADER全程详解》一文深入探讨了ARM架构下Bootloader的关键概念与实践,作者董磊鋆从基本概念出发,逐步解析了压缩内核(COMPRESSED KERNEL)、未压缩内核(DECOMPRESSED KERNEL)、JFFS2文件系统、...

Global site tag (gtag.js) - Google Analytics