65 lines
2.4 KiB
Plaintext
65 lines
2.4 KiB
Plaintext
Introduction:
|
|
------------
|
|
|
|
WARNING: don't try to play with TCCBOOT unless you are a kernel
|
|
hacker!
|
|
|
|
TCCBOOT is a bootloader which uses TinyCC to compile C and assembly
|
|
sources and boot the resulting executable. It is typically used to
|
|
compile the Linux kernel sources at boot time.
|
|
|
|
TCCBOOT boots the same way as a Linux kernel, so any boot loader which
|
|
can run a 'bzImage' Linux kernel image can run TCCBOOT. I only tested
|
|
it with ISOLINUX, but LILO or GRUB should work too.
|
|
|
|
TCCBOOT reads C or assembly sources from a gzipped ROMFS filesystem
|
|
stored in an Initial Ram Disk (initrd). It first reads the file
|
|
'boot/tccargs' which contains the TinyCC command line (same syntax as
|
|
the tcc executable). The TinyCC invocation should output one binary
|
|
image 'kernel'. This image is loaded at address 0x00100000. TCCBOOT
|
|
then does a jump to the address 0x00100000 in 32 bit flat mode. This
|
|
is compatible with the ABI of the 'vmlinux' kernel image.
|
|
|
|
Compilation:
|
|
-----------
|
|
|
|
TCCBOOT was only tested with Linux 2.4.26. In order to build TCCBOOT,
|
|
you must first compile a 2.4.26 kernel because for simplicity TCCBOOT
|
|
uses some binary files and headers from the Linux kernel. TCCBOOT also
|
|
needs the source code of TinyCC (tested with TinyCC version
|
|
0.9.21). You can modify the Makefile to give the needed paths.
|
|
|
|
Example:
|
|
-------
|
|
|
|
An "Hello World" ROMFS partition is included (initrd.img). You can
|
|
rebuild it from the example/ directory. You can test it with the QEMU
|
|
PC emulator with the 'qemu-tccboot' script.
|
|
|
|
Kernel compilation:
|
|
------------------
|
|
|
|
For your information, the patch 'linux-2.4.26-tcc.patch' gives the
|
|
necessary modifications to build a Linux kernel with TinyCC. The
|
|
corresponding kernel configuration is in file
|
|
linux-2.4.26-config. Patches are necessary for the following reasons:
|
|
|
|
- unsupported assembly directives: .rept, .endr, .subsection
|
|
- '#define __ASSEMBLY__' needed in assembly sources
|
|
- static variables cannot be seen from the inline assembly code
|
|
- typing/lvalue problems with '? :'
|
|
- no long long bit fields
|
|
- 'aligned' attribute not supported for whole structs, only for fields
|
|
- obscur preprocessor bug
|
|
|
|
Some of these problems could easily be fixed, but I am too lazy
|
|
now. It is sure that there are still many bugs in the kernel generated
|
|
by TinyCC/TCCBOOT, but at least it can boot and launch a shell.
|
|
|
|
License:
|
|
-------
|
|
|
|
TCCBOOT is distributed under the GNU General Public License.
|
|
|
|
Fabrice Bellard.
|