前几天开始了我的linux开发生涯。。。由于之前都是做cortex-m3开发的,虽然也有些任务调度、消息队列管理等,但是,发现比起linux这样的操作系统的,以前的东西真的是小巫见大巫呀。。。不过,也不能说以前的东西是没用的,那些是基础,是基石!相信这些基石能让我在今后的linux道路上走得更加稳妥与快速。
刚入门的我,开始很彷徨,因为,以前的编译,都是IDE集成了,直接一个按钮,现在呢,连交叉编译环境都是要一步步搭建,对于新人来说,貌似都很陌生,在这里,个人觉得,一定不能着急也不能担心别人看不起你而不敢问一些简单的问题。不懂就问,但是,需要是细心查阅几遍后发现还真的不懂后再问。这点,也要告诫自己,之前就是有些问题,其实是不细心以及着急而忽略了一些关键点,进而浪费了一些时间。
需要多做笔记,哪怕一些简单的命令操作,觉得有必要,都可以记录。因为,刚开始的时候,肯定是到处看资料,信息量很大,同时,也会让自己的大脑磁盘空间产生很多碎片,无法串联起来,因此,记录,就类似于FAT表,可以让自己那么多零碎的知识点链接起来。
目前使用的开发模式是在xp下安装virtualbox虚拟机,用的是ubuntu12.04,linux内核用的是2.6.28.7,编译器开始用的是4.4.3,后面换成了4.3.2。接下去一个个介绍遇到的问题与解决办法。
问题1:构建个共享文件夹与虚拟机共享,老不成功。
按照网上的做法,具体可以参见网上很详细方法,这里只是简要介绍:
1.先把virtualbox的中的共享目录myshare选择自动分配
2.需要在/mnt/下mkdir一个自己要挂载共享文件夹的文件夹,我这里名字是winshare
3.这个也就是之前一直没有成功的地方。在/etc/fstab中最后地方添加一个语句:myshare /mnt/winshare vboxsf rw, defaults 0 0
这里的myshare是windows下的共享文件夹的名字
之前不成功的原因在于:“最后的地方”这里我弄错了,我是直接另起一行,老是不成功,后来发现应该是在最后一个字节的地方再敲回车!
u-boot可以引导内核了,但是根文件系统一直无法挂载上,在这个过程中,反反复复修正了好多个问题,其中有自己粗心的原因,也有是太外行的原因。
问题2:粗心引起的问题
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0)
我是要从nand flash中挂载根文件系统的,结果,由于我的u-boot的启动参数粗心配置错了,把bootargs写成了bootarg,于是,其实bootargs还是没有被改掉,沿用了u-boot-2010-3这个tekkamanninja大侠修改的版本中的,因此出错,这里非常感谢@tekkamanninja的耐心解答。
问题3:挂载根文件系统的时候,出现了好多坏块等错误,mkyaffs2image引起的。
yaffs: auto selecting yaffs2
block 2 is bad
VFS: Mounted root (yaffs filesystem).
Freeing init memory: 144K
Warning: unable to open an initial console.
Kernel panic - not syncing: No init found. Try passing init= option to kernel.
等导致无法正常挂载文件系统的问题
发现,应该是mkyaffs2image这个工具的问题。我下载过多个版本的mkyaffs2image,有的是仅仅单个mkyaffs2image,也有是usr/sbin/下有两个,一个是mkyaffs2image,一个是mkyaffs2image-128M,后来发现,单个的往往有问题,因为我nand flash是256M的,因此,需要的是大容量的制作,不然会导致oob方面的错误。这类内容,网上搜索“mkyaffs2image-128M OOB”可以很多参考。
我发现这个问题的方法是用了我之前的mkyaffs2image去制作光盘提供的文件系统为镜像,结果发现居然也有坏块,于是,我用mkyaffs2image-128M制作后,就发现不会有坏块了。
问题4:编译器4.4.3编译出来的根文件系统无法挂载。
接着,我用mkyaffs2image-128M这个编译我按照网上制作根文件系统方法制作的根文件系统,却出现了新的错误
Kernel panic - not syncing: Attempted to kill init!
这个问题,网上大部分说的是编译器在内核编译的时候EABI选项如果没有选择默认是关闭EABI的,而在编译根busybox的时候是默认打开的。但是,我查了好多遍,发现我的内核选项里都是有打开的。网上说的编译器是4.3.x版本的,于是,我怀疑是不是在编译器4.4.3编译busybox的反而没有打开,导致了与我内核打开了进而出现不匹配呢?刚好这个时候同事说换个编译器试看看,于是,我换成了4.3.2的,果然,成功!!!
问题5:根文件系统挂载成功,ls的出现
1;34mbin[0m [1;34mhome[0m [1;34mmnt[0m [1;34msample[0m
这样的乱码,网上说是DNW不支持彩色的原因,我用的busybox是1.13.3版本的,于是我在busybox1.13.3目录下make menuconfig想取消掉Coreutils --->下找到ls相关的Allow use of color to identify file types把前面的*给去掉
但是,1.13.3这个版本下,这些选项都无法进行取消选择,于是,我到下载了1.20.2这个版本,就可以了。
阅读(4178) | 评论(0) | 转发(0) |