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

    编译内核步骤:

    1.
    先查看自己OS使用的内核版本 

    mrzhang@mrzhang:~$ uname -r
    4.4.0-51-generic
    mrzhang@mrzhang:~$

    2.
    如果安装系统时,自动安装了源码。在 /usr/src 目录下有对应的使用的版本目录(ubuntu安装完一般没有源码需要自己下载)。如下:

    后缀generic表示通用版。

    mrzhang@mrzhang:/usr/src$ ls
    linux-headers-4.4.0-21  linux-headers-4.4.0-21-generic  linux-headers-4.4.0-51  linux-headers-4.4.0-51-generic

    3.

    下载源码 指令apt-cache search linux-source查看系统可用的源码版本

    mrzhang@mrzhang:/usr/src$ apt-cache search linux-source
    linux-source - Linux kernel source with Ubuntu patches
    linux-source-4.4.0 - Linux kernel source for version 4.4.0 with Ubuntu patches
    linux-source-4.8.0 - Linux kernel source for version 4.8.0 with Ubuntu patches
    mrzhang@mrzhang:/usr/src$

    安装linux源码。下载源码包。

    mrzhang@mrzhang:/usr/src$ sudo apt-get install linux-source-4.4.0

    下载完成后,在/usr/src下,文件名为:linux-source-4.4.0.tar.bz2,是一个压缩包,解压缩既可以得到整个内核的源代码: 
    注意 已经切换到超级用户模式 
    root@mrzhang:/usr/src#tar jxvf linux-source-4.4.0.tar.bz2 
    解压后生成一个新的目录/usr/src/linux-source-4.4.0,所有的源代码都在该目录下。

    4. 链接源码树

    ln -s /usr/src/linux-source-4.4.0/    /lib/modules/4.4.0-51-generic/build  #源代码的目录要和build的内核版本匹配 

    进入该目录 
    开始配置内核 选择最快的原版的配置(默认)方式 (我是如此) 
    root@mrzhang:/usr/src/linux-source-4.4.0# make oldconfig 
    当然你也可以使用 自己喜欢的配置方式 如 menuconfig , xconfig(必须有GTK环境吧)。反正不用剪裁什么,所以不管那种方式能配置它就行了。 
    完成后,开始make 吧 这儿比较久 一般有1一个小时吧。 

    直接make bzImage。执行结束后,可以看到在当前目录下生成了一个新的文件: vmlinux, 其属性为-rwxr-xr-x。 
    mrzhang@mrzhang:/usr/src/linux-source-4.4.0$ make bzImage 

    第一次会出现如下错误:

    scripts/sign-file.c:23:30: fatal error: openssl/opensslv.h

    解决方法如下:缺少这个库。

    sudo apt-get install libssl-dev

    然后 : 
    root@mrzhang:/usr/src/linux-source-4.4.0#make modules             #将内核选项中的M选项的配置编译为了*.ko文件。
    root@mrzhang:/usr/src/linux-source-4.4.0#make modules_install   #将生成的*.ko文件复制到/lib/modules/<内核版本号>/下面,并运行depmod生成modules.dep内核模块的依赖文件,insmod和modprobe需要这些依赖去自动加载依赖的ko文件,否则需要手动添加依赖模块后,才能将内核模块insert进内核中去。 或者用modprobe, modprobe会读取文件 /lib/modules/4.4.0-51-generic/modules.dep . 此文件可以由工具depmod 根据当前加载的ko模块生成。这个文件主要指明了内核版本需要加载哪些内核模块以及内核模块的依赖模块。modules.dep假设ko文件位于目录/lib/modules/version/目录下面。

    以行为单位

    #modulea.ko 依赖depend1.ko和depned2.ko

    MODULEA.ko:  DEPEND1.ko  DEPEND2.ko 

    更准确的描述如下:

    /lib/modules/2.6.29/kernel/a.ko: /lib/modules/2.6.29/kernel/c.ko /lib/modules/2.6.29/kernel/b.ko

    /lib/modules/2.6.29/kernel/b.ko:

    /lib/modules/2.6.29/kernel/c.ko: /lib/modules/2.6.29/kernel/b.ko

    modproe a.ko的时候,他会按照顺序(从右向左)加载b.ko和c.ko.
    执行结束之后,会在/lib/modules下生成新的目录/lib/modules/linux-source-4.4.0-generic/ 
    。 在随后的编译模块文件时,要用到这个路径下的build目录。至此,内核编译完成。可以重启一下系统。 

  • 相关阅读:
    SQL舊面版與標准版不能互導數據
    今天總算可以繼續寫日記了
    MDAC2.7没有安装,控件不能运行
    希望5月份网络能开通
    SQLITE入门逐步讲解SQLITE命令行(一)
    C#使用SQLite数据库的代码示例
    红外遥控 Arduino 实例
    SQLite数据库是中小站点CMS的最佳选择
    防止 SQLite 数据库被下载的方法
    关于Linux下的Grep命令简介
  • 原文地址:https://www.cnblogs.com/MrZhang1/p/6139302.html
Copyright © 2011-2022 走看看