Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2470930
  • 博文数量: 867
  • 博客积分: 10010
  • 博客等级: 上将
  • 技术积分: 9800
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-27 14:44
文章分类

全部博文(867)

文章存档

2007年(6)

2006年(861)

我的朋友

分类: LINUX

2006-07-30 22:01:55

10.将编译好的文件移到/boot;如果上面某步有错,大部分情况是由于配置内核选项时将一些当前版本只能编译为modules的选为编译到内核里,我遇到好几次这样的情况.因为既然发布一个稳定的内核,(偶没down那些alpha,beta)99可以成功的编译.#move /usr/src/linux2.4/System.map    /boot/System.map-2.4.20-kilvon.001#move /usr/src/linux-2.4/arch/i386/boot/bzImage            /boot/vmlinuz-2.4.20-kilvon.001#rm -f System.map#rm -f vmlinuz#ln -s /boot/System.map-2.4.20-kilvon.001 /boot/System.map  后面的是需要连接的文件,前面的是源文件。#ln -s /boot/vmlinuz-2.4.20-kilvon.001 /boot/vmlinuz/boot下生成 initrd img文件:cd /bootmkinitrd   initrd-2.4.20.img   2.4.20这一步一直没有成功,问过李老师,他说是SCSI设备的,我没选,就用原来得了网络上解释:Initrd是内存盘的初始化映象,如果启动时加载了initrd映象,内核会用它建立一个内存盘,mount为根文件系统,运行其中的初始化程序,等到初始化程序退出后,内核再mount实际的根盘。initrd可以使内核最大程度的模块化,常被安装程序所使用。不过,initrd更多地用于rescue盘,它把内存盘直接当作根盘来用。跨过这一步,继续向下:下面蓝色的是我参考的两份文章结合的。1) 准备 一个根文件系统必须包括支持完整Linux系统的全部东西,因此,它至少应包括以下几项:   基本文件系统结构  至少含有以下目录:/dev, /proc, /bin, /etc, /lib, /usr, /tmp   最基本的应用程序,如sh, ls, cp, mv   最低限度的配置文件,如rc, inittab, fstab   设备:/dev/hd*, /dev/tty*, /dev/fd0   基本程序运行所需的库函数   由于以上所需文件远超过1.44M,因此我们通常的做法是先准备好内容后再压缩到软盘中,当用软盘启动时,再把文件解压到内存中,形成一个虚拟盘(RAMDISK),通过RAMDISK控制系统启动。   为了能创建以上的根文件系统,你必须有一个空闲的能够放下大约4M文件的RAMDISK。根文件系统最少应该有如下8个目录:   /dev 设备   /proc -- proc 文件系统所需目录   /etc 系统配置文件   /sbin 重要的系统程序   /bin 基本应用程序   /lib 共享函数库  /mnt 装载其他磁盘节点   /
usr
附加应用程序  其中/proc,/mnt/usr在此情况下都是空的,只需要用mkdir创建它们既可。其余的目录应根据需要分别创建,下面我一个一个的详细叙述。一套linux系统要正常启动,根文件系统要包括下列文件夹:/bin /etc /proc /tmp /var /dev /mnt 要包括下列基本的设备文件:/dev/console /dev/fd0 /dev/null /dev/ram0 /dev/tty /dev/tty0要包括下列配置文件:/etc/rc.d/inittab /etc/rc.d/rc.sysinit /etc/fstab要实现基本的功能,还要包括一些常用工具:如:shlscdcat……其中,前面三个部分不要多少空间的,但是常用工具会占用很多空间,要是用原来系统中的这些命令,就是全部用静态编译,不是用动态连接库,大概有2MB~3MB,放不进软盘。网络上解决的方案是使用BusyBox工具。具体可以到官方网站:看看。下载BusyBox工具的源代码,编译:注意:(1 译的时候要静态编译,修改 Makefile 中的 DOSTATIC 参数,从false 改为 true,这样,编译出来的代码就不要依赖glibc了。(2 因为我们用的是 BusyBox 上的 init,与一般所使用的 init 不太一样,会先执行 /etc/init.d/rcS 而非 /etc/rc.d/rc.sysinit,为了做出来的 FloppyLinux 架构与 Redhat 的架构一样,所以修改了 BusyBox 中的 init.c底下是修到的部分内容 #ifndef INIT_SCRIPT#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"#endif具体操作如下:(1 官方网站上下载BusyBox的最新版本:busybox-0.60.5.tar.gz解开,按照上面的注意点修改源代码(2 运行下列命令:#make#make install3 译好的可势行文件放在 ./_install 文件夹里的。#cp ./_install /tmp/floppy-linux -r4 动建立其它的文件或文件夹:#cd /tmp/floppy-linux# mkdir dev etc etc/rc.d proc mnt tmp var# chmod 755 dev etc etc/rc.d bin mnt tmp var# chmod 555 proc# cd dev# mknod tty c 5 0# mknod console c 5 1# chmod 666 tty console# mknod tty0 c 4 0# chmod 666 tty0# mknod ram0 b 1 0# chmod 600 ram0# mknod fd0 b 2 0# chmod 600 fd0# mknod null c 1 3# chmod 666 null5 建启动配置文件:(inittab,rc.sysinit,fstab
initab:::sysinit:/etc/rc.d/rc.sysinit::askfirst:/bin/shrc.sysinit:#!/bin/shmount -a# chmod 755 rc.sysinitfstab:proc
 /proc proc defaults 0 0
6 Ramdisk的镜像文件:# dd if=/dev/zero of=/tmp/initrd bs=1k count=4096# losetup /dev/loop0 /tmp/initrd# mke2fs -m 0 /dev/loop0># mount -t ext2 /dev/loop0 /mnt# cp -r /tmp/floppy-linux/* /mnt# umount /mnt# losetup -d /dev/loop0# dd if=/tmp/initrd | gzip -9 > /tmp/initrd.gz# rm -f /tmp/initrd# sync3.编译内核:这部分内容不详细讲述,主要是去掉了一些不需要的选项,减小内核,编译出来的内核是725920Byte。里面包含了必要的网卡驱动和网络协议栈。4.整合启动盘现在所用到了的东西全部搞好了,下面就是整合一下:全部文件(文件夹)如下:/lost+found//boot//boot/grub//boot/grub/stage1 =========èGrub启动时用到的两个文件/boot/grub/stage2/boot/grub/menu.lst =========èGrub的配置文件指向grub.conf/boot/grub/grub.conf/boot/kernel =============è内核/initrd.gz ===============è内存镜像文件这样这张软盘就能启动一套Linux系统了,占用1.213MB。我自己实际做的:常用工具会占用很多空间,要是用原来系统中的这些命令,就是全部用静态编译,不是用动态连接库,大概有2MB~3MB,放不进软盘。网络上解决的方案是使用BusyBox工具。具体可以到官方网站:看看。下载BusyBox工具的源代码,编译:注意:(1 译的时候要静态编译,修改busybox目录下的 Makefile 中的 DOSTATIC 参数,从false 改为 true,这样,编译出来的代码就不要依赖glibc了。(2 因为我们用的是 BusyBox 上的 init,与一般所使用的 init 不太一样,会先执行 /etc/init.d/rcS 而非 /etc/rc.d/rc.sysinit,为了做出来的 FloppyLinux 架构与 Redhat 的架构一样,所以修改了 BusyBox 中的 init.c底下是修到的部分内容 #ifndef INIT_SCRIPT#define INIT_SRCIPT "/etc/rc.d/rc.sysinit"#endif具体操作如下:(1 官方网站上下载BusyBox的最新版本:busybox-0.60.5.tar.gz解开,按照上面的注意点修改源代码(2 运行下列命令:#make#make install3 译好的可势行文件放在 ./_install 文件夹里的。#cp .r /_install/*  /tmp/floppy-linux 这个跟作者原来的有一点小的差别,我这样的命令把_install目录下面的文件全部复制到了指定的目录下面。#cd /软盘挂接的位置/软盘
# mkdir dev etc e
tc/rc.d proc mnt tmp var  bin  boot sbin  usr 
这是几篇文章提到的目录,我把他们总结出来,都创建了目录# chmod 755 dev etc etc/rc.d bin mnt tmp var# chmod 555 proc# cd dev# mknod tty c 5 0# mknod console c 5 1# chmod 666 tty console# mknod tty0 c 4 0# chmod 666 tty0# mknod ram0 b 1 0# chmod 600 ram0# mknod fd0 b 2 0# chmod 600 fd0# mknod null c 1 3# chmod 666 null以上几个命令是在dev里面创建了ttytty0consoleram0fd0null几个设备文件。接下来,文章中提到的/etc/rc.d/inittab      /etc/rc.d/rc.sysinit          /etc/fstab文件也就是:启动盘中必须含有的文件   • rc.d/* -- 系统启动脚本   • fstab ?列出要登陆的文件系统   • inittab 包含启动过程参数建启动配置文件:(inittab,rc.sysinit,fstabinitab:::sysinit:/etc/rc.d/rc.sysinit::askfirst:/bin/shrc.sysinit:#!/bin/shmount -a# chmod 755 rc.sysinitfstab:proc /proc proc defaults 0 06 Ramdisk的镜像文件:# dd if=/dev/zero of=/tmp/initrd bs=1k count=4096# losetup /dev/loop0 /tmp/initrd# mke2fs -m 0 /dev/loop0># mount -t ext2 /dev/loop0 /mnt# cp -r /tmp/floppy-linux/* /mnt# umount /mnt# losetup -d /dev/loop0# dd if=/tmp/initrd | gzip -9 > /tmp/initrd.gz# rm -f /tmp/initrd# sync3.编译内核:最后整理好的软盘上的文件如下:/lost+found//boot//boot/grub//boot/grub/stage1 =========èGrub启动时用到的两个文件/boot/grub/stage2/boot/grub/menu.lst =========èGrub的配置文件指向grub.conf/boot/grub/grub.conf/boot/kernel =============è内核/initrd.gz ===============è内存镜像文件最后,修改grub.conf文件,title newdefault=0timeout=10title My Floppy Linux 1.0 root (fd0) kernel (fd0)/boot/kernel initrd (fd0)/initrd.gz其中,initrd.gz就是我们生成的文件系统压缩以后的文件。Kernel就是我们自己编译的核心。这样这张软盘就能启动一套Linux系统了。在制作的这个软盘里面,

阅读(783) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~