Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11161
  • 博文数量: 9
  • 博客积分: 457
  • 博客等级: 下士
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-08 22:44
文章分类
文章存档

2010年(9)

我的朋友

分类: LINUX

2010-11-30 18:16:45

 关于如何在cf卡上构建 ,从网上可以找到很多文章,如:许德新 《嵌入式Linux在PC104平台上的构建与实现》等等。这里主要介绍我在cf卡上构建linux系统中碰到的问题和 方法。采用硬件是:板子是研祥 104-1621CLDN,bios是AMI的,内核2.6.28.10。采用的方法是linux from scratch(LFS)。在此过程中遇到的主要有:

一 bios的

      在cf卡上建立好根文件后,在cf卡上安装grub引导程序,然后把编译好的内核bzImage 拷贝到/boot/下,修改/boot/grub/menu.lst/。理论上来现在至少应该能够出现grub的menu画面了,可是bios自检过后出现错误:
        searching for boot record from ide-0..  not found
        boot failure
        reboot and select proper boot device or insert boot media in selected boot device
        然后怀疑是grub没有装成功,就重装了grub
grub> setup (hd1)
 Checking if "/boot/grub/stage1" exists... yes
 Checking if "/boot/grub/stage2" exists... yes
 Checking if "/boot/grub/reiserfs_stage1_5" exists... yes
 Running "embed /boot/grub/reiserfs_stage1_5 (hd1)"...  19 sectors are embedded
.
succeeded
 Running "install /boot/grub/stage1 (hd1) (hd1)1+19 p (hd1,0)/boot/grub/stage2
/boot/grub/menu.lst"... succeeded
Done.
问题仍然存在,说明问题在其他地方。然后进入bios进行设置,由于cf卡在linux就相当于一个
的硬盘,所以修改ide的相关设置,发现问题在于PCI/Plug an d Play Setup选项下PCI IDE BusMaster  必须设置为Disabled 才能进入grub画面。

二 启动内核的过程中出现
-not syncing :vfs:unable to mount root fs on unknown-block(0,0)
     这个问题的本质原因是根文件系统所在的硬件的驱动程序没有编译进kernel或者在initrd.img 中也没有把硬盘或者cf卡的驱动程序作为模块加入。还有一种是在grub或者lilo的设置中 root=/dev/sd* 或者 /dev/hd* 的设置有误。这导致内核无法识别硬盘或cf卡。所以,建议在编译内核的时候特别细心,找出硬盘是属于ata的,还是pci的,或者scsi的,然后选择相应的选项。如果很难确定硬盘或cf卡的类型,则建议先全部选上,这样先保证能够进入系统,然后用dmesg | less 查看相应的硬盘或者cf卡的硬件信息,接下来再重新选择它们的驱动,把不要的去掉。

三 内核启动过程中出现很多
的错误信息
    我的cf是Kinston ELITE PRO CF CARD 8GB的,应该是不支持DMA模式,所以出现重复以下错误,导致启动时间变长了很多.
ide:failed opcode was :unknown
hdc:dma disabled
hdc:dma_timer_expiry: dma status (0x21)
hdc: dma timeout error

在网上
了很长时间,多数介绍使用hdparm 来启动或者关闭cf卡的DMA模式,或者是在kernel /boot/bzImage-ok1 root=/dev/hdc1 rw 中加入ide=nodma,可是这对我的cf卡并不起作用。煞费苦心后,终于在 这个网页上找到答案。在查看了./Documentation/kernel-parameters.txt和./Documentation/ide/ide.txt后发现 需要传递个内核的参数不是ide=nodma 而是ide_core.nodma=1.0 这里1.0指的就是我的cf卡对应的接口号和设备号。这样 kernel /boot/bzImage-ok1 root=/dev/hdc1 rw ide_core.nodma=1.0 就没有DMA的错误信息了。ide_core还有一些其他的选项,具体参阅内核的文档 ./Documentation/ide/ide.txt。

    总而言之,搞了一个多月虽然很辛苦,但也学了不少东西。总结一下就是:善于使用google的搜索可以减少找到答案的时间,而且尽量使用英文关键字,因为作
使用英文的人毕竟比用中文的多;多查看内核自带的文档里面有很多好东西;多跟内行的人交流(逛论坛,QQ群);无论作什么事一定要逻辑清楚,有耐心。山穷水复疑无路,柳暗花明又一村。




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

chinaunix网友2010-12-01 15:11:02

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com