编译内核步骤:

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目录。至此,内核编译完成。可以重启一下系统。

Linux 编译内核的更多相关文章

  1. 【原创】Linux编译内核

    Linux 编译内核 大致分这几个步骤 1.准备编译工具.内核文件 2.开始编译 3.将编译好的新内核install进系统 4.查看是否成功.   一.准备好必备的库和内核文件   1.添加必备的编译 ...

  2. linux编译内核make menuconfig报错Unable to find the ncurses libraries解决办法

    在 linux 编译内核时 make menuconfig 报了下面的错误. *** Unable to find the ncurses libraries or the *** required ...

  3. Linux编译内核 Ubuntu18.04 -2020.11.04

    Linux编译内核 Ubuntu18.04 -2020.11.04 关闭虚拟机并备份 首先关闭虚拟机,其次直接找到.vmdk所在目录,并压缩该目录实现备份 下载内核源码 Linux内核官网:https ...

  4. 嵌入式Linux编译内核步骤 / 重点解决机器码问题 / 三星2451

    嵌入式系统更新内核 1. 前言 手里有一块Friendly ARM的MINI2451的板子,这周试着编译内核,然后更新一下这个板子的Linux内核,想要更新Linux Kernel 4.1版本,但是种 ...

  5. Linux编译内核提示'make menuconfig' requires the ncurses libraries错误

    原来使用的ubuntu 11.10系统由于误操作,导致系统崩溃,重新安装了ubuntu 11.10: 在编译内核的时候,提示如下错误: dingq@wd-u1110:~/hwsvn/2sw/1prj_ ...

  6. linux编译内核

    ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决   首先,在make menuconfig的时候就会提示没有 nucrs ...

  7. linux 编译内核 /boot空间不足?

    /boot空间一般分配100M的空间,本来是够用的,由于频繁的更新导致旧的不再使用的内核文件也保留在boot空间里,占着位置,所以把这些不用的内核文件下载掉boot空间就能释放出一部分, 具体做法为 ...

  8. linux 编译内核[scripts/kconfig/dochecklxdialog] 错误

    administrator@ubuntu:~/linux-2.6.28-omap$ make menuconfig *** Unable to find the ncurses libraries o ...

  9. 【转】Linux CentOS内核编译:下载CentOS源码、编译2.6.32-220的错误(apic.c:819 error 'numi_watchdog' undeclared)

    一.下载CentOS源码 1.1 查看CentOS版本 cat /etc/issue 1.2 查看Linux内核版本 uname -r 1.3 下载 文件名:kernel-2.6.32-220.el6 ...

随机推荐

  1. deep Learning 之入门一 (ps:知乎上看到的大佬写的非常好,所以自己记录下)

    作者:Jacky Yang 链接:https://www.zhihu.com/question/26006703/answer/129209540 来源:知乎 著作权归作者所有.商业转载请联系作者获得 ...

  2. Sapnco3 RfcTable Structure

    RfcTable 中字段 并不固定,以下内容仅供参考 1. 包含IDOC的 RfcTable SDATA字段值为IDOC数据,解析IDOC数据需依据IDOC字段长度对SDATA进行截取 functio ...

  3. element resetFields 方法报错

    resetFields  对整个表单进行重置,将所有字段值重置为初始值并移除校验结果:如果用了之后报错如下: 查了下资料,是DOM加载的顺序问题: 解决方法: this.$nextTick(() =& ...

  4. tornado日志管理

    默认数据格式 默认情况下,采用tornado的web框架运行起来之后,任何访问都会直接在控制台输出日志信息,格式如下: [I 160807 09:27:17 web:1971] 200 GET / ( ...

  5. Kreyos 资料收集

    Kreyos 资料收集 使用 默认需要连接 APP 解锁. 固件 https://github.com/kreyosopensource/KreyosFirmware Android 源码 https ...

  6. Ubuntu的复制粘贴操作及常用快捷键(摘自网络)

    Ubuntu的复制粘贴操作 终端最大化快捷键:crtl + win + 上 1.最为简单,最为常用的应该是鼠标右键操作了,可以选中文件,字符等,右键鼠标,复制,到目的地右键鼠标,粘贴就结束了. 2.快 ...

  7. RK3288 dts文件中背光配置参数

    backlight { // 设备名(用于匹配) compatible = "pwm-backlight"; // pwm编号 通道 频率(ns) pwms = <& ...

  8. 通过docker构建zabbix监控系统

    下载zabbix的镜像 $ docker pull berngp/docker-zabbix Using default tag: latest latest: Pulling from berngp ...

  9. HDU 3018 Ant Trip(欧拉回路,要几笔)

    Ant Trip Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  10. 杂项-操作系统-百科:Solaris

    ylbtech-杂项-操作系统-百科:Solaris Solaris (读作 /se'laris:/ 或者 /so'le:ris/)是Sun Microsystems研发的计算机操作系统.它被认为是U ...