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目录下创建两个文件夹:如图

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

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

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

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

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

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

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/

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

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

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

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

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

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

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

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

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,添加对应的依赖库文件

 

 

时间: 2024-11-10 00:06:21

Linux 系统裁剪笔记1的相关文章

Linux 系统裁剪笔记 3

说到裁减Linux,无非是为了减小磁盘占用或者是为了某些特定场合的应用(如嵌入式系统).以RedHat 7.3为例,其最小安装仍然达到了300M,这不得不让人对一直号称小而全的Linux系统感到疑惑. 作为自己手中课题的一个铺垫,不久前我尝试了对Linux进行裁减,虽然没有达到预期的一张软盘大小,但结果也相当有吸引力.下面我对此一一做说明. 参考文档: Linux bootdisk-HOWTO:     http://www.linux.org.tw/CLDP/gb/Bootdisk-HOWTO

Linux 系统裁剪笔记 软盘2

第一步:裁减内核打开终端,输入:cd /usr/src/linux2.4,然后输入make xconfig.现在编译内核正式开始了1.1 "code maturity level options"选项,代表代码的成熟等级,因为这是一个试验的部分,我们不需要,所以关闭它.1.2 "Loadable module support"可加载模块支持可加载模块是指内核代码(kernel code)的一些片断,比如驱动程序,当编译内核的时候它们也被单独编译.因此,这些代码不是内

Linux 系统裁剪笔记 4 (内核配置选项及删改)

在menuconfig中配置,可以对进行Linux内核配置选项及删改.本文介绍详细配置方法.第一部分:全部删除Code maturity level options ---> 代码成熟等级选项[]Prompt for development and/or incomplete code/drivers 默认情况下是选择的,这将会在设置界面中显示还在开发或者还没有完成的代码与驱动.不选.第二部分 :除以下选项,其它全部删除General setup-〉System V IPC (IPC:Inter

终端回车不能换行-Linux 系统裁剪之后 终端登录问题!请Linux高手帮忙解决一下!

问题描述 Linux 系统裁剪之后 终端登录问题!请Linux高手帮忙解决一下! 10C 最近裁了一个linux系统 最后能正常启动和运行,唯独的一点遗憾就是tty1 这个终端不能用!以下的不正常信息,在其它tty[2-6]都正常.当登录上tty1之后输入的内容都不会显示!假如输入错误的命令后,回车会显示命令找不到并且会换行!如果直接输入回车,也不能换行,是怎么回事儿? 解决方案 http://blog.csdn.net/ssmile/article/details/8239612

Linux系统基础笔记之网卡安装一般步骤简介

  虽然Linux系统发展的时间不长,可是Linux系统越来越受到电脑用户的欢迎,导致很多人开始学习Linux时,学习linux,你可能会遇到Linux网卡安装问题,希赛系统学院将介绍Linux网卡安装问题的解决方法,在这里拿出来和大家分享一下. 第一步:配置以太网卡的工作参数 配置网卡就是配置网卡的工作参数,如端口地址.中断号等.网卡的缺省参数一般存储于网卡内部的EEPROM,这是网卡出厂前设置好的.缺省参数在大多数情况下是可行的,但如果这些参数与你的系统有冲突并且网卡又不支持软件动态设置,那

微型linux系统的裁剪过程

前面我们介绍过基于busybox制作一个小linux,这篇文章则介绍的是从头至尾,一步一步根据系统启动流程制作的微型linux,并且逐渐将其功能完善. 系统启动流程: POST 加电自检,载入一段程序完成基本及核心硬件的检测 --> BIOS 根据BIOS中设定的引导次序,查找对应设备上的MBR --> 读取MBR的BootLoader,BootLoader中配置了要引导的操作系统的内核的位置 --> 读取内核,内核进行初始化,需要initrd 将Kernel和真正的根文件系统连接起来

Linux系统针对网卡中断的优化处理

中断: 当网卡接收到数据包后,会触发硬中断,通知CPU来收包.硬中断是一个CPU和网卡交互的过程.这其实会消耗CPU资源.特别是在使用速度极快的万兆网卡之后,大量的网络交互使得CPU很大一部分资源消耗在网卡中断处理上.此时,瓶颈并不在网卡,而是在CPU上.因此,现在的网卡都采用多队列的技术,用于充分利用多核心CPU. 中断的详细解释:<Linux的中断和异常扫盲笔记> SMP IRQ affinity 为了防止多个设置发送相同的中断, Linux设计了一套中断请求系统, 使得计算机系统中的每个

Linux系统安全配置详细解析

  1.为LILO增加开机口令 在/etc/lilo.conf文件中增加选项,从而使LILO启动时要求输入口令,以加强系统的安全性.具体设置如下: boot=/dev/hdamap=/boot/mapinstall=/boot/boot.btime-out=60 #等待1分钟promptdefault=linuxpassword=#口令设置image=/boot/vmlinuz-2.2.14-12label=linuxinitrd=/boot/initrd-2.2.14-12.img root=

linux系统可以在512MB内存运行吗?

问题描述 linux系统可以在512MB内存运行吗? 请教linux系统可以在512MB内存运行吗?因为书上说:系统空间占据了虚存空间的最高1G字节,在物理内存是从最低的0地址开始,以0xC0000000做一下偏移,便完成了地址映射.换句话说,物理内存的低1G空间,必须给内核留着.那512MB或1G内存,用户进程岂不没有一点自己的空间?那不就跑不了用户程序了吗? 还有个问题是,反正1G都是自己的,为什么不直接使用物理地址,还要0xC0000000偏移一下? 解决方案 linux系统可以在512M