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目录。至此,内核编译完成。可以重启一下系统。
Linux 编译内核的更多相关文章
- 【原创】Linux编译内核
Linux 编译内核 大致分这几个步骤 1.准备编译工具.内核文件 2.开始编译 3.将编译好的新内核install进系统 4.查看是否成功. 一.准备好必备的库和内核文件 1.添加必备的编译 ...
- linux编译内核make menuconfig报错Unable to find the ncurses libraries解决办法
在 linux 编译内核时 make menuconfig 报了下面的错误. *** Unable to find the ncurses libraries or the *** required ...
- Linux编译内核 Ubuntu18.04 -2020.11.04
Linux编译内核 Ubuntu18.04 -2020.11.04 关闭虚拟机并备份 首先关闭虚拟机,其次直接找到.vmdk所在目录,并压缩该目录实现备份 下载内核源码 Linux内核官网:https ...
- 嵌入式Linux编译内核步骤 / 重点解决机器码问题 / 三星2451
嵌入式系统更新内核 1. 前言 手里有一块Friendly ARM的MINI2451的板子,这周试着编译内核,然后更新一下这个板子的Linux内核,想要更新Linux Kernel 4.1版本,但是种 ...
- Linux编译内核提示'make menuconfig' requires the ncurses libraries错误
原来使用的ubuntu 11.10系统由于误操作,导致系统崩溃,重新安装了ubuntu 11.10: 在编译内核的时候,提示如下错误: dingq@wd-u1110:~/hwsvn/2sw/1prj_ ...
- linux编译内核
ubuntu 14.04 编译内核出现unable to locate package ncurses-devel 问题的解决 首先,在make menuconfig的时候就会提示没有 nucrs ...
- linux 编译内核 /boot空间不足?
/boot空间一般分配100M的空间,本来是够用的,由于频繁的更新导致旧的不再使用的内核文件也保留在boot空间里,占着位置,所以把这些不用的内核文件下载掉boot空间就能释放出一部分, 具体做法为 ...
- linux 编译内核[scripts/kconfig/dochecklxdialog] 错误
administrator@ubuntu:~/linux-2.6.28-omap$ make menuconfig *** Unable to find the ncurses libraries o ...
- 【转】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 ...
随机推荐
- ACM学习历程—51NOD 1770数数字(循环节)
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 这是这次BSG白山极客挑战赛的A题.由于数字全部相同,乘上b必然会 ...
- 并发问题 关于Redis
并发问题 关于Redis [吐槽]Jimesembria 付费请人解这个BUG , 有没有php同学有兴趣,(问题原因是理论上是5分钟内不生产同样金额的订单, 但是由于并发原因没控制好) 10:34: ...
- cvc-complex-type.2.4.a: Invalid content was found starting with element 'async-supported'
<servlet> <servlet-name>springMVC</servlet-name> <servlet-class>org.springfr ...
- 【转】WINSOCKET客户端编程以及JMETER外部调用
1 public class SocketClient { 2 OutputStream clientout = null; 3 InputStream clienIn = null; 4 byte[ ...
- java流类,快速统计出字符次数+++
总结:学会给一个合适的命名,不要总是abc..虽然简单,但是不容易看懂,和方便去理解 package com.aini; import java.io.File; import java.io.Fil ...
- Playbooks 中的错误处理
Topics Playbooks 中的错误处理 忽略错误的命令 控制对失败的定义 覆写更改结果 Ansible 通常默认会确保检测模块和命令的返回码并且会快速失败 – 专注于一个错误除非你另作打算. ...
- 第八章 数据库连接JDBC(待续)
············
- Win8.1(64bit) Hyper-V 安装Ubuntu 14.04LTS(64 bit)
为了学习在Linux平台下开发,时隔将近一年多,重新搭建开发环境. 写文档确实很费时间,不过还是很有必要写的,这么一个简单的事情花了接近3个小时才算最终大功告成. 像这种连环嵌套的问题,一旦超过了1个 ...
- Redhat 无线(Wifi)上网命令行配置
小结两种命令行模式下配置无线wife的方法,实践测试通过(Red Hat Enterprise Linux release 6.0 Beta(Santiago)) 一.使用wpa_supplicant ...
- 一.lock的使用
使用ReentrantLock类 ReentrantLock类在扩展功能上更加强大,比如嗅探锁定,多路分支通知.而且在使用上也比synchronized更加灵活 调用ReentrantLock对象的l ...