dirkdokter / syslink3 Goto Github PK
View Code? Open in Web Editor NEWThis project forked from ganthony/syslink3
User Space SysLink 3 APIs
This project forked from ganthony/syslink3
User Space SysLink 3 APIs
SysLink 3 ========= SysLink3 is the implementation of a minimal set of SysLink2 APIs, hosted over the new AMP (rpmsg) feature in Linux kernel v3.x, and the corresponding support for an rpmsg-based MessageQ Transport on the BIOS side. The rpmsg functionality is exposed to user space via a socket interface, provided in the upstream-rpmsg repo (see below). The main public API currently supported is MessageQ. For current constraints, see the TODO section below. Platforms: ========= Messaging has been validated between Linux to BIOS on: 1) OMAPL138 EVM board: ARM to DSP. 2) OMAP4430 Panda board: Dual ARM9 to Ducati CORE0 ("SysM3"). BUILD: ===== Linux side: =========== Kernel space: ------------ 1) Clone the upstream-rpmsg repo, and checkout the v0.3 tag (on rpmsg_3.4_rc1 branch): * git clone git://github.com/GAnthony/upstream-rpmsg.git * git checkout -b <branch_name> v0.3 2a) The syslink3 repo (see below) etc/ directory contains the .config files used for testing. [OMAPL138] etc/omapl138/omapl138_rpmsg_3.4_rc1.config [OMAP4430] etc/panda/panda_rpmsg_3.4_rc1.config 2b) Key config parameters needed for rpmsg and socket driver to build/work: CONFIG_REMOTEPROC=m CONFIG_DAVINCI_REMOTEPROC=m CONFIG_RPMSG=m CONFIG_VIRTIO=m CONFIG_VIRTIO_RING=m 3) Code Sourcery Toolchain version used: arm-2010q1 User space: ----------- 1) Install the BIOS IPC product into a tools repository (REPO) directory: - See sysbios-rpmsg repo Makefile to get correct IPC version. - http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ipc/ 2) Install the latest CMEM version into the tools repository: - http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/index.html 3) Clone the following to get SysLink3 libraries, NameServer daemon and samples: * git clone git://github.com/GAnthony/syslink3.git * git checkout -b <branch_name> v0.3 4) Makefile.inc: * Ensure the following settings correspond to your installation versions: IPCPRODVER = <ipc version> CMEMPRODVER = <linuxutils version> 5) Build: % make REPO=<path to your tools repository> OR: - Edit Makefile.inc, update REPO variable to point to the tools repository. % make BIOS side: ========== 1) Clone the sysbios-rpmsg repo, and checkout the v0.3 tag (on the syslink3 branch): * git clone git://github.com/GAnthony/sysbios-rpmsg.git * git checkout -b <branch_name> v0.3 2) See the README for tools and build instructions (substitute GAnthony repo for the omapzoom repo mentioned in the README). * Use the tools versions listed in the Makefile. 3) Note that the MessageQCopy, srvmgr, resmgr, pm, and grcm modules are not currently compatible with the new BIOS IPC transport: TransportVirtio. They build, but are not compiled into the test sample: messageq_socket. 4) The result of this build will be a messageq_socket ELF binary in the src/ti/ipc/tests/<ti_platforms_X>/<profile>/ directory. Test: ==== 1) Setup a root file system. This was tested using a root file system from: http://narcissus.angstrom-distribution.org/ [OMAPL138] "machine type" = da850-omapl138-evm [OMAP4430] "machine type" = pandaboard 2) Boot Linux on the target: [OMAPL138] (eg: boot uImage over TFTP, and load fs over NFS) setenv bootfile=/gp/uImage.omapl138.rpmsg_3.4_rc1 setenv bootargs=console=ttyS2,115200n8 root=/dev/nfs rw nfsroot=<nfs_server_ip>:<rfs_path>,nolock ip=dhcp rootdelay=5 setenv bootcmd=dhcp;bootm c0700000 [OMAP4430] (eg: boot uImage on MMC, and load fs over NFS): setenv bootargs 'root=/dev/nfs rw nfsroot=<nfs_server_ip>:<rfs_path> rootdelay=5 console=ttyO2,115200n8 noinitrd ip=dhcp' setenv bootcmd 'mmcinit 0;fatload mmc 0:1 0x80000000 uImage; bootm' 3) Copy the messageq_single binary (from sysbios-rpmsg repo) to the target /lib/firmware directory, renaming to the firmware filename for your platform: [OMAPL138] % cp <sysbios-rpmsg>/src/ti/ipc/tests/ti_platforms_evmOMAPL138_DSP/release/messageq_single.xe674 <target>/lib/firmware/da8xx-dsp.elf [OMAP4430] % cp <sysbios-rpmsg>/src/ti/ipc/tests/ti_platform_omap4430_core0/release/messageq_single.xem3 <target>/lib/firmware/ducati-m3-core0.xem3 4) Copy the MessageQApp and lad daemon to the target: % cp <syslink3>/src/samples/MessageQApp <target>/ % cp <syslink3>/src/daemon/lad <target>/ 5) On the target, load the BIOS firmware and rpmsg socket driver: (Eg: See etc/<platform>/load_firmware.sh): % depmod -a % if [ ! -d "/debug" ]; then mkdir /debug % fi % mount -t debugfs none /debug % modprobe remoteproc % modprobe davinci_remoteproc # [OMAPL138] % modprobe virtio_rpmsg_bus % modprobe rpmsg_proto 6) To dump the trace on the remote proc: (See etc/<platform>/dump_trace.sh): % cat /debug/remoteproc/davinci-rproc.0/trace0 # [OMAPL138] 7) Start the NameServer daemon: (based on Link Arbiter Daemon): (See etc/run_lad.sh): % lad lad.txt 8) Copy the <syslink3>/src/samples/MessageQApp sample to the target and Run: % MessageQApp 9) Expected Output: Linux side: % MessageQApp Entered MessageQApp_execute Local MessageQId: 0x1 Remote queueId [0x10000] Exchanging 100 messages with remote processor... MessageQ_get #0 Msg = 0x183b0 Exchanged 1 messages with remote processor MessageQ_get #1 Msg = 0x183b0 Exchanged 2 messages with remote processor MessageQ_get #2 Msg = 0x183b0 [...] Exchanged 98 messages with remote processor MessageQ_get #98 Msg = 0x183b0 Exchanged 99 messages with remote processor MessageQ_get #99 Msg = 0x183b0 Exchanged 100 messages with remote processor Sample application successfully completed! Leaving MessageQApp_execute 10) Expected Output: BIOS trace: [OMAPL138] % dump_trace.sh 3 IpcMemory entries at 0xc4000000 messageq_single.c:main: MultiProc id = 1 TransportVirtioSetup_attach: remoteProcId: 0 tsk1Fxn: created MessageQ: SLAVE; QueueID: 0x10000 Awaiting sync message from host... Received msg from (procId:remoteQueueId): 0x0:0x1 payload: 8 bytes; loops: 100 with printing. Got msg #0 (40 bytes) from core 0 Sending msg Id #0 to core 0 Got msg #1 (40 bytes) from core 0 Sending msg Id #1 to core 0 [...] Got msg #98 (40 bytes) from core 0 Sending msg Id #98 to core 0 Got msg #99 (40 bytes) from core 0 Sending msg Id #99 to core 0 Awaiting sync message from host... 11) To unload the firmware and stop the coprocessor: (See etc/<platform>/unload_firmware.sh) % rmmod rpmsg_proto % rmmod virtio_rpmsg_bus % rmmod davinci_remoteproc # [OMAPL138] % rmmod remoteproc CMEM: ===== CMEM (Contiguous MEMory allocator) is currently the only supported way to allocate a contiguous block of memory from a user space application to share with the remote core. See the CMEM documentation link below for an overview. Passing a pointer to a shared memory buffer is demonstrated in the Linux and BIOS side tests: nano_test.c. See etc/omapl138/nano_test.sh for usage with the ALSA utility arecord and the OMAPL138 sound driver. Build: ====== 1) See readme.txt in <linuxutils_install_dir>/packages/ti/sdo/linuxutils/cmem 2) % cd src/module % make % make install Install: ======== 1) Add mem= line to carveout CMEM memory from Linux: (eg for OMAPL138 EVM with 128Kb DDR): # setenv bootargs "mem=112M console=ttyS2,115200n8 root=/dev/nfs rw nfsroot=146.252.160.87:/exports/gp/omapl138_angstrom_rfs,nolock ip=dhcp rootdelay=5" 2) insmod cmemk.ko, specifying physical start, end addresses: % insmod cmemk.ko phys_start=0xc7000000 phys_end=0xc8000000 Documentation: ============== * http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/syslink/latest/docs/html/index.html * http://free-electrons.com/pub/video/2011/elce/elce-2011-ben-cohen-remote-processor-messaging-450p.webm * https://github.com/ohadbc/upstream-rpmsg/blob/rpmsg_3.4_rc1/Documentation/rpmsg.txt * https://github.com/ohadbc/upstream-rpmsg/blob/rpmsg_3.4_rc1/Documentation/virtual/virtio-spec.txt * http://www.omappedia.org/wiki/Syslink_3 * http://processors.wiki.ti.com/index.php/CMEM_Overview Known Issues: ============ * Build for Panda board is broken on sysbios-rpmsg repo. * Cleanup on abnormal process termination or NameServer timeouts not completely handled. * For each interrupt from the DSP, a second spurious call to the irq function in davinci_remoteproc is occuring, despite the fact that there is no actual second interrupt. A hack was put in to ignore this second spurious interrupt until a patch to the interrupt handling code on davinci is found. TODO: ===== * Multiple platform build support in both syslink3 and sysbios-rpmsg repos. * Add OSAL, and replace printf in API modules with Log_printf. * Support multiple processes. * Make TransportVirtio compatible with MessageQCopy and rpmsg-omx.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.