在 Y450A上 安装定制的FreeBSD7.2

来源:互联网 发布:c语言中!x是什么意思 编辑:程序博客网 时间:2024/05/16 01:04

 在联想Y450A上安装FreeBSD的经历

说明:

FreeBSD在y450a上直接安装会失败的,安装盘就起不来,原因是打入内核的sbp驱动会让内核启动时挂掉,而启动后以模块载入内核则没有问题;尝试的方法是先在虚拟机下编译不含sbp的内核,再根据安装光盘的格式,替换掉光盘里的内核,使新作的iso可以在y450a上正常使用。

问题: 安装光盘启动失败
下载ISO、刻盘,从光盘启动,激动的期待安装界面的出现,可是安装盘里的内核在检测完光盘后就挂起了,一直在提示:stillwaiting after xx seconds forxpt_config,我等了n久再没别的反应,把光盘插入dell的台式机里就没这个问题。
google一下原来是个固有的bug,貌似跟 firewire有关,解决方法很简单:
在bios里禁用firewire,就可以安装了,之后如果要用firewire,就把sbp(fire rewire驱动)编译成模块载入内核,简单是简单,可在y450a的bios里怎么也没找到禁用的选项啊,郁闷。难道本本就这么跟FreeBSD无缘了吗!
突然想起了vmware,因为之前都是在虚拟机里体验BSD的,于是想到一个变通的方法:
用vmware重编一遍没有sbp的内核,把它做进安装盘里,替换掉里面的内核,用新作的iso启动Y450A不就可以了吗,说干就干,步骤如下:

第一步:在vmware里重编内核
新建一虚拟机(vmware安装和使用的详细步骤可以参考其它文章),我的配置是256M内存、4G硬盘、带USB和网桥、光盘设为虚拟光驱H:
用第一张光盘启动虚拟机,进入安装界面后,有一系列的选项,大多是无关紧要的,可以根据个人喜好决定,但一定要确保在菜单里选中configure->distribution->src->sys,这是要编译的FreeBSD的内核源码,我用的是custom配置,先指定硬盘分区,设置文件系统、挂载点,就可以开始安装了,装完不要忘记设置密码和网络,重启虚拟机一般就可以看到FreeBSD的启动选择界面了,到此万事俱备,下面开始编译内核:

1. 修改内核编译选项
进入/usr/src/sys下,若没有此目录,可以运行sysinstall安装内核源码,进入i386/conf子目录下,复制配置文件:
cp GENERIC Y450AKERNEL
用vi或者别的编辑器打开我们的配置文件:Y450AKERNEL,将文件尾部其中的device sbp注释掉改为:
#device sbp
保存Y450KERNEL
2. 编译新内核
执行config生成源码树
/usr/sbin/config Y450AKERNEL
切换到编译目录:
cd ../complie/Y450AKERNEL
编译内核:
make cleandepend&&make depend
make
安装内核:
make install
以上如果没有出错的话,内核就已经安装成功了,新内核被安装到/boot/kernel 里了,大小100多M,原来的内核保存在kernel.old目录里

第二步:制作安装光盘镜像需要的文件
重新编译的内核可以在y450a上启动,但编译内核需要先有BSD,安装光盘在真机上起不来,自然没法编,所以要么你把硬盘拆下来,挂到别的机子上先装BSD,再替换内核,然后再把硬盘挂回来,要么就只能把新内核打到安装光盘,一步到位。

1.光盘安装包的格式

先看看第一张光盘的结构吧,关键是光盘里的两个目录:/boot/kernel、/7.2-RELEASE/kernels

/boot/kernel里放的是安装程序自己要用的内核和模块,安装光盘自己起不来,就是因为这里的内核打上sbp驱动,它同系统/boot/kernel下的内容是一样的,只是少了模块符号,大小减为30多M。
/7.2-RELEASE/kernels里是要安装到系统的内核,不把这个替换了,安装程序可以跑,但装完的系统重启就挂了,包里有44个文件:
有很多以generic开头的文件,从generic.aa到generic.bm,开始很奇怪这是什么包?于是vi了目录下的install.sh,看到一行命令

代码:cat $tn.?? | tar - -unlink -xpzf - -C $BOOT


于是在我就:cat generic.?? >generic.file
然后用file命令查看,果然是gzip压缩过的tarball
tar -tzf generic.file
得知这个tgz包带个GENERIC(大写)目录,文件都是./GENERIC/*.ko和./GENERIC/kernel的格式

CHECKSUM.MD5为目录下所有文件的md5校验,CHECKSUM.SHA256实际测试时可以
忽略(因为有CHECKSUM.MD5),generic.mtree,是generic.file这个包,也就是内核目录下所有文件的校验,generic.inf是generic.file的校验,install.sh是要调用的安装脚本,可以不用改。

2.开始替换光盘内核

以下操作在虚拟机里:
1. 制作替换包:
cd /root
cp -R /boot/kernel .
rm kernel/*.symbols
mkdir kernels && cd kernels
cp -R /boot/kernel GENERIC
tar zcvf general.aa GENERIC
生成mtree文件:
mtree -cp GENERIC >generic.mtree
cksum generic.aa >generic.inf
调整inf格式为
Pieces = 1
cksum.aa = xxx xxx (注意这有个等号,它折磨了我n久)
rm -rf GENERIC
生成最后的md5文件:
md5 * >CHKSUM.MD5
五个文件都齐了,这样就有了kernel 和 kernels两个用于替换的文件夹,将这两个文件夹打包便于传送:
tar cvf new_kernel.tar kenel kernels

3.将vmware里的文件传出来
这个本应该很简单,我先试的是U盘,虚拟机里的FreeBSD可以识别、挂载U盘:
mount -t msdosfs /dev/da0 usbdir
拷贝到U盘,md5校验也没错,但把U盘挂到真实的系统(我的XP)上时,校验和解压缩都出错,也就是说把U盘拔掉重新插入后,同一个文件的md5不一样,试了n次,换了几个U盘都一样,最后没辙还是走网络通过ftp传送到xp下,校验没错,搞不懂为什么会这样,也许是虚拟机的问题吧,总之,拷到真实的系统后一定要md5校验一下,U盘行不通,就ftp吧。

第三步:用UltraISO制作新ISO

这最后一步比较简单,直接用UltraISO打开第一张盘:7.2-RELEASE-i386-disc1.iso,
用new_kernel.tar里的kernel 替换掉/boot/kernel文件夹,用new_kernel.tar里的kernels替换掉/7.2-RELEASE/kernels文件夹,然后另存为:
FreeBSD-7.2-Y450A-disk1.iso

OK,到这一步,新的iso就做好了,直接刻盘吧,从光盘启动,开始安装你就会看
到sysinstall那亲切的界面了。
以上是我采用的方法,也许还有更方便一点的,欢迎交流哈,开始体验FreeBSD的乐趣吧。

原创粉丝点击