构建cf卡linux系统的几个常见难题

上传人:子 文档编号:43379472 上传时间:2018-06-05 格式:DOC 页数:7 大小:18.31KB
返回 下载 相关 举报
构建cf卡linux系统的几个常见难题_第1页
第1页 / 共7页
构建cf卡linux系统的几个常见难题_第2页
第2页 / 共7页
构建cf卡linux系统的几个常见难题_第3页
第3页 / 共7页
构建cf卡linux系统的几个常见难题_第4页
第4页 / 共7页
构建cf卡linux系统的几个常见难题_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《构建cf卡linux系统的几个常见难题》由会员分享,可在线阅读,更多相关《构建cf卡linux系统的几个常见难题(7页珍藏版)》请在金锄头文库上搜索。

1、构建构建 CFCF 卡卡 LinuxLinux 系统的几个常见难题系统的几个常见难题构建 CF 卡 Linux 系统的几个常见难题关于如何在 cf 卡上构建 linux ,从网上可以找到很多文章,如:许德新 嵌入式 Linux 在 PC104 平台上的构建与实现等等。这里主要介绍我在 cf 卡上构建 linux 系统中碰到的问题和 解决方法。采用硬件是:板子是研祥 104-1621CLDN,bios 是 AMI 的,内核2.6.28.10。采用的方法是 linux from scratch(LFS)。在此过程中遇到的主要有:一 bios 的设置在 cf 卡上建立好根文件系统后,在 cf 卡上安

2、装 grub 引导程序,然后把编译好的内核 bzImage 拷贝到/boot/下,修改/boot/grub/menu.lst/。理论上来现在至少应该能够出现 grub 的menu 画面了,可是 bios 自检过后出现错误:searching for boot record from ide-0. not foundboot failurereboot and select proper boot device or insert boot media in selected boot device然后怀疑是 grub 没有装成功,就重装了 grubgrub setup (hd1)Checkin

3、g if “/boot/grub/stage1“ exists. yesChecking if “/boot/grub/stage2“ exists. yesChecking if “/boot/grub/reiserfs_stage1_5“ exists. yesRunning “embed /boot/grub/reiserfs_stage1_5 (hd1)“. 19 sectors are embedded.succeededRunning “install /boot/grub/stage1 (hd1) (hd1)1+19 p (hd1,0)/boot/grub/stage2/boot

4、/grub/menu.lst“. succeededDone.问题仍然存在,说明问题在其他地方。然后进入 bios 进行设置,由于 cf 卡在 linux 就相当于一个 ide 的硬盘,所以修改 ide 的相关设置,发现问题在于 PCIPlug an d Play Setup 选项下 PCI IDE BusMaster 必须设置为 Disabled 才能进入 grub 画面。二 启动内核的过程中出现 kernel panic -not syncing :vfs:unable to mount root fs on unknown-block(0,0)这个问题的本质原因是根文件系统所在的硬件的驱

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

6、现很多 DMA 的错误信息我的 cf 是 Kinston ELITE PRO CF CARD 8GB 的,应该是不支持DMA 模式,所以出现重复以下错误,导致启动时间变长了很多.ide:failed opcode was :unknownhdc:dma disabledhdc:dma_timer_expiry: dma status (0x21)hdc: dma timeout error在网上 google 了很长时间,多数介绍使用 hdparm 来启动或者关闭cf 卡的 DMA 模式,或者是在 kernel /boot/bzImage-ok1 root=/dev/hdc1 rw 中加入 i

7、de=nodma,可是这对我的 cf 卡并不起作用。煞费苦心后,终于在 http:/www.linuxquestions.org /questions/linux-kernel-70/compact-flash-dma-doesnt-work-and-i-cant-disable-it.-734489/ 这个网页上找到答案。在查看了./Documentation/kernel-parameters.txt 和./Documentation/ide /ide.txt 后发现 需要传递个内核的参数不是 ide=nodma 而是ide_core.nodma=1.0 这里 1.0 指的就是我的 cf

8、卡对应的接口号和设备号。这样 kernel /boot/bzImage-ok1 root=/dev/hdc1 rw ide_core.nodma=1.0 就没有 DMA 的错误信息了。ide_core 还有一些其他的选项,具体参阅内核的文档 ./Documentation/ide/ide.txt。总而言之,搞了一个多月虽然很辛苦,但也学了不少东西。总结一下就是:善于使用 google 的搜索可以减少找到答案的时间,而且尽量使用英文关键字,因为作技术使用英文的人毕竟比用中文的多;多查看内核自带的文档里面有很多好东西;多跟内行的人交流(逛论坛,QQ 群) ;无论作什么事一定要逻辑清楚,有耐心。山穷

9、水复疑无路,柳暗花明又一村。构建 CF 卡 Linux 系统的风雨历程1、今天继续研究把裁剪过的 Linux 安装到 CF 卡里,然后要从CF 卡里运行 Linux 系统,之前研究过一段时间,我也已经把 Linux 系统都重新构建完成了。但是之后试图把裁剪的系统安装到 CF 卡再启动时出现了问题,首先是把系统文件原样考贝进另一个硬盘,然后重新启动,但没成功,经查,是由于考贝的时候丢掉了一些文件的权限而致,于是查阅相关资料往这个方向上走,发现用 cp -Rfva 命令可以正常把文件属性也一起考过来,参数 a 是指考贝时连属性一起进来。经过测试,成功。2、接着试图把系统在 CF 卡上运行,我安上述

10、方法把系统文件考贝进 CF 卡后,然后再在 CF 卡上手动安装了 GRUB,重新启动电脑,改 BIOS 为从 CF 卡启动,结果失败。3、接着我分析了各种可能存在的原因,并且也做了许多尝试,最终还是失败了,并没有成功从 CF 卡上启动 Linux。由于时间关系,我又必须转向另一个任务,这个任务也就暂时搁置了,但我通过之前的尝试,基本怀疑了 CF 卡系统启动失败的原因。那就是可能是CF 卡不支持 DMA 方式传输数据,系统启动时老是在 DMA 一处卡住了,但当时没有太多时间去研究,也就放下了。以后有时间再搞吧。4、今天终于有时间继续来研究 CF 卡启动 Linux 的问题,经过上次的研究,我就在

11、当时怀疑的可能出现问题的情况下往这个方向去解决这个问题,首先把 BIOS 里关于 DMA 的选项都关闭了,一个一个的尝试,但没有成功,最后在没有任何办法的时候我想到了可以换台电脑试试(因为我的 PC 硬件较新,我在想换个老的 PC 试试) ,终于,一换上去,成功进入了 GRUB,哇,这个时候我的心情非常高兴。看来这个时候是成功的第一步啊。5、既然进行了 GRUB,那说明 CF 卡应该能正常工作了,下一步系统的启动如果设置正确的话应该就可以成功启动。怀着这个想法我开始尝试启动 Linux,首先进入 GRUB,在 GRUB 的命令行里写了启动 Linux 的命令root (hd0,4)kernel

12、 /boot/kernel-2.6.11.12-3 root=/dev/hda5boot然后回车,哇,系统内核正常进入了,但在内核的启动过程中,经过设置硬盘 DMA 的时候超级慢,并且有报错。我当时就怀疑这里肯定有问题,只是不知道如何解决,经过了漫长的等待,Linux 终于进入到 mount root fs 了,但这一步出错了,提示说无法挂载根文件系统,这个问题我可是经常碰到的,只是出现在这里让人不好判断是哪里有问题。于是我回想系统启动时的屏幕打印信息,突然一闪(内核为什么会检查 hdc 设备呢?我的 CF 卡应该是 hda 啊?我在 GRUB 里传递给内核的参数也是写的 root=/dev/

13、hda5 啊?)想到这一点的时候我心里似乎找到原因了(可能是系统把我的 CF 卡识别成了 hdc),正常情况下这个结果应该只有一个原因所致,那就是我的 CF 卡接的 IDE 接口位置不对,于是我重新启动 PC,进入到 BIOS里,一看,哦,明白了,BIOS 里显示我的 CF 卡处于第三个 IDE 位置,顿时确定了 root fs 挂不上的原因了,接着我把 CF 卡拔出来,插到 IDE 的第一个位置上,然后设置 GRUB 内核参数,再经过漫长的等待,哇,真激动人心啊,系统正常挂载了 root fs,但别高兴太早了,问题又出来了,那就是系统正常进入启动了 INIT 进程,但没走几步,系统又提示说根

14、文件系统又不能正常进入,到这时,我就觉得奇怪了,不是设置正确了吗?自己来回走了数趟,一边走一边思考,突然又是一闪,一个可能的原因又出来了,那就是我的系统是从另一个硬盘考贝过来的,而硬盘对应的分区不一样,现在问题很清楚了,就是出在 fsttab 文件的配置上,于是我马上把 CF 卡取下来,放到另一台电脑上把 CF 卡里面的 fsttab 文件更改正确了,然后再放回测试,哇,这次真是万分激动啊,系统真的起来了,出现了登录项。虽然系统在启动过程中提示了几个错误,不过那都是配置上的问题,不是什么大问题,正确配置就应该可以正常。于是我登录系统,进去了,非常正常的跑起来了,高兴啊。我这人有点完美主义,觉得

15、这个系统还不完美,在启动的时候出现内核 DMA 设置出错,并且因为这个错误而停留非常长的时间。6、现在的问题就是解决内核启动时加载 DMA 时出错的问题。我首先想到的就是在编译内核时的内核配置选项里会不会有这一项呢?于是我重新 make menuconfig 在里面找了个遍,也没有发现关闭或设置我需要的 DMA 的选项,反正是尝试嘛,于是我把内核配置选项里我怀疑是的选项都关了,然后重新编译了一个内核考贝到 CF 卡里,接着启动系统,但是结果总是没有那么快让人满意,问题依然存在哦,我在屋子里走来走去,想招啊!最后想来想去也没有一个可能的原因说服自己再去尝试。唉,上了个厕所,然后长叹一声,真是才思

16、枯了吗?哦,对了,我应该问问 google 和 baidu 了,也许它们知道呢?于是我在 baidu 里输入了dma error linux 后回车,哇,没想到还真有许多人问这个问题,在一大堆“药”里慢慢找能医治此病的药,突然,找到了一个非常关键的一句话“启动时加了一行“ide=nodma“,就好了,.” ,于是我怀疑这个可能就是我需要的药哦,真是迫不及待的把系统重新启动,然后设置内核启动参数:root (hd0,4)kernel /boot/kernel-2.6.11.12-3 root=/dev/hda5 ide=nodmaboot因车后,经过几十秒钟的等待,哇!结果真让人满意,问题真的解决了哦,真是高兴啊!到此为止,从 CF 卡里启动 Linux 的任务基本完成了。呵呵,高兴啊,接着要进入下一步了,系统的配置。7、SSH 服务的自启动的配置。因为这个系统是我基于 LFS 重新构建的系统,基本上完全靠自己去定制各种服务,平时在别的Linux 发行版里如 Red Hat、CentOS、ARCH、DeBian 里,配置这个服务根本就不是问题,但

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号