用skyeye运行uClinux内核
(2010-04-12 14:04:24)
标签:
it
分类:
嵌入式
最近由于实验室项目的原因,要开始搞起嵌入式了,一直对这个都很感兴趣,只是以前总觉得自己与这行不太能扯上关系了,所以也没法单独抽时间出来研究这个。现在阴差阳错的做上了一个与嵌入式相关的项目,终于有机会来学学这些东西了,兴趣项目两不误,还是很不错的。
由于是新手,以前从来没接触过嵌入式,所以研究起来还真是费劲,花了好大功夫,今天总算是在将uClinux在skyeye上跑通了。之前遇到过很多问题在网上查也没能查出个解决方案来,最后自己想当然的乱试一通,居然就试成功了,但即使成功了,也不知道之前的问题在哪,仅把自己的猜测记录下来,留来以后考证。
之前我是按下面链接中的教程一步步做下来的
http://www.ibm.com/developerworks/cn/linux/l-skyeye/part2/index.html
但其中遇到一些问题。
其中一个最大的问题就是在 make lib_only 或 make 时会报错:
cc1: error: unrecognized command line option "-mapcs-32"
cc1: error: unrecognized command line option
"-malignment-traps"
是说编译器不认识"-mapcs-32"这个选项。
网上很多人提到这个问题,大多数都没有给出有效的解决方法。我仔细看了一下报错之前的最后一条编译信息:
arm-linux-gcc -D__KERNEL__
-I/usr/src/uClinux-dist_2009/linux-2.4.x/include -Wall
-Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing
-fno-common -fno-builtin-sprintf -Wno-pointer-sign -fno-common
-pipe -fno-builtin -D__linux__ -g -DNO_MM -mapcs-32 -march=armv4
-mtune=arm7tdmi -malignment-traps
-msoft-float -DKBUILD_BASENAME=do_mounts -c -o init/do_mounts.o
init/do_mounts.c
是用arm-linux-gcc编译do_mounts.c这个文件,其中有两个编译选项就是"-mapcs-32"和"-malignment-traps",然后去网上搜了一下这两个选项,只是有人说不同的编译器支持的选项也不尽相同,也就说这里arm-linux-gcc不支持这两个选项。不支持怎么办呢,我当时完全没没辙了。
后来就想教程中的有些东西会不会是过时了,为什么选uClinux内核时要选2.4.x呢,我就猜想会不会是和这个有关。我改选后试了一下,就OK了。这个,我对自己表示很遗憾,有时候太依赖教程了,完完全全都依照教程做,生怕哪点做的不一样了会出错,但是事实证明有时候根据实际情况做一些合理的改动还是会有意想不到的效果的。
那么关于编译uClinux内核最后一个问题就是为什么选2.6.x就行,选2.4.x就不行了呢。我想这个应该是一个更深层次的问题,至少对我来说,我还是先赶紧上手再说。先这样吧,2.6.x不更好吗。
uClinux内核编译好了之后就是用skyeye运行了,按上面说的那篇教程里讲得那样在uClinux-dist下建一个skyeye.conf文件,内容是:
cpu: arm7tdmi
mach: at91
mem_bank: map=M, type=RW, addr=0x00000000, size=0x00004000
mem_bank: map=M, type=RW, addr=0x01000000, size=0x00400000
mem_bank: map=M, type=R, addr=0x01400000, size=0x00400000, file=./boot.rom
mem_bank: map=M, type=RW, addr=0x02000000, size=0x00400000
mem_bank: map=M, type=RW, addr=0x02400000, size=0x00008000
mem_bank: map=M, type=RW, addr=0x04000000, size=0x00400000
mem_bank: map=I, type=RW, addr=0xf0000000, size=0x10000000
还要建一个链接:
ln -s images/romfs.img boot.rom
注意了,这个链接又有问题,它是让boot.rom指向images文件夹下的romfs.img,原因是要将romfs.img换个名好跟skyeye.conf文件里的标识对应,而我查看了一下我的image文件夹下没有romfs.img,而有一个boot.rom,所以不用换名了,就直接:
ln -s images/boot.rom boot.rom就行了。
最后执行:
skyeye -e linux-2.6.x/linux
就可以用skyeye运行编译好的内核了
分享:
喜欢
0
赠金笔
加载中,请稍候......
评论加载中,请稍候...
发评论
登录名: 密码: 找回密码 注册记住登录状态
昵 称:
评论并转载此博文
发评论
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。