Linux内核配置、编译、安装
 2015.03.28    |      Linux MMC子系统    |     AilsonJack    |     暂无评论    |     1367 views
By: Ailson Jack
Date: 2015-03-28
个人博客: http://www.only2fire.com/
<p style="text-indent: 2em;">今天给大家讲讲如何自己配置、编译、安装一个Linux内核到自己的电脑,我这儿是在我原有的Linux系统上,自己编译、安装一个内核,然后重启电脑使用我自己编译的Linux内核。</p><p style="text-indent: 2em;">其实我这么做是因为在做Linux驱动开发学习时,遇到了内核版本不匹配的问题,所以才决定自己编译、安装一个内核。这样做,首先是解决了内核版本不匹配的问题,然后呢,自己也学会了如何简单的折腾内核的配置、编译、与安装,一举两得<img src="/UEditor/dialogs/emotion/images/face/i_f01.gif"/>。好了废话不多说,下面就说说如何做吧<img src="/UEditor/dialogs/emotion/images/face/i_f07.gif"/>。</p><p style="text-indent: 2em;">哦,对了,我这里使用的是Fedora 14作为演示,貌似有点没跟上时代的脚步,嘿嘿,我只告诉你,这是我学习用的操作系统,不会告诉你,我还安装了Fedora 21,还有Opensuse 13.2 ,还有我大Windows<img src="/UEditor/dialogs/emotion/images/face/i_f29.gif"/>。<br/></p><p style="text-indent: 2em;">在进行以下操作前,请确保你的电脑已经安装了<span style="color: rgb(255, 0, 0);">gcc</span>以及<span style="color: rgb(255, 0, 0);">g++</span>工具,如果没有安装,那么可以在root模式下使用以下命令进行安装:</p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">gcc</span>:<span style="color: rgb(255, 0, 0);">yum install gcc</span></p><p style="text-indent: 2em;"><span style="color: rgb(0, 112, 192);">g++</span>:<span style="color: rgb(255, 0, 0);">yum install gcc-c++</span><br/></p><p style="text-indent: 0em;"><span style="color: rgb(255, 0, 0);">注:</span>我给大家提供了内核源代码,大家也可以自己去官网下载,随意。在操作前,请下载文件 <a class="btn btn-success" href="https://pan.baidu.com/share/init?surl=sj4ZreH" target="_blank">点此下载</a>&nbsp;密码:<span style="color: rgb(255, 0, 0);">u6c8</span>。</p><p class="artical_littlestyle1">1.安装xz工具</p><p style="text-indent: 2em;">在进行内核编译操作前,先安装<span style="color: rgb(255, 0, 0);">xz</span>工具,这个工具是用来解压Linux内核源代码的。将下载下来的<span style="color: rgb(255, 0, 0);">xz-5.0.3.tar.bz2</span>与<span style="color: rgb(255, 0, 0);">linux-2.6.32.65.tar.xz</span>放在系统中的一个文件夹中,我这里是放在了<span style="color: rgb(255, 0, 0);">/home/ailsonjack/Kernel</span>中的,在进行接下来的操作之前,先切换到root用户吧:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435327188073.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435327188073.png&#39;)"/></p><p style="text-indent: 2em;">文件什么的,放好之后,接下来就正式的开始安装xz工具了,其步骤如下:<br/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(1)、</span>执行命令<span style="color: rgb(255, 0, 0);">tar -xvjf xz-5.0.3.tar.bz2</span></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435331454011.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435331454011.png&#39;)"/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(2)、</span>执行命令<span style="color: rgb(255, 0, 0);">cd xz-5.0.3</span>,进入到解压开的文件夹中,接着再执行<span style="color: rgb(255, 0, 0);">./configure</span>命令<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435330593520.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435330593520.png&#39;)"/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(3)、</span>接下来执行make,make install命令就完成了xz工具的安装,这两个命令很简单,就不上图了。<br/></p><p class="artical_littlestyle2">2、解压Linux内核源码包</p><p style="text-indent: 2em;">进入到存放Linux内核源码包<span style="color: rgb(255, 0, 0);">linux-2.6.32.65.tar.xz</span>的路径下,我这里是 <span style="color: rgb(255, 0, 0);">/home/ailsonjack/Kernel</span>,然后依次执行<span style="color: rgb(255, 0, 0);">xz -d linux-2.6.32.65.tar.xz</span>以及<span style="color: rgb(255, 0, 0);">tar -xf linux-2.6.32.65.tar</span>命令:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435328693812.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435328693812.png&#39;)"/></p><p style="text-indent: 2em;">解压完成之后,执行命令:<span style="color: rgb(255, 0, 0);">cd linux-2.6.32.65</span>,进入到<span style="color: rgb(255, 0, 0);">linux-2.6.32.65</span>目录:<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435328350131.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435328350131.png&#39;)"/></p><p class="artical_littlestyle3">3、内核配置</p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(1)、</span>清除临时文件、中间文件和配置文件</p><p style="text-indent: 2em;">对于刚解压的内核源码,可以考虑不进行这个步骤,这一步只是针对于你曾经对内核源码进行过相关配置来说的,不过,对于刚解压的源码也可以进行这些操作,反正也不影响<img src="/UEditor/dialogs/emotion/images/face/i_f01.gif"/>。</p><p style="text-indent: 2em;">这里介绍三个命令:</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">make clean</span>:清除产生的大部分文件,但不包括配置文件</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">make mrproper</span>:清除产生的所有文件和配置文件</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">make distclean</span>:make mrproper清除的文件 + editor backup + patch files</p><p style="text-indent: 2em;">我用了下<span style="color: rgb(255, 0, 0);">make clean</span>,貌似什么情况都没发生<img src="/UEditor/dialogs/emotion/images/face/i_f03.gif"/>:<br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435328203043.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435328203043.png&#39;)"/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80); color: rgb(255, 255, 255);">(2)、</span>确定目标系统的软硬件配置情况,比如CPU的类型,网卡的型号等等。</p><p style="text-indent: 2em;">我们这里是以PC机作为硬件平台的,即X86结构。对于初学者嘛,不用考虑太多,采用默认的即可,意思嘛,就是看看这步,知道有这么回事就行了<img src="/UEditor/dialogs/emotion/images/face/i_f01.gif"/>。</p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(3)、</span>使用<span style="color: rgb(255, 0, 0);">make menuconfig</span>配置内核</p><p style="text-indent: 2em;">这一步,看个人了,对于初学者来说,一般是采用默认的即可:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435327810294.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435327810294.png&#39;)"/></p><p style="text-indent: 2em;">这是执行<span style="color: rgb(255, 0, 0);">make menuconfig</span>命令后出现的配置菜单,根据个人情况来吧:</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注:</span>执行这步,有的系统由于缺少一些安装包,会提示错误,到时大家可以自己上网搜索或者留言问我。</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435331514662.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435331514662.png&#39;)"/></p><p class="artical_littlestyle4">4、编译内核</p><p style="text-indent: 2em;">这里有两个命令用于编译内核:</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">make zImage</span>,<span style="color: rgb(255, 0, 0);">make bzImage</span>,这两个命令的区别:在X86平台下,<span style="color: rgb(255, 0, 0);">zImage</span>只能用于小于512K的内核。有这个区别嘛,一般情况下,我们当然使用的是<span style="color: rgb(255, 0, 0);">make bzImage</span>了,是吧。</p><p style="text-indent: 2em;">执行命令<span style="color: rgb(255, 0, 0);">make bzImage</span>,需要一段时间才能执行完成:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435326702896.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435326702896.png&#39;)"/></p><p style="text-indent: 2em;">花了大约15分钟,执行完成:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435330797795.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435330797795.png&#39;)"/></p><p class="artical_littlestyle1">5、编译内核模块</p><p style="text-indent: 2em;">接着执行命令:<span style="color: rgb(255, 0, 0);">make modules</span>,也是需要一些时间:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435330542252.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435330542252.png&#39;)"/></p><p style="text-indent: 2em;">这次花的时间大约有50分钟,挺长的:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435332722505.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435332722505.png&#39;)"/></p><p class="artical_littlestyle2">6、安装内核模块</p><p style="text-indent: 2em;">执行命令<span style="color: rgb(255, 0, 0);">make modules_install</span>:</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注:</span>该命令将编译好的内核模块从内核源代码目录拷贝至<span style="color: rgb(255, 0, 0);">/lib/modules</span>下。</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435363164631.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435363164631.png&#39;)"/></p><p class="artical_littlestyle3">7、制作init ramdisk</p><p style="text-indent: 2em;">执行命令:<span style="color: rgb(255, 0, 0);">mkinitrd initrd-$version $version</span>(形式是这样的)</p><p style="text-indent: 2em;">这里需要执行的命令是:<span style="color: rgb(255, 0, 0);">mkinitrd initrd-2.6.32.65 2.6.32.65</span>(注意路径没变)</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注:</span><span style="color: rgb(0, 112, 192);">$version</span>可以通过查询<span style="color: rgb(0, 112, 192);">/lib/modules</span>下的目录得到,从下图可以看出,<span style="color: rgb(255, 0, 0);">2.6.32.65</span>目录即是我们刚安装好的内核模块。</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435363162875.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435363162875.png&#39;)"/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435364533285.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435364533285.png&#39;)"/></p><p class="artical_littlestyle4">8、内核安装</p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(1)、</span>执行命令<span style="color: rgb(255, 0, 0);">cp arch/x86/boot/bzImage /boot/vmlinuz-$version</span>(形式上是这样的)</p><p style="text-indent: 2em;">这里需要执行的命令是:<span style="color: rgb(255, 0, 0);">cp arch/x86/boot/bzImage&nbsp; /boot/vmlinuz-2.6.32.65</span></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注:</span><span style="color: rgb(0, 112, 192);">$version</span>为所编译的内核版本号,我这里让<span style="color: rgb(0, 112, 192);">$version</span>为<span style="color: rgb(255, 0, 0);">2.6.32.65</span></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435363223513.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435363223513.png&#39;)"/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(2)、</span>执行命令:<span style="color: rgb(255, 0, 0);">cp initrd-2.6.32.65&nbsp; /boot/</span><br/></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">注:</span><span style="color: rgb(0, 112, 192);">initrd-2.6.32.65</span>文件是用<span style="color: rgb(255, 0, 0);">mkinitrd</span>产生的,也就是上面的第<span style="color: rgb(255, 0, 0);">7</span>步产生的文件。</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435365967227.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435365967227.png&#39;)"/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(3)、</span>添加自己编译的内核,到系统启动项中<br/></p><p style="text-indent: 2em;">执行命令<span style="color: rgb(255, 0, 0);">vi /etc/grub.conf</span><br/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435364673750.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435364673750.png&#39;)"/></p><p style="text-indent: 2em;">将下图中红框1的内容,拷贝一份,也即红框2里面的内容就是拷贝得到的:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435369274286.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435369274286.png&#39;)"/></p><p style="text-indent: 2em;">然后修改红框2里面的内容,来让系统启动时,可以选择自己编译的内核进行启动,需要修改的地方有<span style="color: rgb(255, 0, 0);">4</span>处:</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">title Fedora(2.6.35.6-45.fc14.x86_64)</span>修改成<span style="color: rgb(255, 0, 0);">MyLinux(2.6.32.65)</span></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">root (hd0,0)</span> (这个根据自己的情况来吧,我这里不用修改,你们那儿按实际的来)</p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">kernel /vmlinuz-2.6.35.6-45.fc14.x86_64</span> 将这句改成<span style="color: rgb(255, 0, 0);">kernel /vmlinuz-2.6.32.65</span></p><p style="text-indent: 2em;"><span style="color: rgb(255, 0, 0);">initrd /initramfs-2.6.35.6-45.fc14.x86_64.img</span>将这句改成<span style="color: rgb(255, 0, 0);">initrd /initrd-2.6.32.65</span></p><p style="text-indent: 2em;">我的修改结果如下,然后保存退出:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435368774425.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435368774425.png&#39;)"/></p><p style="text-indent: 2em;"><span style="background-color: rgb(0, 176, 80);">(4)、</span>修改<span style="color: rgb(255, 0, 0);">/boot/grub/menu.lst</span>中的<span style="color: rgb(255, 0, 0);">timeout</span>值,可以设置linux系统启动时,选择系统的等待时间,我这里设为<span style="color: rgb(255, 0, 0);">12</span>;<span style="color: rgb(255, 0, 0);">default</span>设置系统默认启动的内核,我这里设置的是<span style="color: rgb(255, 0, 0);">1</span>,即默认启动我自己编译的内核。</p><p style="text-indent: 2em;">执行命令<span style="color: rgb(255, 0, 0);">vi /boot/grub/menu.lst</span>,修改好的结果如下,保存退出:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435366997516.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435366997516.png&#39;)"/></p><p style="text-indent: 2em;">重新启动系统,看看是不是有启动选择项,然后选择我们自己编译的内核启动:</p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435372696518.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435372696518.png&#39;)"/></p><p style="text-align:center"><img src="/uploads/AilsonJack/2018.08.17/1534435369312848.png" onclick="preview_image(&#39;/uploads/AilsonJack/2018.08.17/1534435369312848.png&#39;)"/></p><p style="text-indent: 2em;">至此,对于Linux内核的配置、编译、安装已经讲完了,大家有什么不明白的可以留言(如果我能解决的尽量帮忙啦)。<br/></p>
欢迎关注博主的公众号呀,精彩内容随时掌握:
热情邀请仔细浏览下博客中的广告,万一有对自己有用或感兴趣的呢。◕ᴗ◕。。
如果这篇文章对你有帮助,记得点赞和关注博主就行了^_^,当然了能够赞赏博主,那就非常感谢啦!
注: 转载请注明出处,谢谢!^_^
转载请注明来源: 本文链接:  By: AilsonJack
Linux内核配置、编译、安装  |  说好一起走
暂无评论,要不要来个沙发
发表评论

 
Copyright © 2015~2023  说好一起走   保留所有权利   |  百度统计  蜀ICP备15004292号