Apps: Remove the need to have old Zynq includes
[processor-sdk/open-amp.git] / README.md
index 914bac22217e3c9a1fa8527cdefe6ca072af900d..3910ba580e1b9a95dc30c55518d880a424a65927 100644 (file)
--- a/README.md
+++ b/README.md
@@ -1,17 +1,95 @@
-open-amp
-========
-This repository is a place holder for Open Asymmetric Multi Processing (OpenAMP) framework project. The OpenAMP framework provides software components that enable development of software applications for Asymmetric Multiprocessing (AMP) systems. OpenAMP provides following features:
+# open-amp
+This repository is the home for the Open Asymmetric Multi Processing (OpenAMP)
+framework project. The OpenAMP framework provides software components that
+enable development of software applications for Asymmetric Multiprocessing
+(AMP) systems. The framework provides the following key capabilities.
 
-1. Fully functional remoteproc and rpmsg components usable in following configurations;
-       a. Linux master/Bare Metal remote configuration\r
-       b. Bare Metal master/Linux remote configuration\r
-2. Proxy infrastructure and supplied demos showcase ability of proxy on master to handle printf, scanf, open, close, read, write calls from Bare metal based remote contexts.\r
-3. Documentation - OpenAMP User Manual, OpenAMP Getting Started Guide and Performance Test Measurements.
-4. Performance tests have been conducted and OpenAMP latency measurements have been quantified and documented.
+1. Provides Life Cycle Management, and Inter Processor Communication
+   capabilities for management of remote compute resources and their associated
+   software contexts
+2. Provides a stand alone library usable with RTOS and Baremetal software
+   environments
+3. Compatibility with upstream Linux remoteproc and rpmsg components
+4. Following AMP configurations supported
+       a. Linux master/Generic(Baremetal) remote
+       b. Generic(Baremetal) master/Linux remote
+5. Proxy infrastructure and supplied demos showcase ability of proxy on master
+   to handle printf, scanf, open, close, read, write calls from Bare metal
+   based remote contexts.
 
-Following are the known limitations:
+## OpenAMP Source Structure
+```
+|- lib/
+|  |- common/     # common helper functions
+|  |- virtio/     # virtio implemnetation
+|  |- rpmsg/      # rpmsg implementation
+|  |- remoteproc/ # remoteproc implementation
+|  |  |- drivers  # remoteproc drivers
+|  |- proxy/      # implement one processor access device on the
+|  |              # other processor with file operations
+|  |- system/     # os specific implementation
+|  |  |  |- generic/ # E.g. generic system (that is baremetal)
+|  |  |  |  |- machine/ # machine specific implmentation for the system
+|  |- include/     # header files
+|  |  |- machine/ # machine specific header files
+|  |  |- system/  # system specific header files
+|- apps/        # demontrastion/testing applicaitons
+|  |- machine/  # common files for machine can be shared by applications
+|               # It is up to each app to decide whether to use these files.
+|  |- system/   # common files for system can be shared by applicaitons
+|               # It is up to each app to decide whether to use these files.
+|- obsolete     # It is used to build libs which may also required when
+|               # building the apps. It will be removed in future since
+|               # user can specify which libs to use when compiling the apps.
+|- cmake        # CMake files
+```
 
-1. In rpc_demo.c(the remote demonstration application that showcases usage of rpmsg retargetting infrastructure),  the bindings for the flag input parameter in open() system call has been redefined. The GCC tool library bindings for this input argument is different between arm-xilinx/none-eabi, and arm-linux-eabi toolchains. For this reason, redefinition is required for compatibility with proxy on Linux master.
+OpenAMP library libopen_amp is composed of the following directorys in `lib/`:
+*   `common/`
+*   `virtio/`
+*   `rpmsg/`
+*   `remoteproc/`
+*   `proxy/`
+*   `system/`
 
+## OpenAMP Compilation
+OpenAMP uses CMake for library and demonstration applicaiton compilation.
+
+###  Example to compile Zynq MP SoC R5 generic(baremetal) remote:
+```
+$ mkdir build
+$ cd build/
+$ cmake ../open-amp -DCMAKE_TOOLCHAIN_FILE=zynqmp_r5_generic -DWITH_OBSOLETE=ON -DWITH_APPS=ON
+$ make DESTDIR=$(pwd) install
+```
+The OpenAMP library will be generated to `build/usr/local/lib` directory, headers will be generated to
+`build/usr/local/include` directory, and the applications executables will be generated to
+`build/usr/local/bin` directory.
+
+*   `-DWITH_OBSOLETE=ON` is to build the `libxil.a`.
+*   `-DWITH_APPS=ON` is to build the demonstration applications.
+
+###  Example to compile Zynq A9 remote:
+```
+$ mkdir build
+$ cd build/
+$ cmake ../open-amp -DCMAKE_TOOLCHAIN_FILE=zynq7_generic -DWITH_OBSOLETE=on -DWITH_APPS=ON
+$ make DESTDIR=$(pwd) install
+```
+
+## Supported System and Machines
+For now, it supports:
+* Zynq generic slave
+* Zynq generic master
+* ZynqMP R5 generic slave
+
+## Known Limitations:
+1. In rpc_demo.c(the remote demonstration application that showcases usage of
+   rpmsg retargetting infrastructure),  the bindings for the flag input
+   parameter in open() system call has been redefined. The GCC tool library
+   bindings for this input argument is different between arm-xilinx/none-eabi, and
+   arm-linux-eabi toolchains. For this reason, redefinition is required for
+   compatibility with proxy on Linux master.
 
 For using the framework please refer to the documents present in the /docs folder.
+Subscribe to the open-amp mailing list at https://groups.google.com/group/open-amp.