Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119738
  • 博文数量: 23
  • 博客积分: 538
  • 博客等级: 下士
  • 技术积分: 271
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-03 00:03
文章分类

全部博文(23)

文章存档

2012年(3)

2011年(13)

2010年(7)

分类: LINUX

2011-10-20 23:04:30

我的编译平台是 ubuntu 11.10
使用qemu 建立mini2440的模拟仿真环境
》的方法,就会遇到以下这些错误:

一、当使用以下

  1. ./configure --target-list=arm-softmmu
语句编译qemu时,出现如下错误

  • The error log from compiling the libSDL test is: 
  • /tmp/qemu-conf--3170-.c:1:17: fatal error: SDL.h: 没有那个文件或目录
  • compilation terminated.
  • ERROR: QEMU requires SDL or Cocoa for graphical output
  • To build QEMU without graphical output configure with --disable-gfx-check
  • Note that this will disable all output from the virtual graphics card
  • except through VNC or curses.

  • 那么就可以使用以下语句修复:
    1. sudo apt-get install libsdl-dev
    再使用  make -j4 时, 即可编译成功。

    (编译uboot的时候,大家可以将设置初始IP的代码修改为自己想要的IP,比如和自己主机IP一个网段,以方便以后的实验)

    二、 当编译kernel时,会出现如下问题:

    (我补充下:下载 linux kernel for mini2440的地址为:


    1. "mkimage" command not found - U-Boot images will not be built
    这时,执行以下语句即可:
    1. sudo apt-get install uboot-mkimage
    再重新运行以下语句:
    1. make -j4 ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage
    就OK了!
    这里注意了:在开头我参考的那篇文章里面没有提到最重要的一点:那就是要把从uboot里面编译出来的u-boot.bin也要拷贝到qemu目录下的mini2440这个文件夹中去,否则在执行第三条开头那个命令后,出现的qemu模拟器中就是漆黑一团了,啥都不执行。

    三、当执行以下语句的时候:(一定要以root根用户来执行以下语句)
    1. sh mini2440/mini2440_start.sh
    又会碰到如下问题:
    1. Starting in mini2440
    2. mini2440/mini2440_start.sh : creating empty snapshot image : mini2440/mini2440_snapshots.img
    3. qemu-img: Invalid image size You may use k, M, G or T suffixes for
    4. qemu-img: kilobytes, megabytes, gigabytes and terabytes.
    5. mini2440/../arm-softmmu/qemu-system-arm -M mini2440 -drive file=mini2440/mini2440_snapshots.img,snapshot=on -serial stdio -kernel mini2440/uImage -mtdblock mini2440/mini2440_nand.bin -show-cursor -usb -usbdevice keyboard -usbdevice mouse -net nic,vlan=0 -net tap,vlan=0,ifname=tap0 -monitor telnet::5555,server,nowait
    6. warning: could not configure /dev/net/tun: no virtual network emulation
    7. Could not initialize device 'tap'
    看起来,有些眉目了,后来,我在按照上面的方法编译内核模块时,又碰到以下问题:
    1. make[2]: *** 没有规则可以创建“kernel/bounds.s”需要的目标“kernel/bounds.c”。 停止。
    此时,我大为气馁,后来又在不懈的努力下,发现了问题的所在,原来是/lib/modules/`uname -r`/build 这个文件夹(也就是/usr/src/linux-headers-‘uname -r’-generic-pae/)下面的内核代码不完整,需要重新上网下载该版本的内核源码包,解压后,再进行编译才可以真正的解决这个问题。命令如下:
    1. sudo apt-get install linux-source
    再进入到 linux-source-'your version' 之中重新执行下述命令,例如我的版本如下:

    1. cd /usr/src/linux-source-2.6.38/
    2. tar xjvf linux-source-2.6.38.tar.bz2
    3. cd linux-source-2.6.38
    4. sudo -s
    5. make && sudo make modules_install
    1. modprobe tun
    2. lsmod |grep tun
     其实还有一种方法不需要使用modules_install,这是我刚刚才发现的,由于内容比较多,我就不再在这里贴出这个方法了,大家搜索一下《qemu两种上网方式》这个标题吧,就可以找到相关内容了。
    要注意三点: 
    1.内核源码必须与当前内核版本完全一致,否则编译出的模块是不能用的。 
    2.注意只make modules(编译模块),没有make modules_install(自动安装模块到/lib/modules下) 
    3.加载新编译的模块前必须先运行depmod,否则modprobe找不到它 
    有了tun这个文件后,那么就进入下一个的问题了。

    四、开启NFS服务器,就按照开头那篇文章里面所说的进行操作就可以了,当重启NFS的命令的时候,在最新的ubuntu11.10中就会出现以下语句:
    1. exportfs: /etc/exports [3]: Neither 'subtree_check' or 'no_subtree_check' specified for export "*:/opt/FriendlyARM/mini2440/root_qtopia".
    2.   Assuming default behaviour ('no_subtree_check').
    3.   NOTE: this default has changed since nfs-utils version 1.0.x
    其实不用紧张,这对于后面使用NFS挂载文件系统没有关系,但大家注意了,这里在/etc/exports中,大家要就不要使用友善的rootfs_qtopia_qt4这个文件系统了,因为现在使用的qemu这个模拟器中只支持64M的NAND(或者很有可能是大家从开头那篇文章里面编译的u-boot是属于64M的版本,这里还得做后续研究)。所以推荐大家使用老版的root_qtopia文件系统,否则就会出现qemu挂载失败的结果。

    五、对于mini2440_start.sh这个文件,其实大家只需要修改下面这个地方就可以了:
    1. -net nic,vlan=0 \
    2.     -net tap,vlan=0,ifname=tap0 \
    修改为:
    1.  -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=./qemu-ifup,downscript=./qemu-ifdown \

    六、 对于qemu-ifup, qemu-ifdown 这两个文件,大家可以按照自己的情况,将其中10.0.0.1 这个IP换成和自己主机一个IP网段的地址即可,不一定非要是那个IP,而且开头文章里面的u-boot的IP地址是10.0.0.4 ,其实可以在编译uboot的时候,找到设置初始IP的代码换成自己想要的IP即可。


    七、当按照开头文章之中的步骤跑起来qemu中的mini2440后,会发现出现以下错误,一直挂载不了NFS文件系统:
    1. VFS: Mounted root (nfs filesystem) on device 0:13.
    2. Freeing init memory: 132K
    3. nfs: server 10.66.3.4 not responding, still trying
    这个问题,我发现开头文章中最后给出的解决方法(如下)只能说是个提示,并没有起作用:
    友善之臂提供的qtopia文件系统在挂载时会初始化网卡,但我们是由nfs挂载的文件系统,这会导致nfs连接中断,挂载失败,所以用nfs挂载之前需要把网卡的初始化过程取消,对应的文件是/etc/init.d/if-config,只需把该文件内容清空即可。Enjoy yourself!
    而是应该把 root_qtopia 文件系统中的 etc/init.d/rcS 这个文件中的如下两个语句注释掉即可:
    1. #/sbin/ifconfig lo 127.0.0.1
    2. #/etc/init.d/ifconfig-eth0
    在完成上面的修改后,大家就可以真正的享受qemu-mini2440带给我们的开发和调试乐趣了!












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

    star25232012-06-05 16:44:13

    此完整版,请见http://www.arm9home.net/read.php?tid-15864.html