Windows RTEMS 1 Danilliu MMI TCP/IP 80486 QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos ecos Email www.rtems.com RTEMS ecos RTEMS RTEMS Windows
2 QEMU Windows RTEMS Cygwin Cygwin All install All default, RTEMS Cygwin Neilwang RTEMS RTEMS i386 RTEMS QEMU QEMU QEMU GUI Qemu Manager GUI Qemu Manager For Windows V2.1 With QEMU 0.8.0 and KQEMU support QEMU QEMU RTEMS 2.1 1 TAP TAP Linux Linux Windows
openvpn http://openvpn.sourceforge.net TAP Windows openvpn-2.0.7-install.exe TAP-Win32 Virtual Ethernet Adapter 1 Windows TAP-Win32 Windows x my-tap my-tap 2 IP 2 2.2 QEMU TAP QEMU QEMU QEMU RTEMS QEMU Manager RTEMS
ISA 3 3 QEMU NE2000 PCI NE2000 RTEMS QEMU PCI QEMU ISA NE2000 QEMU ISA RTEMS i386 BSP PCI bus: could not initialize PCI BIOS interface PCI BIOS QEMU 4
4 VLAN TAP Networking Windows TAP User Networking QEMU QEMU QEMU QEMU QEMU Linux Windows TAP Networking TAP ID Windows my-tap my-tap MAC Auto QEMU RTEMS QEMU RTEMS PC QEMU grub.exe QEMU grub.exe RTEMS RTEMS Windows RTEMS QEMU RTEMS
3 RTEMS Neilwang RTEMS MicroWindows RTEMS \RTEMS_ROOT 3.1 RTEMS ATA QEMU RTEMS RTEMS ATA ATA RTEMS CVS 4.6.99.3 ATA RTEMS QEMU RTEMS ATA \RTEMS_ROOT\c\src\libchip\ide ata.c ata_process_request_on_init_phase ata do { ide_controller_read_register(ctrl_minor, IDE_REGISTER_STATUS, &byte); } while ((byte & IDE_REGISTER_STATUS_BSY) (!(byte & IDE_REGISTER_STATUS_DRDY))); ide_ctrl_io.h : #define IDE_REGISTER_STATUS_DRDY 0x40 Device ready RTEMS QEMU ATA byte 0x50 byte 0x00 RTEMS RTEMS bug ATA ATA ATA RTEMS QEMU RTEMS ata.c IDE_REGISTER_STATUS_DRDY do { ide_controller_read_register(ctrl_minor, IDE_REGISTER_STATUS, &byte); } while ((byte & IDE_REGISTER_STATUS_BSY) ); ata_process_request_on_init_phase 1416
ata_process_request 449 3.2 RTEMS IP Header CheckSum IP \RTEMS_ROOT \cpukit\libnetworking\machine in_cksum.h in_cksum_hdr(const struct ip *ip) static inline u_int in_cksum_hdr(const struct ip *ip) { register u_int sum = 0; #define ADD(n) \ asm volatile ("addl " #n "(%2), %0" : "=r" (sum) : "0" (sum), "r" (ip)) #define ADDC(n) \ asm volatile ("adcl " #n "(%2), %0" : "=r" (sum) : "0" (sum), "r" (ip)) #define MOP \ asm volatile ("adcl $0, %0" : "=r" (sum) : "0" (sum)) } ADD(0); ADDC(4); ADDC(8); ADDC(12); ADDC(16); MOP; sum = (sum & 0xffff) + (sum >> 16); if (sum > 0xffff) sum -= 0xffff; return ~sum & 0xffff; RTEMS bug RTEMS IP GCC ray GCC RTEMS RTEMS MAKE IP C static inline u_int in_cksum_hdr(const struct ip *ip) { register u_int sum = 0; register u_int16_t *ipdat;
ipdat=(u_int16_t *)ip; sum=ipdat[0]+ipdat[1]+ipdat[2]+ipdat[3]+ipdat[4]+ipdat[5]+ipdat[6]+ipdat[7]+ipdat[8]+ipdat[9]; sum = (sum & 0xffff) + (sum >> 16); } return ~((sum>0xffff)? (sum-0xffff) : sum) & 0xffff; RTEMS RTEMS RTEMS QEMU 4 Windows RTEMS QEMU RTEMS network-demos-4.6.99.2.tar.bz2 networkconfig.h 4.1 RTEMS i386 BSP DEC21140 QEMU NE2000 #define RTEMS_BSP_NETWORK_DRIVER_NAME BSP_NE2000_NETWORK_DRIVER_NAME #define RTEMS_BSP_NETWORK_DRIVER_ATTACH BSP_NE2000_NETWORK_DRIVER_ATTACH 4.2 QEMU #define RTEMS_USE_BOOTP 4.3 #define RTEMS_SET_ETHERNET_ADDRESS #if (defined (RTEMS_SET_ETHERNET_ADDRESS)) static char ethernet_address[6] = { 0x00, 0x80, 0x7F, 0x22, 0x61, 0x77 }; QEMU Auto RTEMS_SET_ETHERNET_ADDRESS 4.4
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.10.2", IP address "255.255.255.0", IP net mask ethernet_address, Ethernet hardware address 0, Use default driver parameters 0, 0, 0, 0x300, 9, 0 }; IP IP IP TAP IP RTEMS IO RTEMS NE2000 IO ox240 5 QEMU RTEMS Netdemo Telnet echo server telnet 24742 a aa RTEMS t RTEMS TCP u UDP s networkconfig.h
* Network configuration * ************************************************************ * EDIT THIS FILE TO REFLECT YOUR NETWORK CONFIGURATION * * BEFORE RUNNING ANY RTEMS PROGRAMS WHICH USE THE NETWORK! * ************************************************************ * * networkconfig.h,v 1.8 2001/08/31 18:11:43 joel Exp #ifndef _RTEMS_NETWORKCONFIG_H_ #define _RTEMS_NETWORKCONFIG_H_ * The following will normally be set by the BSP if it supports * a single network device driver. In the event, it supports * multiple network device drivers, then the user's default * network device driver will have to be selected by a BSP * specific mechanism. #define BSP_NE2000_NETWORK_DRIVER_NAME #define BSP_NE2000_NETWORK_DRIVER_ATTACH RTEMS_BSP_NETWORK_DRIVER_NAME RTEMS_BSP_NETWORK_DRIVER_ATTACH #ifndef RTEMS_BSP_NETWORK_DRIVER_NAME #warning "RTEMS_BSP_NETWORK_DRIVER_NAME is not defined" #define RTEMS_BSP_NETWORK_DRIVER_NAME "no_network1" #ifndef RTEMS_BSP_NETWORK_DRIVER_ATTACH #warning "RTEMS_BSP_NETWORK_DRIVER_ATTACH is not defined" #define RTEMS_BSP_NETWORK_DRIVER_ATTACH 0 #define RTEMS_USE_BOOTP #include <bsp.h> * Define RTEMS_SET_ETHERNET_ADDRESS if you want to specify the
* Ethernet address here. If RTEMS_SET_ETHERNET_ADDRESS is not * defined the driver will choose an address. #define RTEMS_SET_ETHERNET_ADDRESS #if (defined (RTEMS_SET_ETHERNET_ADDRESS)) //static char ethernet_address[6] = { 0x08, 0x00, 0x3e, 0x12, 0x28, 0xb1 }; static char ethernet_address[6] = { 0x00, 0x80, 0x7F, 0x22, 0x61, 0x77 }; #ifdef RTEMS_USE_LOOPBACK * Loopback interface extern void rtems_bsdnet_loopattach(); static struct rtems_bsdnet_ifconfig loopback_config = { "lo0", name rtems_bsdnet_loopattach, attach function NULL, link to next interface "127.0.0.1", IP address "255.0.0.0", IP net mask }; * Default network interface static struct rtems_bsdnet_ifconfig netdriver_config = { RTEMS_BSP_NETWORK_DRIVER_NAME, name RTEMS_BSP_NETWORK_DRIVER_ATTACH, attach function #ifdef RTEMS_USE_LOOPBACK &loopback_config, link to next interface #else NULL, No more interfaces #if (defined (RTEMS_USE_BOOTP)) NULL, BOOTP supplies IP address NULL, BOOTP supplies IP net mask #else "192.168.10.2", IP address
"255.255.255.0", IP net mask!rtems_use_bootp #if (defined (RTEMS_SET_ETHERNET_ADDRESS)) ethernet_address, Ethernet hardware address #else NULL, Driver supplies hardware address 0, Use default driver parameters 0, 0, 0, }; 0x300, 9, 0 * Network configuration struct rtems_bsdnet_config rtems_bsdnet_config = { &netdriver_config, #if (defined (RTEMS_USE_BOOTP)) rtems_bsdnet_do_bootp, #else NULL, 0, Default network task priority 0, Default mbuf capacity 0, Default mbuf cluster capacity #if (!defined (RTEMS_USE_BOOTP)) "liushiming", Host name "nodomain.com", Domain name "192.168.10.1", Gateway "192.168.10.1", Log host {"192.168.10.1" }, Name server(s) {"192.168.10.1" }, NTP server(s) * A real example -- DO NOT USE THIS YOURSELF!!!
#if 0 "dy4", Host name "NOT_oarcorp.com", Domain name "192.168.1.2", Gateway "192.168.1.2", Log host {"192.168.1.2" }, Name server(s) {"192.168.1.2" }, NTP server(s)!rtems_use_bootp }; * 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 "192.168.10.1" #define RTEMS_TFTP_TEST_FILE_NAME "tftptest" _RTEMS_NETWORKCONFIG_H_