zoukankan      html  css  js  c++  java
  • Week4_Linux书本一二两章

    第一章的学习内容就是对Linux内核有一个基本的了解,同时知道一些关于Linux的知识。  

          学习Linux,可以自己有一台装有Linux操作系统的机器,源代码的作用无可替代; Linux发展历程简介:Linux是Unix家族的重要成员,一名大学生Linus,他对Unix源代码的修改构建了现在Linux系统的雏形,而且Unix家族的源码都采用开放的原则。

      Linux操作系统与其它操作系统的不同点:首先介绍一下单内核和微内核:单内核:单内核就是把它从整体上作为一个单独的大过程来实现,同时也运行在一个单独的地址空间上,内核可以直接调用函数,这种模式具有简单和性能高的特点。微内核:微内核并不作为一个单独的大过程来实现,微内核的功能被划分为多个独立的过程,每个过程都叫一个服务器,所有的服务器都保持独立运行在各自的地址空间。这样不能像单模块内核那样直接调用函数,而是通过消息传递来实现。

          Linux系统是一个单内核,运行在单独的内核地址空间上,模块化设计,强占式内核,支持内核线程以及动态装在内核模块的能力

    第二章的学习内容就是从内核出发了解一些Linux内核代码的基本知识,有利于之后的Linux内核代码的学习
      使用一个新的版本控制系统来管理Linux内核源代码:Git
         使用Git版本来获取Linux的一个最新版本的代码如下图所示:
    $ git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux -2.6.git
       下载完毕代码后,可以更新分支到Linux的最新分支:
    $git pull
        内核的源代码可能以两种形式进行压缩,这两种形式分别是:zip和bzip2
       如果压缩的形式是bzip2,解压代码:$ tar xvjf linux-x.y.z.tar.bz2   如果压缩的形式是GNU的zip,解压代码:$ tar xvzf linux-x.y.z.tar.gz   注意:使用以上几种方式,内核源码一般安装在/usr/src/linux目录下,但是这个源代码最好不要用于开发,也不要以root身份对内核进行修改。   内核源码树如下图所示:
      
     编译内核的一些内容:
        1.配置内核:
        配置内核有三个可选选项:yes、no或者是module 
        其中yes表示把代码编译进主内核镜像中,而不是作为一个模块,no表示不编译,module表示该配置项被选定了,但编译的时候这部分功能的实现是以模块(一种可以动态安装的独立代码段)
    内核使用了不同的工具来简化内核配置,下面是一些常见的口令:
    $make config #这是字符界面的,用于遍历一遍所有的配置选项,要求用户逐一选择yes、no或者是module选项
    $make menuconfig #用于gtk+的图形界面工具直接进行选择,将会把所有配置选项分门别类放置
    $make gconfig #也是按照图形界面将配置选型分门别类的放置供用户选择。
    $make deconfig #基于默认的配置为你的体系创建一个配置。

        2.1这些配置项被放在内核代码树根目录下的.config文件,可以直接修改它,在你修改过配置文件之后,或者用已有的配置文件配置新的代码的时候,应该验证和更新配置,命令为:

    $make oldconfig
        配置选项CONFIG_IKCONFIG_PROC把完整的压缩过的内核配置文件放在/proc/config.gz下面,当编译新内核的时候就可以方便的克隆出当前的配置,如果我们当前的内核已经启用了这个选项,就可以很方便的从/proc下面复制出配置文件并用来编译一个新的内核,命令:
    $zcat /proc/config.gz >.config
    $make oldconfig
       内核配置好之后,我们可以用简单的命令来编译它:$make
       2.2为了减少编译的垃圾信息,可以用命令来进行重定向到永无返回值的黑洞/del/null.
    此时输入如下命令:$ make >/dev/null
       2.3为了加快处理器系统上的编译过程,以多个作业的方式完成内核的编译,可以使用如下命令:
    $make -jn #其中n是要衍生出的作业数
       例如如果在一个16核处理器上,每个处理器衍生出一个或者两个作业,可以输入如下命令:
    $make -j32 >/dev/null
       2.4模块的按装是自动的,也是独立于体系结构的,以root身份,只要运行: % make module_install
       3.内核开发的一些主要特点和注意事项
       内核编程时既不能访问C库也不能访问标准的C头文件
       内核编程时必须使用GUN C:内联函数,在字里行间展开,定义内联函数时,需要用static作为关键字,并且用inline来限制它;内联汇编,格式如下;还有分支声明
    _asm_(
            汇编语句模块:
            输出部分:函数调用时候的参数
           输入部分:函数调用时候的参数
           破坏描述部分):
           即格式为asm("statements":output_regs:input_regs:clobbered_regs);
        内核编程时缺乏像用户空间那样的内存保护机制    内核编程时难以执行浮点运算
        内核给每个进程只有一个很小的定长堆栈
        由于内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发
        要考虑可移植的重要性
  • 相关阅读:
    Firefly多路人脸识别解决方案
    Jquery插件开发之图片放大镜效果(仿淘宝)
    html5 Game开发系列文章之 零[开篇]
    html5 Game开发系列文章之 一 精灵(上)
    html5 Game开发系列文章之 三 搭建基本游戏框架(代码封装)
    html5 Game开发系列文章之 二 精灵(下)
    JQEURY 插件之 简洁小提示框效果[ToolTips]
    18位身份证和组织机构代码校验ORACLE函数
    linux下apache+SVN搭建完美版
    MYSQL的常用命令和增删改查语句和数据类型
  • 原文地址:https://www.cnblogs.com/20135124freedom/p/5281446.html
Copyright © 2011-2022 走看看