linux内核编译

一:前言

1:内核的概念:

Kernel(内核)是操作系统的核心,掌控着所有硬件设备的控制权。计算机所要完成的各项工作,都需要通过内核的帮助才能完成。内核就是系统上的一个文件,这个文件包含了驱动主机各项硬件的检测程序与驱动模块。

2:什么叫做编译?

如果想要完成的某个功能是内核没有提供的,那我们就无法通过内核来控制计算机完成这项工作。如果我们想让内核去完成这个功能,那就必须将这个模块“添加”到内核中,这就类似于“驱动程序”,有了这样一个“驱动程序的支持后,硬件(CPU、网卡等)”才能去完成之前不能完成的功能。这里的模块“添加”的过程就叫做编译。

3:内核模块

内核模块的存放位置为/lib/modules/$(uname -r)/kernel,所有以.ko结尾的文件都是模块文件;其中uname -r为当前系统内核版本信息。

二:编译前准备(以Centos6.9为例)

1:安装开发包组
  # yun groupinstall Development tools`
2:下载内核源码及解压

下载地址https://www.kernel.org/

#cd /usr/src
# tar -xvf linux-3.18.56.tar.xz 
查看解压出来的文件夹
3:准备配置文件
# cd /usr/src/   
# cp /boot/config-2.6.32-696.el6.x86_64  ./linux-3.18.56/
# grep NTFS ./linux-3.18.56/config-2.6.32-696.el6.x86_64 
显示结果为# CONFIG_NTFS_FS is not set

注:从boot下拷贝一个config文件主要是为了方便,这个文件里保存的是之前在安装系统时内核做安装的模块。这里拷贝过来主要是为了方便演示,具体应用中可以根据自己的需要进行模块的筛选。至于grep NTFS 是为了让大家看一下NTFS这个模块没有启动,下面在编译的时候我们就将NTFS启用

三:编译开始

1:执行make menuconfig命令(该命令在源码目录下执行)
第一步:先给以后的内核加个名称

2:选择需要启动的内核模块
在编译的第一个界面一次选择File systems -->DOS/FAT/NT file systems -->NTFS file systems support(利用空格键选中。[M] b表示将模块打进ramdisk中,[*]表示将模块打在内核中。本实验将NTFS模块打在ramdisk中)

选择
修改为[M]和[*]

保存退出之后
grep NTFS .config显示修改结果

3:开始进行编译
注:如果编译是在远程连接上的话、make会出问题的、如果远程连接断开的话那运行的进程是不是也都断开了、这个make的进程一定是当前系统上运行的子进程、有些一旦父进程挂了、子进程也将不复存在。
所以我们使用一个叫screen这个命令来操作,没安装自己安装上就是了,可以在一个窗口上启动n个虚拟的桌面,即使退出了也会保留之前的内容,切换进screen就可以看到窗口标题栏上的screen标志了:
具体使用方法如下:

<在源码目录下执行>


-screen -ls:可以查看当前启用了多少个screen 按Ctrl+a,松开再按d可以隐藏screen桌面 因为编译内核需要比较长的时间、所以我们在screen上编译、然后再把screen桌面隐藏就可以了;
重新接入screen: # screen -r 跟上screenID就可以了 然后我们就开始编译吧;


正在编译

4:安装模块

  make modules_install

这步完了之后可以查看一下/lib/modules 目录下就会生成一个以版本号命名的一个文件模块了


5:安装内核相关文件

  make install

这一步的主要目的是将所有的编译之后的内容拷贝安装到相应的目录。安装完之后会在/boot目录下生成一个内核文件vmlinux-3.13.2,还有一个与当前编译的版本一样的文件,可以查看一下。现在已经编译好了一个新内核了


6:编辑grub配置文件(一般会自动配置,查看一下)
#vim /boot/grub/grub.conf

好了、重启一下试试,如果顺利的话就可以进到内核选择界面了,选项我们编译的新内核就OK了

三:总结

1:步骤整理:

 1、获取内核源码,解压至/usr/src
       # tar xf linux-3.13.5.tar.xz -C /usr/src
       # ln -sv /usr/src/linux-3.13.5  /usr/src/linux
   2、配置内核特性(选择一种方法就可以了)
       make config:遍历选择所要编译的内核特性
       make allyesconfig:配置所有可编译的内核特性
       make allnoconfig:并不是所有的都不编译
       make menuconfig:这种就是打开一个文件窗口选择菜单
       make kconfig(KDE桌面环境下,并且安装了qt开发环境)
       make gconfig(Gnome桌面环境,并且安装gtk开发环境)
   3、编译内核
       # make [-j #] : #号最多为CPU物理核心总数的两倍,这样会快点哦            
   4、安装内核模块
       # make modules_install
   5、安装内核
       # make install
   6、验正并测试
       # cat /boot/grub/grub.conf
       查看新内核是否已经添加, 而后重启系统并测试

2、配置内核选项
支持“更新”模式进行配置: make help

(a) make config:基于命令行以遍历的方式去配置内核中可配置的每个选项 
(b) make menuconfig:基于curses的文本窗口界面 
(c) make gconfig:基于GTK (GNOME)环境窗口界面 
(d) make xconfig:基于QT(KDE)环境的窗口界面 支持“全新配置”模式进行配置 
(a) make defconfig:基于内核为目标平台提供的“默认”配置进行配置 
(b) make allyesconfig: 所有选项均回答为“yes“ 
(c) make allnoconfig: 所有选项均回答为"no“

3、编译
全编译:make [-j #]
编译内核的一部分功能:
a) 只编译某子目录中的相关代码:
# cd /usr/src/linux
# make dir/
(b) 只编译一个特定的模块:
# cd /usr/src/linux
# make dir/file.ko
例如:只为e1000编译驱动:
#make drivers/net/ethernet/intel/e1000/e1000.ko

4、编译内核
如何交叉编译内核:
编译的目标平台与当前平台不相同;
# make ARCH=arch_name
要获取特定目标平台的使用帮助
# make ARCH=arch_name help
# make ARCH=arm help

5、清理删除
在已经执行过编译操作的内核源码树做重新编译:
需要事先清理操作:
# make clean:清理大多数编译生成的文件,但会保留config文件等
# make mrproper: 清理所有编译生成的文件、 config及某些备份文件
# make distclean: mrproper、 patches以及编辑器备份文件
6: 卸载内核
删除/lib/modules/目录下不需要的内核库文件
删除/usr/src/linux/目录下不需要的内核源码
删除/boot目录下启动的内核和内核映像文件
更改grub的配置文件,删除不需要的内核启动列表

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容

  • 我们说的Linux其实指的就是 内核(kernel)而已。这个内核控制你主机的所有硬件并提供系统所有的功能,所以它...
    Zhang21阅读 7,379评论 0 18
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,131评论 2 34
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,126评论 9 467
  • 准备工作: 准备好开发环境 获取目标主机上硬件设备相关信息 获取目标主机系统功能的相关信息 获取内核源代码www....
    扎啤阅读 396评论 0 0
  • #你好,我叫白暖瑾。你失眠吗?让我来给你讲个故事吧# 何事唱离歌,却唱不响曾经的誓言。 “喂,你好。” “暖瑾啊。...
    苏荩郃阅读 226评论 0 7