• 虚拟机ubuntu-编译属于自己的linux内核


    一、实验环境

      Vmware15.5, Ubuntu18.04, linux-5.6.14内核(以这个环境为例)

    二、准备工作

      1. 安装好虚拟机,安装Ubuntu系统。(本次实验用的是虚拟机没有用双系统,因为实验中有一要求是实现文件交互,所以采用虚拟机,稍后也会下载相应工具)

        (另外,如果电脑配置够的话,可以将虚拟机配置高端一点,因为后面 make 这个步骤很花时间。)

      2.  下载linux-5.6.14内核(https://www.kernel.org/)(linux内核官网,下载压缩包tarball即可)

                  

      3.  现在我们就需要下载VMware Tools,一个可以将文件从主机拖入客户机的工具。(因为目前虚拟机挂起状态,所以它不可选)

        

      4.  VMware Tools下载完成之后,会有一个CD图标。然后我们进入所在路径 /media,可以将压缩包拖入桌面,进行解压。

        解压命令:sudo tar -zxvf VMware Tools-...... (直接用Tab键补全文件名称以免出错)

             

        解压完成后,进入/vmware-tools-distrib路径,后执行命令 sudo ./vmware-install.pl 开始安装,一路回车。

                  

        因为我已经安装过,就不再截图演示。如果安装出现问题,可以自行百度。

        安装完成后,重启虚拟机。

      5. 现在我们可以将下载的linux-5.6.14压缩包拖入虚拟机。若不能拖入则说明VMware Tools安装出问题。

        拖入后,执行命令 sudo mv linux-5.6.14.tar.xz /usr/src 然后进入/usr/src路径,执行命令 sudo tar -xvf linux-5.6.14.tar.xz

        就可看到生成linux-5.6.14文件夹。

                   

        到此我们的准备工作就完成了。

    三、实验过程

      (实验过程我以root用户进行,通过命令 su 就可进入 root用户。如果报错有可能是没有设置密码,输入 sudo passwd,设置密码即可)

      我们先来看一下默认的内核。在终端输入 uname -a。(这个是重装虚拟机之前的图,所以虚拟机、用户名称不一样。无伤大雅)

      

       下来我们开始编译自己的内核:

      1. cd linux-5.6.14,进入该路径。我们通过 make 来编译内核,所以我们需要环境和依赖。

        1. apt install gcc

        2. apt install make

        3. apt install gcc make libncurses5-dev openssl libssl-dev

        4. apt install pkg-config

        5. apt install bison

        6. apt install flex

        7. apt install libelf-dev

       安装完成我们就可以进行下一步工作。执行命令 make nconfig ,进入下面界面(如果make nconfig过程中报错,按照错误提示安装相应依赖即可)。

           

       我们将内核名称自行命名。进入 General setup ,修改 Local version。修改完成后保存(此处会保存为.config),后退出。

               

       在此步骤做一点说明,此处我们仅修改了名称,别的选项都是默认。因为选项设置麻烦,所以不做说明,但这会导致下一步

       make的时候比较费时间。可以自行在网上找简洁的 .config 文件,将文件拷到虚拟机即可。

      2. 好了, .config 文件我们已经完成了。下一步就开始 make。执行命令 make -j4 (4个线程跑,会快很多。-j4 是可选项,取决于

       你的虚拟机配置)。这一步骤需要 3h 左右(我第一次跑三小时,后来4线程跑一个多小时。这个过程会有 warning 内存过大,

       这个不用管,注意warning信息,如果需要可以暂停更改环境配置)。

      3. 经过漫长的等待,make 这步终于完成了。然后执行命令 make modules_install

      4. 执行命令 make install。完成后重启虚拟机。

            

      好啦。到此内核编译就完成了。我们开始内核引导,必须要看到属于自己的内核~

      重启过后,终端执行 cd /boot/ 。System.map - * 就是要用的东西。

      执行命令  sudo update initramfs -c -k 5.6.1418130500337-ssc (这里用你的文件名称替换哦!)

           

       完成后执行命令 sudo update-grub 。会生成一个.img文件,这是由内核源码生成的内核镜像。

      我们需要修改grub,执行命令 cd /boot/grub/ ,修改 grub.cfg文件。执行命令 sudo vim grub.cfg

      

           

         到这里就已经修改完成了。重启虚拟机。

      再次进入执行命令 uname -a , 便可看到自己的内核。

      

    四、总结与心得

        这里说一下对内核的一些了解。ubuntu = kernel + users application + shell,是一个介于一般程序与硬件之间的东西。

        比如c语言中的 printf(), 就是 printf() -> c库中的printf() -> c库中的write() -> kernel中的 write()。

        下一篇是打算是关于系统调用,这也是实验内容之一。

        实验的完成也是磕磕绊绊,所有的失败都归结于错误的开始。因为这是几天前完成的实验,我没有保留

      完整的实验现场,所以中间内容可能展示不到位,不过如果有错欢迎评论指出,初学者的路还很长。

  • 相关阅读:
    [翻译]使用设计模式简化.NET中菜单和Form元素之间的关系
    [AWDwR4]13章出错 protect_against_forgery
    使用存储过程(22)
    建立数据库连接(19)
    对数据库添加数据(21)
    ADO.NET常用对象(18)
    数据展现Repeater控件(25)
    content控件(24)
    对数据库增加数据(21)
    行为存储过程(23)
  • 原文地址:https://www.cnblogs.com/cs-weilai/p/13036884.html
Copyright © 2020-2023  润新知