QEMU 仿真 rtems pc386平台网络http server示例(基于rtems5.3)

上篇文章,是基于4.10.3-rc2 代码编译的network-demo. rtems5.3 新版本,network-demo并没有随之更新,network-demos-4.10.2.tar.bz2 + rtems5.3 会编译报错,作者时间有限,直接使用rtems5.3 中的网络示例修改,

文件位置:

/root/rtems-5.3/testsuites/libtests/mghttpd01/init.c

修改方法与前文类似,如下:

//wx
static char ethernet_address[6] = { 0x52, 0x54, 0x00, 0x38, 0xFE, 0x22 };
#define RTEMS_BSP_NETWORK_DRIVER_NAME   BSP_NE2000_NETWORK_DRIVER_NAME
#define RTEMS_BSP_NETWORK_DRIVER_ATTACH BSP_NE2000_NETWORK_DRIVER_ATTACH
//wx

/*
 * Default network interface
 */
static struct rtems_bsdnet_ifconfig netdriver_config = {
    RTEMS_BSP_NETWORK_DRIVER_NAME,                    /* name */
    RTEMS_BSP_NETWORK_DRIVER_ATTACH,  /* attach function */
    NULL,                     /* No more interfaces */
    "192.168.137.2",           /* IP address */
    "255.255.255.0",          /* IP net mask */
    ethernet_address,         /* Driver supplies hardware address */
    0,                              /* ignore broadcast */
    0,                              /* mtu */
    0,                              /* rbuf_count */
    0,                              /* xbuf_count */
    0x300,                          /* port */
    9,                              /* irq */
    0,                              /* bpar */
    NULL                            /* driver control pointer */
};

/*
 * Network configuration
 */
struct rtems_bsdnet_config rtems_bsdnet_config = {
  &netdriver_config,
  NULL,                /* do not use bootp */
    8,                              /* Default network task priority */
    256 * 1024,                     /* Default mbuf capacity */
    256 * 1024,                     /* Default mbuf cluster capacity */
    "leo",                /* Host name */
    "leo",         /* Domain name */
    "192.168.137.1",         /* Gateway */
    "192.168.137.2",          /* Log host */
    {"192.168.137.1"  },      /* Name server(s) */
    {"192.168.137.1"  },      /* NTP server(s) */
    0,                      /* efficiency */
    0,                      /* udp TX buffer */
    0,                      /* udp RX buffer */
    0,                      /* tcp TX buffer */
    0,                      /* tcp RX buffer */
};
//===

因为我们要实现一简单的WEBSERVER, 原例子是LOOPBACK方式测试,修改如下

static void test_mongoose(void)
{
  const struct mg_callbacks callbacks = {
    .begin_request = callback,
    .websocket_data = callback_websocket
  };
  const char *options[] = {
    "listening_ports", "80",
    "document_root", "/www",
    "num_threads", "1",
    "thread_stack_size", "16384",
    "thread_priority", "250",
    "thread_policy", "o",
    NULL};
  const struct mg_callbacks callbacks2 = {
    NULL
  };
  const char *options2[] = {
    "listening_ports", "8080",
    "document_root", "/www2",
    "num_threads", "1",
    "thread_stack_size", "16384",
    NULL};

  struct mg_context *mg1 = mg_start(&callbacks, NULL, options);
  struct mg_context *mg2 = mg_start(&callbacks2, NULL, options2);

  test_mg_index_html();
//  test_mg_callback();
//  test_mg_websocket();

//  mg_stop(mg1);
//  mg_stop(mg2);

}

static void Init(rtems_task_argument arg)
{
  int rv = 0;

  TEST_BEGIN();

  rv = rtems_bsdnet_initialize_network();
  rtems_test_assert(rv == 0);

  test_tarfs_load();

  test_mongoose();

//  TEST_END();

  while (1);

  rtems_test_exit(0);
}
编译后得到mghttpd01.exe

在QEMU TAP 网络环境中

qemu-system-i386.exe -m 128  -vga cirrus -kernel p:\mghttpd01.exe   -netdev tap,id=n2,ifname=tap-nic   -device ne2k_isa,netdev=n2,mac=52:54:00:38:fe:22

HOST上输入浏览器地址,效果如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值