linux内核入门(1)——基本简介和编译
获取linux内核源码,自己选择版本(我下载的是linux-3.1.10.tar.gz ,我是直接下载到/usr/src文件夹的)
下载地址传送门 https://www.kernel.org/pub/linux/kernel/
也可以去我的网盘下载: https://pan.baidu.com/s/1i5dyfkT
甚至直接在命令行下载 wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.1.tar.gz
进入/usr/src进行解压
tar -zxvf linux-3.1.10.tar.gz 到当前文件夹
[root@bogon src]# ls
debug kernels linux-2.6.1 linux-3.10.1 linux-3.10.1.tar.gz linux-3.4.16
[root@bogon src]# cd linux-3.10.1
[root@bogon linux-3.10.1]# ls
arch //特定体系结构的源码
Documentation //内核源码文档
init //内核引导和初始化
lib //通用内核函数
README
sound //声音子系统
block //块设备I/O层
drivers //设备驱动程序
ipc //进程间通信代码
MAINTAINERS //维护者列表,它们负责维护内核子系统和驱动程序
REPORTING-BUGS
tools //在linux开发中有用的工具
COPYING //内核许可证
firmware //使用某些驱动程序而需要的设备固件
Kbuild
Makefile //基本内核的Makefile
samples //示例代码
usr //早期用户空间代码(所谓的initramfs)
CREDITS //开发了很多内核代码的开发者列表
fs //vfs和各种文件系统
Kconfig
mm //内存光里子系统和VM
scripts //编译内核所用的脚本
virt //虚拟化基础结构
crypto //加密API
include //内核头文件
kernel //像调度程序这样的核心子系统
net //网络子系统
security //linux安全模块
编译时需要对内核进行配置
配置项要么是二选一,要么三选一,yes or no,yes or no or module。module是指以模块的形式生成,该选项一般用于驱动程序。
在上面的基础上我们已经进入linux-3.10.1文件夹了
现在开始进行配置(在命令行输入下列任一命令)
make config 最简单的配置,需要人工逐一进行选择,非常耗时
make menuconfig 图形化的配置方式
make gconfig 也是图形化的配置方式
make defconfig 选择默认配置
我们使用第二种方法。使用make menuconfig可能会提示失败,执行下面这条语句即可
yum install -y ncurses-devel
如果使用该种方法的话,需要配置几个地方。
往下找到filesystem回车
往下空格选中XFS realtime subvolume support
继续往下空格选中 NILFS2那个选项
继续往下空格选择DOS FAT NT filesystem
然后找到空格选中NTFS filesystem,选中之后下面会多两个选项,选择最后一个NTFS write support空格选择,接下来就是保存,然后一直退出退出
[root@bogon linux-3.10.1]# ls -a
. COPYING firmware ipc .mailmap README sound
.. CREDITS fs Kbuild MAINTAINERS REPORTING-BUGS tools
arch crypto .gitignore Kconfig Makefile samples usr
block Documentation include kernel mm scripts virt
.config drivers init lib net security
[root@bogon linux-3.10.1]#
执行make defconfig 后会在当前目录下看到.config文件,该文件存放者配置项,可以在这个文件里直接查找和修改内核选项,修改完成后输入命令 make oldconfig进行更新配置(ls -a也没有显示出来这个文件,但是可以成功执行)
内核按照上面的配置配置好之后,进行编译,只需要输入命令make,回车之后就是一直在刷新的编译信息,如果只想显示警告和错误,可以把make修改为make > /dev/null (/dev/null是黑洞)
其实上一个make命令只能产生一个作业,如果你的内核够多,可以使用命令 make -jn,该命令会同时产生多个作业,加速编译(不过需要在Makefile编码没有错误的情况下才能正常进行多作业编译),其中n是作业数,理论每个处理器可以产生一个或者两个编译作业,编译内核过程挺耗费时间的
make命令执行完后,进行安装模块
[root@bogon linux-3.10.1]# make modules_install
INSTALL net/ipv4/netfilter/ipt_MASQUERADE.ko
INSTALL net/ipv4/netfilter/iptable_nat.ko
INSTALL net/ipv4/netfilter/nf_nat_ipv4.ko
INSTALL net/netfilter/nf_nat.ko
INSTALL net/netfilter/nf_nat_ftp.ko
INSTALL net/netfilter/nf_nat_irc.ko
INSTALL net/netfilter/nf_nat_sip.ko
INSTALL net/netfilter/xt_LOG.ko
INSTALL net/netfilter/xt_mark.ko
INSTALL net/netfilter/xt_nat.ko
DEPMOD 3.10.1
[root@bogon linux-3.10.1]# make install //直接安装内核
sh /usr/src/linux-3.10.1/arch/x86/boot/install.sh 3.10.1 arch/x86/boot/bzImage \
System.map "/boot"
[root@bogon linux-3.10.1]# grub2-mkconfig
很遗憾,我第一次失败,重启后提示api文件系统挂载失败。没关系,再来一次
清除垃圾(这一步:一般是在就内核重新编译时使用,在编译新的内核是不需要)
make clean及make mrproper;
[root@bogon linux-3.10.1]# make clean
CLEAN .
CLEAN arch/x86/kernel/cpu
CLEAN arch/x86/kernel
CLEAN arch/x86/realmode/rm
CLEAN arch/x86/vdso
CLEAN arch/x86/lib
CLEAN drivers/tty/vt
CLEAN drivers/video/logo
CLEAN firmware
CLEAN kernel
CLEAN lib
CLEAN security/selinux
CLEAN usr
CLEAN arch/x86/boot/compressed
CLEAN arch/x86/boot
CLEAN arch/x86/tools
CLEAN .tmp_versions
[root@bogon linux-3.10.1]# make mrproper
CLEAN scripts/basic
CLEAN scripts/kconfig
CLEAN scripts/mod
CLEAN scripts/selinux/genheaders
CLEAN scripts/selinux/mdp
CLEAN scripts
CLEAN include/config include/generated arch/x86/include/generated
CLEAN .config .config.old .version include/generated/uapi/linux/version.h Module.symvers
[root@bogon linux-3.10.1]#
然后再重复执行上面的命令,最后重启
第二次,终于可以进入系统,不过不知道是哪里出问题了,各种命令都无法使用,之可以uname -r 然后显示版本,还有其他几个命令,像ifconfig,ping,lsmod之类命令一概执行失败。等我找出问题了再继续更新帖子
linux内核入门(1)——基本简介和编译的更多相关文章
- Linux内核学习笔记-1.简介和入门
原创文章,转载请注明:Linux内核学习笔记-1.简介和入门 By Lucio.Yang 部分内容来自:Linux Kernel Development(Third Edition),Robert L ...
- linux 学习笔记 Linux内核的四大功能简介
一 内存管理 默认情况下,运行在Linux系统上的每个进程都有各自的内存页面:进程不能访问其他进程正在使用的内存页面. 内核维护着自己的内存区域 用户进程不能访问内核进程的内存 可以创建一些共享内存页 ...
- Linux内核的整体架构简介
1. 前言 本文是“Linux内核分析”系列文章的第一篇,会以内核的核心功能为出发点,描述Linux内核的整体架构,以及架构之下主要的软件子系统.之后,会介绍Linux内核源文件的目录结构,并和各个软 ...
- 025 Linux基础入门-----历史、简介、版本、安装
1.linux历史 Linux最初是由芬兰赫尔辛基大学学生Linus Torvalds由于自己不满意教学中使用的MINIX操作系统, 所以在1990年底由于个人爱好设计出了LINUX系统核心.后来发布 ...
- Linux内核启动流程(简介)
1. vmlinux.lds 首先分析 Linux 内核的连接脚本文件 arch/arm/kernel/vmlinux.lds,通过链接脚本可以找到 Linux 内核的第一行程序是从哪里执行的: 第 ...
- 【2016-08-21】Linux内核版本编号规则简介
我们已经了解可以使用下面的几天命令来查看Linux内核版本及Ubuntu发行版本的信息: uname -r uname -a cat /proc/version lsb-release -a 等等 可 ...
- Linux内核监控模块-0-开篇简介
最近做了一个关于Linux内核编程的项目,主要实现的功能是对文件系统的监控. 我采用的方式是将监控的功能做成一个可加载模块(LKM)的形式,动态加载到Linux内核中.在这个内核层的“监控模块”中,我 ...
- Linux内核入门到放弃-页面回收和页交换-《深入Linux内核架构》笔记
概述 可换出页 只有少量几种页可以换出到交换区,对其他页来说,换出到块设备上与之对应的后备存储器即可,如下所述. 类别为 MAP_ANONYMOUS 的页,没有关联到文件,例如,这可能是进程的栈或是使 ...
- Linux内核入门到放弃-网络-《深入Linux内核架构》笔记
网络命名空间 struct net { atomic_t count; /* To decided when the network * namespace should be freed. */ a ...
随机推荐
- Struts2的基础知识
Struts2属于MVC框架 Struts2的优点: 1.侵入性低 2.提供了拦截器,可以利用拦截器进行AOP编程 3.提供了类型转换器 4.支持多种表示层技术:jsp,freeMarker,Vele ...
- selenium(七)webdriverwait,高级等待,替代sleep
#coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from seleni ...
- dede织梦调取一二三级栏目名及栏目下的内容列表的方法
网站根据需要,把地区划成省-市-文章的层级结构,栏目首页需要显示的是 复制代码代码如下: {dede:channelarclist} <!--省显示--> <a href=" ...
- 《Python》线程池、携程
一.线程池(concurrent.futures模块) #1 介绍 concurrent.futures模块提供了高度封装的异步调用接口 ThreadPoolExecutor:线程池,提供异步调用 P ...
- Linux文件系统中的inode节点详细介绍
这篇文章主要介绍了Linux文件系统中的inode节点,详细讲解了inode是什么.inode包含的信息.inode号码的相关资料等,需要的朋友可以参考下 一.inode是什么? 理解inode,要从 ...
- hdu-2063-过山车(匈牙利算法)
过山车 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找 ...
- 3.4 C++名字隐藏
参数:http://www.weixueyuan.net/view/6361.html 总结: 如果派生类中新增一个成员变量,该成员变量与基类中的成员变量同名,则新增的成员变量就会遮蔽从基类中继承过来 ...
- TransactionScop事务机制的使用
如果在C#中使用TransactionScope类(分布式事务),则须注意如下事项:1.在项目中引用using System.Transactions命名空间(先要在添加net组件的引用); 2.具体 ...
- 字典树trie学习
字典树trie的思想就是利用节点来记录单词,这样重复的单词可以很快速统计,单词也可以快速的索引.缺点是内存消耗大 http://blog.csdn.net/chenleixing/article/de ...
- shell脚本实例-mysql多机部署
今天我给大家分享shell 安装mysql 多机部署的实例,本次实验是基于各个主机的公钥已经配置好了,如果还不会推送公钥的同学,可以看看我以前写的文章,那里面有写推公钥的实例,mysql 多机部署一般 ...