Booboo sent me the following; thanks Booboo:
Boboo: I think I can add some clarification to the toolchain concept. Your post is not technically wrong but is a bit misleading. In a programming context a toolchain is the group of tools needed to write a program. If the program is interpreted (Python for example) the toolchain would include a simple text editor used to create the program and the runtime environment (the Python interpreter and libraries) for the target system. If the program is compiled (C, C++), the toolchain usuarrly refers only to the compiler, linker, some other auxiliary tools and a minimal set of libraries needed to build basic programs (libc in linux). Toolchains can be "native" or "cross". A toolchain "native" runs in one platform and produces code for the SAME platform. This is the case of the gcc/ld and friends found in most linux distributions. A cross toolchain runs in one platform (PC) but produces code and executables for a completely different platform. This is the kind of toolchain we need for A320 programming. The programs compiled with this toolchain cannot be run in the PC, must be transferred and executed on the A320. That said, Ingenic provides a FULL WORKING toolchain for the JZ4740 processor which is usable for the A320. This toolchain includes the most basic libraries (libc, for example) and some other useful libraries. I compiled some others like the SDL which are not included in the Ingenic toolchain but are almost mandatory if you want to program games and emulators. The Ingenic toolchain together with some extra libraries is all we need right now to compile programs for the A320 (well, that and a linux kernel supporting the hardware). What about the uclibc toolchain? Well... the Ingenic toolchain is based on the libc library. This is the very foundation of each program and is VERY large because it supports every function needed in a linux desktop or server system. As a consequence, this is a quite large library which consumes lots of memory. 4MB is nothing in a modern desktop but is a quite sizeable chunk of the A320 available memory. So, there is an alternative "base" library called uclibc. As the name suggests, it s a libc optimized for size and resource usage, that doesn't include advanced functions which are usually not needed in embedded systems. We cannot just replace the libc in the Ingenic toolchain by a compiled uclibc, because this base library (libc or uclibc) is so tightly bound to the compile process that a compiler will work only with a base library, but not with the other. Or better said, a gcc-libc compiler will produce executables that will only run in a system which has the libc, and a gcc-uclibc compiler will produce executables that will only run in a system which has the uclibc in the root filesystem. That said, I must insist that getting a uclibc based toolchain is an OPTIMIZATION, not a requirement in order to get a working linux on the A320. As of now, coders can build and test programs for the A320, and we could eventually just go with the libc based toolchain provided by Ingenic. However, having and using an uclibc based toolchain would allow us to squeeze up to the last drop of power out of the A320. Regards. |
It’s all starting to make sense!
This is a great clarification. And I must say Booboo if English isn't your first language you certainly do a great job with it. Thanks for all the hard work..I can't wait to see linux on the Dingoo.
ReplyDelete