
Dear Wolfgang Denk,
On Mon, 2009-08-17 at 10:03 +0200, Wolfgang Denk wrote:
Dear Peter Chen,
In message 1250474437.13885.23.camel@nchen-desktop you wrote:
- Does jump table means the function lists which the standalone
applications uses?
The "jump table provided by U-Boot exactly for this purpose" is the list of functions exported through the "include/_exports.h" header file.
At my situation, the standalone program is hardware independent.
And the u-boot supplies hardware interfaces according to different platforms. Like at u-boot/board/myboard/myboard.c, there are a function lists struct, and the address of this struct will transfer to standalone program.
If you set up your own list of function pointers (in addition or instead of the jump table provided by the "include/_exports.h" header), then this is a form of linking against the U-Boot code, and your application must be released under GPL.
I am sorry, I can't understand your meaning. For example, at "include/_exports.h" there is an EXPORT_FUNC(printf), do the standalone application must under GPL if it uses printf? Then, what does "include/_exports.h" use?
In your COPYING, it writes: NOTE! This copyright does *not* cover the so-called "standalone" applications that use U-Boot services by means of the jump table provided by U-Boot exactly for this purpose - this is merely considered normal use of U-Boot, and does *not* fall under the heading of "derived work".
Is it free to license at below situation: The function list which is defined at u-boot/board/myboard/myboard.c, and all functions in this list only uses functions at include/_exports.h and some of user-defined functions.
Your description is really vague; it would be easier if you could give specific code examples or such. If "some of user-defined functions" refers to code that is covered by the GPL, then your application must be released under GPL, too.
My code like belows:
typedef void (*pfn_t) (void); pfn_t sc_gps_pfn[] = { LoadToMemory, SaveData, RFPowerCtrl, MiscConfig, RegisterDspInterruptHandler, GetPowerStatus, IsUserResume, DebugOutput, ReturnToBootLoader }; int LoadToMemory(void *pDestination, unsigned int storeID, unsigned int size) { } int SaveData(unsigned int storeID, void *pSource, unsigned int size) {} int RegisterDspInterruptHandler(unsigned int handler) { gps_intr = (pfn_t) handler;
return 1; }
extern void ReturnToBootLoader(unsigned int nextRtcAlarmParam); /* which is defined at *.S file */ ...
int Launch() { Launch_apps(sc_gps_pfn, jumpaddr); /* Launch_apps is defined at *.S file, and it just jumps to VMA of standalone application, sc_gps_pfn is the address for function list */ }
We want to open this code, but want to close the code which use this function list in binary pattern.
Or Need I to export my functions at include/_exports.h? At my standalone application only uses address of functions at function list, not the name of function, so It doesn't need to include include_exports.h.
What you implement is some form of static linking.
... which technically is a stupid thing to do, as your application will only be able to run with a very specific binary image of U-Boot. Even rebuilding the same version of U-Boot (jut using a different tool chain, for example) will most likely result in a U-Boot image that cannot run your application code any more. Even worse, ther ewill be not even a clear failure mode, instead you will execute random code.
The standalone application is compiled by armcc, and this bin file is shared by WinCE and Linux bootloader. The standalone application uses bootloader functions by address not by name.
We would like to release our u-boot under GPL, but standalone
Actually you have no choice; U-Boot is already covered by the GPL - as soon as you distribute the code, you also have to fufil the resulting requirements of the GPL.
application includes some IP properties code, so we want to close it.
This is no problem, as long as you strictly follow the rules. I think the exception from the GPL is pretty well defined and leaves not much room for interpretation. What you describe sounds fishy to me.
Best regards,
Wolfgang Denk
Best Regards, Peter Chen