-
Notifications
You must be signed in to change notification settings - Fork 0
/
atom.xml
68 lines (39 loc) · 13 KB
/
atom.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>gohna</title>
<subtitle>Stay Hungry, Stay Foolish</subtitle>
<link href="/atom.xml" rel="self"/>
<link href="http://gohna/gohna.github.io.git/"/>
<updated>2018-11-09T16:22:28.613Z</updated>
<id>http://gohna/gohna.github.io.git/</id>
<author>
<name>gohna</name>
</author>
<generator uri="http://hexo.io/">Hexo</generator>
<entry>
<title>测试</title>
<link href="http://gohna/gohna.github.io.git/2018/11/10/%E6%B5%8B%E8%AF%95/"/>
<id>http://gohna/gohna.github.io.git/2018/11/10/测试/</id>
<published>2018-11-09T16:20:47.000Z</published>
<updated>2018-11-09T16:22:28.613Z</updated>
<content type="html"><![CDATA[<p><img src="/gohna.github.io.git/2018/11/10/测试/01.PNG" alt="logo"></p>]]></content>
<summary type="html">
<p><img src="/gohna.github.io.git/2018/11/10/测试/01.PNG" alt="logo"></p>
</summary>
</entry>
<entry>
<title>编译Linux内核</title>
<link href="http://gohna/gohna.github.io.git/2018/11/09/%E7%BC%96%E8%AF%91Linux%E5%86%85%E6%A0%B8/"/>
<id>http://gohna/gohna.github.io.git/2018/11/09/编译Linux内核/</id>
<published>2018-11-09T07:37:15.000Z</published>
<updated>2018-11-09T14:07:01.870Z</updated>
<content type="html"><![CDATA[<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a><font face="微软雅黑">前言</font></h2><ul><li>本文主要介绍编译Linux内核实验的相关知识点和基本操作教程 </li><li>本文使用的虚拟机是VMware WorkStation,使用的操作系统是CentOS-7-X86_64,重新编译的内核是,以上均可在官网上下载获得。也可使用其他版本完成此实验,若使用其他版本,可能会出现一些小的问题不能完全贴合此教程。欢迎大家参照其他教程完成实验或者发邮件给我一起讨论解决。</li></ul><h2 id="本文框架"><a href="#本文框架" class="headerlink" title="本文框架"></a><font face="微软雅黑">本文框架</font></h2><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/编译Linux内核.png" alt="Mindmap-本文框架"></p><h2 id="理论解释"><a href="#理论解释" class="headerlink" title="理论解释"></a><font face="微软雅黑">理论解释</font></h2><blockquote><p>Linux操作系统是一个开源的操作系统,我们可以从网上获取到Linux操作系统的内核源代码,并对这些代码进行编译,生成一个新内核的二进制文件,然后我们将生成的二进制文件跑起来,这就是我们这个实验的主要思路。 </p></blockquote><ul><li>内核是操作系统的内部核心程序,它向外部提供了对计算机设备的核心管理调用。 </li><li>内核由两个明显的接口,上层是系统调用接口,下层是面向硬件部分的接口,在这之间的就是内核部分。 后续我们拿到内核编译代码也可以看到,它的代码也是以这种结构来组织的。</li><li>make是一个可以对大型程序自己决定需要编译的代码块并且自动发起命令的编译工具。Linux中make为GNUmake。其他平台也有相应的make,比如集成开发环境IDE,只需在菜单上点击rebuild/recompare,就可以重新编译/重新构造二进制文件,并且它可以自己决定哪些源码改动过了需要重新编译,哪些源码没有改动过不需要重新编译。</li><li>本实验涉及到的一些make操作及其含义:make mennuconfig:用命令行模式配置内核。make:编译内核和模块。make modules_install:安装模块。make install:安装内核。make mrproper:清除之前做的一些关于内核编译的操作。</li><li>makefile是一个文件数据库,其中定义了一些如何重新编译系统的规则和方法。</li><li>操作系统引导过程:<ol><li>电脑开机后,开始启动BIOS,开始BIOS自检。 </li><li>通过自检后,BIOS找到硬盘上的主引导记录MBR。</li><li>MBR开始读取硬盘分区表DPT,找到活动分区中的分区引导记录PBR,并且把控制权交给PBR。</li><li>PBR搜索活动分区中的启动管理器boomtmgr,把控制权交给bootmgr(相当于xp里的ntldr文件)。</li><li>Boomtgr寻找BOOT文件夹中的BCD文件(启动配置数据,相当于xp里的boot.ini文件)。</li><li>找到BCD后,Bootmgr首先从BCD中读取启动管理器bootmgr菜单信息,在显示器上显示多操作系统选择画面。</li><li>如果存在多个操作系统而且系统设置的等待时间不是0,那么屏幕就显示多个操作系统的选择界面。如果没有多系统,那么直接进入系统,不显示选择界面。</li><li>选择系统(如win7)后,bootmgr就会读取BCD里win7系统所在的盘里的windows\system32\winload.exe文件,并将控制权交给winload.exe。</li><li>Winload.exe加载win7内核、硬件、服务等,之后加载桌面等信息,从而启动整个win7系统。 </li></ol></li><li>Linux下的启动管理器有LILO/GRUB/yaboot,由于配置文件错误造成Linux启动失败时可以用grub程序的相关命令手动启动Linux。(编译结束重启时可能会用到) </li></ul><h2 id="操作流程"><a href="#操作流程" class="headerlink" title="操作流程"></a><font face="微软雅黑">操作流程</font></h2><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/B2.png" alt=""> </p><ul><li>用到的工具有VMware Workstation,CentOS-7-X86-64的镜像,教程从在VM中创建一个新的虚拟机开始,其他用到的包的具体下载和安装会在后续给出。 </li><li>创建虚拟机 <ol><li>打开VMware Workstation,选择创建一个新的虚拟机。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/C1.PNG" alt=""> </li><li>选择典型,下一步。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/2.PNG" alt=""> </li><li>选择安装程序光盘映像文件,这里会自动检测,如果没有点击后面的浏览手动选择到你下载好的CentOS-7-X86_64镜像,下一步。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/3.PNG" alt=""> </li><li>设置全名、用户名、密码,下一步。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/4.PNG" alt=""> </li><li>设置虚拟机的名称和位置,(我们知道虚拟机其实是以一个文件夹形式存储的,这里推荐在D盘新建一个文件夹来存虚拟机,我自己是在D盘下建立一个Virtual Machines文件夹,在里面再分别建立子文件夹存放各个虚拟机),下一步。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/5.PNG" alt=""> </li><li>将最大磁盘大小调至30GB(之前用20GB编译结果硬盘空间不够,平时自己用的虚拟机设置20GB足矣),选择存储为单个文件,下一步。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/6.PNG" alt=""> </li><li>点击完成。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/7.PNG" alt=""><br>至此,一个CentOS7的虚拟机就创建好了,等待安装。<br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/8.PNG" alt=""><br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/9.PNG" alt=""><br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/10.PNG" alt=""><br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/11.PNG" alt=""><br><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/12.PNG" alt=""> </li></ol></li><li><p>查看当前虚拟机的内核信息 </p><blockquote><p><code>uname-a</code><br><code>ls -l /boot</code> </p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/01.PNG" alt=""> </p></li><li><p>安装编译工具</p><blockquote><p><code>yum -y install gcc gcc-c++ ncurses ncurses-devel cmake elfutils-libelf-devel openssl-devel</code></p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/02.PNG" alt=""> </p></li><li><p>下载内核源码并解压进入源码安装包 推荐下载地址<a href="https://www.kernel.org/" target="_blank" rel="noopener">https://www.kernel.org/</a> </p><blockquote><p><code>cd /usr/src && wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.12.3.tar.xz && tar -xvf linux-4.12.3.tar.xz && cd linux-4.12.3</code></p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/03.PNG" alt=""> </p></li><li><p>清理内核源码目录(初次编译不需要此步)</p><blockquote><p><code>make mrproper</code></p></blockquote></li><li><p>使用make menuconfig菜单来订制内核功能<br>在蓝色界面里,方向键上下控制选择目录,左右键控制退出或保存,回车键控制进入目录,如果没有特殊需要这一步可以默认保存,在这里我选择修改内核名字,在后面会看到我修改的结果。</p><blockquote><p><code>make menuconfig</code></p></blockquote></li></ul><p> <img src="/gohna.github.io.git/2018/11/09/编译Linux内核/04.PNG" alt=""><br> <img src="/gohna.github.io.git/2018/11/09/编译Linux内核/05.PNG" alt=""> </p><ul><li><p>执行make编译这一步会非常久,至少两个小时, </p><blockquote><p><code>make</code> </p></blockquote></li><li><p>使用下面的命令可以加速操作,-xj:x是物理核数的2倍,从图中编译目录的来回转变我们可以看到CPU的确是在不停的切换,如果没有-xj大家可以试一下,编译目录里将会按顺序依次执行。 (不过仍然花了我很久时间。。。。。没有看到加速效果。我之前一次做时把虚拟机处理器改为4,然后使用make -8j倒是很快就编译结束了。) </p><blockquote><p><code>make -4j</code></p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/06.PNG" alt=""> </p></li><li><p>安装模块(安装完毕后可以到/lib/modules目录下查看) </p><blockquote><p><code>make modules_install</code></p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/08.PNG" alt=""> </p></li><li><p>执行make install 安装内核 </p><blockquote><p><code>make install</code></p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/09.PNG" alt=""><br>至此内核已经编译成功。 </p></li><li>安装完成后修改默认内核启动项(可选,如果不进行引导,重启时手动选择内核进入) <blockquote><p><code>cat /boot/grub2/grub.cfg | grep menuentry</code> //查看系统可用内核<br><code>grub2-set-default ‘CentOS Linux (4.12.3) 7 (Core)’</code> //修改开机默认使用的内核</p></blockquote></li></ul><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/010.PNG" alt=""> </p><ul><li><p>重启电脑后查看内核版本<br>可以看到图中红色圈起来的部分显示我定制的内核名称。 </p><blockquote><p><code>reboot</code><br><code>uname-a</code><br><code>ls -l /boot</code></p></blockquote><p><img src="/gohna.github.io.git/2018/11/09/编译Linux内核/011.PNG" alt=""><br>至此此次实验成功结束。<br>用CentOS其他版本或者Ubantu完成此实验均是一样的操作, </p><h2 id="实验小结"><a href="#实验小结" class="headerlink" title="实验小结"></a><font face="微软雅黑">实验小结</font></h2><p>聊聊我自己在实验中遇到的坑: </p></li></ul><ol><li>从别人处拷贝新编译内核的包,出错:拷贝之后文件受损。 </li><li>在windows上下载好新编译内核的包然后拖入虚拟机,再解压编译,出错:我第一次下了linux3.10.67的包,这个包它…文件不完整,我全部做完后重启它没有图形界面???虽然不算错误,但是看不到图形界面很不爽啊,而且一开始我没有意识到问题出在哪,反复做反复错orz…但是这个方法是可行的,我在ubantu里拖了一个linuc4.19.几忘记了,实验成功了。 </li><li>此方法在线下载4.12.3的包,出错:这个包有点大..我一开始设置20GB,然后安装模块安装到一半装不下了,对于一个linux小白来说,很绝望啊好不好,虽然最后挂在了一块新磁盘但我还是觉得一开始就设置好稳一点。 </li><li>此外,人生是不会一帆丰顺滴,看看我上面陈述的123就知道我瞎折腾了很久,每次make都很久…make完还不如意orz救救孩子。 </li><li>不过虽然自己很菜但还是会继续加油的,你们也是鸭!</li></ol>]]></content>
<summary type="html">
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a><font face="微软雅黑">前言</font></h2><ul>
<li>本文主要介绍编译Linux内核实验的相关知识点和基本操作教程 </li>
<
</summary>
<category term="学习笔记" scheme="http://gohna/gohna.github.io.git/categories/%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/"/>
<category term="Linux" scheme="http://gohna/gohna.github.io.git/tags/Linux/"/>
</entry>
</feed>