Request Help with NFS Client Test
Till Straumann
strauman at slac.stanford.edu
Mon Jul 16 20:22:46 UTC 2007
Your test program works fine under qemu (0.9.0)
netconfig.h:
- use bootp
- driver name "ne1"
- driver attach rtems_ne_driver_attach
- *** irqno 9 *** [qemu uses 9 not 5 !! ]
init.c:
mount(
& dummy,
& nfs_fs_ops,
RTEMS_FILESYSTEM_READ_WRITE,
"10.0.0.2:/remote", /* use export applicable to you */
"/home"
);
I created a iso CD image with grub 0.94 (booting over virtual
network with etherboot 5.4.3 also works) and I use
qemu -cdrom isoimg -net tap -net nic,model=ne2k_isa
/etc/qemu-ifup:
ifconfig tap0 10.0.0.2 netmask 255.255.255.0 up
/etc/dhcpd.conf (note that 'filename' is not applicable here;
we boot using grub. I used this filename for recent etherboot tests)
subnet 10.0.0.0 netmask 255.255.255.0 {
option routers 10.0.0.2;
next-server 10.0.0.2;
option ntp-servers 10.0.0.2;
option domain-name-servers 0.0.0.0;
host qemu {
hardware ethernet 52:54:00:12:34:56;
fixed-address 10.0.0.15;
filename "ssrlApps/i386-rtems/pc686/bin/rtems.exe";
option uarg "HELLO=hello";
}
}
After setting up the NFS server to export to 10.0.0.15
and the dhcp server (after launching qemu which creates
the tap0 IF and configures it to 10.0.0.2) I boot
(grub) kernel (cd)/bin/nfsClientTest.exe
(grub) boot
Then the test boots and runs just fine. It lists
the NFS mount and terminates.
HTH
-- Till
Joel Sherrill wrote:
> Till Straumann wrote:
>> How do you use qemu/PPC with RTEMS?
>> What BSP do you use and how do you boot it?
> I wish we could use qemu/ppc with RTEMS. :(
>
> I recompiled for pc386 and used the regular old Fedora
> qemu RPM binary.
>
> qemu -M isapc -m 8 -boot a -fda /home/joel/qemu/pc386_fda \
> -hda fat:/home/joel/qemu/hd -serial stdio \
> -net nic,vlan=0,macaddr=00:80:7F:22:61:77,model=ne2k_isa \
> -net tap,vlan=0
>
> /etc/qemu-ifup is:
>
> #!/bin/sh
> TUN_DEV=$1
> TUN_HOST=10.0.2.2
> /sbin/ifconfig $TUN_DEV $TUN_HOST
>
> I am using the same old qemu specific networkconfig.h but I had
> to switch the static IP to 10.0.2.5 to make it work. As best I can
> tell, 10.0.2.4 is used by a virtual SMB server now. I have attached
> this file.
>
> I didn't have any luck getting the RTEMS application to use DHCP
> inside of qemu.
>
> I can ping, run the netdemo, run httpd and run nfsclient. But nfsclient
> doesn't successfully mount the remote filesystem. It could easily
> be a routing problem on qemu.
> I appreciate the help. Ralf is finishing up merging the NFS client and
> I want to have a test of it in the network demos.
>
> --joel
>>
>> T.
>>
>> Joel Sherrill wrote:
>>> Joel Sherrill wrote:
>>>>> In order to make the information provided more useful
>>>>> you should:
>>>>>
>>>>> a) change your BSP so it produces a stack trace
>>>>> from the exception handler (try
>>>>> libcpu/powerpc/shared/src/stack.c: CPU_print_stack())
>>>>>
>>>>> b) post your binary (elf file) along with the register
>>>>> and stack dump.
>>>>>
>>>>>
>>>> Wouldn't it be easier to run my test and see if
>>>> it works for you with the NFS mounts changed
>>>> or is horribly broken?
>>>>
>>>> The back track shows it is a NULL jump in the
>>>> network driver.
>>>> 0x00053EA8--> 0x0004E080--> 0x0004E164--> 0x00000006--> 0x0004B5D8
>>>> 0x0004C2E0--> 0x00069458--> 0x00098A24--> 0x0009899C
>>>>
>>>> 0x00053EA8--> CPU_print_stack
>>>> 0x0004E080--> C_exception_handler
>>>> 0x0004E164--> push_normalized_frame
>>>> 0x00000006--> ?????
>>>> 0x0004B5D8--> mpc5200_eth_mii_read
>>>> 0x0004C2E0--> mpc5200_fec_txDaemon
>>>> 0x00069458--> soconnsleep
>>>> 0x00098A24--> _Thread_Handler
>>>> 0x0009899C--> _Thread_Handler
>>>>
>>>> Thomas .. can you try this test on your hardware. I
>>>> will commit the NFS client test to the network demos
>>>> and hopefully you can track it down.
>>>>
>>> Doesn't crash on qemu. I can't mount a filesystem
>>> on the host OS yet but I suspect that I need to
>>> add a route.
>>> Till could you try to get this working on qemu and
>>> see what magic I am missing? I have to be close.
>>>
>>> Please.
>>>
>>>>> That said -- looking at your source code it seems
>>>>> that (at least on the 4.7 branch) using a NULL pointer
>>>>> for the first argument to RTEMS 'mount' is illegal.
>>>>>
>>>> I saw your comment (gripe?) in the README
>>>> and fixed it Friday in CVS. :)
>>>>
>>>>> You could also use the convenience wrapper 'nfsMount()'
>>>>> which does a DNS lookup (non thread-safe gethostbyname!)
>>>>> and creates a mount-point (not nested directories, though)
>>>>> if necessary:
>>>>>
>>>>> nfsMount("server","/export","/home")
>>>>>
>>>>> both methods are explained in the rtemsNFS README.
>>>>>
>>>> I was trying hard to follow that to create
>>>> the example.
>>>> I tried the nfsMount call and it didn't even change
>>>> the behavior. Maybe this is just tripping a bug in
>>>> the NIC driver. <sigh>
>>>>
>>>> I am going to try this on another BSP and see what happens.
>>>>
>>>> --joel
>>>>
>>>>> HTH
>>>>> T.
>>>>>
>>>> _______________________________________________
>>>> rtems-users mailing list
>>>> rtems-users at rtems.com
>>>> http://rtems.rtems.org/mailman/listinfo/rtems-users
>>>>
>>>
>>
>>
>
> ------------------------------------------------------------------------
>
> /*
> * 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.
> */
>
> #undef RTEMS_BSP_NETWORK_DRIVER_NAME
> #undef RTEMS_BSP_NETWORK_DRIVER_ATTACH
> #define RTEMS_BSP_NETWORK_DRIVER_NAME "ne1"
> #define RTEMS_BSP_NETWORK_DRIVER_ATTACH rtems_ne_driver_attach
>
> #ifndef RTEMS_BSP_NETWORK_DRIVER_NAME
> #warning "RTEMS_BSP_NETWORK_DRIVER_NAME is not defined"
> #define RTEMS_BSP_NETWORK_DRIVER_NAME "ne0"
> #endif
>
> #ifndef RTEMS_BSP_NETWORK_DRIVER_ATTACH
> #warning "RTEMS_BSP_NETWORK_DRIVER_ATTACH is not defined"
> #define RTEMS_BSP_NETWORK_DRIVER_ATTACH 0
> #endif
>
> #ifdef RTEMS_USE_BOOTP
> #undef RTEMS_USE_BOOTP
> #endif
>
> /* #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
> #ifdef RTEMS_SET_ETHERNET_ADDRESS
> #undef RTEMS_SET_ETHERNET_ADDRESS
> #endif
>
> #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 };
>
> #endif
>
> #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 */
> };
> #endif
>
> /*
> * 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 */
> #endif
>
> #if (defined (RTEMS_USE_BOOTP))
> NULL, /* BOOTP supplies IP address */
> NULL, /* BOOTP supplies IP net mask */
> #else
> "10.0.2.4", /* IP address */
> "255.255.255.0", /* IP net mask */
> #endif /* !RTEMS_USE_BOOTP */
>
> #if (defined (RTEMS_SET_ETHERNET_ADDRESS))
> ethernet_address, /* Ethernet hardware address */
> #else
> NULL, /* Driver supplies hardware address */
> #endif
> 0, /* Use default driver parameters */
> 0, /* mtu */
> 0, /* rbuf_count */
> 0, /* xbuf_count */
> 0, /* port */
> 9 /* irq */
> };
>
> /*
> * Network configuration
> */
> struct rtems_bsdnet_config rtems_bsdnet_config = {
> &netdriver_config,
>
> #if (defined (RTEMS_USE_BOOTP))
> rtems_bsdnet_do_bootp,
> #else
> NULL,
> #endif
>
> 0, /* Default network task priority */
> 0, /* Default mbuf capacity */
> 0, /* Default mbuf cluster capacity */
>
> #if (!defined (RTEMS_USE_BOOTP))
> "rtems", /* Host name */
> "", /* Domain name */
> "10.0.2.2", /* Gateway */
> "10.0.0.1", /* Log host */
> {"10.0.2.3" }, /* Name server(s) */
> {"" }, /* 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) */
> #endif
> #endif /* !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 "XXX.YYY.ZZZ.XYZ"
> #define RTEMS_TFTP_TEST_FILE_NAME "tftptest"
> #endif
>
> #endif /* _RTEMS_NETWORKCONFIG_H_ */
>
More information about the users
mailing list