一次简单的内核编译(一)

一、编译环境

  1、准备一台测试机,放置两块硬盘

  2、安装"Development Tools"和"Server Platform Development"编译环境

  3、内核下载地址:https://www.kernel.org(本人使用的是3.10版本)

  4、下载busybox:http://www.busybox.net

二、编译

 1、分区,将新添加的硬盘进行分区,结果如下:

  1.png

 2、在/mnt目录下创建boot,sysroot目录,格式化新磁盘分区,分别挂载至/mnt/boot,/mnt/sysroot

  2.png

 

 3、以/mnt/boot目录为新系统的/boot目录,/mnt/sysroot/为新系统的根目录,安装grub到/mnt/boot目录,安装方式如下:

  3.png

 

 4、解压内核源文件至/usr/src,并创建软连接为linux  1.png

 5、使用make allnoconfig 清除内核所有默认配置:

  5.png

  

 6、运行make menuconfig,在出现的菜单中选择要使用的内核功能;

  (1)选择内核支持64位操作系统,支持装载模块

   2.png

    

  (2)选择内核支持模块卸载

6.png

   

 (3)选择CPU型号 8.png

 (4)保存退出

 9.png

 (5)运行make bzImage进行编译 

  10.png

  11.png

  (6)复制编译后的内核文件(bzImage)到/mnt/boot目录下

  12.png

  

  (7)切换到/mnt/boot/grub/目录中,创建grub.conf文件,内容如下:

    13.png

 

 7、新建虚拟机,以宿主机的磁盘(/dev/sdb)为系统盘

    在选择磁盘时使用现有磁盘,如下

   15.png

   16.png

 8、虚拟创建完成,在宿主机运行sync,将内存信息同步到磁盘

   17.png

 

 9、挂起宿主机,启动新建的虚拟机:

   启动界面

    18.png

   启动完成后提示内恐慌,没有文件系统

    3.png

 10、给内核添加文件系统,使其能够识别文件系统

  (1)添加支持的文件系统类型   4.png

  

 (2)选择支持的块设备 5.png 

(3)选择磁盘驱动程序

6.png

9.png

(4)选择磁盘接口类型

8.png

   

 (4)保存选择的配置信息,再次运行make bzImage进行编译

 (5)将新的内核文件bzImage复制到/mnt/boot/覆盖原有的bzImage

   7.png

 (6)运行sync,同步数据信息

   17.png

 (7)挂起宿主机,运行新建的虚拟主机,结果如下

  10.png

   

 11、添加init程序

   (1)在/mnt/sysroot/目录中创建系统所需要的目录   11.png

     

 (2)将bash以及bash依赖的库文件复制到/mnt/sysroot对应的目录中,使用脚本一次简单的内核编译(一)bincp.txt(马哥提供的脚本)复制,上传到宿主机,修改后缀名为bincp.sh,添加执行权限即可使用;

   12.png

(3)查看复制的结果:

    13.png

 

   (4)切换到/mnt/sysroot/bin/目录,给bash做软连接为sh

    14.png

 

   (5)编辑/mnt/boot/grub/grub.conf,指定init程序是/bin/sh

    15.png

 

   (6)切换到/usr/src/linux,运行make   menuconfig,给内核添加可以支持bash的程序  16.png

 (7)添加完成后保存退出,运行 make bzImage进行编译,然后将编译后的结果复制到/mnt/boot/目录中,覆盖原有的bzImage文件

  19.png

  

 (8)运行sync,同步数据

 (9)同步完数据后,挂起宿主机,启动新建的虚拟机;启动结果如下:

   21.png    

 12、虽然内核已经可以正常启动,但是没有键盘和鼠标驱动,无法使用键盘鼠标,接下来给内核添加鼠标键盘驱动

   (1)添加键盘

    22.png   23.png

   

 (2)添加鼠标    24.png

 (3)添加USB驱动   25.png

(4)添加以上设备驱动后,保存退出,运行make  menuconfig,将生成的bzImage复制到/mnt/boot/,覆盖原有的bzImage

  26.png

(5)运行sync同步数据

(6)同步完数据后,挂起宿主机,运行新建的虚拟机,结果如下: 27.png

 13、添加常用的bash命令,使用bincp.sh脚本添加;

    28.png

    

 14、添加完bash命令后,运行sync,进行数据同步,同步完成后,挂起宿主机,启动新建的虚拟机,运行添加的bash命令

   29.png

 15、编写init脚本,替换/bin/sh,init脚本内容如下:

    30.png  

    添加执行权限

   31.png

 16、编辑/mnt/boot/grub/grub.conf,修改init程序位置,使用bincp.sh移植mount命令到/mnt/sysroot对应的目录中

   (1)编辑/mnt/boot/grub/grub.conf,修改内容如下:

       32.png   

  

    (2)移植mount命令

     33.png

   (3)运行sync同步数据,同步完成后挂起宿主机,运行新建的测试机,结果如下:  34.png   

  17、给内核添加网络功能

    (1)cd  /usr/src/linux目录,运行 make  menuconfig,选取网络驱动跟网络功能    35.png  

 (2)选取网络驱动 36.png

 (3)保存退出,运行make bzImage进行编译,将生成的bzImage复制到/mnt/boot/,覆盖原有的bzImage内核

   37.png

 

 (4)复制相关的ip命令到/mnt/sysroot对应目录中

   38.png

 (5)运行sync同步数据,挂起宿主机,启动新建的测试机;结果如下

   39.png

  40.png

  41.png

  42.png

    

   

原创文章,作者:马行空,如若转载,请注明出处:http://www.178linux.com/4792

(0)
上一篇 2015-06-01 19:19
下一篇 2015-06-02 09:44

相关推荐

  • 文件管理的相关命令使用及标准I/O,管道,diff及文件工具的使用

    mkdir 创建目录-p: 存在于不报错可自动创建所需的各目录 (递归创建)mkdir -p a/d/c/b-m: mode 创建时指定权限  # mkdir -m 777 filename       rmdir删除空目录 -p 递归删除空目录 touch 当文件不存在时,则创建一个空文…

    2017-07-29
  • 前三天基础-Linux文件系统概论

    Linux之我见     在2016农历丙申年2016年猴年,对于小白的我来说接触到了江湖流传的武功秘籍之-Linux心法,第一次接触到命令行,知道在键盘上随便敲击命令就可以满屏跑数据,就像看过的美国大片里黑客帝国里面的画面,感觉学会好后可以装逼了,废话不多说了,允许在下斗胆介绍Linux文件系统。     &nbsp…

    Linux干货 2016-03-24
  • bash编程初体验(一)

    bash编程初体验(一) 认识bash编程 变量与赋值 算术与逻辑运算 条件测试与退出状态 认识bash编程 Bash(GNU Bourne-Again Shell)是许多Linux发行版的默认Shell,我们要认识的bash中,就是在bash的环境下的一种编程。 众所周知,程序=指令+数据,由此也决定了两种不同的编程风格,过程过与对象式; 过程式:以指令为…

    Linux干货 2016-08-15
  • 重要开源协议解析(BSD,Apache,GPL,LGPL) 整理

    现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协议详见其网站(http://www.opensource.org/licenses/alphabetical)。我们在常见的开源协议如BSD, GPL, LGPL等都是OSI批准的协议。如果要开源自己的代码,最好也是选择这些被批准的开源协议。 这里整理了四种最常用的…

    Linux干货 2016-07-22
  • http配置文件中文文档

    Apache中Httpd.conf详解 Apache 的 httpd.conf 详解 # # Apache服务器主配置文件. 包括服务器指令的目录设置. # 详见 <URL:http://www.apache.org/docs/>  # # 请在理解用途的基础上阅读各指令。 # # 再读取此文档后,服务器将继续搜索运行 # E:/Pro…

    Linux干货 2017-08-08
  • shell三剑客之grep

    正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。 给定一个正则表达式和另一个字符串,我们可以达到如下的目的: 1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”); 2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。 正…

    Linux干货 2016-08-08

评论列表(2条)

  • stanley
    stanley 2015-06-01 19:21

    小伙伴的图真是专业哇~

    • 马行空
      马行空 2015-06-01 23:07

      @stanley谢谢,刚刚开始写,写的不怎么好,还得向您学习 :smile: