MINI2440 DM9000网卡驱动在 QEMU上的移植(转)

来源:互联网 发布:php enchant扩展 编辑:程序博客网 时间:2024/06/08 09:26

我把雪松的帖子也转过来。

鼓励大家看他的原帖子,他是这个专家。

http://blog.csdn.net/coolbacon/archive/2011/03/22/6269551.aspx

 

这两天抽了个空,在rickleaf移植的 qemu mini2440 的rtems 4.9.5 bsp 上做了一些修改:

1.原来mini2440的 bsp是基于 gp32的bsp修改,复用了部分的gp32代码。cpu类型实际上使用的是s3c2410。这不利于对mini2440的修改。所以,增加了新cpu型号s3c2440,并将mini2440修改成独立的bsp。

如果有朋友在bootstrap -p 和 bootstrap 时,嫌生成configure 的时间太长,建议将libbsp下和libcpu下不使用的bsp和cpu型号删除。以增加开发效率。

2.s3c2410 cpu的PLL部分和s3c2440的 PLL 还是有些许差别,造成rtems的tick不准,已经修改。

3.支持dm9000的网络。

代码请安装版本管理工具 git,使用命令:

git clone git://emboslab.git.sourceforge.net/gitroot/emboslab/rtems-4.9.5-emboslab

下载最新的 rtems 4.9.5 在 qemu mini2440 上的移植。

请键入以下命令编译rtems 4.9.5 关于 qemu mini2440 bsp:

cd rtems-4.9.5-emboslab

mkdir mini2440

cd mini2440

../configure --target=arm-rtems4.9 --disable-posix --enable-networking --enable-rtemsbsp=mini2440 --prefix=/opt/rtems-4.9

make all install

编译一下hello_world_c 和ticker等示例吧,运行这些示例的方法请参考其本博的他关于mini2440的博文。

从官方下载network-demos-4.9.4.tar.bz2

tar  xjvf network-demos-4.9.4.tar.bz2

cd network-demos-4.9.4

gedit networkconfig.h (需要修改一下改文件,下面有列出)

export RTEMS_MAKEFILE_PATH=/opt/rtems-4.9/arm-rtems4.9/mini2440/

cd http

make

arm-rtems4.9-objcopy -O binary o-optimize/http.exe /tftproot/image.bin

进入qemu文件夹:

./mini2440/mini2440_start.sh

启动qemu,

在 mini2440# 提示符下输入:

tftp 30000100 image.bin

go 30000100

---------------------------------------------------------------

下面是有图有真相:

  • qemu 下输入的命令

  • http.exe 完全启动

  • ping 10.0.0.100 -s 1000

  • 使用浏览器查看网页

  • 查看CPU使用率(第一个超文本链接)

  • 最后,贴上networkconfig.h文件内容:

 

view plaincopy to clipboardprint?
  1. /* 
  2.  * Network configuration -- LOOPBACK ONLY!!! 
  3.  * 
  4.  * See one of the other networkconfig.h files for an 
  5.  * example of a system that includes a real NIC and 
  6.  * the loopback interface. 
  7.  *  
  8.  ************************************************************ 
  9.  * EDIT THIS FILE TO REFLECT YOUR NETWORK CONFIGURATION     * 
  10.  * BEFORE RUNNING ANY RTEMS PROGRAMS WHICH USE THE NETWORK! *  
  11.  ************************************************************ 
  12.  * 
  13.  *  $Id: networkconfig.h,v 1.14 2008/08/20 22:16:28 joel Exp $ 
  14.  */  
  15. #ifndef _RTEMS_NETWORKCONFIG_H_  
  16. #define _RTEMS_NETWORKCONFIG_H_  
  17. /* #define RTEMS_USE_BOOTP */  
  18. #include <bsp.h>  
  19. #include <rtems/dhcp.h>  
  20. #define RTEMS_USE_BOOTP  
  21. /* 
  22.  * Loopback interface 
  23.  */  
  24. extern int rtems_bsdnet_loopattach();  
  25. static struct rtems_bsdnet_ifconfig netdriver_config1 = {  
  26.   RTEMS_BSP_NETWORK_DRIVER_NAME,                    /* name */  
  27.   RTEMS_BSP_NETWORK_DRIVER_ATTACH,  /* attach function */  
  28.   NULL,                     /* No more interfaces */  
  29.   "10.0.0.100",              /* IP address */  
  30.   "255.255.255.0",              /* IP net mask */  
  31.   NULL,                     /* Driver supplies hardware address */  
  32.   0,                        /* Use default driver parameters */  
  33.   0,                        /* default efficiency multiplier */  
  34.   0,                        /* default udp TX socket buffer size */  
  35.   0,                        /* default udp RX socket buffer size */  
  36.   0,                        /* default tcp TX socket buffer size */  
  37.   0,                        /* default tcp RX socket buffer size */  
  38. };  
  39. /* 
  40.  * Default network interface 
  41.  */  
  42. static struct rtems_bsdnet_ifconfig netdriver_config = {  
  43.   "lo0",                    /* name */  
  44.   rtems_bsdnet_loopattach,  /* attach function */  
  45.   &netdriver_config1,                     /* No more interfaces */  
  46.   "127.0.0.1",              /* IP address */  
  47.   "255.0.0.0",              /* IP net mask */  
  48.   NULL,                     /* Driver supplies hardware address */  
  49.   0,                        /* Use default driver parameters */  
  50.   0,                        /* default efficiency multiplier */  
  51.   0,                        /* default udp TX socket buffer size */  
  52.   0,                        /* default udp RX socket buffer size */  
  53.   0,                        /* default tcp TX socket buffer size */  
  54.   0,                        /* default tcp RX socket buffer size */  
  55. };  
  56.   
  57. /* 
  58.  * Network configuration 
  59.  */  
  60. struct rtems_bsdnet_config rtems_bsdnet_config = {  
  61.   &netdriver_config,  
  62.   NULL,                /* do not use bootp */  
  63.   0,                   /* Default network task priority */  
  64.   1024 * 1024,         /* Default mbuf capacity */  
  65.   1024 * 1024,         /* Default mbuf cluster capacity */  
  66.   "rtems",             /* Host name */  
  67.   "nodomain.com",      /* Domain name */  
  68.   "127.0.0.1",         /* Gateway */  
  69.   "127.0.0.1",         /* Log host */  
  70.   {"127.0.0.1" },      /* Name server(s) */  
  71.   {"127.0.0.1" },      /* NTP server(s) */  
  72.   0,                   /* sb_efficiency */  
  73.   0,                   /* udp_tx_buf_size */  
  74.   0,                   /* udp_rx_buf_size */  
  75.   0,                   /* tcp_tx_buf_size */  
  76.   0                    /* tcp_rx_buf_size */  
  77. };  
  78. /* 
  79.  * For TFTP test application 
  80.  */  
  81. #if (defined (RTEMS_USE_BOOTP))  
  82. #define RTEMS_TFTP_TEST_HOST_NAME "BOOTP_HOST"  
  83. #define RTEMS_TFTP_TEST_FILE_NAME "BOOTP_FILE"  
  84. #else  
  85. #define RTEMS_TFTP_TEST_HOST_NAME "XXX.YYY.ZZZ.XYZ"  
  86. #define RTEMS_TFTP_TEST_FILE_NAME "tftptest"  
  87. #endif  
  88. /* 
  89.  * For NFS test application 
  90.  *  
  91.  * NFS server/path to mount and a directory to ls once mounted 
  92.  */  
  93. #define RTEMS_NFS_SERVER      "192.168.1.210"  
  94. #define RTEMS_NFS_SERVER_PATH "/home"  
  95. #define RTEMS_NFS_LS_PATH     "/mnt/nfstest"  
  96. #endif /* _RTEMS_NETWORKCONFIG_H_ */  

 

enjoy it!

(本文原创,转载请注明出处,谢谢)

原创粉丝点击