系统安装----内核编译
2016-03-28 19:12
302 查看
编译内核为什么需要编译内核?
linux发行商为了使其发行版在高低硬件平台“通用”,以较低平台进行了编译。为了发挥硬件平台的新特性,我们需要把新特性加入到内核中。
怎样进行编译呢?
前提:
(1) 准备好开发环境;
(2) 获取目标主机上硬件设备的相关信息;
(3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;
(4) 获取内核源代码包:www.kernel.org
准备开发环境:
CentOS 6.7:
包组:Development Tools 、 Server Platform Development
CentOS 7:
包组:Development Tools 、Server Platform Development
包:ncurses-devel 基于文本的内核配置窗口包
为了实现交叉编译需要获取目标主机上硬件设备的相关信息:
CPU:
~]# cat /proc/info
~]# lscpu
~]# x86info -a
PCI设备:
~]# lspci
-v 详细
-vv 更详细
~]# lsusb
-v 详细
-vv 更详细
~]# lsblk 块设备
了解全部硬件设备信息:以后udev定位某设备的时候可参考
~]# 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 配置内核选项
注:menuconfig 是基于文本的内核配置窗口包ncurses-devel
~]# make [-j #] 编译内核,可使用-j指定编译线程数量
~]# make modules_install 安装内核模块
~]# make install 安装内核
可以试试新内核了,在grub里指向新内核,重启系统,选择使用新内核。
内核编译的拓展说明:
(1) 配置内核选项:支持“更新”模式进行配置:在已有的.config文件的基础之上进行“修改”配置; (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项; (b) make menuconfig:基于cureses的文本配置窗口; (c) make gconfig:基于GTK开发环境的窗口界面。注包组“桌面平台开发” (d) make xonfig:基于QT开发环境的窗口界面;注:需要安装KDE开放组件
支持“全新配置”模式进行配置: (a) make defconfig:基于内核为目标平台提供的“默认”配置为模板进行配置; (b) make allnoconfig:所有选项均为“no”; (2) 部分编译 (b) 编译内核中的一部分代码: (i) 只编译某子目录中的相关代码: # cd /usr/src/linux # make path/to/dir/ (ii)只编译一个特定的模块 # cd /usr/src/linux # make path/to/dir/file.ko
(c) 如何交叉编译:目标平台与当前编译操作所在的平台不同; # make ARCH=arch_name 要获取特定目标平台的使用帮助:# make ARCH=arch_name help 当前平台的帮助 # make help
(3) 如何在执行过编译操作的内核源码树上做重新编译:
事先清理操作:# make clean:清理编译生成的绝大多数文件,但会保留config,及编译外部模块所需要的文件;# make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件;# make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件;
为什么用到screen?
screen是为了解决当远程编译内核时候,因为时间过长远程连接断开导致编译失败。它可以打开一个新的界面保存那一刻的状态。
screen命令用法:
打开screen: ~]# screen
拆除screen: Ctrl+a, d
列出screen: ~]# screen -ls
连接至screen: ~]# screen -r SCREEN_ID
关闭screen: ~]# exit
本文出自 “学而思” 博客,请务必保留此出处http://xwj4611.blog.51cto.com/7126230/1757656
linux发行商为了使其发行版在高低硬件平台“通用”,以较低平台进行了编译。为了发挥硬件平台的新特性,我们需要把新特性加入到内核中。
怎样进行编译呢?
前提:
(1) 准备好开发环境;
(2) 获取目标主机上硬件设备的相关信息;
(3) 获取到目标主机系统功能的相关信息,例如要启用的文件系统;
(4) 获取内核源代码包:www.kernel.org
准备开发环境:
CentOS 6.7:
包组:Development Tools 、 Server Platform Development
CentOS 7:
包组:Development Tools 、Server Platform Development
包:ncurses-devel 基于文本的内核配置窗口包
为了实现交叉编译需要获取目标主机上硬件设备的相关信息:
CPU:
~]# cat /proc/info
~]# lscpu
~]# x86info -a
PCI设备:
~]# lspci
-v 详细
-vv 更详细
~]# lsusb
-v 详细
-vv 更详细
~]# lsblk 块设备
了解全部硬件设备信息:以后udev定位某设备的时候可参考
~]# 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 配置内核选项
注:menuconfig 是基于文本的内核配置窗口包ncurses-devel
~]# make [-j #] 编译内核,可使用-j指定编译线程数量
~]# make modules_install 安装内核模块
~]# make install 安装内核
可以试试新内核了,在grub里指向新内核,重启系统,选择使用新内核。
内核编译的拓展说明:
(1) 配置内核选项:支持“更新”模式进行配置:在已有的.config文件的基础之上进行“修改”配置; (a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项; (b) make menuconfig:基于cureses的文本配置窗口; (c) make gconfig:基于GTK开发环境的窗口界面。注包组“桌面平台开发” (d) make xonfig:基于QT开发环境的窗口界面;注:需要安装KDE开放组件
支持“全新配置”模式进行配置: (a) make defconfig:基于内核为目标平台提供的“默认”配置为模板进行配置; (b) make allnoconfig:所有选项均为“no”; (2) 部分编译 (b) 编译内核中的一部分代码: (i) 只编译某子目录中的相关代码: # cd /usr/src/linux # make path/to/dir/ (ii)只编译一个特定的模块 # cd /usr/src/linux # make path/to/dir/file.ko
(c) 如何交叉编译:目标平台与当前编译操作所在的平台不同; # make ARCH=arch_name 要获取特定目标平台的使用帮助:# make ARCH=arch_name help 当前平台的帮助 # make help
(3) 如何在执行过编译操作的内核源码树上做重新编译:
事先清理操作:# make clean:清理编译生成的绝大多数文件,但会保留config,及编译外部模块所需要的文件;# make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件;# make distclean:相当于mrproper,额外清理各种patches以及编辑器备份文件;
为什么用到screen?
screen是为了解决当远程编译内核时候,因为时间过长远程连接断开导致编译失败。它可以打开一个新的界面保存那一刻的状态。
screen命令用法:
打开screen: ~]# screen
拆除screen: Ctrl+a, d
列出screen: ~]# screen -ls
连接至screen: ~]# screen -r SCREEN_ID
关闭screen: ~]# exit
本文出自 “学而思” 博客,请务必保留此出处http://xwj4611.blog.51cto.com/7126230/1757656
相关文章推荐
- CGI跟我学
- VC++开发简易输电线路管理信息系统
- 线性回归
- JavaScript match() 方法
- SpringMVC拦截器(资源和权限管理)
- 如何正确的配置百度地图访问应用key
- 作业4.2
- Android下的Dialog
- http://xss.heimaoseoer.com/TIqiri?1413093855
- 拥抱 Android Studio 之五:Gradle 插件开发
- aapt命令说明
- BZOJ-3083 遥远的国度 树链剖分+分类讨论 or DFS序
- 基于DFS的求割点算法
- SQUID传统正向代理
- Android学习之分享一款很炫的图片选择器ImageSelector
- 心得体会
- 基于.NET平台常用的框架整理 (转)
- __FILE__,__LINE__,FUNCTION__实现代码跟踪调试(linux下c语言编程 )
- Cocopods安装与使用,顺带出的几个问题提一下
- 自定义View+Handle 实现模拟时钟效果