Ousia
index
README
Ousia ======================= COPYRIGHT (C) LEAFGRASS Introduction ------------ "Ousia" is picked from Greek. Mainly intend to represent the essence of Real-Time Theory. Developed following K-I-S-S principle. Source Tree Architecture ------------------------ * core/ Ousia core routines. Ousia porting code are also placed here. * doc/ Complete documentation of Ousia. * driver/ Different kinds of device drivers based on Ousia. They are all configurable. * framework/ Framework based on Ousia. Such as shell, vfs, etc. They are scalable and configurable, either. * include/ Header files of main routines of Ousia. * platform/ Chip and board specific code, e.g. low-level library. * project/ Project source code. Include several sample project instances. * script/ Useful scripts used while Ousia developing. * support/ Basic supporting stuffs for Ousia developing and building. Useful template files are placed here, such as porting code template. How to Start for Fresh New Environment -------------------------------------- - Install toolchain - Make For a general purpose, these steps are enough, but there are some more steps needs to do for each platform. As for stm32 on linux host, we use dfu/serial/jtag to upload firmware, setup like below: - Install Codesourcery toolchain. (e.g. arm-2011.03-42-arm-none-eabi) - Install dfu-util/pyserial/openocd (it's up to your preference). Ps: In fedora or ubuntu, yum/apt-get install them is ok. - Resolve usb or serial access problems. (e.g. copy ousia/support/dfu/45-maple.rules to /etc/udev/rules.d/) - Install minicom for console print if you want to debug with uart. Ps: Default port is /dev/ttyACMx - Do 'make' and 'make install'. Create User Project Steps ------------------------- - Create a directory named PROJECT_NAME in folder "project". - Add user source code. - Create a file rules.mk to specify source code related rules for makefile. - Update TARGET_PLATFORM and PROJECT_NAME in main Makefile, then make. Ps: Refer to existing projects for further detailed information. Core Developing Steps --------------------- - Choose or create a branch of yourself to work on. - Update source code, include those version related strings. - Modify related Makefiles and configuration files. - Build then do some testing on this branch. - Commit it. - Tag a new one if a new version is commited. - Push this branch to remote repo. - If this is a release version, update Ousia Release Notes. Porting Steps ------------- - Create a directory named PLATFORM_NAME in folder "platform", then enter it. - Create three files: rules.mk config.mk target.mk. @rules.mk: makefile source code related rules @config.mk: parameters or flags for toolchains and environment @target.mk: rules for building target - Create a directory named "port" there then create three files in it. @ousia_cfg.h: os scalability related configurations @ousia_port.h: header of porting code @ousia_port.c: implentation of porting - Create other porting related stuffs, such as linker scripts, if necessary. - Update TARGET_PLATFORM and PROJECT_NAME in main Makefile, then make. Ps: If modified porting related code, should not edit directly in "core/port", do that in specific platform directory instead, e.g. "platform/stm32/port". Makefile will copy them into "core/port" automatically depend on specific cpu types. Build A Different Platform -------------------------- Only modify the header TODO in root Makefile - Assign specific TARGET_PLATFORM and PROJECT_NAME Download Code to Target Chip ---------------------------- - Modify related User Customization Items in Makefile in source tree. For stm32, you need to decide which MEMORY_TARGET to use: jtag, flash, or ram. - Do proper operation on hardware. (i.e. change boot jumper or reset or sth.) - Then type 'make install' and it will do everything for you. Ps: For stm32, there may be a bootloader, 'make bootloader' will download bootloader code to chip via serial. And for simulation on x86, no code downloading procedure is needed. See Makefile for detailed information. Acknowledgments --------------- Parts of make system and libmaple stm32 low-level code are borrowed from libmaple. Thanks to their excellent works! - http://leaflabs.com
SRAM LAYOUT EXAMPLE
new pcb: 0x200016BC, stack_base: 0x20001638 pcb: 0x200016BC, stk: 0x200015FC xpsr: 0x01000000 | 0x20001638 pc: 0x08005691 | 0x20001634 lr: 0x08005691 | 0x20001630 r12: 0x00000000 | 0x2000162C r3: 0x00000000 | 0x20001628 r2: 0x00000000 | 0x20001624 r1: 0x00000000 | 0x20001620 r0: 0x00000000 | 0x2000161C r11: 0x00000000 | 0x20001618 r10: 0x00000000 | 0x20001614 r9: 0x00000000 | 0x20001610 r8: 0x00000000 | 0x2000160C r7: 0x00000000 | 0x20001608 r6: 0x00000000 | 0x20001604 r5: 0x00000000 | 0x20001600 r4: 0x00000000 | 0x200015FC ------- SRAM LAYOUT ------- +-----------+ 0x20005000 (stack bottom) | | +-----------+ 0x20004FFC | | +-----------+ 0x20004FFC | | + ~ ~ + | . | | . | | . | + ~ ~ + | | +-----------+ 0x200016C4 | 08005691 | +-----------+ 0x200016C0 (pcb->pentry, __ps_init() entry) | 200015FC | +-----------+ 0x200016BC (pcb, pcb->stack_ptr) | | + ~ ~ + | . | | . | | . | + ~ ~ + | | +-----------+ | | --- +-----------+ 0x2000163C | | xpsr | | +-----------+ 0x20001638 | pc | +-----------+ 0x20001634 | lr | +-----------+ 0x20001630 | r12 | +-----------+ 0x2000162C | r3 | +-----------+ 0x20001628 | r2 | +-----------+ 0x20001624 | r1 | +-----------+ 0x20001620 | r0 | +-----------+ 0x2000161C | r11 | +-----------+ 0x20001618 | r10 | stk +-----------+ 0x20001614 128B | r9 | +-----------+ 0x20001610 | r8 | +-----------+ 0x2000160C | r7 | +-----------+ 0x20001608 | r6 | +-----------+ 0x20001604 | r5 | +-----------+ 0x20001600 | r4 | +-----------+ 0x200015FC | | + ~ ~ + | . | | . | | . | + ~ ~ + | | | +-----------+ | | | --- +-----------+ 0x200015BC | | + ~ ~ + | . | | . | | . | + ~ ~ + | | +-----------+ | | +-----------+ 0x20000004 | | +-----------+ 0x20000000 (stack top) ------- SRAM LAYOUT -------
Build on x86_64 Machines
For Fedora:
# yum install /lib/ld-linux.so.2 # yum install /lib/libusb-0.1.so.4 or # yum install /lib/libusb*
Thus we can use i386/i686 toolchains as usual.