(本文原创,转载请注明出处,谢谢)
这两天抽了个空,在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文件内容:
/* * Network configuration -- LOOPBACK ONLY!!! * * See one of the other networkconfig.h files for an * example of a system that includes a real NIC and * the loopback interface. * ************************************************************ * EDIT THIS FILE TO REFLECT YOUR NETWORK CONFIGURATION * * BEFORE RUNNING ANY RTEMS PROGRAMS WHICH USE THE NETWORK! * ************************************************************ * * $Id: networkconfig.h,v 1.14 2008/08/20 22:16:28 joel Exp $ */ #ifndef _RTEMS_NETWORKCONFIG_H_ #define _RTEMS_NETWORKCONFIG_H_ /* #define RTEMS_USE_BOOTP */ #include #include #define RTEMS_USE_BOOTP /* * Loopback interface */ extern int rtems_bsdnet_loopattach(); static struct rtems_bsdnet_ifconfig netdriver_config1 = { RTEMS_BSP_NETWORK_DRIVER_NAME, /* name */ RTEMS_BSP_NETWORK_DRIVER_ATTACH, /* attach function */ NULL, /* No more interfaces */ "10.0.0.100", /* IP address */ "255.255.255.0", /* IP net mask */ NULL, /* Driver supplies hardware address */ 0, /* Use default driver parameters */ 0, /* default efficiency multiplier */ 0, /* default udp TX socket buffer size */ 0, /* default udp RX socket buffer size */ 0, /* default tcp TX socket buffer size */ 0, /* default tcp RX socket buffer size */ }; /* * Default network interface */ static struct rtems_bsdnet_ifconfig netdriver_config = { "lo0", /* name */ rtems_bsdnet_loopattach, /* attach function */ &netdriver_config1, /* No more interfaces */ "127.0.0.1", /* IP address */ "255.0.0.0", /* IP net mask */ NULL, /* Driver supplies hardware address */ 0, /* Use default driver parameters */ 0, /* default efficiency multiplier */ 0, /* default udp TX socket buffer size */ 0, /* default udp RX socket buffer size */ 0, /* default tcp TX socket buffer size */ 0, /* default tcp RX socket buffer size */ }; /* * Network configuration */ struct rtems_bsdnet_config rtems_bsdnet_config = { &netdriver_config, NULL, /* do not use bootp */ 0, /* Default network task priority */ 1024 * 1024, /* Default mbuf capacity */ 1024 * 1024, /* Default mbuf cluster capacity */ "rtems", /* Host name */ "nodomain.com", /* Domain name */ "127.0.0.1", /* Gateway */ "127.0.0.1", /* Log host */ {"127.0.0.1" }, /* Name server(s) */ {"127.0.0.1" }, /* NTP server(s) */ 0, /* sb_efficiency */ 0, /* udp_tx_buf_size */ 0, /* udp_rx_buf_size */ 0, /* tcp_tx_buf_size */ 0 /* tcp_rx_buf_size */ }; /* * For TFTP test application */ #if (defined (RTEMS_USE_BOOTP)) #define RTEMS_TFTP_TEST_HOST_NAME "BOOTP_HOST" #define RTEMS_TFTP_TEST_FILE_NAME "BOOTP_FILE" #else #define RTEMS_TFTP_TEST_HOST_NAME "XXX.YYY.ZZZ.XYZ" #define RTEMS_TFTP_TEST_FILE_NAME "tftptest" #endif /* * For NFS test application * * NFS server/path to mount and a directory to ls once mounted */ #define RTEMS_NFS_SERVER "192.168.1.210" #define RTEMS_NFS_SERVER_PATH "/home" #define RTEMS_NFS_LS_PATH "/mnt/nfstest" #endif /* _RTEMS_NETWORKCONFIG_H_ */
enjoy it!
(本文原创,转载请注明出处,谢谢)