zoukankan      html  css  js  c++  java
  • Linux 系统裁剪笔记1

    1.什么裁剪?

    本篇文章的主要目的是让笔者和读者更深的认识Linux系统的运作方式,大致内容就是把Linux拆开自己一个个组件来组装,然后完成一个微型的Linux系统.下面,让我们来实现吧..写的不好的地方请指教.

    2.原理

    大家都知道,操作系统的启动流程是(主要是Linux):POST—>BIOS—>MBR—kernel-->initrd-->sbin/init,

    POST,BIOS都不是我们管的,所以这里我们从MBR开始,Linux的系统引导先主要是用的grub这个软件,grub引导系统了,然后启动内核,内核调用initrd来实现最基本的操作系统,

    3.接下来,实际操作(所有操作均在虚拟机上实现)

    3-1.首先我们得创建一个新的磁盘,来保存我们的grub和内核等关键程序(直接在虚拟机上添加新的磁盘)

    笔者这里已经添加好了,就不演示添加的过程了,笔者的地盘分了两个区,分别是100M的主盘,和1G的主盘,名字为

    /dev/sdg1和/dev/sdg2,首先在/mnt目录下创建两个文件夹:如图

    image

    3-2.挂载/dev/sdg1到/mnt/boot,挂载/dev/sdg2到/mnt/sysroot

    image

    3-3.大家知道,启动系统的时候除了硬件方面,首先就是要有引导程序,所以我们把引导程序安装到/mnt/boot

    使用命令:grub-install –-root-directory=/mnt /dev/sdg1

    image

    3-4.有了引导程序就需要有我们的内核了,没有内核怎么启动啊,但是内核的启动又要依赖initrd(CentOS6),所以我们要把这两个文件都复制过去,使用命令:

    cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlunuz

    cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img

    image

    3-5.这样一个简单的操作系统的雏形就做好了,但是OS的操作依赖于shell,所以我们得把bash shell复制到/dev/sgd2目录下,所以我们得把/bin/bash以及bash依赖的库复制过去,可以使用ldd `which bash`查看bash依赖的库文件有哪些,笔者这里自己有一个简单的script脚本,就不手动复制了

    image

    3-6.接下来要配置grub文件,不然系统怎么找到你的硬件,所以接下来在/mnt/boot/grub下创建一个grub.conf的配置文件,内容如下

    image

    3-7.接下来还要在根目录下,也就是挂载在/mnt/sysroot下创建一个proc的文件夹.就可以把这块新的硬盘当成其他系统的启动盘了,我们来试试,新创建一个空的虚拟机不用教了吧.然后添加我们的这块磁盘,就可以开机启动了

    # mkdir dev proc etc sbin bin lib mnt usr

    # cp /bin /tmp/boot/

    # cp –dpr /dev/{console,fd0.hda,hda8,hda9,hda10,initctl,initrd,kmem,mem,null,ram,ram0,ramdisj,sda,tty1,tty} /tmp/boot/

    # cp/etc/{default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue,modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d} /tmp/boot/


    image

    3-8.接下来我们来给他添加命令,其实很简单的,只要把命令的所在目录和命令所有依赖的库复制到/mnt/sysroot目录下就行了.这里我用脚本完成,就不演示了,笔者复制了一些常用的命令如:ls

    image

    3-9.笔者给这个小系统创建了几个目录了当然是在原主机上添加的,是不是越来越像一个系统了

    image

    3-10.好了!系统到这里就差不多了,不过我们还得修修,大家在3-6可以看到,我们的init=/bin/bash,这时候就会有同学问了,有没搞错,Linux系统化初始化不都是调用/sbin/init的么,你怎么调用了/bin/bash,没错,其实这里指向什么就调什么,那我们现在重新让他指向/sbin/init吧,首先在/mnt/sysroot下建立一个init文件,在里面添加如下字符:完成后记得给/sbin/init一个快 执行权限,然后把/mnt/boot/grub/grub.conf中的指向改成init=/sbin/init

    image

    3-11.如下图,执行成功了

    image

    3-12.最后,我们该给他添加一个网络模块了,哦哦,在3-9步我们发现磁盘还是只读的,所以得重新把他挂载成读写的,如下图:

    image

    3-13.终于可以给他加网络模块了,Linux的系统是单内核,但是支持模块化,所以咯,我们来给他加个网络模块吧,我们值需要先把原系统的网络模块复制到我们的微系统中,Linux的模块都在/lib/module/[内核版本号下],我们首先用lspci或者lsmod查看网络模块信息,然后复制到微系统中,如下:

    image

    最后安装网络模块,使用命令insmod [path]

    image

    好了,整个系统安装完成了!

    1.      linux内核编译:

    具体步骤:
    # tar zxvf linux-2.6.tar.gz -C /usr/src
    # cd /usr/src/linux2.6
    # make menuconfig


    # make
    # make modules_install
    # cp arch/x86/boot/bzImage /boot/vmlinuz-2.6

    # make install

    对比/boot/grub/grub.cfg文件的改动

    2.      安装启动盘(U盘、硬盘)

    # Fdisk /dev/sdb 

    #mkfs.ext2 /dev/sdb1

    # mkdir /tmp/boot ; mount /dev/sdb1 /tmp/boot

    # grub-install --root-directory=/tmp/boot --no-floppy/dev/sdb

    # cp  /boot/grub/grub.conf  /tmp/boot/boot/grub/

    # cp  /boot/grub//boot/grub/splash.xpm.gz  /tmp/boot/boot/grub/

    # cp /boot/vmlinuz-2.6.34/mnt/boot/vmlinuz

    # cp /boot/initramfs-2.6.34.img/mnt/boot/initramfs.img

    3.    构建系统目录

    # mkdir dev proc etc sbin bin lib mnt usr

    # cp /bin /tmp/boot/

    # cp –dpr /dev/{console,fd0.hda,hda8,hda9,hda10,initctl,initrd,kmem,mem,null,ram,ram0,ramdisj,sda,tty1,tty} /tmp/boot/

    # cp/etc/{default,ld.so.cache,ld.so.conf,login.defs,fstab,groub,init.d,inittab,issue,modules.conf,mtab,nsswitch.conf,pam.d,profile,rc.d} /tmp/boot/

    4. 编辑grub.conf

    5. 添加必要的命令

     例如:ls

     Ldd ls,添加对应的依赖库文件

     

     

  • 相关阅读:
    使用idea15搭建基于maven的springmvc-mybatis框架
    git本地提交到远程仓库命令
    jsp表格数据导出到Execl
    FreeMarker标签介绍
    FreeMarker常用语法
    mybatis批量删除
    git之https或http方式设置记住用户名和密码的方法
    INPUT只能输入数字
    mysql 日期格式化
    cygwin配置git
  • 原文地址:https://www.cnblogs.com/mao0504/p/5441217.html
Copyright © 2011-2022 走看看