Chinaunix首页 | 论坛 | 博客
  • 博客访问: 141882
  • 博文数量: 17
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 295
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-19 16:50
文章存档

2011年(1)

2010年(1)

2008年(15)

我的朋友

分类: LINUX

2008-05-05 11:45:39

我也来做嵌入式 linux(连载四)
2007年05月10日 星期四 下午 04:38

总算把系统做来可以启动了,这一步费了我的时间最久……
——————————————————————————————————
第五章         初次整合
当然,还有很多的工作没有做,不过已经等不及了,想试试新的系统能不能正常运行:
1、         满足偶启动新系统的强烈愿望;
2、         好证明我后边的工作都是正确的;

我是先重新拿一个硬盘来试的,因为以后目标机,都是had,而我现在直接挂上去,则会是hdb、hdc……这样,安装lilo时有点麻烦(虽然也可以实现)。所以我想了另一个办法:
         把新硬盘挂在IDE0的primary上,进入linux后,会被认为是had;
         原来主机的装Redhat的硬盘,我将它从IDE0的primary上变到了IDE1 的primary,因为它的lilo早已装好,基本上不影响系统的使用;
         BIOS中改为从第二个硬盘启动;

分区
#fdisk /dev/hda
用d参数删除已存在的所有分区
用n参数新建一个分区,也是就/dev/hda1

格式化
#mkfs.ext2 /dev/hda1

打算用lilo引导系统,准备配置文件
#cd ${PRJROOT}/rootfs/etc
#vi target.lilo.conf
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

这个新的引导程序配置文件名为target.lilo.conf,它是放在rootfs/etc下,可不要放到/etc中去了。

新建文件夹,为mount做新准备
#mkdir /mnt/cf
#mount –t ext2 /dev/hda1 /mnt/cf
回到rootfs
#cd ..
拷贝所有文件至目标硬盘
#cp –r * /mnt/cf

安装lilo
这一步很关键,也就是为我的目标硬盘安装引导程序。
#lilo –r /mnt/cf –C etc/target.lilo.conf
Fatal: open /boot/boot.b: No such file or directory
这是因为lilo版本是22.3以前的。下载22.3,重新安装lilo
再次安装lilo,完装完成后:
# lilo -r /mnt/cf -C etc/target.lilo.conf
Warning: LBA32 addressing assumed
Added Linux *
呵呵,成功了……,
#umout /mnt/cf
#reboot
BIOS改一下,从第一个硬盘,也就是我的目标硬盘引导……
阿门,希望一切顺利……
可是,现实是无情的:
Kernel panic:NO init found.Try passing init=option to kernel
只有再次重来,找原因吧……
……记得上次做的时候,在这一步重启了十多次机器……原本以为这回运气会好一点呢……
都怪上回没有做笔记,这回所有的一切要从头来了。
1、         内核编译错误?排除,前面编译好的时候在原来的系统中能正确引导的;
2、         没有init程序,或者是权限不足?排除,重进了原来的系统,运行了一下init,可以正常运行,权限是777,对应链接的busybox运行位都是x;
3、         lilo中的分区指定有误?应该不是,root是mount成功的,又再仔细检查了一下target.lilo.conf,确认无误;
4、         不会是内核编译时忘了把ext2编译进去吧? 检查内核配置文件:CONFIG_EXT2_FS=y,这个可能性也排除;
5、         那会不会是busybox的问题了,我在redhat下运行是没有问题的,那会不会是busybox的动态链接库出了问题?
重新进入busybox的配置菜单,将编译项调整为静态编译;重新对目标硬盘安装系统……

怀着忐忑的心情,系统终于引导成功了……虽然报Bummer,could not run ‘/etc/init.d/rcS’ermission denied……呵呵,应该是建立一个文件的时候,运行的权限位出了问题,管它的,回头改了就是,先在享受几分钟偶的新系统!!

总结:
1、         busybox的编译出了问题,起先是udhcp部份出了问题,后来是因为使用动态库编译造成系统不能启动,说找不着init。看来偶还得回头仔细分析一下出现这个问题的原因才行。
2、         系统现在能够运行了,接着可以慢慢完善它了

-----------------------------------------------------------------------
现在最头痛的事情有三样:
1、起初没有做好整体规划,比如busybox的telnetd中,帮助文件里指明,需要
your kernel needs:                                                                                                  CONFIG_UNIX98_PTYS=y                                                                    
CONFIG_DEVPTS_FS=y  
好像我起初编内核时,就没有注意,诸如此类……
2、交叉编译一些软件时很麻烦,一个人做起来头绪太过烦杂,特别是装OpenSSH
3、最要命的是,自己一些glibc下编译的程序,uclibc竟然过不了,虽然都是一些细节的问题,但是改起来太痛苦了……(现在我都在打算是不是要在原生主机上静态编译它们,然后拷贝过来算了……因为我的CF卡有128M嘛,应该够了,不过这都是万不得已的打算)

不过做到这一步,还是挺顺利的,只是busybox遇到点点麻烦,花了些时间。我会继续做下去的,只要有时间!希望大家多关注、多帮助我!

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