On 2006-11-06, Laurie Gellatly <[EMAIL PROTECTED]> wrote: >>> For Redboot you set the MAC in the config file. The Ethernet >>> driver typically provides this as one of its CDL options. Is >>> that what you're asking or have I not understood your >>> question? >> >> That doesn't make any sense. It would mean that you have to >> do a separate config/build for every single unit you ship. > > Well it does make sense when you consider that Redboot is > normally there just to get your application debugging done.
Our products ship with RedBoot installed in flash. [Typically in the previous generations of products, RedBoot was configured to run from RAM after being loaded from flash by a low-level boot-loader, but I'm thinking about running RedBoot directly from flash in the next generation to make things a bit simpler.] There is also a default application image in the FIS file-system. Sometimes that default application image is loaded and run by RedBoot, and sometimes a different application might be downloaded by a supervisory computer and run. [We've added some proprietary protocol support to RedBoot to allow programs to be downloaded and run using the same protocols that our non-eCos+RedBoot based products used back in the last century.] Some of our customers also write their own eCos apps and replace the default application image in FIS. In any case, RedBoot is an integral part of the shipped product. > Your application that 'works with a ROM monitor' can assign > its own IP address and that can be done via the API. It's the MAC address that I'm asking about, not the IP address. Configuring the IP address is simple, you just install an initialization routine that runs before net_init() does and fills in the values of __local__ip_xxxx. The network init code picks up the values during startup and Bob's your uncle. There is no equivalent way to set the MAC address: none of the drivers appear to look at __local_enet_addr or __local_enet_sc, and there doesn't appear to be a way to pass a MAC address to the "init" method of an Ethernet driver. Indeed, it appears that the Ethernet drivers are supposed to know what the MAC address is a-priori. That's how I got it to work in previous products, I poked the MAC address into the Ethernet chip before the RedBoot network startup code was called, and the driver read it from hardware and returned it to the network code. My current kludge for the next generation of products is to hard-wire a bogus MAC address (all 0's) in the Ethernet driver's source and then have application code change the MAC address to the proper value after the interface has been initialized. That seems to be working, but doesn't seem quite right. > In production, Redboot might not be there at all It is. > (your application moves to 'behave as a ROM monitor') or > simply might not have ethernet support in Redboot and only > your application has ethernet support. We ship RedBoot with Ethernet support. In previous generations, we set the MAC address by poking it directly into the Ethernet HW before the Ethernet driver was initialized. That was ugly and non-portable: application code needed to be aware of the underlying Ethernet controller chip. That's why I'm looking for a more portable method that would work for multiple platforms. We build for multiple generations of products from a single eCos repository, so platform-specific code in applications like RedBoot is a bad thing. > So, when you view it that way, having a fixed IP for debugging > just rules out one more variable to chase. I'm asking about the MAC address, not about the IP address. There is sufficient means for configuring the IP address. -- Grant -- Before posting, please read the FAQ: http://ecos.sourceware.org/fom/ecos and search the list archive: http://ecos.sourceware.org/ml/ecos-discuss
