Request Help with NFS Client Test

Joel Sherrill joel.sherrill at oarcorp.com
Tue Jul 17 00:04:05 UTC 2007


Till Straumann wrote:
> Your test program works fine under qemu (0.9.0)
>
I have it working now.  Thanks.

How do you get the tap0 interface to stay alive all the time
so you don't have to start and restart the dhcpd every time
you start or stop qemu?
> 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