zoukankan      html  css  js  c++  java
  • Linux内核编译

    内核可以简单理解为一个程序,只不过是直接在硬件上运行,编译内核根编译程序过程基本一致。为什么要编译内核?比如说新的内核提供了对新的文件系统格式的支持,或者提供了新的硬件驱动。下载内核源码中包含各种各样功能的源码,但并不是所有功能我们都需要,为了精简内核或者当前内核无法驱动现有硬件设备,所以编译前选择我们需要的功能选项(像硬盘驱动,硬盘接口有IDE,SCSI,你可以把每一种接口的驱动都编译,也可以只选择现在要用的),而后编译生成内核文件。

    基本实现过程:
    (1)准备好当前编译环境,获取源代码
    (2)获取当前系统硬件设备信息,以编译对应的内核源码。
    (3)设置内核编译的功能选项(make menuconfig)
    (4)进行编译过程

    获取目标主机上硬件设备的相关信息:
    三种方式获取CPU:
            ~]# cat  /proc/info
            ~]# lscpu
            ~]# x86info –a
    PCI设备:
            ~]# lspci       使用-v 或者-vv查看更详细信息
            ~]# lsusb
            ~]# lsblk
    了解全部硬件设备信息(类似Windows设备管理器)
            ~]# hal-device

    解压内核文件
            ~]# tar  xf  linux-3.10.67.tar.xz  -C  /usr/src
            ~]# cd  /usr/src
            ~]# ln  -s  linux-3.10.67  linux
            ~]# cd  linux
    按需选择功能进行编译
            ~]# make menuconfig           配置内核选项,生成./config(/boot/config-version文件是当前运行内核的配置)
    进行编译过程      
            ~]# make  [-j #]            编译内核,可使用-j指定编译线程数量
            ~]# make modules_install    安装内核模块
            ~]# make install            生成vmlinuz ,生成initramfs,更改grub配置文件

    screen命令引入:
    为什么需要这个命令?很多程序在附着在终端上启动,当终端关闭的时候,此程序也同时关闭。screen允许我们在终端上打开多个虚拟的屏幕(类似Linux图形界面下打开terminal程序的多个标签,screen相当于在字符界面实现同样功能,实现多窗口操作)。这样即使终端关闭,这些虚拟屏幕依然运行,其中运行的程序也不会被终端关闭所影响。
            打开screen: ~]# screen
            离开screen: Ctrl+a, d
            列出screen: ~]# screen  -ls
            连接至screen: ~]# screen  -r   SCREEN_ID
            关闭screen:  ~]# exit

    make的常用选项
        使用make help查看所有选项
        支持“更新”模式进行配置:在已有的.config文件的基础之上进行“修改”配置;
            (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项;
            (b) make  menuconfig:基于cureses的文本配置窗口;
            (c) make  gconfig:基于GTK开发环境的窗口界面(当前桌面是gnome还是kde无关),包组“桌面平台开发”
            (d) make  xonfig:基于QT开发环境的窗口界面;
        支持“全新配置”模式进行配置(不保留之前已配置的):
            (a) make  defconfig:基于内核为目标平台提供的“默认”配置为模板进行配置;
            (b) make   allnoconfig:所有选项均为“no”;

    编译内核中的一部分代码:
            (i) 只编译某子目录中的相关代码:
             # cd  /usr/src/linux
             # make  path/to/dir/  只能基于源码根目录执行make
            (ii)只编译一个特定的模块
             # cd  /usr/src/linux
             # make  path/to/dir/file.ko   编译完成复制到/lib/modules下即可使用

    交叉编译(目标平台与当前编译操作所在的平台不同)
             # make  ARCH=arch_name
             要获取特定目标平台的使用帮助:                   
             # make  ARCH=arch_name help

    如何在执行过编译操作的内核源码目录上做重新编译:
             # make clean:清理编译生成的绝大多数文件,但会保留config,及编译外部模块所需要的文件;
             # make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件;
             # make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件

  • 相关阅读:
    数据库异常处理记录
    FINEMVC重定向和显示合计
    有意思的文章的链接
    oralce 创建用户和权限
    FINEUI(MVC) grid 双击弹窗功能
    FINEUI(MVC)布局问题记录
    通过判断cookie过期方式向Memcached中添加,取出数据(Java)
    通过数组方式向Oracle大批量插入数据(10万条11秒)
    Python基础学习13--面向对象
    Python基础学习12--变量作用域
  • 原文地址:https://www.cnblogs.com/otherside/p/6684139.html
Copyright © 2011-2022 走看看