#cd ${PRJROOT}/rootfs/etc
#vi inittab
我的inittal文档如下:
#指定初始化文档
::sysinit:/etc/init.d/rcS
#打开一个串口,波特率为9600
::respawn:/sbin/getty 9600 ttyS0
#启动时执行的shell
::respawn:/bin/sh
#重启时动作
::restart:/sbin/init
#关机时动作,卸载任何文档系统
::shutdown:/bin/umount -a –r
保存退出;
再来编写rcS脚本:
#mkdir ${PRJROOT}/rootfs/etc/init.d
#cd ${PRJROOT}/rootfs/etc/init.d
#vi rcS
我的脚本如下:
#!/bin/sh
#Set Path
PATH=/sbin:/bin
export PATH
syslogd -m 60
klogd
#install /proc
mount -n -t proc none /proc
#reinstall root file system by read/write mode(need: /etc/fstab)
mount -n -o remount,rw /
#reinstall /proc
mount -n -o remount,rw -t proc none /proc
#set lo ip address
ifconfig lo 127.0.0.1
#set eth0 ip address
#当然,这样子做只是权宜之计,最后做的应该是在这一步引导网络启动脚本,像RedHat
#那样,自动读取任何指定的配置文档来启动
ifconfig eth0 192.168.0.68 netmask 255.255.255.0
#set route
#同样的,最终这里应该是运行启动路由的脚本,读取路由配置文档
route add default gw 192.168.0.1
#还差一个运行服务程式的脚本,哪位有现成的么?
#网卡/路由/服务这三步,事实上能够合在一步,在rcS这一步中,做一个循环,运行指定启动目录下的任何脚,先将就着这么做吧,确保系统能够正常启动了,再来写这个脚本。
#set hostname
hostname MyLinux
保存退出。
编写fstab文档
#vi fstab
我的fstab很简单:
/dev/hda1 / ext2 defaults 1 1
none /proc proc defaults 0 0
第五章 让MyLinux能够启动
前一章,我们把编译好的内核、应用程式、配置文档都拷贝至rootfs目录对应的子目录中去了,这一步,就是把这些文档移植至目标机的存储器。这里,我是先另外拿一块硬盘,挂在我的研发机上做的测试,因为我的本本用来写文档,PC机用来做研发机,已没有另外的机器了……但是本章只是讲述一个一般性的过程,并不影响您直接在目标主机上的工作。
因为以后目标机识别硬盘序号都是hda,而我现在直接挂上去,则会是hdb、hdc……这样,安装lilo时有点麻烦(虽然也能够实现)。所以我想了另一个办法:
 把新硬盘挂在IDE0的primary上,进入linux后,会被认为是had;
 原来主机的装Redhat的硬盘,我将他从IDE0的primary上变到了IDE1 的primary,因为他的lilo早已装好,基本上不影响系统的使用;
分区和格式化
BIOS中改为从第二个硬盘启动;也就是从我原来研发机启动,新的硬盘被识别成了had。
#fdisk /dev/hda
用d参数删除已存在的任何分区
用n参数新建一个分区,也是就/dev/hda1
格式化
#mkfs.ext2 /dev/hda1
安装bootloader
因为我是X86平台,所以直接用了lilo,假如您是其这平台,当然,有许多优秀的bootloader供您选择,您只需查看其相应的说明就能够了。
编译lilo配置文档,我的配置文档名为target.lilo.conf,置于${PRJROOT}/rootfs/etc目录。内容如下所示:
boot=/dev/hda
disk=/dev/hda
bios=0x80
image=/boot/bzImage-2.4.18-rmk5
label=Linux
root=/dev/hda1
append="root=/dev/hda1"
read-only
//新建文档夹,为mount做新准备
#mkdir /mnt/cf
//把目标硬盘mount上来
#mount –t ext2 /dev/hdc1 /mnt/cf
回到rootfs
#cd ${PRJROOT}/rootfs
拷贝任何文档至目标硬盘
#cp –r * /mnt/cf
这样,我们任何的文档都被安装至目标硬盘了,当然,他还不能引导,因为没有bootloader。使用如下命令:
# lilo -r /mnt/cf -C etc/target.lilo.conf
Warning: LBA32 addressing assumed
Added Linux *
-r :改变根目标为/mnt/cf ,这样配置文档其实就是/mnt/cf/etc/target.lilo.conf,也就是我们先前建立的文档。
当然,完成这一步,需要lilo22.3及以后版本,假如您的版本太旧,比如Redhat9.0自带的,就会出现下面的信息:
#lilo –r /mnt/cf –C etc/target.lilo.conf
Fatal: open /boot/boot.b: No such file or directory
这时,您需要升级您的lilo,或重新安装一个。
启动系统
#umount /mnt/cf
#reboot
将BIOS改为从IDE0启动,也就是目标硬盘。假如一切顺利,您将顺利进入一个属于您的系统。
回头再来看看我们的工作空间吧
[root@skynet lib]# df /dev/hda1
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/hda1 3953036 1628 3750600 1% /mnt/cf
总共花去了我1628KB的空间,看来是没有办法放到软盘里边去了^o^,但是一味求小,并不是我的目标。
[root@skynet skynet]# ls ${PRJROOT}
bootloader build-tools debug doc images kernel rootfs sysapps tmp tools
这几个目录中的文档,呵呵,和本文一开头规划的相同
[root@skynet skynet]# ls build-tools/
buildroot buildroot-0.9.27.tar.tar
包含了buildroot源码及压缩包,事实上buildroot下边还包括了GNU其他工具的源码、编译文档等诸多内容,是我们最重要的一个文档夹,但是到现在他已没有多大用处了,假如您喜欢,能够将他删除掉(不建议)。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




