€cdocutils.nodes document q)�q}q(U nametypesq}q(X gic-interrupt-inputs-reservationqˆXbuilding-jailhouse-from-sourcesqˆXgeneral-porting-notesqˆXkeystone3 jailhouse demoq NXjailhouse-performance-on-am5728q ˆXbare-metal-inmate-exampleq ˆXam572x-jailhouse-demoq ˆXrtos-bios-porting-notesq ˆXmemory-reservationqˆXbare-metal-exampleqˆXrunning-the-demo-on-am572x-evmqˆXlinux-kernel-modificationsqˆXhardware-modules-reservationqˆXkeystone3-jailhouse-demo-step3qˆXkeystone3-jailhouse-demo-step2qˆXkeystone3-jailhouse-demo-step1qˆXkeystone3-jailhouse-demo-step0qˆXkeystone3-jailhouse-demo-step4qˆX,building-and-running-the-ethercat-slave-demoqˆXrunning-bare-metal-ti-app.binqˆX&migration from jailhouse v0.8 to v0.10qˆXroot-cell-configurationqˆXrtos-pdk-inmatesqˆX running-pdk-led_test.bin-exampleqˆXrtos-bios-examplesqˆXjailhouse hypervisorqNXrunning-the-demo-on-am572x-idkq ˆXpre-built-componentsq!ˆXoverview-virtualizationq"ˆXjailhouse-internalsq#ˆuUsubstitution_defsq$}q%(X__SDK_INSTALL_DIR__q&cdocutils.nodes substitution_definition q')�q(}q)(U rawsourceq*XV.. |__SDK_INSTALL_DIR__| replace:: ti-processor-sdk-linux-[platformName]-evm-Uparentq+cdocutils.nodes section q,)�q-}q.(h*Uh+hUsourceq/Xp/home/gtbldadm/nightlybuilds/processor-sdk-doc/source/linux/Foundational_Components/Virtualization/Jailhouse.rstq0Utagnameq1Usectionq2U attributesq3}q4(Udupnamesq5]Uclassesq6]Ubackrefsq7]Uidsq8]q9Ujailhouse-hypervisorq:aUnamesq;]qhUchildrenq?]q@(cdocutils.nodes title qA)�qB}qC(h*XJailhouse HypervisorqDh+h-h/h0h1UtitleqEh3}qF(h5]h6]h7]h8]h;]uh=Kh>hh?]qGcdocutils.nodes Text qHXJailhouse HypervisorqI…�qJ}qK(h*hDh+hBubaubh')�qL}qM(h*X4.. |__WINDOWS_SUPPORTED_LONG__| replace:: 7 (64-bit)h+h-h/cdocutils.nodes reprunicode qNX source/linux/replacevars.rst.incqO…�qP}qQbh1Usubstitution_definitionqRh3}qS(h5]h6]h7]h8]h;]qTX__WINDOWS_SUPPORTED_LONG__qUauh=Kh>hh?]qVhHX 7 (64-bit)qW…�qX}qY(h*X 7 (64-bit)h+hLubaubh(h')�qZ}q[(h*Xe.. |__SDK_INSTALL_FILE__| replace:: ti-processor-sdk-linux-[platform]--Linux-x86-Install.binh+h-h/hPh1hRh3}q\(h5]h6]h7]h8]h;]q]X__SDK_INSTALL_FILE__q^auh=Kh>hh?]q_hHXAti-processor-sdk-linux-[platform]--Linux-x86-Install.binq`…�qa}qb(h*XAti-processor-sdk-linux-[platform]--Linux-x86-Install.binh+hZubaubh')�qc}qd(h*X:.. |__PART_FAMILY_DEVICE_NAMES__| replace:: Sitara devicesh+h-h/hPh1hRh3}qe(h5]h6]h7]h8]h;]qfX__PART_FAMILY_DEVICE_NAMES__qgauh=Kh>hh?]qhhHXSitara devicesqi…�qj}qk(h*XSitara devicesh+hcubaubh')�ql}qm(h*X3.. |__FEATURINGMATRIX__| replace:: featuring Matrixh+h-h/hPh1hRh3}qn(h5]h6]h7]h8]h;]qoX__FEATURINGMATRIX__qpauh=Kh>hh?]qqhHXfeaturing Matrixqr…�qs}qt(h*Xfeaturing Matrixh+hlubaubh')�qu}qv(h*X+.. |__PRODUCT_LINE_NAME__| replace:: Sitarah+h-h/hPh1hRh3}qw(h5]h6]h7]h8]h;]qxX__PRODUCT_LINE_NAME__qyauh=Kh>hh?]qzhHXSitaraq{…�q|}q}(h*XSitarah+huubaubh')�q~}q(h*X'.. |__SDK_SHORT_NAME__| replace:: PLSDKh+h-h/hPh1hRh3}q€(h5]h6]h7]h8]h;]q�X__SDK_SHORT_NAME__q‚auh=Kh>hh?]qƒhHXPLSDKq„…�q…}q†(h*XPLSDKh+h~ubaubh')�q‡}qˆ(h*XJ.. |__RTOS_UBUNTU_VERSION_LONG__| replace:: 14.04 (64-bit), 16.04 (64-bit)h+h-h/hPh1hRh3}q‰(h5]h6]h7]h8]h;]qŠX__RTOS_UBUNTU_VERSION_LONG__q‹auh=Kh>hh?]qŒhHX14.04 (64-bit), 16.04 (64-bit)q�…�qŽ}q�(h*X14.04 (64-bit), 16.04 (64-bit)h+h‡ubaubh')�q�}q‘(h*X–.. |__SDK_DOWNLOAD_URL__| replace:: `AM57xx-Linux-SDK-Download-page `__h+h-h/hPh1hRh3}q’(h5]h6]h7]h8]h;]q“X__SDK_DOWNLOAD_URL__q”auh=K h>hh?]q•cdocutils.nodes reference q–)�q—}q˜(h*Xr`AM57xx-Linux-SDK-Download-page `__h3}q™(UnameXAM57xx-Linux-SDK-Download-pageUrefuriqšXMhttp://software-dl.ti.com/processor-sdk-linux/esd/AM57X/latest/index_FDS.htmlh8]h7]h5]h6]h;]uh+h�h?]q›hHXAM57xx-Linux-SDK-Download-pageqœ…�q�}qž(h*Uh+h—ubah1U referenceqŸubaubh')�q }q¡(h*X*.. |__PART_FAMILY_NAME__| replace:: Sitarah+h-h/hPh1hRh3}q¢(h5]h6]h7]h8]h;]q£X__PART_FAMILY_NAME__q¤auh=K h>hh?]q¥hHXSitaraq¦…�q§}q¨(h*XSitarah+h ubaubh')�q©}qª(h*X4.. |__SDK_FULL_NAME__| replace:: Processor SDK Linuxh+h-h/hPh1hRh3}q«(h5]h6]h7]h8]h;]q¬X__SDK_FULL_NAME__q­auh=K h>hh?]q®hHXProcessor SDK Linuxq¯…�q°}q±(h*XProcessor SDK Linuxq²h+h©ubaubh')�q³}q´(h*X<.. |__LINUX_UBUNTU_VERSION_SHORT__| replace:: 16.04 or 18.04h+h-h/hPh1hRh3}qµ(h5]h6]h7]h8]h;]q¶X__LINUX_UBUNTU_VERSION_SHORT__q·auh=K h>hh?]q¸hHX16.04 or 18.04q¹…�qº}q»(h*X16.04 or 18.04h+h³ubaubh')�q¼}q½(h*XL.. |__LINUX_UBUNTU_VERSION_LONG__| replace:: 16.04 (64-bit), 18.04 (64-bit) h+h-h/hPh1hRh3}q¾(h5]h6]h7]h8]h;]q¿X__LINUX_UBUNTU_VERSION_LONG__qÀauh=K h>hh?]qÁhHX16.04 (64-bit), 18.04 (64-bit)qÂ…�qÃ}qÄ(h*X16.04 (64-bit), 18.04 (64-bit)h+h¼ubaubcdocutils.nodes rubric qÅ)�qÆ}qÇ(h*XOverviewqÈh+h-h/h0h1UrubricqÉh3}qÊ(h8]qËUoverview-virtualizationqÌah7]h5]h6]h;]qÍh"auh=Nh>hh?]qÎhHXOverviewqÏ…�qÐ}qÑ(h*hÈh+hÆubaubcdocutils.nodes paragraph qÒ)�qÓ}qÔ(h*XÒJailhouse is a static partitioning hypervisor that runs bare metal binaries. It cooperates closely with Linux. Jailhouse doesn't emulate resources that don't exist. It just splits existing hardware resources into isolated compartments called "cells" that are wholly dedicated to guest software programs called "inmates". One of these cells runs the Linux OS and is known as the "root cell". Other cells borrow CPUs and devices from the root cell as they are created.qÕh+h-h/h0h1U paragraphqÖh3}q×(h5]h6]h7]h8]h;]uh=K h>hh?]qØhHXÒJailhouse is a static partitioning hypervisor that runs bare metal binaries. It cooperates closely with Linux. Jailhouse doesn't emulate resources that don't exist. It just splits existing hardware resources into isolated compartments called "cells" that are wholly dedicated to guest software programs called "inmates". One of these cells runs the Linux OS and is known as the "root cell". Other cells borrow CPUs and devices from the root cell as they are created.qÙ…�qÚ}qÛ(h*hÕh+hÓubaubcdocutils.nodes image qÜ)�qÝ}qÞ(h*X).. Image:: ../../../images/Jailhouse.png h+h-h/h0h1Uimageqßh3}qà(UuriXJlinux/Foundational_Components/Virtualization/../../../images/Jailhouse.pngqáh8]h7]h5]h6]U candidatesqâ}qãU*hásh;]uh=Kh>hh?]ubhÒ)�qä}qå(h*X”The picture above shows the jailhouse on a system a) before the jailhouse is enabled; b) after the jailhouse is enabled; c) after a cell is created.qæh+h-h/h0h1hÖh3}qç(h5]h6]h7]h8]h;]uh=Kh>hh?]qèhHX”The picture above shows the jailhouse on a system a) before the jailhouse is enabled; b) after the jailhouse is enabled; c) after a cell is created.qé…�qê}që(h*hæh+häubaubhÒ)�qì}qí(h*XŠJailhouse consists of three parts: kernel module, hypervisor firmware and tools, which a user uses to enable the hypervisor, create a cell, load inmate binary, run and stop it. Jailhouse is an example of Asynchronous Multiprocessing (AMP) architecture. When we boot Linux on devices wih ARM CPU clusters, Linux uses all the cores. After we enable hypervisor it moves Linux to the root-cell. The root cell still uses all the CPU cores. When we create a new cell, hypervisor calls cpu\_down() for some of the CPU cores to offline them. The new cell will use these CPU cores and hardware resources dedicated for this cell in the cell configuration file.h+h-h/h0h1hÖh3}qî(h5]h6]h7]h8]h;]uh=Kh>hh?]qïhHX‰Jailhouse consists of three parts: kernel module, hypervisor firmware and tools, which a user uses to enable the hypervisor, create a cell, load inmate binary, run and stop it. Jailhouse is an example of Asynchronous Multiprocessing (AMP) architecture. When we boot Linux on devices wih ARM CPU clusters, Linux uses all the cores. After we enable hypervisor it moves Linux to the root-cell. The root cell still uses all the CPU cores. When we create a new cell, hypervisor calls cpu_down() for some of the CPU cores to offline them. The new cell will use these CPU cores and hardware resources dedicated for this cell in the cell configuration file.qð…�qñ}qò(h*XŠJailhouse consists of three parts: kernel module, hypervisor firmware and tools, which a user uses to enable the hypervisor, create a cell, load inmate binary, run and stop it. Jailhouse is an example of Asynchronous Multiprocessing (AMP) architecture. When we boot Linux on devices wih ARM CPU clusters, Linux uses all the cores. After we enable hypervisor it moves Linux to the root-cell. The root cell still uses all the CPU cores. When we create a new cell, hypervisor calls cpu\_down() for some of the CPU cores to offline them. The new cell will use these CPU cores and hardware resources dedicated for this cell in the cell configuration file.h+hìubaubhÒ)�qó}qô(h*X`Jailhouse is an open source project, which can be found on https://github.com/siemens/jailhouse.h+h-h/h0h1hÖh3}qõ(h5]h6]h7]h8]h;]uh=K"h>hh?]qö(hHX;Jailhouse is an open source project, which can be found on q÷…�qø}qù(h*X;Jailhouse is an open source project, which can be found on h+hóubh–)�qú}qû(h*X$https://github.com/siemens/jailhouseqüh3}qý(Urefurihüh8]h7]h5]h6]h;]uh+hóh?]qþhHX$https://github.com/siemens/jailhouseqÿ…�r}r(h*Uh+húubah1hŸubhHX.…�r}r(h*X.h+hóubeubh,)�r}r(h*Uh+h-h/h0h1h2h3}r(h5]h6]h7]h8]rUkeystone3-jailhouse-demorah;]r h auh=K&h>hh?]r (hA)�r }r (h*XKeystone3 Jailhouse Demor h+jh/h0h1hEh3}r(h5]h6]h7]h8]h;]uh=K&h>hh?]rhHXKeystone3 Jailhouse Demor…�r}r(h*j h+j ubaubhÒ)�r}r(h*XÓThe goal of this demo is to partition the CPU cores and run a second instance of the Linux kernel with a ramfs root filesystem. The inmate kernel will use the secondary UART to provide a login shell to the user.rh+jh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=K(h>hh?]rhHXÓThe goal of this demo is to partition the CPU cores and run a second instance of the Linux kernel with a ramfs root filesystem. The inmate kernel will use the secondary UART to provide a login shell to the user.r…�r}r(h*jh+jubaubcsphinx.ext.ifconfig ifconfig r)�r}r(h*Uh+jh/h0h1Uifconfigrh3}r(Uexprr XCONFIG_sdk in ('PLSDK')h8]h7]h5]h6]h;]uh=K,h>hh?]r!(hÅ)�r"}r#(h*X*Step 0: Create SD card with default imagesr$h+jh/h0h1hÉh3}r%(h8]r&Ukeystone3-jailhouse-demo-step0r'ah7]h5]h6]h;]r(hauh=Nh>hh?]r)hHX*Step 0: Create SD card with default imagesr*…�r+}r,(h*j$h+j"ubaubhÒ)�r-}r.(h*XPlease follow the instructions for the `Create SD Card Script <../../Overview/Processor_SDK_Linux_create_SD_card_script.html#sd-card-using-default-images>`__ and when prompted to select the root filesystem image, select the default 'tisdk-rootfs-image' image.h+jh/h0h1hÖh3}r/(h5]h6]h7]h8]h;]uh=K1h>hh?]r0(hHX'Please follow the instructions for the r1…�r2}r3(h*X'Please follow the instructions for the h+j-ubh–)�r4}r5(h*Xv`Create SD Card Script <../../Overview/Processor_SDK_Linux_create_SD_card_script.html#sd-card-using-default-images>`__h3}r6(UnameXCreate SD Card ScripthšXZ../../Overview/Processor_SDK_Linux_create_SD_card_script.html#sd-card-using-default-imagesh8]h7]h5]h6]h;]uh+j-h?]r7hHXCreate SD Card Scriptr8…�r9}r:(h*Uh+j4ubah1hŸubhHXf and when prompted to select the root filesystem image, select the default 'tisdk-rootfs-image' image.r;…�r<}r=(h*Xf and when prompted to select the root filesystem image, select the default 'tisdk-rootfs-image' image.h+j-ubeubeubhÅ)�r>}r?(h*XStep 1: Host Setupr@h+jh/h0h1hÉh3}rA(h8]rBUkeystone3-jailhouse-demo-step1rCah7]h5]h6]h;]rDhauh=Nh>hh?]rEhHXStep 1: Host SetuprF…�rG}rH(h*j@h+j>ubaubhÒ)�rI}rJ(h*XÊAs we will be running two instances of the Linux kernel, two terminals are required. Connect one terminal to the primary UART (e.g. /dev/ttyUSB0) and the other to the secondary UART (e.g. /dev/ttyUSB1).rKh+jh/h0h1hÖh3}rL(h5]h6]h7]h8]h;]uh=K8h>hh?]rMhHXÊAs we will be running two instances of the Linux kernel, two terminals are required. Connect one terminal to the primary UART (e.g. /dev/ttyUSB0) and the other to the secondary UART (e.g. /dev/ttyUSB1).rN…�rO}rP(h*jKh+jIubaubhÅ)�rQ}rR(h*XStep 2: Configure U-BootrSh+jh/h0h1hÉh3}rT(h8]rUUkeystone3-jailhouse-demo-step2rVah7]h5]h6]h;]rWhauh=Nh>hh?]rXhHXStep 2: Configure U-BootrY…�rZ}r[(h*jSh+jQubaubhÒ)�r\}r](h*X The default boot configuration does not reserve any resources for the Jailhouse hypervisor nor the inmates. However, the root filesystem contains a device tree overlay that will carve out these requirements. U-Boot must be configured to apply this device tree overlay.r^h+jh/h0h1hÖh3}r_(h5]h6]h7]h8]h;]uh=K?h>hh?]r`hHX The default boot configuration does not reserve any resources for the Jailhouse hypervisor nor the inmates. However, the root filesystem contains a device tree overlay that will carve out these requirements. U-Boot must be configured to apply this device tree overlay.ra…�rb}rc(h*j^h+j\ubaubhÒ)�rd}re(h*XKFor this step, we will be using the terminal connected to the primary UART.rfh+jh/h0h1hÖh3}rg(h5]h6]h7]h8]h;]uh=KDh>hh?]rhhHXKFor this step, we will be using the terminal connected to the primary UART.ri…�rj}rk(h*jfh+jdubaubj)�rl}rm(h*Uh+jh/h0h1jh3}rn(j XCONFIG_sdk in ('PLSDK')h8]h7]h5]h6]h;]uh=KFh>hh?]ro(hÒ)�rp}rq(h*X;Power up the board and stop the boot process within U-Boot.rrh+jlh/h0h1hÖh3}rs(h5]h6]h7]h8]h;]uh=KHh>hh?]rthHX;Power up the board and stop the boot process within U-Boot.ru…�rv}rw(h*jrh+jpubaubhÒ)�rx}ry(h*XÊWe will need to add the jailhouse device tree overlay to the list of overlays to apply. By default, U-Boot uses the "name_overlays" environment variable to provide the list of overlays. However, this variable is automatically set by U-Boot based on the board, and as such, anything saved to this variable will be overwritten upon the next boot. Therefore we will define a new variable "extra_overlays" and modify the "findfdt" function for it to take effect.rzh+jlh/h0h1hÖh3}r{(h5]h6]h7]h8]h;]uh=KJh>hh?]r|hHXÊWe will need to add the jailhouse device tree overlay to the list of overlays to apply. By default, U-Boot uses the "name_overlays" environment variable to provide the list of overlays. However, this variable is automatically set by U-Boot based on the board, and as such, anything saved to this variable will be overwritten upon the next boot. Therefore we will define a new variable "extra_overlays" and modify the "findfdt" function for it to take effect.r}…�r~}r(h*jzh+jxubaubhÒ)�r€}r�(h*XAIn U-Boot, type the following to enable use of this new variable.r‚h+jlh/h0h1hÖh3}rƒ(h5]h6]h7]h8]h;]uh=KQh>hh?]r„hHXAIn U-Boot, type the following to enable use of this new variable.r……�r†}r‡(h*j‚h+j€ubaubcdocutils.nodes literal_block rˆ)�r‰}rŠ(h*X=> printenv findfdt setenv name_fdt k3-am654-base-board.dtb;setenv fdtfile ${name_fdt};setenv overlay_files ${name_overlays} => setenv findfdt 'setenv name_fdt k3-am654-base-board.dtb;setenv fdtfile ${name_fdt};setenv overlay_files ${name_overlays} ${extra_overlays}' =>h+jlh/h0h1U literal_blockr‹h3}rŒ(U xml:spacer�UpreserverŽh8]h7]h5]h6]h;]uh=Kdh>hh?]r�hHX=> printenv findfdt setenv name_fdt k3-am654-base-board.dtb;setenv fdtfile ${name_fdt};setenv overlay_files ${name_overlays} => setenv findfdt 'setenv name_fdt k3-am654-base-board.dtb;setenv fdtfile ${name_fdt};setenv overlay_files ${name_overlays} ${extra_overlays}' =>r�…�r‘}r’(h*Uh+j‰ubaubhÒ)�r“}r”(h*XdNow add the jailhouse device tree overlay to the "extra_overlays" variable and save the environment.r•h+jlh/h0h1hÖh3}r–(h5]h6]h7]h8]h;]uh=K]h>hh?]r—hHXdNow add the jailhouse device tree overlay to the "extra_overlays" variable and save the environment.r˜…�r™}rš(h*j•h+j“ubaubjˆ)�r›}rœ(h*XK=> setenv extra_overlays k3-am654-base-board-jailhouse.dtbo => saveenv =>h+jlh/h0h1j‹h3}r�(j�jŽh8]h7]h5]h6]h;]uh=Kqh>hh?]ržhHXK=> setenv extra_overlays k3-am654-base-board-jailhouse.dtbo => saveenv =>rŸ…�r }r¡(h*Uh+j›ubaubeubj)�r¢}r£(h*Uh+jh/h0h1jh3}r¤(j XCONFIG_sdk in ('PSDKLA')h8]h7]h5]h6]h;]uh=Kih>hh?]r¥hÒ)�r¦}r§(h*X«We will need to add the jailhouse device tree overlay to the list of overlays to apply in u-boot.This is controlled by the environment variable "overlay_files". |__SDK_FULL_NAME__| comes with readymade uenv.txt where this variable is set to define the list of DTBO files for running the jailhouse demo. Refer to the section `How to Change dtb File `__ for more details on this.h+j¢h/h0h1hÖh3}r¨(h5]h6]h7]h8]h;]uh=Kkh>hh?]r©(hHX¡We will need to add the jailhouse device tree overlay to the list of overlays to apply in u-boot.This is controlled by the environment variable "overlay_files". rª…�r«}r¬(h*X¡We will need to add the jailhouse device tree overlay to the list of overlays to apply in u-boot.This is controlled by the environment variable "overlay_files". h+j¦ubhHXProcessor SDK Linuxr­…�r®}r¯(h*h²h/Nh=Nh>hh+j¦ubhHX� comes with readymade uenv.txt where this variable is set to define the list of DTBO files for running the jailhouse demo. Refer to the section r°…�r±}r²(h*X� comes with readymade uenv.txt where this variable is set to define the list of DTBO files for running the jailhouse demo. Refer to the section h+j¦ubh–)�r³}r´(h*XM`How to Change dtb File `__h3}rµ(UnameXHow to Change dtb FilehšX0How_to_Guides/Target/How_to_Change_dtb_File.htmlh8]h7]h5]h6]h;]uh+j¦h?]r¶hHXHow to Change dtb Filer·…�r¸}r¹(h*Uh+j³ubah1hŸubhHX for more details on this.rº…�r»}r¼(h*X for more details on this.h+j¦ubeubaubhÅ)�r½}r¾(h*XStep 3: Boot Linux and loginr¿h+jh/h0h1hÉh3}rÀ(h8]rÁUkeystone3-jailhouse-demo-step3rÂah7]h5]h6]h;]rÃhauh=Nh>hh?]rÄhHXStep 3: Boot Linux and loginrÅ…�rÆ}rÇ(h*j¿h+j½ubaubhÒ)�rÈ}rÉ(h*X,Now boot the kernel and log in to the shell:rÊh+jh/h0h1hÖh3}rË(h5]h6]h7]h8]h;]uh=Kuh>hh?]rÌhHX,Now boot the kernel and log in to the shell:rÍ…�rÎ}rÏ(h*jÊh+jÈubaubjˆ)�rÐ}rÑ(h*XŸ=> boot ... _____ _____ _ _ | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_ | | _| .'| . | . | | __| _| . | | | -_| _| _| |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_| |___| |___| Arago Project http://arago-project.org am65xx-evm ttyS2 Arago 2019.07 am65xx-evm ttyS2 am65xx-evm login: root root@am65xx-evm:~#h+jh/h0h1j‹h3}rÒ(j�jŽh8]h7]h5]h6]h;]uh=Kˆh>hh?]rÓhHXŸ=> boot ... _____ _____ _ _ | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_ | | _| .'| . | . | | __| _| . | | | -_| _| _| |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_| |___| |___| Arago Project http://arago-project.org am65xx-evm ttyS2 Arago 2019.07 am65xx-evm ttyS2 am65xx-evm login: root root@am65xx-evm:~#rÔ…�rÕ}rÖ(h*Uh+jÐubaubhÅ)�r×}rØ(h*X$Step 4: Run the Jailhouse linux-demorÙh+jh/h0h1hÉh3}rÚ(h8]rÛUkeystone3-jailhouse-demo-step4rÜah7]h5]h6]h;]rÝhauh=Nh>hh?]rÞhHX$Step 4: Run the Jailhouse linux-demorß…�rà}rá(h*jÙh+j×ubaubhÒ)�râ}rã(h*XÛThe jailhouse package contains a single script to run the Linux inmate demo. This script combines the typical jailhouse commands to simplify running the demo for the first time. This script performs the following steps.räh+jh/h0h1hÖh3}rå(h5]h6]h7]h8]h;]uh=KŽh>hh?]ræhHXÛThe jailhouse package contains a single script to run the Linux inmate demo. This script combines the typical jailhouse commands to simplify running the demo for the first time. This script performs the following steps.rç…�rè}ré(h*jäh+jâubaubcdocutils.nodes enumerated_list rê)�rë}rì(h*Uh+jh/h0h1Uenumerated_listríh3}rî(UsuffixrïU.h8]h7]h5]UprefixrðUh6]h;]UenumtyperñUarabicròuh=K’h>hh?]ró(cdocutils.nodes list_item rô)�rõ}rö(h*X_Enables jailhouse by loading and running the hypervisor firmware and configuring the root cell.h+jëh/h0h1U list_itemr÷h3}rø(h5]h6]h7]h8]h;]uh=Nh>hh?]rùhÒ)�rú}rû(h*X_Enables jailhouse by loading and running the hypervisor firmware and configuring the root cell.rüh+jõh/h0h1hÖh3}rý(h5]h6]h7]h8]h;]uh=K’h?]rþhHX_Enables jailhouse by loading and running the hypervisor firmware and configuring the root cell.rÿ…�r}r(h*jüh+júubaubaubjô)�r}r(h*X9Creates the inmate cell, providing it with its resources.rh+jëh/h0h1j÷h3}r(h5]h6]h7]h8]h;]uh=Nh>hh?]rhÒ)�r}r(h*jh+jh/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=K”h?]r hHX9Creates the inmate cell, providing it with its resources.r …�r }r (h*jh+jubaubaubjô)�r}r(h*XLoads the inmate into memory.rh+jëh/h0h1j÷h3}r(h5]h6]h7]h8]h;]uh=Nh>hh?]rhÒ)�r}r(h*jh+jh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=K•h?]rhHXLoads the inmate into memory.r…�r}r(h*jh+jubaubaubjô)�r}r(h*XStarts the inmate. h+jëh/h0h1j÷h3}r(h5]h6]h7]h8]h;]uh=Nh>hh?]rhÒ)�r}r(h*XStarts the inmate.r h+jh/h0h1hÖh3}r!(h5]h6]h7]h8]h;]uh=K–h?]r"hHXStarts the inmate.r#…�r$}r%(h*j h+jubaubaubeubhÒ)�r&}r'(h*X.To run the demo, run the linux-demo.sh script.r(h+jh/h0h1hÖh3}r)(h5]h6]h7]h8]h;]uh=K˜h>hh?]r*hHX.To run the demo, run the linux-demo.sh script.r+…�r,}r-(h*j(h+j&ubaubjˆ)�r.}r/(h*Xÿroot@am65xx-evm:~# /usr/share/jailhouse/linux-demo.sh Initializing Jailhouse hypervisor v0.10 (152-g6dce20f) on CPU 2 Code location: 0x0000ffffc0200800 Page pool usage after early setup: mem 39/991, remap 0/131072 Initializing processors: CPU 2... OK CPU 3... OK CPU 1... OK CPU 0... OK Initializing unit: irqchip Initializing unit: PVU IOMMU Initializing unit: ARM SMMU v3 Initializing unit: PCI Adding virtual PCI device 00:00.0 to cell "k3-am654-idk" Initializing unit: regmap Page pool usage after late setup: mem 71/991, remap 144/131072 Activating hypervisor [ 63.162406] jailhouse: CONFIG_OF_OVERLAY disabled [ 63.167261] jailhouse: failed to add virtual host controller [ 63.172978] The Jailhouse is opening. [ 63.251354] CPU2: shutdown [ 63.254071] psci: CPU2 killed. [ 63.303312] CPU3: shutdown [ 63.306033] psci: CPU3 killed. Adding virtual PCI device 00:00.0 to cell "k3-am654-idk-linux-demo" Shared memory connection established: "k3-am654-idk-linux-demo" <--> "k3-am654-idk" Created cell "k3-am654-idk-linux-demo" Page pool usage after cell creation: mem 93/991, remap 144/131072 [ 63.355266] Created Jailhouse cell "k3-am654-idk-linux-demo" Cell "k3-am654-idk-linux-demo" can be loaded Started cell "k3-am654-idk-linux-demo" root@am65xx-evm:~#h+jh/h0h1j‹h3}r0(j�jŽh8]h7]h5]h6]h;]uh=K«h>hh?]r1hHXÿroot@am65xx-evm:~# /usr/share/jailhouse/linux-demo.sh Initializing Jailhouse hypervisor v0.10 (152-g6dce20f) on CPU 2 Code location: 0x0000ffffc0200800 Page pool usage after early setup: mem 39/991, remap 0/131072 Initializing processors: CPU 2... OK CPU 3... OK CPU 1... OK CPU 0... OK Initializing unit: irqchip Initializing unit: PVU IOMMU Initializing unit: ARM SMMU v3 Initializing unit: PCI Adding virtual PCI device 00:00.0 to cell "k3-am654-idk" Initializing unit: regmap Page pool usage after late setup: mem 71/991, remap 144/131072 Activating hypervisor [ 63.162406] jailhouse: CONFIG_OF_OVERLAY disabled [ 63.167261] jailhouse: failed to add virtual host controller [ 63.172978] The Jailhouse is opening. [ 63.251354] CPU2: shutdown [ 63.254071] psci: CPU2 killed. [ 63.303312] CPU3: shutdown [ 63.306033] psci: CPU3 killed. Adding virtual PCI device 00:00.0 to cell "k3-am654-idk-linux-demo" Shared memory connection established: "k3-am654-idk-linux-demo" <--> "k3-am654-idk" Created cell "k3-am654-idk-linux-demo" Page pool usage after cell creation: mem 93/991, remap 144/131072 [ 63.355266] Created Jailhouse cell "k3-am654-idk-linux-demo" Cell "k3-am654-idk-linux-demo" can be loaded Started cell "k3-am654-idk-linux-demo" root@am65xx-evm:~#r2…�r3}r4(h*Uh+j.ubaubhÒ)�r5}r6(h*X­Now, on the secondary terminal, verify that the inmate kernel has booted with ramfs. Also note that the /dev/ttySX number used for root cell and inmate may or may not match.r7h+jh/h0h1hÖh3}r8(h5]h6]h7]h8]h;]uh=K¿h>hh?]r9hHX­Now, on the secondary terminal, verify that the inmate kernel has booted with ramfs. Also note that the /dev/ttySX number used for root cell and inmate may or may not match.r:…�r;}r<(h*j7h+j5ubaubjˆ)�r=}r>(h*X£ _____ _____ _ _ | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_ | | _| .'| . | . | | __| _| . | | | -_| _| _| |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_| |___| |___| Arago Project http://arago-project.org am65xx-evm /dev/ttyS1 Arago 2019.07 am65xx-evm /dev/ttyS1 am65xx-evm login: root root@am65xx-evm:~# mount rootfs on / type rootfs (rw,size=230400k,nr_inodes=3600) proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) debugfs on /sys/kernel/debug type debugfs (rw,relatime) configfs on /sys/kernel/config type configfs (rw,relatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=230400k,nr_inodes=3600,mode=755 ) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /var/volatile type tmpfs (rw,relatime,size=51200k) devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)h+jh/h0h1j‹h3}r?(j�jŽh8]h7]h5]h6]h;]uh=KÓh>hh?]r@hHX£ _____ _____ _ _ | _ |___ ___ ___ ___ | _ |___ ___ |_|___ ___| |_ | | _| .'| . | . | | __| _| . | | | -_| _| _| |__|__|_| |__,|_ |___| |__| |_| |___|_| |___|___|_| |___| |___| Arago Project http://arago-project.org am65xx-evm /dev/ttyS1 Arago 2019.07 am65xx-evm /dev/ttyS1 am65xx-evm login: root root@am65xx-evm:~# mount rootfs on / type rootfs (rw,size=230400k,nr_inodes=3600) proc on /proc type proc (rw,relatime) sysfs on /sys type sysfs (rw,relatime) debugfs on /sys/kernel/debug type debugfs (rw,relatime) configfs on /sys/kernel/config type configfs (rw,relatime) devtmpfs on /dev type devtmpfs (rw,relatime,size=230400k,nr_inodes=3600,mode=755 ) tmpfs on /run type tmpfs (rw,nosuid,nodev,mode=755) tmpfs on /var/volatile type tmpfs (rw,relatime,size=51200k) devpts on /dev/pts type devpts (rw,relatime,gid=5,mode=620,ptmxmode=000)rA…�rB}rC(h*Uh+j=ubaubj)�rD}rE(h*Uh+jh/h0h1jh3}rF(j XCONFIG_sdk in ('PLSDK')h8]h7]h5]h6]h;]uh=KÜh>hh?]rG(hÅ)�rH}rI(h*XAM572x Jailhouse DemorJh+jDh/h0h1hÉh3}rK(h8]rLUam572x-jailhouse-demorMah7]h5]h6]h;]rNh auh=Nh>hh?]rOhHXAM572x Jailhouse DemorP…�rQ}rR(h*jJh+jHubaubhÒ)�rS}rT(h*XßProcessor Linux SDK delivers Jailhouse’s prebuilt binaries. You may try it immediately after installation. This section assumes that you have already installed PLSDK, and have Linux booted on the AM572X-EVM or AM572x-IDK.rUh+jDh/h0h1hÖh3}rV(h5]h6]h7]h8]h;]uh=Káh>hh?]rWhHXßProcessor Linux SDK delivers Jailhouse’s prebuilt binaries. You may try it immediately after installation. This section assumes that you have already installed PLSDK, and have Linux booted on the AM572X-EVM or AM572x-IDK.rX…�rY}rZ(h*jUh+jSubaubhÒ)�r[}r\(h*X'**NOTE:** *to use Jailhouse hypervisor*h+jDh/h0h1hÖh3}r](h5]h6]h7]h8]h;]uh=Kæh>hh?]r^(cdocutils.nodes strong r_)�r`}ra(h*X **NOTE:**h3}rb(h5]h6]h7]h8]h;]uh+j[h?]rchHXNOTE:rd…�re}rf(h*Uh+j`ubah1UstrongrgubhHX …�rh}ri(h*X h+j[ubcdocutils.nodes emphasis rj)�rk}rl(h*X*to use Jailhouse hypervisor*h3}rm(h5]h6]h7]h8]h;]uh+j[h?]rnhHXto use Jailhouse hypervisorro…�rp}rq(h*Uh+jkubah1Uemphasisrrubeubjê)�rs}rt(h*Uh+jDh/h0h1jíh3}ru(jïU)h8]h7]h5]jðUh6]h;]jñjòuh=Kèh>hh?]rvjô)�rw}rx(h*XFset u-boot environment variable optargs*: setenv optargs vmalloc=512M h+jsh/h0h1j÷h3}ry(h5]h6]h7]h8]h;]uh=Nh>hh?]rzhÒ)�r{}r|(h*XEset u-boot environment variable optargs*: setenv optargs vmalloc=512Mr}h+jwh/h0h1hÖh3}r~(h5]h6]h7]h8]h;]uh=Kèh?]rhHXEset u-boot environment variable optargs*: setenv optargs vmalloc=512Mr€…�r�}r‚(h*j}h+j{ubaubaubaubhÒ)�rƒ}r„(h*Xg2) use \ **am572x-evm-jailhouse.dtb** for AM572x-EVM or \ **am572x-idk-jailhouse.dtb** for AM572x-IDKh+jDh/h0h1hÖh3}r…(h5]h6]h7]h8]h;]uh=Kêh>hh?]r†(hHX2) use r‡…�rˆ}r‰(h*X 2) use \ h+jƒubj_)�rŠ}r‹(h*X**am572x-evm-jailhouse.dtb**h3}rŒ(h5]h6]h7]h8]h;]uh+jƒh?]r�hHXam572x-evm-jailhouse.dtbrŽ…�r�}r�(h*Uh+jŠubah1jgubhHX for AM572x-EVM or r‘…�r’}r“(h*X for AM572x-EVM or \ h+jƒubj_)�r”}r•(h*X**am572x-idk-jailhouse.dtb**h3}r–(h5]h6]h7]h8]h;]uh+jƒh?]r—hHXam572x-idk-jailhouse.dtbr˜…�r™}rš(h*Uh+j”ubah1jgubhHX for AM572x-IDKr›…�rœ}r�(h*X for AM572x-IDKh+jƒubeubhÅ)�rž}rŸ(h*XPre-built componentsr h+jDh/h0h1hÉh3}r¡(h8]r¢Upre-built-componentsr£ah7]h5]h6]h;]r¤h!auh=Nh>hh?]r¥hHXPre-built componentsr¦…�r§}r¨(h*j h+jžubaubhÒ)�r©}rª(h*X�As it was mentioned in the previous section, Jailhouse consists of following components, which are prebuilt and copied to the target filesystem:r«h+jDh/h0h1hÖh3}r¬(h5]h6]h7]h8]h;]uh=Kðh>hh?]r­hHX�As it was mentioned in the previous section, Jailhouse consists of following components, which are prebuilt and copied to the target filesystem:r®…�r¯}r°(h*j«h+j©ubaubjê)�r±}r²(h*Uh+jDh/h0h1jíh3}r³(jïU.h8]h7]h5]jðUh6]h;]jñjòuh=Kôh>hh?]r´(jô)�rµ}r¶(h*XZjailhouse.ko kernel module located at /lib/modules/4.19.38-/extra/driver directory;h+j±h/h0h1j÷h3}r·(h5]h6]h7]h8]h;]uh=Nh>hh?]r¸hÒ)�r¹}rº(h*XZjailhouse.ko kernel module located at /lib/modules/4.19.38-/extra/driver directory;r»h+jµh/h0h1hÖh3}r¼(h5]h6]h7]h8]h;]uh=Kôh?]r½hHXZjailhouse.ko kernel module located at /lib/modules/4.19.38-/extra/driver directory;r¾…�r¿}rÀ(h*j»h+j¹ubaubaubjô)�rÁ}rÂ(h*XEjailhouse.bin - hypervisor itself located at /lib/firmware directory;rÃh+j±h/h0h1j÷h3}rÄ(h5]h6]h7]h8]h;]uh=Nh>hh?]rÅhÒ)�rÆ}rÇ(h*jÃh+jÁh/h0h1hÖh3}rÈ(h5]h6]h7]h8]h;]uh=Köh?]rÉhHXEjailhouse.bin - hypervisor itself located at /lib/firmware directory;rÊ…�rË}rÌ(h*jÃh+jÆubaubaubjô)�rÍ}rÎ(h*XbJailhouse management tools are located at /usr/local/libexec/jailhouse and /usr/sbin directories; h+j±h/h0h1j÷h3}rÏ(h5]h6]h7]h8]h;]uh=Nh>hh?]rÐhÒ)�rÑ}rÒ(h*XaJailhouse management tools are located at /usr/local/libexec/jailhouse and /usr/sbin directories;rÓh+jÍh/h0h1hÖh3}rÔ(h5]h6]h7]h8]h;]uh=K÷h?]rÕhHXaJailhouse management tools are located at /usr/local/libexec/jailhouse and /usr/sbin directories;rÖ…�r×}rØ(h*jÓh+jÑubaubaubeubhÒ)�rÙ}rÚ(h*XÇIn order to create the root-cell and an inmate cell we need to provide cell configuration files. Those configuration files and example binaries are located at /usr/share/jailhouse/examples directory:rÛh+jDh/h0h1hÖh3}rÜ(h5]h6]h7]h8]h;]uh=Kúh>hh?]rÝhHXÇIn order to create the root-cell and an inmate cell we need to provide cell configuration files. Those configuration files and example binaries are located at /usr/share/jailhouse/examples directory:rÞ…�rß}rà(h*jÛh+jÙubaubjˆ)�rá}râ(h*Xároot@am57xx-evm:/usr/share/jailhouse/examples# ls -1 am572x-rtos-icss.cell am572x-rtos-pruss.cell am57xx-evm-ti-app.cell am57xx-evm.cell am57xx-pdk-leddiag.cell icss_emac.bin led_test.bin linux-loader.bin pruss.bin ti-app.binh+jDh/h0h1j‹h3}rã(j�jŽh8]h7]h5]h6]h;]uh=Mh>hh?]rähHXároot@am57xx-evm:/usr/share/jailhouse/examples# ls -1 am572x-rtos-icss.cell am572x-rtos-pruss.cell am57xx-evm-ti-app.cell am57xx-evm.cell am57xx-pdk-leddiag.cell icss_emac.bin led_test.bin linux-loader.bin pruss.bin ti-app.binrå…�ræ}rç(h*Uh+jáubaubhÒ)�rè}ré(h*Xwhererêh+jDh/h0h1hÖh3}rë(h5]h6]h7]h8]h;]uh=M h>hh?]rìhHXwhererí…�rî}rï(h*jêh+jèubaubcdocutils.nodes bullet_list rð)�rñ}rò(h*Uh+jDh/h0h1U bullet_listróh3}rô(UbulletrõX-h8]h7]h5]h6]h;]uh=Mh>hh?]rö(jô)�r÷}rø(h*X3**am57xx-evm.cell** - root cell configuration file;rùh+jñh/h0h1j÷h3}rú(h5]h6]h7]h8]h;]uh=Nh>hh?]rûhÒ)�rü}rý(h*jùh+j÷h/h0h1hÖh3}rþ(h5]h6]h7]h8]h;]uh=Mh?]rÿ(j_)�r}r(h*X**am57xx-evm.cell**h3}r(h5]h6]h7]h8]h;]uh+jüh?]rhHXam57xx-evm.cellr…�r}r(h*Uh+jubah1jgubhHX - root cell configuration file;r…�r}r (h*X - root cell configuration file;h+jüubeubaubjô)�r }r (h*X]**ti-app.bin** and **am57xx-evm-ti-app.cell** - bare metal inmate and its cell configuration;h+jñh/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r}r(h*X]**ti-app.bin** and **am57xx-evm-ti-app.cell** - bare metal inmate and its cell configuration;h+j h/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=Mh?]r(j_)�r}r(h*X**ti-app.bin**h3}r(h5]h6]h7]h8]h;]uh+jh?]rhHX ti-app.binr…�r}r(h*Uh+jubah1jgubhHX and r…�r}r(h*X and h+jubj_)�r}r(h*X**am57xx-evm-ti-app.cell**h3}r(h5]h6]h7]h8]h;]uh+jh?]rhHXam57xx-evm-ti-app.cellr …�r!}r"(h*Uh+jubah1jgubhHX0 - bare metal inmate and its cell configuration;r#…�r$}r%(h*X0 - bare metal inmate and its cell configuration;h+jubeubaubjô)�r&}r'(h*Xš**led\_test.bin** and **am57xx-pdk-leddiag.cell** - PDK led\_test inmate example and its cell configuration (led\_test.bin can be run on AM572x-EVM only);h+jñh/h0h1j÷h3}r((h5]h6]h7]h8]h;]uh=Nh>hh?]r)hÒ)�r*}r+(h*Xš**led\_test.bin** and **am57xx-pdk-leddiag.cell** - PDK led\_test inmate example and its cell configuration (led\_test.bin can be run on AM572x-EVM only);h+j&h/h0h1hÖh3}r,(h5]h6]h7]h8]h;]uh=Mh?]r-(j_)�r.}r/(h*X**led\_test.bin**h3}r0(h5]h6]h7]h8]h;]uh+j*h?]r1hHX led_test.binr2…�r3}r4(h*Uh+j.ubah1jgubhHX and r5…�r6}r7(h*X and h+j*ubj_)�r8}r9(h*X**am57xx-pdk-leddiag.cell**h3}r:(h5]h6]h7]h8]h;]uh+j*h?]r;hHXam57xx-pdk-leddiag.cellr<…�r=}r>(h*Uh+j8ubah1jgubhHXg - PDK led_test inmate example and its cell configuration (led_test.bin can be run on AM572x-EVM only);r?…�r@}rA(h*Xi - PDK led\_test inmate example and its cell configuration (led\_test.bin can be run on AM572x-EVM only);h+j*ubeubaubjô)�rB}rC(h*X’**pruss.bin** and **am572x-rtos-pruss.cell** - TI-RTOS PRUSS inmate examples and its cell configuration (pruss.bin can be run on AM572x-IDK only);h+jñh/h0h1j÷h3}rD(h5]h6]h7]h8]h;]uh=Nh>hh?]rEhÒ)�rF}rG(h*X’**pruss.bin** and **am572x-rtos-pruss.cell** - TI-RTOS PRUSS inmate examples and its cell configuration (pruss.bin can be run on AM572x-IDK only);h+jBh/h0h1hÖh3}rH(h5]h6]h7]h8]h;]uh=Mh?]rI(j_)�rJ}rK(h*X **pruss.bin**h3}rL(h5]h6]h7]h8]h;]uh+jFh?]rMhHX pruss.binrN…�rO}rP(h*Uh+jJubah1jgubhHX and rQ…�rR}rS(h*X and h+jFubj_)�rT}rU(h*X**am572x-rtos-pruss.cell**h3}rV(h5]h6]h7]h8]h;]uh+jFh?]rWhHXam572x-rtos-pruss.cellrX…�rY}rZ(h*Uh+jTubah1jgubhHXf - TI-RTOS PRUSS inmate examples and its cell configuration (pruss.bin can be run on AM572x-IDK only);r[…�r\}r](h*Xf - TI-RTOS PRUSS inmate examples and its cell configuration (pruss.bin can be run on AM572x-IDK only);h+jFubeubaubjô)�r^}r_(h*Xž**icss\_emac.bin** and **am572x-rtos-icss.cell** - TI-RTOS ICSS-EMAC inmate example and its cell configuration (icss\_emac.bin can be run on AM572x-IDK only);h+jñh/h0h1j÷h3}r`(h5]h6]h7]h8]h;]uh=Nh>hh?]rahÒ)�rb}rc(h*Xž**icss\_emac.bin** and **am572x-rtos-icss.cell** - TI-RTOS ICSS-EMAC inmate example and its cell configuration (icss\_emac.bin can be run on AM572x-IDK only);h+j^h/h0h1hÖh3}rd(h5]h6]h7]h8]h;]uh=Mh?]re(j_)�rf}rg(h*X**icss\_emac.bin**h3}rh(h5]h6]h7]h8]h;]uh+jbh?]rihHX icss_emac.binrj…�rk}rl(h*Uh+jfubah1jgubhHX and rm…�rn}ro(h*X and h+jbubj_)�rp}rq(h*X**am572x-rtos-icss.cell**h3}rr(h5]h6]h7]h8]h;]uh+jbh?]rshHXam572x-rtos-icss.cellrt…�ru}rv(h*Uh+jpubah1jgubhHXm - TI-RTOS ICSS-EMAC inmate example and its cell configuration (icss_emac.bin can be run on AM572x-IDK only);rw…�rx}ry(h*Xn - TI-RTOS ICSS-EMAC inmate example and its cell configuration (icss\_emac.bin can be run on AM572x-IDK only);h+jbubeubaubjô)�rz}r{(h*XÀ**linux-loader.bin** - loader required to run inmates, which start address is not 0x0. Not required at current and above versions of Jailhouse. Cell configuration can define starting address. h+jñh/h0h1j÷h3}r|(h5]h6]h7]h8]h;]uh=Nh>hh?]r}hÒ)�r~}r(h*X¿**linux-loader.bin** - loader required to run inmates, which start address is not 0x0. Not required at current and above versions of Jailhouse. Cell configuration can define starting address.h+jzh/h0h1hÖh3}r€(h5]h6]h7]h8]h;]uh=Mh?]r�(j_)�r‚}rƒ(h*X**linux-loader.bin**h3}r„(h5]h6]h7]h8]h;]uh+j~h?]r…hHXlinux-loader.binr†…�r‡}rˆ(h*Uh+j‚ubah1jgubhHX« - loader required to run inmates, which start address is not 0x0. Not required at current and above versions of Jailhouse. Cell configuration can define starting address.r‰…�rŠ}r‹(h*X« - loader required to run inmates, which start address is not 0x0. Not required at current and above versions of Jailhouse. Cell configuration can define starting address.h+j~ubeubaubeubhÅ)�rŒ}r�(h*XRunning the Demo on AM572x-EVMrŽh+jDh/h0h1hÉh3}r�(h8]r�Urunning-the-demo-on-am572x-evmr‘ah7]h5]h6]h;]r’hauh=Nh>hh?]r“hHXRunning the Demo on AM572x-EVMr”…�r•}r–(h*jŽh+jŒubaubhÒ)�r—}r˜(h*Xk**NOTE** Starting from this version of Jailhouse Inmate library stratup code enables MMU. The library initializes only GIC controller and debug UART memory. Memory for all other regions has to be initialized by inmate itself. At this release the ti-app is not updated. All RTOS examples don't use the inmate library and initilizes their MMU regions by themselves.h+jDh/h0h1hÖh3}r™(h5]h6]h7]h8]h;]uh=M!h>hh?]rš(j_)�r›}rœ(h*X**NOTE**h3}r�(h5]h6]h7]h8]h;]uh+j—h?]ržhHXNOTErŸ…�r }r¡(h*Uh+j›ubah1jgubhHXc Starting from this version of Jailhouse Inmate library stratup code enables MMU. The library initializes only GIC controller and debug UART memory. Memory for all other regions has to be initialized by inmate itself. At this release the ti-app is not updated. All RTOS examples don't use the inmate library and initilizes their MMU regions by themselves.r¢…�r£}r¤(h*Xc Starting from this version of Jailhouse Inmate library stratup code enables MMU. The library initializes only GIC controller and debug UART memory. Memory for all other regions has to be initialized by inmate itself. At this release the ti-app is not updated. All RTOS examples don't use the inmate library and initilizes their MMU regions by themselves.h+j—ubeubhÅ)�r¥}r¦(h*XRunning bare-metal ti-app.binr§h+jDh/h0h1hÉh3}r¨(h8]r©Urunning-bare-metal-ti-app-binrªah7]h5]h6]h;]r«hauh=Nh>hh?]r¬hHXRunning bare-metal ti-app.binr­…�r®}r¯(h*j§h+j¥ubaubhÒ)�r°}r±(h*X#Here are the steps to run the demo:r²h+jDh/h0h1hÖh3}r³(h5]h6]h7]h8]h;]uh=M*h>hh?]r´hHX#Here are the steps to run the demo:rµ…�r¶}r·(h*j²h+j°ubaubjð)�r¸}r¹(h*Uh+jDh/h0h1jóh3}rº(jõX-h8]h7]h5]h6]h;]uh=M,h>hh?]r»(jô)�r¼}r½(h*XBoot the Linuxr¾h+j¸h/h0h1j÷h3}r¿(h5]h6]h7]h8]h;]uh=Nh>hh?]rÀhÒ)�rÁ}rÂ(h*j¾h+j¼h/h0h1hÖh3}rÃ(h5]h6]h7]h8]h;]uh=M,h?]rÄhHXBoot the LinuxrÅ…�rÆ}rÇ(h*j¾h+jÁubaubaubjô)�rÈ}rÉ(h*X"Insert jailhouse.ko kernel module h+j¸h/h0h1j÷h3}rÊ(h5]h6]h7]h8]h;]uh=Nh>hh?]rËhÒ)�rÌ}rÍ(h*X!Insert jailhouse.ko kernel modulerÎh+jÈh/h0h1hÖh3}rÏ(h5]h6]h7]h8]h;]uh=M-h?]rÐhHX!Insert jailhouse.ko kernel modulerÑ…�rÒ}rÓ(h*jÎh+jÌubaubaubeubjˆ)�rÔ}rÕ(h*X%root@am57xx-evm:~# modprobe jailhouseh+jDh/h0h1j‹h3}rÖ(j�jŽh8]h7]h5]h6]h;]uh=M@h>hh?]r×hHX%root@am57xx-evm:~# modprobe jailhouserØ…�rÙ}rÚ(h*Uh+jÔubaubjð)�rÛ}rÜ(h*Uh+jDh/h0h1jóh3}rÝ(jõX-h8]h7]h5]h6]h;]uh=M3h>hh?]rÞjô)�rß}rà(h*XIEnable the hypervisor using am57xx-evm.cell root-cell configuration file h+jÛh/h0h1j÷h3}rá(h5]h6]h7]h8]h;]uh=Nh>hh?]râhÒ)�rã}rä(h*XHEnable the hypervisor using am57xx-evm.cell root-cell configuration fileråh+jßh/h0h1hÖh3}ræ(h5]h6]h7]h8]h;]uh=M3h?]rçhHXHEnable the hypervisor using am57xx-evm.cell root-cell configuration filerè…�ré}rê(h*jåh+jãubaubaubaubjˆ)�rë}rì(h*XŒroot@am57xx-evm:~# jailhouse enable /usr/share/jailhouse/examples/am57xx-evm.cell Initializing Jailhouse hypervisor v0.6 on CPU 1 Code location: 0xf0000030 Page pool usage after early setup: mem 30/4073, remap 32/131072 Initializing processors: CPU 1... OK CPU 0... OK Page pool usage after late setup: mem 39/4073, remap 38/131072 Activating hypervisor [ 4155.880217] The Jailhouse is opening.h+jDh/h0h1j‹h3}rí(j�jŽh8]h7]h5]h6]h;]uh=MGh>hh?]rîhHXŒroot@am57xx-evm:~# jailhouse enable /usr/share/jailhouse/examples/am57xx-evm.cell Initializing Jailhouse hypervisor v0.6 on CPU 1 Code location: 0xf0000030 Page pool usage after early setup: mem 30/4073, remap 32/131072 Initializing processors: CPU 1... OK CPU 0... OK Page pool usage after late setup: mem 39/4073, remap 38/131072 Activating hypervisor [ 4155.880217] The Jailhouse is opening.rï…�rð}rñ(h*Uh+jëubaubjð)�rò}ró(h*Uh+jDh/h0h1jóh3}rô(jõX-h8]h7]h5]h6]h;]uh=MCh>hh?]rõjô)�rö}r÷(h*XCreate a cell for the inmate h+jòh/h0h1j÷h3}rø(h5]h6]h7]h8]h;]uh=Nh>hh?]rùhÒ)�rú}rû(h*XCreate a cell for the inmaterüh+jöh/h0h1hÖh3}rý(h5]h6]h7]h8]h;]uh=MCh?]rþhHXCreate a cell for the inmaterÿ…�r}r(h*jüh+júubaubaubaubjˆ)�r}r(h*XProot@am57xx-evm:~# jailhouse cell create /usr/share/jailhouse/examples/am57xx-evm-ti-app.cell [ 5270.449687] CPU1: shutdown [ 5270.453221] NOHZ: local_softirq_pending 20 Created cell "AM57XX-EVM-timer8-demo" Page pool usage after cell creation: mem 51/4073, remap 38/131072 [ 5270.487970] Created Jailhouse cell "AM57XX-EVM-timer8-demo"h+jDh/h0h1j‹h3}r(j�jŽh8]h7]h5]h6]h;]uh=MVh>hh?]rhHXProot@am57xx-evm:~# jailhouse cell create /usr/share/jailhouse/examples/am57xx-evm-ti-app.cell [ 5270.449687] CPU1: shutdown [ 5270.453221] NOHZ: local_softirq_pending 20 Created cell "AM57XX-EVM-timer8-demo" Page pool usage after cell creation: mem 51/4073, remap 38/131072 [ 5270.487970] Created Jailhouse cell "AM57XX-EVM-timer8-demo"r…�r}r(h*Uh+jubaubjð)�r }r (h*Uh+jDh/h0h1jóh3}r (jõX-h8]h7]h5]h6]h;]uh=MNh>hh?]r jô)�r }r(h*X"Load the ti-app.bin inmate binary h+j h/h0h1j÷h3}r(h5]h6]h7]h8]h;]uh=Nh>hh?]rhÒ)�r}r(h*X!Load the ti-app.bin inmate binaryrh+j h/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=MNh?]rhHX!Load the ti-app.bin inmate binaryr…�r}r(h*jh+jubaubaubaubjˆ)�r}r(h*X}root@am57xx-evm:~# jailhouse cell load 1 /usr/share/jailhouse/examples/ti-app.bin Cell "AM57XX-EVM-timer8-demo" can be loadedh+jDh/h0h1j‹h3}r(j�jŽh8]h7]h5]h6]h;]uh=Mah>hh?]rhHX}root@am57xx-evm:~# jailhouse cell load 1 /usr/share/jailhouse/examples/ti-app.bin Cell "AM57XX-EVM-timer8-demo" can be loadedr…�r}r(h*Uh+jubaubjð)�r }r!(h*Uh+jDh/h0h1jóh3}r"(jõX-h8]h7]h5]h6]h;]uh=MUh>hh?]r#jô)�r$}r%(h*XStart the binary h+j h/h0h1j÷h3}r&(h5]h6]h7]h8]h;]uh=Nh>hh?]r'hÒ)�r(}r)(h*XStart the binaryr*h+j$h/h0h1hÖh3}r+(h5]h6]h7]h8]h;]uh=MUh?]r,hHXStart the binaryr-…�r.}r/(h*j*h+j(ubaubaubaubjˆ)�r0}r1(h*X‡root@am57xx-evm:~# jailhouse cell start 1 Hey, I'm working !!!!!!!!!!! timer id 4fff2b01 timer value fffffc17; irq status 00000002; raw 00000002 min 00000017; avr 0000001b; max 000002c1 min 00000017; avr 0000001b; max 000000f3 min 00000017; avr 0000001b; max 000002c8 min 00000017; avr 0000001b; max 00000148 min 00000017; avr 0000001b; max 000002d4 min 00000017; avr 0000001b; max 00000158h+jDh/h0h1j‹h3}r2(j�jŽh8]h7]h5]h6]h;]uh=Mhh>hh?]r3hHX‡root@am57xx-evm:~# jailhouse cell start 1 Hey, I'm working !!!!!!!!!!! timer id 4fff2b01 timer value fffffc17; irq status 00000002; raw 00000002 min 00000017; avr 0000001b; max 000002c1 min 00000017; avr 0000001b; max 000000f3 min 00000017; avr 0000001b; max 000002c8 min 00000017; avr 0000001b; max 00000148 min 00000017; avr 0000001b; max 000002d4 min 00000017; avr 0000001b; max 00000158r4…�r5}r6(h*Uh+j0ubaubhÒ)�r7}r8(h*X’**NOTE**: because all of the components: root-cell, hypervisor and demo inmate use the same UART, there is a conflict. Once the inmate started to use the UART, Linux stops getting any input from console. To workaround this and continue to control the hypervisor, you may telnet to the EVM and issue all commands from the telnet shell. Hypervisor still will use Linux console to print it sdebug messagesh+jDh/h0h1hÖh3}r9(h5]h6]h7]h8]h;]uh=Mdh>hh?]r:(j_)�r;}r<(h*X**NOTE**h3}r=(h5]h6]h7]h8]h;]uh+j7h?]r>hHXNOTEr?…�r@}rA(h*Uh+j;ubah1jgubhHXŠ: because all of the components: root-cell, hypervisor and demo inmate use the same UART, there is a conflict. Once the inmate started to use the UART, Linux stops getting any input from console. To workaround this and continue to control the hypervisor, you may telnet to the EVM and issue all commands from the telnet shell. Hypervisor still will use Linux console to print it sdebug messagesrB…�rC}rD(h*XŠ: because all of the components: root-cell, hypervisor and demo inmate use the same UART, there is a conflict. Once the inmate started to use the UART, Linux stops getting any input from console. To workaround this and continue to control the hypervisor, you may telnet to the EVM and issue all commands from the telnet shell. Hypervisor still will use Linux console to print it sdebug messagesh+j7ubeubjð)�rE}rF(h*Uh+jDh/h0h1jóh3}rG(jõX-h8]h7]h5]h6]h;]uh=Mkh>hh?]rHjô)�rI}rJ(h*XStop the binary h+jEh/h0h1j÷h3}rK(h5]h6]h7]h8]h;]uh=Nh>hh?]rLhÒ)�rM}rN(h*XStop the binaryrOh+jIh/h0h1hÖh3}rP(h5]h6]h7]h8]h;]uh=Mkh?]rQhHXStop the binaryrR…�rS}rT(h*jOh+jMubaubaubaubjˆ)�rU}rV(h*X,root@am57xx-evm:~# jailhouse cell shutdown 1h+jDh/h0h1j‹h3}rW(j�jŽh8]h7]h5]h6]h;]uh=M~h>hh?]rXhHX,root@am57xx-evm:~# jailhouse cell shutdown 1rY…�rZ}r[(h*Uh+jUubaubhÒ)�r\}r](h*Xc**NOTE**: You may restore Linux console by killing the "/bin/login --" process from telnet session.h+jDh/h0h1hÖh3}r^(h5]h6]h7]h8]h;]uh=Mqh>hh?]r_(j_)�r`}ra(h*X**NOTE**h3}rb(h5]h6]h7]h8]h;]uh+j\h?]rchHXNOTErd…�re}rf(h*Uh+j`ubah1jgubhHX[: You may restore Linux console by killing the "/bin/login --" process from telnet session.rg…�rh}ri(h*X[: You may restore Linux console by killing the "/bin/login --" process from telnet session.h+j\ubeubjð)�rj}rk(h*Uh+jDh/h0h1jóh3}rl(jõX-h8]h7]h5]h6]h;]uh=Mth>hh?]rmjô)�rn}ro(h*X destroy cell h+jjh/h0h1j÷h3}rp(h5]h6]h7]h8]h;]uh=Nh>hh?]rqhÒ)�rr}rs(h*X destroy cellrth+jnh/h0h1hÖh3}ru(h5]h6]h7]h8]h;]uh=Mth?]rvhHX destroy cellrw…�rx}ry(h*jth+jrubaubaubaubjˆ)�rz}r{(h*X×root@am57xx-evm:~# jailhouse cell destroy 1 Closing cell "AM57XX-EVM-timer8-demo" Page pool usage after cell destruction: mem 39/4073, remap 38/131072 [ 6201.111168] Destroyed Jailhouse cell "AM57XX-EVM-timer8-demo"h+jDh/h0h1j‹h3}r|(j�jŽh8]h7]h5]h6]h;]uh=M‡h>hh?]r}hHX×root@am57xx-evm:~# jailhouse cell destroy 1 Closing cell "AM57XX-EVM-timer8-demo" Page pool usage after cell destruction: mem 39/4073, remap 38/131072 [ 6201.111168] Destroyed Jailhouse cell "AM57XX-EVM-timer8-demo"r~…�r}r€(h*Uh+jzubaubjð)�r�}r‚(h*Uh+jDh/h0h1jóh3}rƒ(jõX-h8]h7]h5]h6]h;]uh=M}h>hh?]r„jô)�r…}r†(h*Xdisable hypervisor h+j�h/h0h1j÷h3}r‡(h5]h6]h7]h8]h;]uh=Nh>hh?]rˆhÒ)�r‰}rŠ(h*Xdisable hypervisorr‹h+j…h/h0h1hÖh3}rŒ(h5]h6]h7]h8]h;]uh=M}h?]r�hHXdisable hypervisorrŽ…�r�}r�(h*j‹h+j‰ubaubaubaubjˆ)�r‘}r’(h*Xˆroot@am57xx-evm:~# jailhouse disable Shutting down hypervisor Releasing CPU 0 Releasing CPU 1 [ 6248.149728] The Jailhouse was closed.h+jDh/h0h1j‹h3}r“(j�jŽh8]h7]h5]h6]h;]uh=M�h>hh?]r”hHXˆroot@am57xx-evm:~# jailhouse disable Shutting down hypervisor Releasing CPU 0 Releasing CPU 1 [ 6248.149728] The Jailhouse was closed.r•…�r–}r—(h*Uh+j‘ubaubhÒ)�r˜}r™(h*X **NOTES**:h+jDh/h0h1hÖh3}rš(h5]h6]h7]h8]h;]uh=M‡h>hh?]r›(j_)�rœ}r�(h*X **NOTES**h3}rž(h5]h6]h7]h8]h;]uh+j˜h?]rŸhHXNOTESr …�r¡}r¢(h*Uh+jœubah1jgubhHX:…�r£}r¤(h*X:h+j˜ubeubhÒ)�r¥}r¦(h*XyYou may shutdown and start the same binary multiple times. Every time you start the binary, it starts from the beginning.r§h+jDh/h0h1hÖh3}r¨(h5]h6]h7]h8]h;]uh=M‰h>hh?]r©hHXyYou may shutdown and start the same binary multiple times. Every time you start the binary, it starts from the beginning.rª…�r«}r¬(h*j§h+j¥ubaubhÒ)�r­}r®(h*XvIf you have different binaries which use the same cell resources, you may reuse the created cell to run them. You need just shutdown the cell, load another binary and start it. If you need to run different binaries that requires different resources, you need to shutdown the running cell, destroy it, create a new one with required resources, load a new binary and start it.r¯h+jDh/h0h1hÖh3}r°(h5]h6]h7]h8]h;]uh=MŒh>hh?]r±hHXvIf you have different binaries which use the same cell resources, you may reuse the created cell to run them. You need just shutdown the cell, load another binary and start it. If you need to run different binaries that requires different resources, you need to shutdown the running cell, destroy it, create a new one with required resources, load a new binary and start it.r²…�r³}r´(h*j¯h+j­ubaubhÅ)�rµ}r¶(h*X!Running PDK led\_test.bin exampleh+jDh/h0h1hÉh3}r·(h8]r¸U running-pdk-led-test-bin-exampler¹ah7]h5]h6]h;]rºhauh=Nh>hh?]r»hHX Running PDK led_test.bin exampler¼…�r½}r¾(h*X!Running PDK led\_test.bin exampleh+jµubaubhÒ)�r¿}rÀ(h*X.After you enable hyprevisor, create a pdk cellrÁh+jDh/h0h1hÖh3}rÂ(h5]h6]h7]h8]h;]uh=M–h>hh?]rÃhHX.After you enable hyprevisor, create a pdk cellrÄ…�rÅ}rÆ(h*jÁh+j¿ubaubjˆ)�rÇ}rÈ(h*X.root@am57xx-evm:~# jailhouse cell create /usr/share/jailhouse/examples/am57xx-pdk-leddiag.cell [ 312.419978] CPU1: shutdown Created cell "AM57XX-EVM-PDK-LED" Page pool usage after cell creation: mem 54/4075, remap 38/131072 [ 312.470723] Created Jailhouse cell "AM57XX-EVM-PDK-LED" root@am57xx-evm:~#h+jDh/h0h1j‹h3}rÉ(j�jŽh8]h7]h5]h6]h;]uh=M©h>hh?]rÊhHX.root@am57xx-evm:~# jailhouse cell create /usr/share/jailhouse/examples/am57xx-pdk-leddiag.cell [ 312.419978] CPU1: shutdown Created cell "AM57XX-EVM-PDK-LED" Page pool usage after cell creation: mem 54/4075, remap 38/131072 [ 312.470723] Created Jailhouse cell "AM57XX-EVM-PDK-LED" root@am57xx-evm:~#rË…�rÌ}rÍ(h*Uh+jÇubaubhÒ)�rÎ}rÏ(h*Xload the led\_test.bin binaryh+jDh/h0h1hÖh3}rÐ(h5]h6]h7]h8]h;]uh=M¡h>hh?]rÑhHXload the led_test.bin binaryrÒ…�rÓ}rÔ(h*Xload the led\_test.bin binaryh+jÎubaubjˆ)�rÕ}rÖ(h*X{root@am57xx-evm:~# jailhouse cell load 1 /usr/share/jailhouse/examples/led_test.bin Cell "AM57XX-EVM-PDK-LED" can be loadedh+jDh/h0h1j‹h3}r×(j�jŽh8]h7]h5]h6]h;]uh=M´h>hh?]rØhHX{root@am57xx-evm:~# jailhouse cell load 1 /usr/share/jailhouse/examples/led_test.bin Cell "AM57XX-EVM-PDK-LED" can be loadedrÙ…�rÚ}rÛ(h*Uh+jÕubaubhÒ)�rÜ}rÝ(h*X and start itrÞh+jDh/h0h1hÖh3}rß(h5]h6]h7]h8]h;]uh=M¨h>hh?]ràhHX and start itrá…�râ}rã(h*jÞh+jÜubaubjˆ)�rä}rå(h*Xãroot@am57xx-evm:~# jailhouse cell start 1 Started cell "AM57XX-EVM-PDK-LED" root@am57xx-e ********************************************* * LED Test * ********************************************* Testing LED Blinking LEDs... Press 'y' to verify pass, 'r' to blink again, or any other character to indicate failure: r Blinking again Press 'y' to verify pass, 'r' to blink again, or any other character to indicate failure: y Received: y Test PASSED!h+jDh/h0h1j‹h3}ræ(j�jŽh8]h7]h5]h6]h;]uh=M»h>hh?]rçhHXãroot@am57xx-evm:~# jailhouse cell start 1 Started cell "AM57XX-EVM-PDK-LED" root@am57xx-e ********************************************* * LED Test * ********************************************* Testing LED Blinking LEDs... Press 'y' to verify pass, 'r' to blink again, or any other character to indicate failure: r Blinking again Press 'y' to verify pass, 'r' to blink again, or any other character to indicate failure: y Received: y Test PASSED!rè…�ré}rê(h*Uh+jäubaubhÒ)�rë}rì(h*X8You may see blinking leds, press "r" to repeat the test.ríh+jDh/h0h1hÖh3}rî(h5]h6]h7]h8]h;]uh=M¿h>hh?]rïhHX8You may see blinking leds, press "r" to repeat the test.rð…�rñ}rò(h*jíh+jëubaubhÒ)�ró}rô(h*X**NOTE:** This example just demonstrates hypervisor's ability to run binaries that were built outside of jailhouse source tree. This and other RTOS examples were ported for this purpose. Look to RTOS SDK documentation for description of the examples functionality.h+jDh/h0h1hÖh3}rõ(h5]h6]h7]h8]h;]uh=MÁh>hh?]rö(j_)�r÷}rø(h*X **NOTE:**h3}rù(h5]h6]h7]h8]h;]uh+jóh?]rúhHXNOTE:rû…�rü}rý(h*Uh+j÷ubah1jgubhHXÿ This example just demonstrates hypervisor's ability to run binaries that were built outside of jailhouse source tree. This and other RTOS examples were ported for this purpose. Look to RTOS SDK documentation for description of the examples functionality.rþ…�rÿ}r(h*Xÿ This example just demonstrates hypervisor's ability to run binaries that were built outside of jailhouse source tree. This and other RTOS examples were ported for this purpose. Look to RTOS SDK documentation for description of the examples functionality.h+jóubeubhÅ)�r}r(h*XRunning the Demo on AM572x-IDKrh+jDh/h0h1hÉh3}r(h8]rUrunning-the-demo-on-am572x-idkrah7]h5]h6]h;]rh auh=Nh>hh?]rhHXRunning the Demo on AM572x-IDKr …�r }r (h*jh+jubaubhÒ)�r }r (h*X;Two TI-RTOS example applications were ported for Jailhouse hypervisor: pruss.bin and icss\_emac.bin. In contrast to led\_test.bin, which has its own startup code, linker script and was linked to start from address 0x0, the pruss.bin and icss\_emac.bin used the TI-RTOS building infrastructure as much as possible. **At the previous Processor SDK pruss.bin and icss\_emac.bin were linked to the default 0x80000000 address. Because the new Jailhouse version uses that address for debug URAT communication region, the RTOS application are linked to the 0x90000000 address**.h+jDh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=MÊh>hh?]r(hHX7Two TI-RTOS example applications were ported for Jailhouse hypervisor: pruss.bin and icss_emac.bin. In contrast to led_test.bin, which has its own startup code, linker script and was linked to start from address 0x0, the pruss.bin and icss_emac.bin used the TI-RTOS building infrastructure as much as possible. r…�r}r(h*X:Two TI-RTOS example applications were ported for Jailhouse hypervisor: pruss.bin and icss\_emac.bin. In contrast to led\_test.bin, which has its own startup code, linker script and was linked to start from address 0x0, the pruss.bin and icss\_emac.bin used the TI-RTOS building infrastructure as much as possible. h+j ubj_)�r}r(h*X**At the previous Processor SDK pruss.bin and icss\_emac.bin were linked to the default 0x80000000 address. Because the new Jailhouse version uses that address for debug URAT communication region, the RTOS application are linked to the 0x90000000 address**h3}r(h5]h6]h7]h8]h;]uh+j h?]rhHXûAt the previous Processor SDK pruss.bin and icss_emac.bin were linked to the default 0x80000000 address. Because the new Jailhouse version uses that address for debug URAT communication region, the RTOS application are linked to the 0x90000000 addressr…�r}r(h*Uh+jubah1jgubhHX.…�r}r(h*X.h+j ubeubhÒ)�r}r(h*XZTo run the pruss.bin application enable the hypervisor the same way as for other examples.rh+jDh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=MÔh>hh?]r hHXZTo run the pruss.bin application enable the hypervisor the same way as for other examples.r!…�r"}r#(h*jh+jubaubjˆ)�r$}r%(h*Xícd /usr/share/jailhouse/examples/ root@am57xx-evm:/usr/share/jailhouse/examples# modprobe jailhouse root@am57xx-evm:/usr/share/jailhouse/examples# jailhouse enable ./am57xx-evm.cell Initializing Jailhouse hypervisor on CPU 0 Code location: 0xf0000030 Page pool usage after early setup: mem 30/4075, remap 32/131072 Initializing processors: CPU 0... OK CPU 1... OK Page pool usage after late setup: mem 39/4075, remap 38/131072 Activating hypervisor [ 710.008555] The Jailhouse is opening.h+jDh/h0h1j‹h3}r&(j�jŽh8]h7]h5]h6]h;]uh=Mèh>hh?]r'hHXícd /usr/share/jailhouse/examples/ root@am57xx-evm:/usr/share/jailhouse/examples# modprobe jailhouse root@am57xx-evm:/usr/share/jailhouse/examples# jailhouse enable ./am57xx-evm.cell Initializing Jailhouse hypervisor on CPU 0 Code location: 0xf0000030 Page pool usage after early setup: mem 30/4075, remap 32/131072 Initializing processors: CPU 0... OK CPU 1... OK Page pool usage after late setup: mem 39/4075, remap 38/131072 Activating hypervisor [ 710.008555] The Jailhouse is opening.r(…�r)}r*(h*Uh+j$ubaubhÒ)�r+}r,(h*XCreate a cell for pruss.binr-h+jDh/h0h1hÖh3}r.(h5]h6]h7]h8]h;]uh=Mçh>hh?]r/hHXCreate a cell for pruss.binr0…�r1}r2(h*j-h+j+ubaubjˆ)�r3}r4(h*XEroot@am57xx-evm:/usr/share/jailhouse/examples# jailhouse cell create ./am572x-rtos-pruss.cell [ 745.067783] CPU1: shutdown Created cell "AM572X-IDK-PRUSS" Page pool usage after cell creation: mem 54/4075, remap 38/131072 [ 745.107324] Created Jailhouse cell "AM572X-IDK-PRUSS" root@am57xx-evm:/usr/share/jailhouse/examples#h+jDh/h0h1j‹h3}r5(j�jŽh8]h7]h5]h6]h;]uh=Múh>hh?]r6hHXEroot@am57xx-evm:/usr/share/jailhouse/examples# jailhouse cell create ./am572x-rtos-pruss.cell [ 745.067783] CPU1: shutdown Created cell "AM572X-IDK-PRUSS" Page pool usage after cell creation: mem 54/4075, remap 38/131072 [ 745.107324] Created Jailhouse cell "AM572X-IDK-PRUSS" root@am57xx-evm:/usr/share/jailhouse/examples#r7…�r8}r9(h*Uh+j3ubaubhÒ)�r:}r;(h*X:Use cell load command to load several required components:r<h+jDh/h0h1hÖh3}r=(h5]h6]h7]h8]h;]uh=Mòh>hh?]r>hHX:Use cell load command to load several required components:r?…�r@}rA(h*j<h+j:ubaubjˆ)�rB}rC(h*X‚root@am57xx-evm:/usr/share/jailhouse/examples# jailhouse cell load 1 pruss.bin -a 0x90000000 Cell "AM572X-IDK-PRUSS" can be loadedh+jDh/h0h1j‹h3}rD(j�jŽh8]h7]h5]h6]h;]uh=Mh>hh?]rEhHX‚root@am57xx-evm:/usr/share/jailhouse/examples# jailhouse cell load 1 pruss.bin -a 0x90000000 Cell "AM572X-IDK-PRUSS" can be loadedrF…�rG}rH(h*Uh+jBubaubhÒ)�rI}rJ(h*XwhererKh+jDh/h0h1hÖh3}rL(h5]h6]h7]h8]h;]uh=Mùh>hh?]rMhHXwhererN…�rO}rP(h*jKh+jIubaubjð)�rQ}rR(h*Uh+jDh/h0h1jóh3}rS(jõX-h8]h7]h5]h6]h;]uh=Mûh>hh?]rTjô)�rU}rV(h*XÍpruss.bin itself, loaded to the virtual address 0x90000000 - the address where this application is linked to; **The cell configuration MUST set the .cpu_reset_address = 0x90000000 at cell configuration** h+jQh/h0h1j÷h3}rW(h5]h6]h7]h8]h;]uh=Nh>hh?]rXhÒ)�rY}rZ(h*XËpruss.bin itself, loaded to the virtual address 0x90000000 - the address where this application is linked to; **The cell configuration MUST set the .cpu_reset_address = 0x90000000 at cell configuration**h+jUh/h0h1hÖh3}r[(h5]h6]h7]h8]h;]uh=Mûh?]r\(hHXnpruss.bin itself, loaded to the virtual address 0x90000000 - the address where this application is linked to; r]…�r^}r_(h*Xnpruss.bin itself, loaded to the virtual address 0x90000000 - the address where this application is linked to; h+jYubj_)�r`}ra(h*X]**The cell configuration MUST set the .cpu_reset_address = 0x90000000 at cell configuration**h3}rb(h5]h6]h7]h8]h;]uh+jYh?]rchHXYThe cell configuration MUST set the .cpu_reset_address = 0x90000000 at cell configurationrd…�re}rf(h*Uh+j`ubah1jgubeubaubaubhÒ)�rg}rh(h*X&After loading run the inmate as usual:rih+jDh/h0h1hÖh3}rj(h5]h6]h7]h8]h;]uh=Mh>hh?]rkhHX&After loading run the inmate as usual:rl…�rm}rn(h*jih+jgubaubjˆ)�ro}rp(h*XÖroot@am57xx-evm:/usr/share/jailhouse/examples# jailhouse cell start 1 Started cell "AM572X-IDK-PRUSS" root@am57xx-evm:/usr/share/jailhouse/examples# passed verify constant tbl entry for instance 1: pruNum: 0 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 1 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 2 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 3 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 4 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 5 eventwait: waiting for the INTC event from PRU Testing for instance: 1, pru num: 0 is complete passed verify constant tbl entry for instance 1: pruNum: 1 sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 1 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 2 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 3 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 4 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 5 Testing for instance: 1, pru num: 1 is complete passed verify constant tbl entry for instance 2: pruNum: 0 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 1 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 2 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 3 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 4 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 5 eventwait2: waiting for the INTC event from PRU Testing for instance: 2, pru num: 0 is complete passed verify constant tbl entry for instance 2: pruNum: 1 sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 1 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 2 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 3 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 4 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 5 Testing for instance: 2, pru num: 1 is complete All tests have passedh+jDh/h0h1j‹h3}rq(j�jŽh8]h7]h5]h6]h;]uh=Mh>hh?]rrhHXÖroot@am57xx-evm:/usr/share/jailhouse/examples# jailhouse cell start 1 Started cell "AM572X-IDK-PRUSS" root@am57xx-evm:/usr/share/jailhouse/examples# passed verify constant tbl entry for instance 1: pruNum: 0 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 1 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 2 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 3 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 4 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 0 eventwait: got the INTC event from PRU, count: 5 eventwait: waiting for the INTC event from PRU Testing for instance: 1, pru num: 0 is complete passed verify constant tbl entry for instance 1: pruNum: 1 sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 1 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 2 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 3 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 4 eventwait: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 1 , pru num: 1 eventwait: got the INTC event from PRU, count: 5 Testing for instance: 1, pru num: 1 is complete passed verify constant tbl entry for instance 2: pruNum: 0 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 1 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 2 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 3 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 4 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 0 eventwait2: got the INTC event from PRU, count: 5 eventwait2: waiting for the INTC event from PRU Testing for instance: 2, pru num: 0 is complete passed verify constant tbl entry for instance 2: pruNum: 1 sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 1 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 2 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 3 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 4 eventwait2: waiting for the INTC event from PRU sending the INTC event to the PRU for instance: 2 , pru num: 1 eventwait2: got the INTC event from PRU, count: 5 Testing for instance: 2, pru num: 1 is complete All tests have passedrs…�rt}ru(h*Uh+joubaubhÒ)�rv}rw(h*XWYou may run the **icss\_emac.bin** in similar way using appropriate cell configuration.h+jDh/h0h1hÖh3}rx(h5]h6]h7]h8]h;]uh=MMh>hh?]ry(hHXYou may run the rz…�r{}r|(h*XYou may run the h+jvubj_)�r}}r~(h*X**icss\_emac.bin**h3}r(h5]h6]h7]h8]h;]uh+jvh?]r€hHX icss_emac.binr�…�r‚}rƒ(h*Uh+j}ubah1jgubhHX5 in similar way using appropriate cell configuration.r„…�r…}r†(h*X5 in similar way using appropriate cell configuration.h+jvubeubhÅ)�r‡}rˆ(h*XJailhouse Performance on AM5728r‰h+jDh/h0h1hÉh3}rŠ(h8]r‹Ujailhouse-performance-on-am5728rŒah7]h5]h6]h;]r�h auh=Nh>hh?]rŽhHXJailhouse Performance on AM5728r�…�r�}r‘(h*j‰h+j‡ubaubhÒ)�r’}r“(h*X¨To verify the real-time performance of Jailhouse Sitara AM5728 was setup to run Linux on one of the ARM Cortex A15 cores, and a TI-RTOS inmate on the other A15 core. A test was run to measure interrupt latency. Poll mode driver based application performance of an inmate should be identical to a system without virtualizationion in a static partitioning system like Jailhouse. Anything interrupt based is required to share the interrupt controller (GIC) which will introduce some interference from Linux to the real-time application. The measurements shown below over a million interrupts clearly shows the interference, and captures the upper bound at 8.8us. For the first run of interrupt latency test an unloaded Linux running on core 0 is in the first column. In the second column Linux on core 0 is running STREAM. STREAM is an external memory access benchmark that fully utilizes the number of outstanding reads and writes to memory. It is scalable from individual processors to clusters supercomputers, here it is used at the processor level. It was chosen as representative of a worst case memory access behavior of a Linux based application on a Cortex A15, essentially with a memory access profile like an optimized memorytomemory copy. In AM5728 the two Cortex A15 cores share L2 cache and access to the rest of the SoC, which the STREAM benchmark running on core 0 stresses while core 1 access GIC registers to respond to the interrupt.r”h+jDh/h0h1hÖh3}r•(h5]h6]h7]h8]h;]uh=MSh>hh?]r–hHX¨To verify the real-time performance of Jailhouse Sitara AM5728 was setup to run Linux on one of the ARM Cortex A15 cores, and a TI-RTOS inmate on the other A15 core. A test was run to measure interrupt latency. Poll mode driver based application performance of an inmate should be identical to a system without virtualizationion in a static partitioning system like Jailhouse. Anything interrupt based is required to share the interrupt controller (GIC) which will introduce some interference from Linux to the real-time application. The measurements shown below over a million interrupts clearly shows the interference, and captures the upper bound at 8.8us. For the first run of interrupt latency test an unloaded Linux running on core 0 is in the first column. In the second column Linux on core 0 is running STREAM. STREAM is an external memory access benchmark that fully utilizes the number of outstanding reads and writes to memory. It is scalable from individual processors to clusters supercomputers, here it is used at the processor level. It was chosen as representative of a worst case memory access behavior of a Linux based application on a Cortex A15, essentially with a memory access profile like an optimized memorytomemory copy. In AM5728 the two Cortex A15 cores share L2 cache and access to the rest of the SoC, which the STREAM benchmark running on core 0 stresses while core 1 access GIC registers to respond to the interrupt.r—…�r˜}r™(h*j”h+j’ubaubcdocutils.nodes table rš)�r›}rœ(h*Uh+jDh/h0h1Utabler�h3}rž(h5]h6]h7]h8]h;]uh=Nh>hh?]rŸcdocutils.nodes tgroup r )�r¡}r¢(h*Uh3}r£(h8]h7]h5]h6]h;]UcolsKuh+j›h?]r¤(cdocutils.nodes colspec r¥)�r¦}r§(h*Uh3}r¨(h8]h7]h5]h6]h;]UcolwidthKuh+j¡h?]h1Ucolspecr©ubj¥)�rª}r«(h*Uh3}r¬(h8]h7]h5]h6]h;]UcolwidthKuh+j¡h?]h1j©ubj¥)�r­}r®(h*Uh3}r¯(h8]h7]h5]h6]h;]UcolwidthKuh+j¡h?]h1j©ubcdocutils.nodes thead r°)�r±}r²(h*Uh3}r³(h5]h6]h7]h8]h;]uh+j¡h?]r´cdocutils.nodes row rµ)�r¶}r·(h*Uh3}r¸(h5]h6]h7]h8]h;]uh+j±h?]r¹(cdocutils.nodes entry rº)�r»}r¼(h*Uh3}r½(h5]h6]h7]h8]h;]uh+j¶h?]h1Uentryr¾ubjº)�r¿}rÀ(h*Uh3}rÁ(h5]h6]h7]h8]h;]uh+j¶h?]rÂhÒ)�rÃ}rÄ(h*XUnloaded Linux on core 0rÅh+j¿h/h0h1hÖh3}rÆ(h5]h6]h7]h8]h;]uh=Mjh?]rÇhHXUnloaded Linux on core 0rÈ…�rÉ}rÊ(h*jÅh+jÃubaubah1j¾ubjº)�rË}rÌ(h*Uh3}rÍ(h5]h6]h7]h8]h;]uh+j¶h?]rÎhÒ)�rÏ}rÐ(h*X(Linux Running STREAM benchmark on core 0rÑh+jËh/h0h1hÖh3}rÒ(h5]h6]h7]h8]h;]uh=Mjh?]rÓhHX(Linux Running STREAM benchmark on core 0rÔ…�rÕ}rÖ(h*jÑh+jÏubaubah1j¾ubeh1Urowr×ubah1UtheadrØubcdocutils.nodes tbody rÙ)�rÚ}rÛ(h*Uh3}rÜ(h5]h6]h7]h8]h;]uh+j¡h?]rÝ(jµ)�rÞ}rß(h*Uh3}rà(h5]h6]h7]h8]h;]uh+jÚh?]rá(jº)�râ}rã(h*Uh3}rä(h5]h6]h7]h8]h;]uh+jÞh?]råcdocutils.nodes line_block ræ)�rç}rè(h*Uh3}ré(h5]h6]h7]h8]h;]uh+jâh?]rê(cdocutils.nodes line rë)�rì}rí(h*XInterrupt countrîUindentrïKh+jçh/h0h1h=h3}rð(h5]h6]h7]h8]h;]uh=Kh?]rñhHXInterrupt countrò…�ró}rô(h*jîh+jìubaubjë)�rõ}rö(h*XBucket 1.6 us - 3.2 usr÷jïKh+jçh/h0h1h=h3}rø(h5]h6]h7]h8]h;]uh=Kh?]rùhHXBucket 1.6 us - 3.2 usrú…�rû}rü(h*j÷h+jõubaubeh1U line_blockrýubah1j¾ubjº)�rþ}rÿ(h*Uh3}r(h5]h6]h7]h8]h;]uh+jÞh?]rhÒ)�r}r(h*X99.3756%rh+jþh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=Mmh?]rhHX99.3756%r…�r}r (h*jh+jubaubah1j¾ubjº)�r }r (h*Uh3}r (h5]h6]h7]h8]h;]uh+jÞh?]r hÒ)�r}r(h*X33.9323%rh+j h/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=Mmh?]rhHX33.9323%r…�r}r(h*jh+jubaubah1j¾ubeh1j×ubjµ)�r}r(h*Uh3}r(h5]h6]h7]h8]h;]uh+jÚh?]r(jº)�r}r(h*Uh3}r(h5]h6]h7]h8]h;]uh+jh?]rjæ)�r}r(h*Uh3}r (h5]h6]h7]h8]h;]uh+jh?]r!(jë)�r"}r#(h*XInterrupt countr$jïKh+jh/h0h1h=h3}r%(h5]h6]h7]h8]h;]uh=Kh?]r&hHXInterrupt countr'…�r(}r)(h*j$h+j"ubaubjë)�r*}r+(h*XBucket 3.2 us - 6.4 usr,jïKh+jh/h0h1h=h3}r-(h5]h6]h7]h8]h;]uh=Kh?]r.hHXBucket 3.2 us - 6.4 usr/…�r0}r1(h*j,h+j*ubaubeh1jýubah1j¾ubjº)�r2}r3(h*Uh3}r4(h5]h6]h7]h8]h;]uh+jh?]r5hÒ)�r6}r7(h*X0.6244%r8h+j2h/h0h1hÖh3}r9(h5]h6]h7]h8]h;]uh=Mph?]r:hHX0.6244%r;…�r<}r=(h*j8h+j6ubaubah1j¾ubjº)�r>}r?(h*Uh3}r@(h5]h6]h7]h8]h;]uh+jh?]rAhÒ)�rB}rC(h*X66.0632%rDh+j>h/h0h1hÖh3}rE(h5]h6]h7]h8]h;]uh=Mph?]rFhHX66.0632%rG…�rH}rI(h*jDh+jBubaubah1j¾ubeh1j×ubjµ)�rJ}rK(h*Uh3}rL(h5]h6]h7]h8]h;]uh+jÚh?]rM(jº)�rN}rO(h*Uh3}rP(h5]h6]h7]h8]h;]uh+jJh?]rQjæ)�rR}rS(h*Uh3}rT(h5]h6]h7]h8]h;]uh+jNh?]rU(jë)�rV}rW(h*XInterrupt countrXjïKh+jRh/h0h1h=h3}rY(h5]h6]h7]h8]h;]uh=Kh?]rZhHXInterrupt countr[…�r\}r](h*jXh+jVubaubjë)�r^}r_(h*XBucket 6.4 us - 12.8 usr`jïKh+jRh/h0h1h=h3}ra(h5]h6]h7]h8]h;]uh=Kh?]rbhHXBucket 6.4 us - 12.8 usrc…�rd}re(h*j`h+j^ubaubeh1jýubah1j¾ubjº)�rf}rg(h*Uh3}rh(h5]h6]h7]h8]h;]uh+jJh?]rihÒ)�rj}rk(h*Xnonerlh+jfh/h0h1hÖh3}rm(h5]h6]h7]h8]h;]uh=Msh?]rnhHXnonero…�rp}rq(h*jlh+jjubaubah1j¾ubjº)�rr}rs(h*Uh3}rt(h5]h6]h7]h8]h;]uh+jJh?]ruhÒ)�rv}rw(h*X0.0045%rxh+jrh/h0h1hÖh3}ry(h5]h6]h7]h8]h;]uh=Msh?]rzhHX0.0045%r{…�r|}r}(h*jxh+jvubaubah1j¾ubeh1j×ubjµ)�r~}r(h*Uh3}r€(h5]h6]h7]h8]h;]uh+jÚh?]r�(jº)�r‚}rƒ(h*Uh3}r„(h5]h6]h7]h8]h;]uh+j~h?]r…hÒ)�r†}r‡(h*XMinimum interrupt latencyrˆh+j‚h/h0h1hÖh3}r‰(h5]h6]h7]h8]h;]uh=Mwh?]rŠhHXMinimum interrupt latencyr‹…�rŒ}r�(h*jˆh+j†ubaubah1j¾ubjº)�rŽ}r�(h*Uh3}r�(h5]h6]h7]h8]h;]uh+j~h?]r‘hÒ)�r’}r“(h*X2.2 microsecondsr”h+jŽh/h0h1hÖh3}r•(h5]h6]h7]h8]h;]uh=Mwh?]r–hHX2.2 microsecondsr—…�r˜}r™(h*j”h+j’ubaubah1j¾ubjº)�rš}r›(h*Uh3}rœ(h5]h6]h7]h8]h;]uh+j~h?]r�hÒ)�rž}rŸ(h*X1.8 microsecondsr h+jšh/h0h1hÖh3}r¡(h5]h6]h7]h8]h;]uh=Mwh?]r¢hHX1.8 microsecondsr£…�r¤}r¥(h*j h+jžubaubah1j¾ubeh1j×ubjµ)�r¦}r§(h*Uh3}r¨(h5]h6]h7]h8]h;]uh+jÚh?]r©(jº)�rª}r«(h*Uh3}r¬(h5]h6]h7]h8]h;]uh+j¦h?]r­hÒ)�r®}r¯(h*XMaximum interrupt latencyr°h+jªh/h0h1hÖh3}r±(h5]h6]h7]h8]h;]uh=Mzh?]r²hHXMaximum interrupt latencyr³…�r´}rµ(h*j°h+j®ubaubah1j¾ubjº)�r¶}r·(h*Uh3}r¸(h5]h6]h7]h8]h;]uh+j¦h?]r¹hÒ)�rº}r»(h*X5.0 microsecondsr¼h+j¶h/h0h1hÖh3}r½(h5]h6]h7]h8]h;]uh=Mzh?]r¾hHX5.0 microsecondsr¿…�rÀ}rÁ(h*j¼h+jºubaubah1j¾ubjº)�rÂ}rÃ(h*Uh3}rÄ(h5]h6]h7]h8]h;]uh+j¦h?]rÅhÒ)�rÆ}rÇ(h*X8.8 microsecondsrÈh+jÂh/h0h1hÖh3}rÉ(h5]h6]h7]h8]h;]uh=Mzh?]rÊhHX8.8 microsecondsrË…�rÌ}rÍ(h*jÈh+jÆubaubah1j¾ubeh1j×ubeh1UtbodyrÎubeh1UtgrouprÏubaubhÒ)�rÐ}rÑ(h*X=Table: **Interrupt latency of a bare metal inmate (core 1)**h+jDh/h0h1hÖh3}rÒ(h5]h6]h7]h8]h;]uh=M~h>hh?]rÓ(hHXTable: rÔ…�rÕ}rÖ(h*XTable: h+jÐubj_)�r×}rØ(h*X5**Interrupt latency of a bare metal inmate (core 1)**h3}rÙ(h5]h6]h7]h8]h;]uh+jÐh?]rÚhHX1Interrupt latency of a bare metal inmate (core 1)rÛ…�rÜ}rÝ(h*Uh+j×ubah1jgubeubhÅ)�rÞ}rß(h*XBuilding Jailhouse from Sourcesràh+jDh/h0h1hÉh3}rá(h8]râUbuilding-jailhouse-from-sourcesrãah7]h5]h6]h;]rähauh=Nh>hh?]råhHXBuilding Jailhouse from Sourcesræ…�rç}rè(h*jàh+jÞubaubhÒ)�ré}rê(h*X™Jailhouse sources are located at $TI\_SDK\_PATH/board-support/extra-drivers/jailhouse-0.7 directory. The directory contains the following subdirectories:h+jDh/h0h1hÖh3}rë(h5]h6]h7]h8]h;]uh=Mƒh>hh?]rìhHX—Jailhouse sources are located at $TI_SDK_PATH/board-support/extra-drivers/jailhouse-0.7 directory. The directory contains the following subdirectories:rí…�rî}rï(h*X™Jailhouse sources are located at $TI\_SDK\_PATH/board-support/extra-drivers/jailhouse-0.7 directory. The directory contains the following subdirectories:h+jéubaubjð)�rð}rñ(h*Uh+jDh/h0h1jóh3}rò(jõX-h8]h7]h5]h6]h;]uh=M‡h>hh?]ró(jô)�rô}rõ(h*X**Documentation**röh+jðh/h0h1j÷h3}r÷(h5]h6]h7]h8]h;]uh=Nh>hh?]røhÒ)�rù}rú(h*jöh+jôh/h0h1hÖh3}rû(h5]h6]h7]h8]h;]uh=M‡h?]rüj_)�rý}rþ(h*jöh3}rÿ(h5]h6]h7]h8]h;]uh+jùh?]rhHX Documentationr…�r}r(h*Uh+jýubah1jgubaubaubjô)�r}r(h*X­**ci** - configuration files for different platforms. ***Copy the jailhouse-config-am57xx-evm.h file into hypervisor/include/jailhouse directory and rename it to config.h***h+jðh/h0h1j÷h3}r(h5]h6]h7]h8]h;]uh=Nh>hh?]rhÒ)�r}r (h*X­**ci** - configuration files for different platforms. ***Copy the jailhouse-config-am57xx-evm.h file into hypervisor/include/jailhouse directory and rename it to config.h***h+jh/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=Mˆh?]r (j_)�r }r (h*X**ci**h3}r(h5]h6]h7]h8]h;]uh+jh?]rhHXcir…�r}r(h*Uh+j ubah1jgubhHX0 - configuration files for different platforms. r…�r}r(h*X0 - configuration files for different platforms. h+jubj_)�r}r(h*Xw***Copy the jailhouse-config-am57xx-evm.h file into hypervisor/include/jailhouse directory and rename it to config.h***h3}r(h5]h6]h7]h8]h;]uh+jh?]rhHXs*Copy the jailhouse-config-am57xx-evm.h file into hypervisor/include/jailhouse directory and rename it to config.h*r…�r}r(h*Uh+jubah1jgubeubaubjô)�r}r(h*X'**configs** - cell configuration files.rh+jðh/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r!hÒ)�r"}r#(h*jh+jh/h0h1hÖh3}r$(h5]h6]h7]h8]h;]uh=M‹h?]r%(j_)�r&}r'(h*X **configs**h3}r((h5]h6]h7]h8]h;]uh+j"h?]r)hHXconfigsr*…�r+}r,(h*Uh+j&ubah1jgubhHX - cell configuration files.r-…�r.}r/(h*X - cell configuration files.h+j"ubeubaubjô)�r0}r1(h*X,**driver** - jailhouse.ko kernel module coder2h+jðh/h0h1j÷h3}r3(h5]h6]h7]h8]h;]uh=Nh>hh?]r4hÒ)�r5}r6(h*j2h+j0h/h0h1hÖh3}r7(h5]h6]h7]h8]h;]uh=MŒh?]r8(j_)�r9}r:(h*X **driver**h3}r;(h5]h6]h7]h8]h;]uh+j5h?]r<hHXdriverr=…�r>}r?(h*Uh+j9ubah1jgubhHX" - jailhouse.ko kernel module coder@…�rA}rB(h*X" - jailhouse.ko kernel module codeh+j5ubeubaubjô)�rC}rD(h*X **hypervisor** - hypervisor coderEh+jðh/h0h1j÷h3}rF(h5]h6]h7]h8]h;]uh=Nh>hh?]rGhÒ)�rH}rI(h*jEh+jCh/h0h1hÖh3}rJ(h5]h6]h7]h8]h;]uh=M�h?]rK(j_)�rL}rM(h*X**hypervisor**h3}rN(h5]h6]h7]h8]h;]uh+jHh?]rOhHX hypervisorrP…�rQ}rR(h*Uh+jLubah1jgubhHX - hypervisor coderS…�rT}rU(h*X - hypervisor codeh+jHubeubaubjô)�rV}rW(h*XN**inmates** - inmates demos. It also contains code for ti\_app inmate example.h+jðh/h0h1j÷h3}rX(h5]h6]h7]h8]h;]uh=Nh>hh?]rYhÒ)�rZ}r[(h*XN**inmates** - inmates demos. It also contains code for ti\_app inmate example.h+jVh/h0h1hÖh3}r\(h5]h6]h7]h8]h;]uh=MŽh?]r](j_)�r^}r_(h*X **inmates**h3}r`(h5]h6]h7]h8]h;]uh+jZh?]rahHXinmatesrb…�rc}rd(h*Uh+j^ubah1jgubhHXB - inmates demos. It also contains code for ti_app inmate example.re…�rf}rg(h*XC - inmates demos. It also contains code for ti\_app inmate example.h+jZubeubaubjô)�rh}ri(h*X **scripts**rjh+jðh/h0h1j÷h3}rk(h5]h6]h7]h8]h;]uh=Nh>hh?]rlhÒ)�rm}rn(h*jjh+jhh/h0h1hÖh3}ro(h5]h6]h7]h8]h;]uh=M�h?]rpj_)�rq}rr(h*jjh3}rs(h5]h6]h7]h8]h;]uh+jmh?]rthHXscriptsru…�rv}rw(h*Uh+jqubah1jgubaubaubjô)�rx}ry(h*X)**tools** - jailhouse management utility h+jðh/h0h1j÷h3}rz(h5]h6]h7]h8]h;]uh=Nh>hh?]r{hÒ)�r|}r}(h*X(**tools** - jailhouse management utilityh+jxh/h0h1hÖh3}r~(h5]h6]h7]h8]h;]uh=M‘h?]r(j_)�r€}r�(h*X **tools**h3}r‚(h5]h6]h7]h8]h;]uh+j|h?]rƒhHXtoolsr„…�r…}r†(h*Uh+j€ubah1jgubhHX - jailhouse management utilityr‡…�rˆ}r‰(h*X - jailhouse management utilityh+j|ubeubaubeubhÒ)�rŠ}r‹(h*X¼The top level SDK Makefile has the **jailhouse\_clean**, **jailhouse** and **jailhouse\_install** targets which can be used to clean, build and install jailhouse to the target file system.h+jDh/h0h1hÖh3}rŒ(h5]h6]h7]h8]h;]uh=M“h>hh?]r�(hHX#The top level SDK Makefile has the rŽ…�r�}r�(h*X#The top level SDK Makefile has the h+jŠubj_)�r‘}r’(h*X**jailhouse\_clean**h3}r“(h5]h6]h7]h8]h;]uh+jŠh?]r”hHXjailhouse_cleanr•…�r–}r—(h*Uh+j‘ubah1jgubhHX, r˜…�r™}rš(h*X, h+jŠubj_)�r›}rœ(h*X **jailhouse**h3}r�(h5]h6]h7]h8]h;]uh+jŠh?]ržhHX jailhouserŸ…�r }r¡(h*Uh+j›ubah1jgubhHX and r¢…�r£}r¤(h*X and h+jŠubj_)�r¥}r¦(h*X**jailhouse\_install**h3}r§(h5]h6]h7]h8]h;]uh+jŠh?]r¨hHXjailhouse_installr©…�rª}r«(h*Uh+j¥ubah1jgubhHX[ targets which can be used to clean, build and install jailhouse to the target file system.r¬…�r­}r®(h*X[ targets which can be used to clean, build and install jailhouse to the target file system.h+jŠubeubhÅ)�r¯}r°(h*X,Building and Running the Ethercat Slave Demor±h+jDh/h0h1hÉh3}r²(h8]r³U,building-and-running-the-ethercat-slave-demor´ah7]h5]h6]h;]rµhauh=Nh>hh?]r¶hHX,Building and Running the Ethercat Slave Demor·…�r¸}r¹(h*j±h+j¯ubaubhÒ)�rº}r»(h*XPTo build and run the Ethercat Slave Demo, you need to install the PLSDK-RT, PRSDK and PRU-ICSS-ETHERCAT-SLAVE builds. We assume that you already have the first two SDKs installed. The PRU-ICSS-ETHERCAT-SLAVE can be downloaded from http://software-dl.ti.com/processor-industrial-sw/esd/PRU-ICSS-ETHERCAT-SLAVE/01_00_05_00/index_FDS.html.h+jDh/h0h1hÖh3}r¼(h5]h6]h7]h8]h;]uh=Mšh>hh?]r½(hHXçTo build and run the Ethercat Slave Demo, you need to install the PLSDK-RT, PRSDK and PRU-ICSS-ETHERCAT-SLAVE builds. We assume that you already have the first two SDKs installed. The PRU-ICSS-ETHERCAT-SLAVE can be downloaded from r¾…�r¿}rÀ(h*XçTo build and run the Ethercat Slave Demo, you need to install the PLSDK-RT, PRSDK and PRU-ICSS-ETHERCAT-SLAVE builds. We assume that you already have the first two SDKs installed. The PRU-ICSS-ETHERCAT-SLAVE can be downloaded from h+jºubh–)�rÁ}rÂ(h*Xhhttp://software-dl.ti.com/processor-industrial-sw/esd/PRU-ICSS-ETHERCAT-SLAVE/01_00_05_00/index_FDS.htmlrÃh3}rÄ(UrefurijÃh8]h7]h5]h6]h;]uh+jºh?]rÅhHXhhttp://software-dl.ti.com/processor-industrial-sw/esd/PRU-ICSS-ETHERCAT-SLAVE/01_00_05_00/index_FDS.htmlrÆ…�rÇ}rÈ(h*Uh+jÁubah1hŸubhHX.…�rÉ}rÊ(h*X.h+jºubeubhÒ)�rË}rÌ(h*XIOnce you have this SDK installed you may build Ethercat slave components.rÍh+jDh/h0h1hÖh3}rÎ(h5]h6]h7]h8]h;]uh=M h>hh?]rÏhHXIOnce you have this SDK installed you may build Ethercat slave components.rÐ…�rÑ}rÒ(h*jÍh+jËubaubhÒ)�rÓ}rÔ(h*X¼If the am572x-ethercat.cell is not installed on target filesystem yet, build it from PLSDK-RT top level makefile "make jailhouse" and copy it to target under /usr/share/jailhouse/examples.rÕh+jDh/h0h1hÖh3}rÖ(h5]h6]h7]h8]h;]uh=M£h>hh?]r×hHX¼If the am572x-ethercat.cell is not installed on target filesystem yet, build it from PLSDK-RT top level makefile "make jailhouse" and copy it to target under /usr/share/jailhouse/examples.rØ…�rÙ}rÚ(h*jÕh+jÓubaubhÒ)�rÛ}rÜ(h*X'To build the ethercat\_slave\_demo.bin:h+jDh/h0h1hÖh3}rÝ(h5]h6]h7]h8]h;]uh=M§h>hh?]rÞhHX%To build the ethercat_slave_demo.bin:rß…�rà}rá(h*X'To build the ethercat\_slave\_demo.bin:h+jÛubaubjð)�râ}rã(h*Uh+jDh/h0h1jóh3}rä(jõX-h8]h7]h5]h6]h;]uh=M©h>hh?]rå(jô)�ræ}rç(h*XÁModify the IA\_SDK\_HOME at ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmate/rtos/ethercat\_slave\_demo/Makefile to point to the install directory of PRU-ICSS-ETHERCAT-SLAVE.h+jâh/h0h1j÷h3}rè(h5]h6]h7]h8]h;]uh=Nh>hh?]réhÒ)�rê}rë(h*XÁModify the IA\_SDK\_HOME at ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmate/rtos/ethercat\_slave\_demo/Makefile to point to the install directory of PRU-ICSS-ETHERCAT-SLAVE.h+jæh/h0h1hÖh3}rì(h5]h6]h7]h8]h;]uh=M©h?]ríhHX¹Modify the IA_SDK_HOME at ~/ti/processor_sdk_rtos_am57xx_[version]/demos/jailhouse-inmate/rtos/ethercat_slave_demo/Makefile to point to the install directory of PRU-ICSS-ETHERCAT-SLAVE.rî…�rï}rð(h*XÁModify the IA\_SDK\_HOME at ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmate/rtos/ethercat\_slave\_demo/Makefile to point to the install directory of PRU-ICSS-ETHERCAT-SLAVE.h+jêubaubaubjô)�rñ}rò(h*X­At ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmate/makefile: add ethercat\_slave\_demo\* entries as pruss-test/icss-emac-test to the end of the makefile h+jâh/h0h1j÷h3}ró(h5]h6]h7]h8]h;]uh=Nh>hh?]rôhÒ)�rõ}rö(h*X¬At ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmate/makefile: add ethercat\_slave\_demo\* entries as pruss-test/icss-emac-test to the end of the makefileh+jñh/h0h1hÖh3}r÷(h5]h6]h7]h8]h;]uh=M¬h?]røhHX¥At ~/ti/processor_sdk_rtos_am57xx_[version]/demos/jailhouse-inmate/makefile: add ethercat_slave_demo* entries as pruss-test/icss-emac-test to the end of the makefilerù…�rú}rû(h*X¬At ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmate/makefile: add ethercat\_slave\_demo\* entries as pruss-test/icss-emac-test to the end of the makefileh+jõubaubaubeubjˆ)�rü}rý(h*XÚethercat_slave_demo: $(MAKE) -C ./rtos/ethercat_slave_demo ethercat_slave_demo_clean: $(MAKE) -C ./rtos/ethercat_slave_demo clean ethercat_slave_demo_install: $(MAKE) -C ./rtos/ethercat_slave_demo installh+jDh/h0h1j‹h3}rþ(j�jŽh8]h7]h5]h6]h;]uh=MÂh>hh?]rÿhHXÚethercat_slave_demo: $(MAKE) -C ./rtos/ethercat_slave_demo ethercat_slave_demo_clean: $(MAKE) -C ./rtos/ethercat_slave_demo clean ethercat_slave_demo_install: $(MAKE) -C ./rtos/ethercat_slave_demo installr…�r}r(h*Uh+jüubaubjð)�r}r(h*Uh+jDh/h0h1jóh3}r(jõX-h8]h7]h5]h6]h;]uh=M¼h>hh?]r(jô)�r}r(h*X0cd ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/r h+jh/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r }r (h*j h+jh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=M¼h?]rhHX,cd ~/ti/processor_sdk_rtos_am57xx_[version]/r…�r}r(h*X0cd ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/h+j ubaubaubjô)�r}r(h*Xsource setupenv.shrh+jh/h0h1j÷h3}r(h5]h6]h7]h8]h;]uh=Nh>hh?]rhÒ)�r}r(h*jh+jh/h0h1hÖh3}r(h5]h6]h7]h8]h;]uh=M½h?]rhHXsource setupenv.shr…�r}r(h*jh+jubaubaubjô)�r}r (h*XFcd ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmateh+jh/h0h1j÷h3}r!(h5]h6]h7]h8]h;]uh=Nh>hh?]r"hÒ)�r#}r$(h*XFcd ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmateh+jh/h0h1hÖh3}r%(h5]h6]h7]h8]h;]uh=M¾h?]r&hHXBcd ~/ti/processor_sdk_rtos_am57xx_[version]/demos/jailhouse-inmater'…�r(}r)(h*XFcd ~/ti/processor\_sdk\_rtos\_am57xx\_[version]/demos/jailhouse-inmateh+j#ubaubaubjô)�r*}r+(h*Xsource setenv.shr,h+jh/h0h1j÷h3}r-(h5]h6]h7]h8]h;]uh=Nh>hh?]r.hÒ)�r/}r0(h*j,h+j*h/h0h1hÖh3}r1(h5]h6]h7]h8]h;]uh=MÀh?]r2hHXsource setenv.shr3…�r4}r5(h*j,h+j/ubaubaubjô)�r6}r7(h*Xmake ethercat\_slave\_demo h+jh/h0h1j÷h3}r8(h5]h6]h7]h8]h;]uh=Nh>hh?]r9hÒ)�r:}r;(h*Xmake ethercat\_slave\_demoh+j6h/h0h1hÖh3}r<(h5]h6]h7]h8]h;]uh=MÁh?]r=hHXmake ethercat_slave_demor>…�r?}r@(h*Xmake ethercat\_slave\_demoh+j:ubaubaubeubhÒ)�rA}rB(h*XdAfter the steps above, copy ethercat\_slave\_demo.bin to target under /usr/share/jailhouse/examples.h+jDh/h0h1hÖh3}rC(h5]h6]h7]h8]h;]uh=MÃh>hh?]rDhHXbAfter the steps above, copy ethercat_slave_demo.bin to target under /usr/share/jailhouse/examples.rE…�rF}rG(h*XdAfter the steps above, copy ethercat\_slave\_demo.bin to target under /usr/share/jailhouse/examples.h+jAubaubhÒ)�rH}rI(h*X"To run the inmate refer to the instructions for `**Running the Demo on AM572x-IDK** <#running-the-demo-on-am572x-idk>`__ . Be aware that the inmate start address is 0x90000000. So, it has to be set at the cell configuration and also used as a parameter at the "jailhouse cell load" command:h+jDh/h0h1hÖh3}rJ(h5]h6]h7]h8]h;]uh=MÆh>hh?]rK(hHX0To run the inmate refer to the instructions for rL…�rM}rN(h*X0To run the inmate refer to the instructions for h+jHubh–)�rO}rP(h*XH`**Running the Demo on AM572x-IDK** <#running-the-demo-on-am572x-idk>`__h3}rQ(UnameX"**Running the Demo on AM572x-IDK**hšX#running-the-demo-on-am572x-idkh8]h7]h5]h6]h;]uh+jHh?]rRhHX"**Running the Demo on AM572x-IDK**rS…�rT}rU(h*Uh+jOubah1hŸubhHXª . Be aware that the inmate start address is 0x90000000. So, it has to be set at the cell configuration and also used as a parameter at the "jailhouse cell load" command:rV…�rW}rX(h*Xª . Be aware that the inmate start address is 0x90000000. So, it has to be set at the cell configuration and also used as a parameter at the "jailhouse cell load" command:h+jHubeubjˆ)�rY}rZ(h*X;jailhouse cell load 1 ethercat_slave_demo.bin -a 0x90000000h+jDh/h0h1j‹h3}r[(j�jŽh8]h7]h5]h6]h;]uh=MÜh>hh?]r\hHX;jailhouse cell load 1 ethercat_slave_demo.bin -a 0x90000000r]…�r^}r_(h*Uh+jYubaubhÒ)�r`}ra(h*XYProcedure to check two-way communication between the slave inmate and the master station:rbh+jDh/h0h1hÖh3}rc(h5]h6]h7]h8]h;]uh=MÐh>hh?]rdhHXYProcedure to check two-way communication between the slave inmate and the master station:re…�rf}rg(h*jbh+j`ubaubjð)�rh}ri(h*Uh+jDh/h0h1jóh3}rj(jõX-h8]h7]h5]h6]h;]uh=MÓh>hh?]rk(jô)�rl}rm(h*XRefer to http://processors.wiki.ti.com/index.php/PRU_ICSS_EtherCAT#Running_EtherCAT_Slave_Application to setup Ethercat master.h+jhh/h0h1j÷h3}rn(h5]h6]h7]h8]h;]uh=Nh>hh?]rohÒ)�rp}rq(h*XRefer to http://processors.wiki.ti.com/index.php/PRU_ICSS_EtherCAT#Running_EtherCAT_Slave_Application to setup Ethercat master.h+jlh/h0h1hÖh3}rr(h5]h6]h7]h8]h;]uh=MÓh?]rs(hHX Refer to rt…�ru}rv(h*X Refer to h+jpubh–)�rw}rx(h*X\http://processors.wiki.ti.com/index.php/PRU_ICSS_EtherCAT#Running_EtherCAT_Slave_Applicationryh3}rz(Urefurijyh8]h7]h5]h6]h;]uh+jph?]r{hHX\http://processors.wiki.ti.com/index.php/PRU_ICSS_EtherCAT#Running_EtherCAT_Slave_Applicationr|…�r}}r~(h*Uh+jwubah1hŸubhHX to setup Ethercat master.r…�r€}r�(h*X to setup Ethercat master.h+jpubeubaubjô)�r‚}rƒ(h*XÄMaster: Online write [data] to RxPDO 32Bit Output. After this, the slave should report the corresponding value via Board\_setDigOutput. The value can be checked with “devmem2 0xeef00000â€� also.h+jhh/h0h1j÷h3}r„(h5]h6]h7]h8]h;]uh=Nh>hh?]r…hÒ)�r†}r‡(h*XÄMaster: Online write [data] to RxPDO 32Bit Output. After this, the slave should report the corresponding value via Board\_setDigOutput. The value can be checked with “devmem2 0xeef00000â€� also.h+j‚h/h0h1hÖh3}rˆ(h5]h6]h7]h8]h;]uh=MÖh?]r‰hHXÃMaster: Online write [data] to RxPDO 32Bit Output. After this, the slave should report the corresponding value via Board_setDigOutput. The value can be checked with “devmem2 0xeef00000â€� also.rŠ…�r‹}rŒ(h*XÄMaster: Online write [data] to RxPDO 32Bit Output. After this, the slave should report the corresponding value via Board\_setDigOutput. The value can be checked with “devmem2 0xeef00000â€� also.h+j†ubaubaubjô)�r�}rŽ(h*XsSlave: devmem2 0xeef00004 b [data]. After this, Master should display the corresponding value in TXPDO 32Bit Input.h+jhh/h0h1j÷h3}r�(h5]h6]h7]h8]h;]uh=Nh>hh?]r�hÒ)�r‘}r’(h*XsSlave: devmem2 0xeef00004 b [data]. After this, Master should display the corresponding value in TXPDO 32Bit Input.r“h+j�h/h0h1hÖh3}r”(h5]h6]h7]h8]h;]uh=MÙh?]r•hHXsSlave: devmem2 0xeef00004 b [data]. After this, Master should display the corresponding value in TXPDO 32Bit Input.r–…�r—}r˜(h*j“h+j‘ubaubaubeubeubhÅ)�r™}rš(h*XJailhouse Internalsr›h+jh/h0h1hÉh3}rœ(h8]r�Ujailhouse-internalsržah7]h5]h6]h;]rŸh#auh=Nh>hh?]r hHXJailhouse Internalsr¡…�r¢}r£(h*j›h+j™ubaubhÒ)�r¤}r¥(h*XLThis section gives some Jailhouse details and required kernel modifications.r¦h+jh/h0h1hÖh3}r§(h5]h6]h7]h8]h;]uh=Mßh>hh?]r¨hHXLThis section gives some Jailhouse details and required kernel modifications.r©…�rª}r«(h*j¦h+j¤ubaubhÅ)�r¬}r­(h*XLinux Kernel Modificationsr®h+jh/h0h1hÉh3}r¯(h8]r°Ulinux-kernel-modificationsr±ah7]h5]h6]h;]r²hauh=Nh>hh?]r³hHXLinux Kernel Modificationsr´…�rµ}r¶(h*j®h+j¬ubaubhÒ)�r·}r¸(h*XÔIn order to run hypervisor itself and inmates, jailhouse requires additional nodes in kernel dtb. Refer to platform-specific jailhouse device tree or DT overlay for details on the required nodes or modifications.r¹h+jh/h0h1hÖh3}rº(h5]h6]h7]h8]h;]uh=Måh>hh?]r»hHXÔIn order to run hypervisor itself and inmates, jailhouse requires additional nodes in kernel dtb. Refer to platform-specific jailhouse device tree or DT overlay for details on the required nodes or modifications.r¼…�r½}r¾(h*j¹h+j·ubaubhÅ)�r¿}rÀ(h*XMemory ReservationrÁh+jh/h0h1hÉh3}rÂ(h8]rÃUmemory-reservationrÄah7]h5]h6]h;]rÅhauh=Nh>hh?]rÆhHXMemory ReservationrÇ…�rÈ}rÉ(h*jÁh+j¿ubaubhÒ)�rÊ}rË(h*XÜLinux kernel has to reserve some memory for jailhouse hypervisor and for inmate. This memory has to be reserved statically. Following example shows reservation of 16MB physical memory for hypervisor and 16MB for inmates.rÌh+jh/h0h1hÖh3}rÍ(h5]h6]h7]h8]h;]uh=Mìh>hh?]rÎhHXÜLinux kernel has to reserve some memory for jailhouse hypervisor and for inmate. This memory has to be reserved statically. Following example shows reservation of 16MB physical memory for hypervisor and 16MB for inmates.rÏ…�rÐ}rÑ(h*jÌh+jÊubaubjˆ)�rÒ}rÓ(h*XQ/ { reserved-memory { jailhouse: jailhouse@ef000000 { reg = <0x0 0xef000000 0x0 0x1000000>; no-map; status = "okay"; }; jh_inmate: jh_inmate@ee000000 { reg = <0x0 0xee000000 0x0 0x1000000>; no-map; status = "okay"; }; }; };h+jh/h0h1j‹h3}rÔ(j�jŽh8]h7]h5]h6]h;]uh=Mh>hh?]rÕhHXQ/ { reserved-memory { jailhouse: jailhouse@ef000000 { reg = <0x0 0xef000000 0x0 0x1000000>; no-map; status = "okay"; }; jh_inmate: jh_inmate@ee000000 { reg = <0x0 0xee000000 0x0 0x1000000>; no-map; status = "okay"; }; }; };rÖ…�r×}rØ(h*Uh+jÒubaubhÅ)�rÙ}rÚ(h*XHardware Modules ReservationrÛh+jh/h0h1hÉh3}rÜ(h8]rÝUhardware-modules-reservationrÞah7]h5]h6]h;]rßhauh=Nh>hh?]ràhHXHardware Modules Reservationrá…�râ}rã(h*jÛh+jÙubaubhÒ)�rä}rå(h*XÛJailhouse is a partitioning hypervisor. This means a HW peripheral is in exclusive control of one of the cells. Jailhouse cell config file defines this ownership to ensure that all accesses to peripherals are isolated between different cells. Access to any peripheral outside of the owned will be treated as violation, and jailhouse will park that cell. To ensure that Linux uses only the assigned peripheral, we can disable the peripherals which are owned by the other cell.ræh+jh/h0h1hÖh3}rç(h5]h6]h7]h8]h;]uh=Mh>hh?]rèhHXÛJailhouse is a partitioning hypervisor. This means a HW peripheral is in exclusive control of one of the cells. Jailhouse cell config file defines this ownership to ensure that all accesses to peripherals are isolated between different cells. Access to any peripheral outside of the owned will be treated as violation, and jailhouse will park that cell. To ensure that Linux uses only the assigned peripheral, we can disable the peripherals which are owned by the other cell.ré…�rê}rë(h*jæh+jäubaubhÒ)�rì}rí(h*X]Following nodes describe an example of how devices are disabled in the root cell device tree.rîh+jh/h0h1hÖh3}rï(h5]h6]h7]h8]h;]uh=Mh>hh?]rðhHX]Following nodes describe an example of how devices are disabled in the root cell device tree.rñ…�rò}ró(h*jîh+jìubaubjˆ)�rô}rõ(h*X´/* Disable uart used by inamte cell */ &main_uart1 { status = "disabled"; }; /* Disable emmc instance used by inamte cell */ &main_sdhci0 { status = "disabled"; };h+jh/h0h1j‹h3}rö(j�jŽh8]h7]h5]h6]h;]uh=M"h>hh?]r÷hHX´/* Disable uart used by inamte cell */ &main_uart1 { status = "disabled"; }; /* Disable emmc instance used by inamte cell */ &main_sdhci0 { status = "disabled"; };rø…�rù}rú(h*Uh+jôubaubj)�rû}rü(h*Uh+jh/h0h1jh3}rý(j XCONFIG_sdk in ('PLSDK')h8]h7]h5]h6]h;]uh=Mh>hh?]rþ(hÒ)�rÿ}r (h*X™Linux kernel enables all SOC HW modules which are required for its configuration. Appropriate drivers configure required clocks and initialize HW registers. For all unused IPs, clocks are not configured. Also, kernel power management can put a module into the sleep mode. A jailhouse inmate doesn't share the same hardware module with Linux kernel (except debug UART). But the inmate doesn't configure required clocks and doesn't deal with power domains. So, we still rely on Linux kernel (at least at the current release) to configure clocks to inmate HW modules. If we want to use some hardware modules for an inmate, we have to tell kernel about this in advance.r h+jûh/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=Mh>hh?]r hHX™Linux kernel enables all SOC HW modules which are required for its configuration. Appropriate drivers configure required clocks and initialize HW registers. For all unused IPs, clocks are not configured. Also, kernel power management can put a module into the sleep mode. A jailhouse inmate doesn't share the same hardware module with Linux kernel (except debug UART). But the inmate doesn't configure required clocks and doesn't deal with power domains. So, we still rely on Linux kernel (at least at the current release) to configure clocks to inmate HW modules. If we want to use some hardware modules for an inmate, we have to tell kernel about this in advance.r …�r }r (h*j h+jÿubaubhÒ)�r }r (h*X€The following nodes disable using of the timer8 and uart9 by kernel. Also, this restricts kernel to put those IPs to sleep mode.r h+jûh/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=M*h>hh?]r hHX€The following nodes disable using of the timer8 and uart9 by kernel. Also, this restricts kernel to put those IPs to sleep mode.r …�r }r (h*j h+j ubaubjˆ)�r }r (h*Xk&timer8 { status = "disabled"; ti,no-idle; }; &uart9 { status = "disabled"; ti,no-idle; };h+jûh/h0h1j‹h3}r (j�jŽh8]h7]h5]h6]h;]uh=M>h>hh?]r hHXk&timer8 { status = "disabled"; ti,no-idle; }; &uart9 { status = "disabled"; ti,no-idle; };r …�r }r (h*Uh+j ubaubhÒ)�r }r (h*X³You may see other nodes in the jailhouse DTSes which reserve other IPs to be used for inmates. Thus, IDK's DTS disables nodes, which IPs are used for icss\_emac and pruss inmates.h+jûh/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=M9h>hh?]r hHX²You may see other nodes in the jailhouse DTSes which reserve other IPs to be used for inmates. Thus, IDK's DTS disables nodes, which IPs are used for icss_emac and pruss inmates.r …�r }r (h*X³You may see other nodes in the jailhouse DTSes which reserve other IPs to be used for inmates. Thus, IDK's DTS disables nodes, which IPs are used for icss\_emac and pruss inmates.h+j ubaubhÅ)�r }r (h*X GIC Interrupt Inputs Reservationr h+jûh/h0h1hÉh3}r (h8]r! U gic-interrupt-inputs-reservationr" ah7]h5]h6]h;]r# hauh=Nh>hh?]r$ hHX GIC Interrupt Inputs Reservationr% …�r& }r' (h*j h+j ubaubhÒ)�r( }r) (h*X.Interrupt lines from hardware modules don't go to ARM interrupt controller (GIC) directly. They go to a crossbar register, which selects a GIC distributor input. The selection is done dynamically by Linux kernel. Linux keeps track of all used and unused GIC inputs. If a jailhouse inmate has to use an interrupt, it has to configure the crossbar register by itself. To prevent conflicts between the Linux crossbar manager and the inmate, and give to the inmate some unused GIC input lines, which it can use, we need to reserve some of them in the kernel dts.r* h+jûh/h0h1hÖh3}r+ (h5]h6]h7]h8]h;]uh=M@h>hh?]r, hHX.Interrupt lines from hardware modules don't go to ARM interrupt controller (GIC) directly. They go to a crossbar register, which selects a GIC distributor input. The selection is done dynamically by Linux kernel. Linux keeps track of all used and unused GIC inputs. If a jailhouse inmate has to use an interrupt, it has to configure the crossbar register by itself. To prevent conflicts between the Linux crossbar manager and the inmate, and give to the inmate some unused GIC input lines, which it can use, we need to reserve some of them in the kernel dts.r- …�r. }r/ (h*j* h+j( ubaubhÒ)�r0 }r1 (h*XœThis can be done by adding GIC input numbers to the "ti,irqs-skip" property of the "crossbar\_mpu:" node. Lines 134 and 135 are added to the following node.h+jûh/h0h1hÖh3}r2 (h5]h6]h7]h8]h;]uh=MJh>hh?]r3 hHX›This can be done by adding GIC input numbers to the "ti,irqs-skip" property of the "crossbar_mpu:" node. Lines 134 and 135 are added to the following node.r4 …�r5 }r6 (h*XœThis can be done by adding GIC input numbers to the "ti,irqs-skip" property of the "crossbar\_mpu:" node. Lines 134 and 135 are added to the following node.h+j0 ubaubjˆ)�r7 }r8 (h*XScrossbar_mpu: crossbar@4a002a48 { ti,irqs-skip = <10 133 134 135 139 140>; };h+jûh/h0h1j‹h3}r9 (j�jŽh8]h7]h5]h6]h;]uh=M_h>hh?]r: hHXScrossbar_mpu: crossbar@4a002a48 { ti,irqs-skip = <10 133 134 135 139 140>; };r; …�r< }r= (h*Uh+j7 ubaubhÒ)�r> }r? (h*X{**Note:** The icss\_emac.bin application uses much more interrupt lines. That is why IDK's dtb skips additional interrupts.h+jûh/h0h1hÖh3}r@ (h5]h6]h7]h8]h;]uh=MTh>hh?]rA (j_)�rB }rC (h*X **Note:**h3}rD (h5]h6]h7]h8]h;]uh+j> h?]rE hHXNote:rF …�rG }rH (h*Uh+jB ubah1jgubhHXq The icss_emac.bin application uses much more interrupt lines. That is why IDK's dtb skips additional interrupts.rI …�rJ }rK (h*Xr The icss\_emac.bin application uses much more interrupt lines. That is why IDK's dtb skips additional interrupts.h+j> ubeubjˆ)�rL }rM (h*Xdcrossbar_mpu: crossbar@4a002a48 { ti,irqs-skip = <10 44 127 129 133 134 135 136 137 139 140>; };h+jûh/h0h1j‹h3}rN (j�jŽh8]h7]h5]h6]h;]uh=Mhh>hh?]rO hHXdcrossbar_mpu: crossbar@4a002a48 { ti,irqs-skip = <10 44 127 129 133 134 135 136 137 139 140>; };rP …�rQ }rR (h*Uh+jL ubaubeubhÅ)�rS }rT (h*XRoot-cell configurationrU h+jh/h0h1hÉh3}rV (h8]rW Uroot-cell-configurationrX ah7]h5]h6]h;]rY hauh=Nh>hh?]rZ hHXRoot-cell configurationr[ …�r\ }r] (h*jU h+jS ubaubhÒ)�r^ }r_ (h*X{When hypervisor is being enabled, it creates a cell for Linux and moves it to that cell. The cell is called as "root-cell". The cell configuration as a "\*.c" file which is compiled to a special binary format "\*.cell" file. The hypervisor uses the "cell" file to create a cell. The cell configuration describes memory regions and their attributes which will be used by the cell:h+jh/h0h1hÖh3}r` (h5]h6]h7]h8]h;]uh=M`h>hh?]ra hHXyWhen hypervisor is being enabled, it creates a cell for Linux and moves it to that cell. The cell is called as "root-cell". The cell configuration as a "*.c" file which is compiled to a special binary format "*.cell" file. The hypervisor uses the "cell" file to create a cell. The cell configuration describes memory regions and their attributes which will be used by the cell:rb …�rc }rd (h*X{When hypervisor is being enabled, it creates a cell for Linux and moves it to that cell. The cell is called as "root-cell". The cell configuration as a "\*.c" file which is compiled to a special binary format "\*.cell" file. The hypervisor uses the "cell" file to create a cell. The cell configuration describes memory regions and their attributes which will be used by the cell:h+j^ ubaubjˆ)�re }rf (h*X¡.mem_regions = { /* OCMCRAM */ { .phys_start = 0x40300000, .virt_start = 0x40300000, .size = 0x80000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, /* 0x40380000 - 0x48020000 */ { .phys_start = 0x40380000, .virt_start = 0x40380000, .size = 0x7ca0000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, /* UART... */ { .phys_start = 0x48020000, .virt_start = 0x48020000, .size = 0xe0000,//0x00001000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, ... /* RAM */ { .phys_start = 0x80000000, .virt_start = 0x80000000, .size = 0x6F000000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE, }, /* Leave hole for hypervisor */ /* RAM */ { .phys_start = 0xF0000000, .virt_start = 0xF0000000, .size = 0x10000000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE, },h+jh/h0h1j‹h3}rg (j�jŽh8]h7]h5]h6]h;]uh=Mxh>hh?]rh hHX¡.mem_regions = { /* OCMCRAM */ { .phys_start = 0x40300000, .virt_start = 0x40300000, .size = 0x80000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, /* 0x40380000 - 0x48020000 */ { .phys_start = 0x40380000, .virt_start = 0x40380000, .size = 0x7ca0000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, /* UART... */ { .phys_start = 0x48020000, .virt_start = 0x48020000, .size = 0xe0000,//0x00001000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO, }, ... /* RAM */ { .phys_start = 0x80000000, .virt_start = 0x80000000, .size = 0x6F000000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE, }, /* Leave hole for hypervisor */ /* RAM */ { .phys_start = 0xF0000000, .virt_start = 0xF0000000, .size = 0x10000000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE, },ri …�rj }rk (h*Uh+je ubaubhÒ)�rl }rm (h*XLFollowing code snippet shows the bitmap of CPU cores dedicated for the cell:rn h+jh/h0h1hÖh3}ro (h5]h6]h7]h8]h;]uh=M‘h>hh?]rp hHXLFollowing code snippet shows the bitmap of CPU cores dedicated for the cell:rq …�rr }rs (h*jn h+jl ubaubjˆ)�rt }ru (h*X.cpus = { 0x3, },h+jh/h0h1j‹h3}rv (j�jŽh8]h7]h5]h6]h;]uh=M¤h>hh?]rw hHX.cpus = { 0x3, },rx …�ry }rz (h*Uh+jt ubaubhÒ)�r{ }r| (h*XOFollowing code snippet shows the bitmap of interrupt controller SPI interrupts:r} h+jh/h0h1hÖh3}r~ (h5]h6]h7]h8]h;]uh=M™h>hh?]r hHXOFollowing code snippet shows the bitmap of interrupt controller SPI interrupts:r€ …�r� }r‚ (h*j} h+j{ ubaubjˆ)�rƒ }r„ (h*X].irqchips = { /* GIC */ { .address = 0x48211000, .pin_base = 32, .pin_bitmap = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }, }, /* GIC */ { .address = 0x48211000, .pin_base = 160, .pin_bitmap = { 0xffffffff, 0, 0, 0 }, }, },h+jh/h0h1j‹h3}r… (j�jŽh8]h7]h5]h6]h;]uh=M¬h>hh?]r† hHX].irqchips = { /* GIC */ { .address = 0x48211000, .pin_base = 32, .pin_bitmap = { 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff }, }, /* GIC */ { .address = 0x48211000, .pin_base = 160, .pin_bitmap = { 0xffffffff, 0, 0, 0 }, }, },r‡ …�rˆ }r‰ (h*Uh+jƒ ubaubhÒ)�rŠ }r‹ (h*X!These settings are for all cells.rŒ h+jh/h0h1hÖh3}r� (h5]h6]h7]h8]h;]uh=M®h>hh?]rŽ hHX!These settings are for all cells.r� …�r� }r‘ (h*jŒ h+jŠ ubaubhÒ)�r’ }r“ (h*XQIn addition, the root cell also allocates the physical memory for the hypervisor.r” h+jh/h0h1hÖh3}r• (h5]h6]h7]h8]h;]uh=M°h>hh?]r– hHXQIn addition, the root cell also allocates the physical memory for the hypervisor.r— …�r˜ }r™ (h*j” h+j’ ubaubjˆ)�rš }r› (h*XQ.hypervisor_memory = { .phys_start = 0xef000000, .size = 0x1000000, },h+jh/h0h1j‹h3}rœ (j�jŽh8]h7]h5]h6]h;]uh=MÄh>hh?]r� hHXQ.hypervisor_memory = { .phys_start = 0xef000000, .size = 0x1000000, },rž …�rŸ }r  (h*Uh+jš ubaubhÒ)�r¡ }r¢ (h*X¬The "memory regions" section is used by hypervisor to create the second stage MMU translation table. Usually for root-cell, the identical mapping is being used - "VA = PA".r£ h+jh/h0h1hÖh3}r¤ (h5]h6]h7]h8]h;]uh=Mºh>hh?]r¥ hHX¬The "memory regions" section is used by hypervisor to create the second stage MMU translation table. Usually for root-cell, the identical mapping is being used - "VA = PA".r¦ …�r§ }r¨ (h*j£ h+j¡ ubaubhÅ)�r© }rª (h*XBare Metal Inmate Exampler« h+jh/h0h1hÉh3}r¬ (h8]r­ Ubare-metal-inmate-exampler® ah7]h5]h6]h;]r¯ h auh=Nh>hh?]r° hHXBare Metal Inmate Exampler± …�r² }r³ (h*j« h+j© ubaubhÒ)�r´ }rµ (h*X-Jailhouse comes with inmate demos located at the **inmates/demos** directory. Current (v0.6) version has two demo inmates: **gic-demo** and **uart-demo**. Those are very simple bare-metal applications that demonstrate a uart and arm-timer interrupt. Those demos are common for all jailhouse platforms.h+jh/h0h1hÖh3}r¶ (h5]h6]h7]h8]h;]uh=MÁh>hh?]r· (hHX1Jailhouse comes with inmate demos located at the r¸ …�r¹ }rº (h*X1Jailhouse comes with inmate demos located at the h+j´ ubj_)�r» }r¼ (h*X**inmates/demos**h3}r½ (h5]h6]h7]h8]h;]uh+j´ h?]r¾ hHX inmates/demosr¿ …�rÀ }rÁ (h*Uh+j» ubah1jgubhHX9 directory. Current (v0.6) version has two demo inmates: r …�rà }rÄ (h*X9 directory. Current (v0.6) version has two demo inmates: h+j´ ubj_)�rÅ }rÆ (h*X **gic-demo**h3}rÇ (h5]h6]h7]h8]h;]uh+j´ h?]rÈ hHXgic-demorÉ …�rÊ }rË (h*Uh+jÅ ubah1jgubhHX and rÌ …�rÍ }rÎ (h*X and h+j´ ubj_)�rÏ }rÐ (h*X **uart-demo**h3}rÑ (h5]h6]h7]h8]h;]uh+j´ h?]rÒ hHX uart-demorÓ …�rÔ }rÕ (h*Uh+jÏ ubah1jgubhHX”. Those are very simple bare-metal applications that demonstrate a uart and arm-timer interrupt. Those demos are common for all jailhouse platforms.rÖ …�r× }rØ (h*X”. Those are very simple bare-metal applications that demonstrate a uart and arm-timer interrupt. Those demos are common for all jailhouse platforms.h+j´ ubeubj)�rÙ }rÚ (h*Uh+jh/h0h1jh3}rÛ (j XCONFIG_sdk in ('PLSDK')h8]h7]h5]h6]h;]uh=MÇh>hh?]rÜ (hÒ)�rÝ }rÞ (h*X‡More interesting may be the **ti-app**, a demo made especially for AM572x SOC. The code is located at the **inmate/ti\_app** directory.h+jÙ h/h0h1hÖh3}rß (h5]h6]h7]h8]h;]uh=MÉh>hh?]rà (hHXMore interesting may be the rá …�râ }rã (h*XMore interesting may be the h+jÝ ubj_)�rä }rå (h*X **ti-app**h3}ræ (h5]h6]h7]h8]h;]uh+jÝ h?]rç hHXti-apprè …�ré }rê (h*Uh+jä ubah1jgubhHXD, a demo made especially for AM572x SOC. The code is located at the rë …�rì }rí (h*XD, a demo made especially for AM572x SOC. The code is located at the h+jÝ ubj_)�rî }rï (h*X**inmate/ti\_app**h3}rð (h5]h6]h7]h8]h;]uh+jÝ h?]rñ hHX inmate/ti_apprò …�ró }rô (h*Uh+jî ubah1jgubhHX directory.rõ …�rö }r÷ (h*X directory.h+jÝ ubeubhÒ)�rø }rù (h*X Basically this application is a sandbox to make some experiments. The current version demonstrates using a uart, timer and a GIC SPI interrupt (timer generates periodic interrupts). The application also has some extra code, which was used to measure interrupt latency.rú h+jÙ h/h0h1hÖh3}rû (h5]h6]h7]h8]h;]uh=MÌh>hh?]rü hHX Basically this application is a sandbox to make some experiments. The current version demonstrates using a uart, timer and a GIC SPI interrupt (timer generates periodic interrupts). The application also has some extra code, which was used to measure interrupt latency.rý …�rþ }rÿ (h*jú h+jø ubaubhÒ)�r }r (h*X•As any inmate, the ti-app inmate works in a cell. The am57xx-evm-ti-app.c is the cell configuration file. For this cell, only ARM1 core will be used:r h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÑh>hh?]r hHX•As any inmate, the ti-app inmate works in a cell. The am57xx-evm-ti-app.c is the cell configuration file. For this cell, only ARM1 core will be used:r …�r }r (h*j h+j ubaubjˆ)�r }r (h*X.cpus = { 0x2, },h+jÙ h/h0h1j‹h3}r (j�jŽh8]h7]h5]h6]h;]uh=Mæh>hh?]r hHX.cpus = { 0x2, },r …�r }r (h*Uh+j ubaubhÒ)�r }r (h*X„**NOTE:** Actually on am572 SOC, which has only 2 ARM core and Linux always uses the ARM0 core only ARM1 can be taken for an inmate.h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÛh>hh?]r (j_)�r }r (h*X **NOTE:**h3}r (h5]h6]h7]h8]h;]uh+j h?]r hHXNOTE:r …�r }r (h*Uh+j ubah1jgubhHX{ Actually on am572 SOC, which has only 2 ARM core and Linux always uses the ARM0 core only ARM1 can be taken for an inmate.r …�r }r (h*X{ Actually on am572 SOC, which has only 2 ARM core and Linux always uses the ARM0 core only ARM1 can be taken for an inmate.h+j ubeubhÒ)�r }r (h*X,The cell configuration has 5 memory regions:r h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÞh>hh?]r! hHX,The cell configuration has 5 memory regions:r" …�r# }r$ (h*j h+j ubaubjˆ)�r% }r& (h*X+/* UART... */ { .phys_start = 0x48020000, .virt_start = 0x48020000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* UART... */ { .phys_start = 0x48424000, .virt_start = 0x48424000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* TIMER... */ { .phys_start = 0x48826000, .virt_start = 0x48826000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* L4_CFG */ { .phys_start = 0x4a000000, .virt_start = 0x4a000000, .size = 0xE00000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* RAM */ { .phys_start = 0xee000000, .virt_start = 0, .size = 0x800000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, },h+jÙ h/h0h1j‹h3}r' (j�jŽh8]h7]h5]h6]h;]uh=Mñh>hh?]r( hHX+/* UART... */ { .phys_start = 0x48020000, .virt_start = 0x48020000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* UART... */ { .phys_start = 0x48424000, .virt_start = 0x48424000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* TIMER... */ { .phys_start = 0x48826000, .virt_start = 0x48826000, .size = 0x1000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* L4_CFG */ { .phys_start = 0x4a000000, .virt_start = 0x4a000000, .size = 0xE00000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_IO | JAILHOUSE_MEM_ROOTSHARED, }, /* RAM */ { .phys_start = 0xee000000, .virt_start = 0, .size = 0x800000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, },r) …�r* }r+ (h*Uh+j% ubaubhÒ)�r, }r- (h*XOTwo for UARTs. The first one for UART3, which is a standard EVM debug uart. The second for UART9, using of which requires some board modifications. But UART9 doesn't conflict with Linux or hypervisor and may be more useful if the inmate needs a dedicated UART. One region for timer9 and one for access multiple configuration registers.r. h+jÙ h/h0h1hÖh3}r/ (h5]h6]h7]h8]h;]uh=Mh>hh?]r0 hHXOTwo for UARTs. The first one for UART3, which is a standard EVM debug uart. The second for UART9, using of which requires some board modifications. But UART9 doesn't conflict with Linux or hypervisor and may be more useful if the inmate needs a dedicated UART. One region for timer9 and one for access multiple configuration registers.r1 …�r2 }r3 (h*j. h+j, ubaubhÒ)�r4 }r5 (h*XVThe last region is for RAM allocated for the inmate. Similar to root-cell memory regions configuration memory mapping for all regions except for RAM are identical (VA = PA). For the RAM region virtual address has to be '0'. The physical addresses of the region must be inside of the physical memory reserved for inmates in the Linux DTS file.r6 h+jÙ h/h0h1hÖh3}r7 (h5]h6]h7]h8]h;]uh=M h>hh?]r8 hHXVThe last region is for RAM allocated for the inmate. Similar to root-cell memory regions configuration memory mapping for all regions except for RAM are identical (VA = PA). For the RAM region virtual address has to be '0'. The physical addresses of the region must be inside of the physical memory reserved for inmates in the Linux DTS file.r9 …�r: }r; (h*j6 h+j4 ubaubhÒ)�r< }r= (h*XŒIn the .irqchip section of the cell configuration file we reserve GIC interrupt line #134 (**One of two lines reserved in the kernel DTS**).h+jÙ h/h0h1hÖh3}r> (h5]h6]h7]h8]h;]uh=Mh>hh?]r? (hHX[In the .irqchip section of the cell configuration file we reserve GIC interrupt line #134 (r@ …�rA }rB (h*X[In the .irqchip section of the cell configuration file we reserve GIC interrupt line #134 (h+j< ubj_)�rC }rD (h*X/**One of two lines reserved in the kernel DTS**h3}rE (h5]h6]h7]h8]h;]uh+j< h?]rF hHX+One of two lines reserved in the kernel DTSrG …�rH }rI (h*Uh+jC ubah1jgubhHX).rJ …�rK }rL (h*X).h+j< ubeubjˆ)�rM }rN (h*Xm/* GIC */ { .address = 0x48211000, .pin_base = 160, .pin_bitmap = { 0x00000040, }, },h+jÙ h/h0h1j‹h3}rO (j�jŽh8]h7]h5]h6]h;]uh=M(h>hh?]rP hHXm/* GIC */ { .address = 0x48211000, .pin_base = 160, .pin_bitmap = { 0x00000040, }, },rQ …�rR }rS (h*Uh+jM ubaubhÒ)�rT }rU (h*XžHere where #134 comes from. The 0x00000040 is the bitmask of the sixth bit. So, .pin\_base(160) + .pin\_bitmap(6) - 32(number of SWI and PPI interrupt) = 134.h+jÙ h/h0h1hÖh3}rV (h5]h6]h7]h8]h;]uh=M!h>hh?]rW hHXœHere where #134 comes from. The 0x00000040 is the bitmask of the sixth bit. So, .pin_base(160) + .pin_bitmap(6) - 32(number of SWI and PPI interrupt) = 134.rX …�rY }rZ (h*XžHere where #134 comes from. The 0x00000040 is the bitmask of the sixth bit. So, .pin\_base(160) + .pin\_bitmap(6) - 32(number of SWI and PPI interrupt) = 134.h+jT ubaubhÒ)�r[ }r\ (h*XàAs other jailhouse demos the **ti-app** uses the jailhouse startup code, which sets the inmate vector table, zeros BSS segment, sets the stack up and calls the inmate\_main(). The initialization of the GIC controller is done by hypervisor. Also the hypervisor remaps GICC interface to GICV interface and intercepts all inmates accesses to GICD. It allows to read/write only GICD registers, related to the lines given in the .irq\_chips section. In our case for the line #134 only.h+jÙ h/h0h1hÖh3}r] (h5]h6]h7]h8]h;]uh=M%h>hh?]r^ (hHXAs other jailhouse demos the r_ …�r` }ra (h*XAs other jailhouse demos the h+j[ ubj_)�rb }rc (h*X **ti-app**h3}rd (h5]h6]h7]h8]h;]uh+j[ h?]re hHXti-apprf …�rg }rh (h*Uh+jb ubah1jgubhHX· uses the jailhouse startup code, which sets the inmate vector table, zeros BSS segment, sets the stack up and calls the inmate_main(). The initialization of the GIC controller is done by hypervisor. Also the hypervisor remaps GICC interface to GICV interface and intercepts all inmates accesses to GICD. It allows to read/write only GICD registers, related to the lines given in the .irq_chips section. In our case for the line #134 only.ri …�rj }rk (h*X¹ uses the jailhouse startup code, which sets the inmate vector table, zeros BSS segment, sets the stack up and calls the inmate\_main(). The initialization of the GIC controller is done by hypervisor. Also the hypervisor remaps GICC interface to GICV interface and intercepts all inmates accesses to GICD. It allows to read/write only GICD registers, related to the lines given in the .irq\_chips section. In our case for the line #134 only.h+j[ ubeubhÒ)�rl }rm (h*XÚIn the inmate\_main() the inmate initializes uart, sets the crossbar and calls the gic\_setup() to set the inmate's interrupt handler. The jailhouse provides inmate interrupt controller API. This can be used by inmate.h+jÙ h/h0h1hÖh3}rn (h5]h6]h7]h8]h;]uh=M-h>hh?]ro hHXØIn the inmate_main() the inmate initializes uart, sets the crossbar and calls the gic_setup() to set the inmate's interrupt handler. The jailhouse provides inmate interrupt controller API. This can be used by inmate.rp …�rq }rr (h*XÚIn the inmate\_main() the inmate initializes uart, sets the crossbar and calls the gic\_setup() to set the inmate's interrupt handler. The jailhouse provides inmate interrupt controller API. This can be used by inmate.h+jl ubaubhÒ)�rs }rt (h*XAThe ti-app initializes the timer and enters to the infinite loop.ru h+jÙ h/h0h1hÖh3}rv (h5]h6]h7]h8]h;]uh=M2h>hh?]rw hHXAThe ti-app initializes the timer and enters to the infinite loop.rx …�ry }rz (h*ju h+js ubaubhÒ)�r{ }r| (h*X[Actually the inmate code has only about 100 lines and doesn't require any more explanation.r} h+jÙ h/h0h1hÖh3}r~ (h5]h6]h7]h8]h;]uh=M4h>hh?]r hHX[Actually the inmate code has only about 100 lines and doesn't require any more explanation.r€ …�r� }r‚ (h*j} h+j{ ubaubhÅ)�rƒ }r„ (h*XRTOS PDK Inmatesr… h+jÙ h/h0h1hÉh3}r† (h8]r‡ Urtos-pdk-inmatesrˆ ah7]h5]h6]h;]r‰ hauh=Nh>hh?]rŠ hHXRTOS PDK Inmatesr‹ …�rŒ }r� (h*j… h+jƒ ubaubhÒ)�rŽ }r� (h*X„The jailhouse demo applications and the "ti\_app" are built by jailhouse's makefile inside the jailhouse's source tree. It is more interesting to build an inmate outside of the jailhouse source tree, using independent makefile and third party libraries. This release provides **led\_test**, a simple example of a bare-metal application, which uses prebuilt RTOS PDK libraries and is built independently on Jailhouse. It also has ports of two TI RTOS SYSBIOS test applications - pruss and icss\_emac. There are two other examples: 1) bare-metal memcp\_bm - a simple application to measure memory bandwidth; 2) Ethercat\_slave\_demo - ported to Jailhouse example from "PRU-ICSS Industrial Software for Sitaraâ„¢ Processors". The example requires some modifications of the PRU-ICSS Industrial Software, which is not published yet. That is why the ethercat\_slave\_demo included here as a reference only.h+jÙ h/h0h1hÖh3}r� (h5]h6]h7]h8]h;]uh=M:h>hh?]r‘ (hHXThe jailhouse demo applications and the "ti_app" are built by jailhouse's makefile inside the jailhouse's source tree. It is more interesting to build an inmate outside of the jailhouse source tree, using independent makefile and third party libraries. This release provides r’ …�r“ }r” (h*XThe jailhouse demo applications and the "ti\_app" are built by jailhouse's makefile inside the jailhouse's source tree. It is more interesting to build an inmate outside of the jailhouse source tree, using independent makefile and third party libraries. This release provides h+jŽ ubj_)�r• }r– (h*X **led\_test**h3}r— (h5]h6]h7]h8]h;]uh+jŽ h?]r˜ hHXled_testr™ …�rš }r› (h*Uh+j• ubah1jgubhHX], a simple example of a bare-metal application, which uses prebuilt RTOS PDK libraries and is built independently on Jailhouse. It also has ports of two TI RTOS SYSBIOS test applications - pruss and icss_emac. There are two other examples: 1) bare-metal memcp_bm - a simple application to measure memory bandwidth; 2) Ethercat_slave_demo - ported to Jailhouse example from "PRU-ICSS Industrial Software for Sitaraâ„¢ Processors". The example requires some modifications of the PRU-ICSS Industrial Software, which is not published yet. That is why the ethercat_slave_demo included here as a reference only.rœ …�r� }rž (h*Xc, a simple example of a bare-metal application, which uses prebuilt RTOS PDK libraries and is built independently on Jailhouse. It also has ports of two TI RTOS SYSBIOS test applications - pruss and icss\_emac. There are two other examples: 1) bare-metal memcp\_bm - a simple application to measure memory bandwidth; 2) Ethercat\_slave\_demo - ported to Jailhouse example from "PRU-ICSS Industrial Software for Sitaraâ„¢ Processors". The example requires some modifications of the PRU-ICSS Industrial Software, which is not published yet. That is why the ethercat\_slave\_demo included here as a reference only.h+jŽ ubeubhÒ)�rŸ }r  (h*X¢The code of the applications is located on the $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04/demos/jailhouse-inmate directory, which contains:h+jÙ h/h0h1hÖh3}r¡ (h5]h6]h7]h8]h;]uh=MIh>hh?]r¢ hHX™The code of the applications is located on the $(SDK_INSTALL_PATH)/processor_sdk_rtos_am57xx_4_01_00_04/demos/jailhouse-inmate directory, which contains:r£ …�r¤ }r¥ (h*X¢The code of the applications is located on the $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04/demos/jailhouse-inmate directory, which contains:h+jŸ ubaubjˆ)�r¦ }r§ (h*XG├── baremetal │ ├── led │ │ ├── led_test.c │ │ └── makefile │ ├── memcp_bm │ │ ├── makefile │ │ └── memcp_bm.c │ └── soc │ └── am572x │ ├── evmAM572x │ │ ├── entry.S │ │ ├── gic.c │ │ ├── linker.cmd │ │ └── make.inc │ └── rules.mk ├── makefile ├── rtos │ ├── ethercat_slave_demo │ │ ├── bios │ │ │ ├── am572x_app.cfg │ │ │ └── makefile │ │ ├── Makefile │ │ └── src │ │ └── board_jh.c │ ├── icss_emac │ │ ├── bios │ │ │ ├── icss_emac_arm_wSoCLib.cfg │ │ │ └── makefile │ │ ├── lnk_pruss_fw.cmd │ │ ├── Makefile │ │ └── src │ │ ├── idkAM572x_ethernet_config_jh.c │ │ └── idkAM572x_jh.c │ ├── pru-icss │ │ ├── bios │ │ │ ├── makefile │ │ │ └── pruss_arm_wSoCLib.cfg │ │ ├── Makefile │ │ └── src │ │ └── idkAM572x_jh.c │ └── Rules.mk └── setenv.shh+jÙ h/h0h1j‹h3}r¨ (j�jŽh8]h7]h5]h6]h;]uh=M^h>hh?]r© hHXG├── baremetal │ ├── led │ │ ├── led_test.c │ │ └── makefile │ ├── memcp_bm │ │ ├── makefile │ │ └── memcp_bm.c │ └── soc │ └── am572x │ ├── evmAM572x │ │ ├── entry.S │ │ ├── gic.c │ │ ├── linker.cmd │ │ └── make.inc │ └── rules.mk ├── makefile ├── rtos │ ├── ethercat_slave_demo │ │ ├── bios │ │ │ ├── am572x_app.cfg │ │ │ └── makefile │ │ ├── Makefile │ │ └── src │ │ └── board_jh.c │ ├── icss_emac │ │ ├── bios │ │ │ ├── icss_emac_arm_wSoCLib.cfg │ │ │ └── makefile │ │ ├── lnk_pruss_fw.cmd │ │ ├── Makefile │ │ └── src │ │ ├── idkAM572x_ethernet_config_jh.c │ │ └── idkAM572x_jh.c │ ├── pru-icss │ │ ├── bios │ │ │ ├── makefile │ │ │ └── pruss_arm_wSoCLib.cfg │ │ ├── Makefile │ │ └── src │ │ └── idkAM572x_jh.c │ └── Rules.mk └── setenv.shrª …�r« }r¬ (h*Uh+j¦ ubaubhÅ)�r­ }r® (h*XBare-metal exampler¯ h+jÙ h/h0h1hÉh3}r° (h8]r± Ubare-metal-exampler² ah7]h5]h6]h;]r³ hauh=Nh>hh?]r´ hHXBare-metal examplerµ …�r¶ }r· (h*j¯ h+j­ ubaubhÒ)�r¸ }r¹ (h*X¼The bare-metal directory has three subdirectories: **soc** - has common for bare-metal applications soc specific code; **led** - led\_test application code; **memcp\_bm** - memcp\_bm code;h+jÙ h/h0h1hÖh3}rº (h5]h6]h7]h8]h;]uh=M}h>hh?]r» (hHX3The bare-metal directory has three subdirectories: r¼ …�r½ }r¾ (h*X3The bare-metal directory has three subdirectories: h+j¸ ubj_)�r¿ }rÀ (h*X**soc**h3}rÁ (h5]h6]h7]h8]h;]uh+j¸ h?]r hHXsocrà …�rÄ }rÅ (h*Uh+j¿ ubah1jgubhHX= - has common for bare-metal applications soc specific code; rÆ …�rÇ }rÈ (h*X= - has common for bare-metal applications soc specific code; h+j¸ ubj_)�rÉ }rÊ (h*X**led**h3}rË (h5]h6]h7]h8]h;]uh+j¸ h?]rÌ hHXledrÍ …�rÎ }rÏ (h*Uh+jÉ ubah1jgubhHX - led_test application code; rÐ …�rÑ }rÒ (h*X - led\_test application code; h+j¸ ubj_)�rÓ }rÔ (h*X **memcp\_bm**h3}rÕ (h5]h6]h7]h8]h;]uh+j¸ h?]rÖ hHXmemcp_bmr× …�rØ }rÙ (h*Uh+jÓ ubah1jgubhHX - memcp_bm code;rÚ …�rÛ }rÜ (h*X - memcp\_bm code;h+j¸ ubeubhÒ)�rÝ }rÞ (h*X4The **soc/am572x/evmAM572x** sub-directory contains:rß h+jÙ h/h0h1hÖh3}rà (h5]h6]h7]h8]h;]uh=M�h>hh?]rá (hHXThe râ …�rã }rä (h*XThe h+jÝ ubj_)�rå }ræ (h*X**soc/am572x/evmAM572x**h3}rç (h5]h6]h7]h8]h;]uh+jÝ h?]rè hHXsoc/am572x/evmAM572xré …�rê }rë (h*Uh+jå ubah1jgubhHX sub-directory contains:rì …�rí }rî (h*X sub-directory contains:h+jÝ ubeubjð)�rï }rð (h*Uh+jÙ h/h0h1jóh3}rñ (jõX-h8]h7]h5]h6]h;]uh=Mƒh>hh?]rò (jô)�ró }rô (h*X)**entry.S** - startup file for an inmate;rõ h+jï h/h0h1j÷h3}rö (h5]h6]h7]h8]h;]uh=Nh>hh?]r÷ hÒ)�rø }rù (h*jõ h+jó h/h0h1hÖh3}rú (h5]h6]h7]h8]h;]uh=Mƒh?]rû (j_)�rü }rý (h*X **entry.S**h3}rþ (h5]h6]h7]h8]h;]uh+jø h?]rÿ hHXentry.Sr …�r }r (h*Uh+jü ubah1jgubhHX - startup file for an inmate;r …�r }r (h*X - startup file for an inmate;h+jø ubeubaubjô)�r }r (h*Xu**gic.c** - has the dummy \_weak\_ INTCCommonIntrHandler(), which can be overridden by an actual application handler.h+jï h/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r }r (h*Xu**gic.c** - has the dummy \_weak\_ INTCCommonIntrHandler(), which can be overridden by an actual application handler.h+j h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=M„h?]r (j_)�r }r (h*X **gic.c**h3}r (h5]h6]h7]h8]h;]uh+j h?]r hHXgic.cr …�r }r (h*Uh+j ubah1jgubhHXj - has the dummy _weak_ INTCCommonIntrHandler(), which can be overridden by an actual application handler.r …�r }r (h*Xl - has the dummy \_weak\_ INTCCommonIntrHandler(), which can be overridden by an actual application handler.h+j ubeubaubjô)�r }r (h*XÌ**linker.cmd** - jailhouse requires that an inmate shall start from address "0". It also requires that all inmates segments be located in contiguous memory. This linker.cmd is to meet these requirements. h+jï h/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r }r (h*XË**linker.cmd** - jailhouse requires that an inmate shall start from address "0". It also requires that all inmates segments be located in contiguous memory. This linker.cmd is to meet these requirements.h+j h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=M†h?]r (j_)�r }r! (h*X**linker.cmd**h3}r" (h5]h6]h7]h8]h;]uh+j h?]r# hHX linker.cmdr$ …�r% }r& (h*Uh+j ubah1jgubhHX½ - jailhouse requires that an inmate shall start from address "0". It also requires that all inmates segments be located in contiguous memory. This linker.cmd is to meet these requirements.r' …�r( }r) (h*X½ - jailhouse requires that an inmate shall start from address "0". It also requires that all inmates segments be located in contiguous memory. This linker.cmd is to meet these requirements.h+j ubeubaubeubhÒ)�r* }r+ (h*XThe **led** directory contains:r, h+jÙ h/h0h1hÖh3}r- (h5]h6]h7]h8]h;]uh=MŠh>hh?]r. (hHXThe r/ …�r0 }r1 (h*XThe h+j* ubj_)�r2 }r3 (h*X**led**h3}r4 (h5]h6]h7]h8]h;]uh+j* h?]r5 hHXledr6 …�r7 }r8 (h*Uh+j2 ubah1jgubhHX directory contains:r9 …�r: }r; (h*X directory contains:h+j* ubeubjð)�r< }r= (h*Uh+jÙ h/h0h1jóh3}r> (jõX-h8]h7]h5]h6]h;]uh=MŒh>hh?]r? (jô)�r@ }rA (h*X¢The main inmate **led\_test.c** code. This file is based on $(SDK\_INSTALL\_PATH)/pdk\_am57xx\_1\_0\_6/packages/ti/board/diag/led/src/led\_test.c diagnostic application. Because the inmate works as a virtual machine in order to use caches MMU has to be enabled. So, the application creates the MMU translation table with identical mapping and enables MMU. It also has the gic\_init(), which is now used at this relese.h+j< h/h0h1j÷h3}rB (h5]h6]h7]h8]h;]uh=Nh>hh?]rC hÒ)�rD }rE (h*X¢The main inmate **led\_test.c** code. This file is based on $(SDK\_INSTALL\_PATH)/pdk\_am57xx\_1\_0\_6/packages/ti/board/diag/led/src/led\_test.c diagnostic application. Because the inmate works as a virtual machine in order to use caches MMU has to be enabled. So, the application creates the MMU translation table with identical mapping and enables MMU. It also has the gic\_init(), which is now used at this relese.h+j@ h/h0h1hÖh3}rF (h5]h6]h7]h8]h;]uh=MŒh?]rG (hHXThe main inmate rH …�rI }rJ (h*XThe main inmate h+jD ubj_)�rK }rL (h*X**led\_test.c**h3}rM (h5]h6]h7]h8]h;]uh+jD h?]rN hHX led_test.crO …�rP }rQ (h*Uh+jK ubah1jgubhHX{ code. This file is based on $(SDK_INSTALL_PATH)/pdk_am57xx_1_0_6/packages/ti/board/diag/led/src/led_test.c diagnostic application. Because the inmate works as a virtual machine in order to use caches MMU has to be enabled. So, the application creates the MMU translation table with identical mapping and enables MMU. It also has the gic_init(), which is now used at this relese.rR …�rS }rT (h*Xƒ code. This file is based on $(SDK\_INSTALL\_PATH)/pdk\_am57xx\_1\_0\_6/packages/ti/board/diag/led/src/led\_test.c diagnostic application. Because the inmate works as a virtual machine in order to use caches MMU has to be enabled. So, the application creates the MMU translation table with identical mapping and enables MMU. It also has the gic\_init(), which is now used at this relese.h+jD ubeubaubjô)�rU }rV (h*Xa**makefile** is to build the inmate. As you can see, it links number of brebuilt PDK libraries. h+j< h/h0h1j÷h3}rW (h5]h6]h7]h8]h;]uh=Nh>hh?]rX hÒ)�rY }rZ (h*X_**makefile** is to build the inmate. As you can see, it links number of brebuilt PDK libraries.h+jU h/h0h1hÖh3}r[ (h5]h6]h7]h8]h;]uh=M’h?]r\ (j_)�r] }r^ (h*X **makefile**h3}r_ (h5]h6]h7]h8]h;]uh+jY h?]r` hHXmakefilera …�rb }rc (h*Uh+j] ubah1jgubhHXS is to build the inmate. As you can see, it links number of brebuilt PDK libraries.rd …�re }rf (h*XS is to build the inmate. As you can see, it links number of brebuilt PDK libraries.h+jY ubeubaubeubhÒ)�rg }rh (h*XZTo build the **led\_test.bin** (a jailhouse inmate has to be \*.bin, but not \*.out file):h+jÙ h/h0h1hÖh3}ri (h5]h6]h7]h8]h;]uh=M–h>hh?]rj (hHX To build the rk …�rl }rm (h*X To build the h+jg ubj_)�rn }ro (h*X**led\_test.bin**h3}rp (h5]h6]h7]h8]h;]uh+jg h?]rq hHX led_test.binrr …�rs }rt (h*Uh+jn ubah1jgubhHX: (a jailhouse inmate has to be *.bin, but not *.out file):ru …�rv }rw (h*X< (a jailhouse inmate has to be \*.bin, but not \*.out file):h+jg ubeubjð)�rx }ry (h*Uh+jÙ h/h0h1jóh3}rz (jõX-h8]h7]h5]h6]h;]uh=M™h>hh?]r{ (jô)�r| }r} (h*XPcd to $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04 drectoryh+jx h/h0h1j÷h3}r~ (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r€ }r� (h*XPcd to $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04 drectoryh+j| h/h0h1hÖh3}r‚ (h5]h6]h7]h8]h;]uh=M™h?]rƒ hHXGcd to $(SDK_INSTALL_PATH)/processor_sdk_rtos_am57xx_4_01_00_04 drectoryr„ …�r… }r† (h*XPcd to $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04 drectoryh+j€ ubaubaubjô)�r‡ }rˆ (h*Xsource setupenv.shr‰ h+jx h/h0h1j÷h3}rŠ (h5]h6]h7]h8]h;]uh=Nh>hh?]r‹ hÒ)�rŒ }r� (h*j‰ h+j‡ h/h0h1hÖh3}rŽ (h5]h6]h7]h8]h;]uh=Mœh?]r� hHXsource setupenv.shr� …�r‘ }r’ (h*j‰ h+jŒ ubaubaubjô)�r“ }r” (h*X_cd to $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04/demos/jailhouse-inmatesh+jx h/h0h1j÷h3}r• (h5]h6]h7]h8]h;]uh=Nh>hh?]r– hÒ)�r— }r˜ (h*X_cd to $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04/demos/jailhouse-inmatesh+j“ h/h0h1hÖh3}r™ (h5]h6]h7]h8]h;]uh=M�h?]rš hHXVcd to $(SDK_INSTALL_PATH)/processor_sdk_rtos_am57xx_4_01_00_04/demos/jailhouse-inmatesr› …�rœ }r� (h*X_cd to $(SDK\_INSTALL\_PATH)/processor\_sdk\_rtos\_am57xx\_4\_01\_00\_04/demos/jailhouse-inmatesh+j— ubaubaubjô)�rž }rŸ (h*Xsource setenv.shr  h+jx h/h0h1j÷h3}r¡ (h5]h6]h7]h8]h;]uh=Nh>hh?]r¢ hÒ)�r£ }r¤ (h*j  h+jž h/h0h1hÖh3}r¥ (h5]h6]h7]h8]h;]uh=MŸh?]r¦ hHXsource setenv.shr§ …�r¨ }r© (h*j  h+j£ ubaubaubjô)�rª }r« (h*Xrun **make led\_test** h+jx h/h0h1j÷h3}r¬ (h5]h6]h7]h8]h;]uh=Nh>hh?]r­ hÒ)�r® }r¯ (h*Xrun **make led\_test**h+jª h/h0h1hÖh3}r° (h5]h6]h7]h8]h;]uh=M h?]r± (hHXrun r² …�r³ }r´ (h*Xrun h+j® ubj_)�rµ }r¶ (h*X**make led\_test**h3}r· (h5]h6]h7]h8]h;]uh+j® h?]r¸ hHX make led_testr¹ …�rº }r» (h*Uh+jµ ubah1jgubeubaubeubhÒ)�r¼ }r½ (h*XPThat should build the led\_test.bin binary, that can be loaded to the jailhouse cell and run. As any other inmate it has to be run in a cell, created with appropriate cell configuration. In contrast to the led\_test.bin, which is compiled independently on jailhouse, a corresponding cell configuration is compiled by jailhouse makefile.h+jÙ h/h0h1hÖh3}r¾ (h5]h6]h7]h8]h;]uh=M¢h>hh?]r¿ hHXNThat should build the led_test.bin binary, that can be loaded to the jailhouse cell and run. As any other inmate it has to be run in a cell, created with appropriate cell configuration. In contrast to the led_test.bin, which is compiled independently on jailhouse, a corresponding cell configuration is compiled by jailhouse makefile.rÀ …�rÁ }r (h*XPThat should build the led\_test.bin binary, that can be loaded to the jailhouse cell and run. As any other inmate it has to be run in a cell, created with appropriate cell configuration. In contrast to the led\_test.bin, which is compiled independently on jailhouse, a corresponding cell configuration is compiled by jailhouse makefile.h+j¼ ubaubhÒ)�rà }rÄ (h*XïThe am57xx-pdk-leddiag.c cell configuration file is located in the $TI\_SDK\_PATH/board-support/extra-drivers/jailhouse-0.7/configs directory. Use the compiled am57xx-pdk-leddiag.cell file when you create the cell for led\_test.bin inmate.h+jÙ h/h0h1hÖh3}rÅ (h5]h6]h7]h8]h;]uh=M¨h>hh?]rÆ hHXìThe am57xx-pdk-leddiag.c cell configuration file is located in the $TI_SDK_PATH/board-support/extra-drivers/jailhouse-0.7/configs directory. Use the compiled am57xx-pdk-leddiag.cell file when you create the cell for led_test.bin inmate.rÇ …�rÈ }rÉ (h*XïThe am57xx-pdk-leddiag.c cell configuration file is located in the $TI\_SDK\_PATH/board-support/extra-drivers/jailhouse-0.7/configs directory. Use the compiled am57xx-pdk-leddiag.cell file when you create the cell for led\_test.bin inmate.h+jà ubaubhÒ)�rÊ }rË (h*X£See `Running the Demo on AM572x-EVM <#running-the-demo-on-am572x-evm>`__ or `Running the Demo on AM572x-IDK <#running-the-demo-on-am572x-idk>`__ to run the inmate.rÌ h+jÙ h/h0h1hÖh3}rÍ (h5]h6]h7]h8]h;]uh=M­h>hh?]rÎ (hHXSee rÏ …�rÐ }rÑ (h*XSee h+jÊ ubh–)�rÒ }rÓ (h*XD`Running the Demo on AM572x-EVM <#running-the-demo-on-am572x-evm>`__h3}rÔ (UnameXRunning the Demo on AM572x-EVMhšX#running-the-demo-on-am572x-evmh8]h7]h5]h6]h;]uh+jÊ h?]rÕ hHXRunning the Demo on AM572x-EVMrÖ …�r× }rØ (h*Uh+jÒ ubah1hŸubhHX or rÙ …�rÚ }rÛ (h*X or h+jÊ ubh–)�rÜ }rÝ (h*XD`Running the Demo on AM572x-IDK <#running-the-demo-on-am572x-idk>`__h3}rÞ (UnameXRunning the Demo on AM572x-IDKhšX#running-the-demo-on-am572x-idkh8]h7]h5]h6]h;]uh+jÊ h?]rß hHXRunning the Demo on AM572x-IDKrà …�rá }râ (h*Uh+jÜ ubah1hŸubhHX to run the inmate.rã …�rä }rå (h*X to run the inmate.h+jÊ ubeubhÒ)�ræ }rç (h*XöThe **memcp\_bm** is very similar to led\_test. It is built in the same way as the led\_test. Use the am57xx-bm.cell file from $TI\_SDK\_PATH/board-support/extra-drivers/jailhouse-0.7/configs to create the jailhouse cell for the memcp\_bm inmate.h+jÙ h/h0h1hÖh3}rè (h5]h6]h7]h8]h;]uh=M¯h>hh?]ré (hHXThe rê …�rë }rì (h*XThe h+jæ ubj_)�rí }rî (h*X **memcp\_bm**h3}rï (h5]h6]h7]h8]h;]uh+jæ h?]rð hHXmemcp_bmrñ …�rò }ró (h*Uh+jí ubah1jgubhHXà is very similar to led_test. It is built in the same way as the led_test. Use the am57xx-bm.cell file from $TI_SDK_PATH/board-support/extra-drivers/jailhouse-0.7/configs to create the jailhouse cell for the memcp_bm inmate.rô …�rõ }rö (h*Xå is very similar to led\_test. It is built in the same way as the led\_test. Use the am57xx-bm.cell file from $TI\_SDK\_PATH/board-support/extra-drivers/jailhouse-0.7/configs to create the jailhouse cell for the memcp\_bm inmate.h+jæ ubeubhÅ)�r÷ }rø (h*XRTOS BIOS Examplesrù h+jÙ h/h0h1hÉh3}rú (h8]rû Urtos-bios-examplesrü ah7]h5]h6]h;]rý hauh=Nh>hh?]rþ hHXRTOS BIOS Examplesrÿ …�r }r (h*jù h+j÷ ubaubhÒ)�r }r (h*X!The pruss and icss\_emac examples are located in the rtos/pruss and rtos/icss\_emac directories. The structures of the both directories are identical. Each directory contains the bios and src subdirectories. The bios contains XDC type application configuration file and makefile. The configuration file is reworked copy of the original RTOS application configuration file. For example the configuration file for icss\_emac inmate was ported from $(SDK\_INSTALL\_PATH)/ti/pdk\_am57xx\_1\_0\_7/packages/ti/drv/icss\_emac/test/am572x/armv7/bios/icss\_emac\_arm\_wSoCLib.cfg file. As far as jailhouse inmate is not responsible for board related configuration, the board library, i2c library, OCRAM MMU sections and some other unnecessary for the inmate components were removed from the configuration file.h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=M·h>hh?]r hHXThe pruss and icss_emac examples are located in the rtos/pruss and rtos/icss_emac directories. The structures of the both directories are identical. Each directory contains the bios and src subdirectories. The bios contains XDC type application configuration file and makefile. The configuration file is reworked copy of the original RTOS application configuration file. For example the configuration file for icss_emac inmate was ported from $(SDK_INSTALL_PATH)/ti/pdk_am57xx_1_0_7/packages/ti/drv/icss_emac/test/am572x/armv7/bios/icss_emac_arm_wSoCLib.cfg file. As far as jailhouse inmate is not responsible for board related configuration, the board library, i2c library, OCRAM MMU sections and some other unnecessary for the inmate components were removed from the configuration file.r …�r }r (h*X!The pruss and icss\_emac examples are located in the rtos/pruss and rtos/icss\_emac directories. The structures of the both directories are identical. Each directory contains the bios and src subdirectories. The bios contains XDC type application configuration file and makefile. The configuration file is reworked copy of the original RTOS application configuration file. For example the configuration file for icss\_emac inmate was ported from $(SDK\_INSTALL\_PATH)/ti/pdk\_am57xx\_1\_0\_7/packages/ti/drv/icss\_emac/test/am572x/armv7/bios/icss\_emac\_arm\_wSoCLib.cfg file. As far as jailhouse inmate is not responsible for board related configuration, the board library, i2c library, OCRAM MMU sections and some other unnecessary for the inmate components were removed from the configuration file.h+j ubaubhÒ)�r }r (h*XÞAs far as the application main function calls the board\_init() function, this function as well as the Board\_moduleClockInit() (with required for icss\_emac application clocks) are implemented in the idkAM572x\_jh.c file.h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÄh>hh?]r hHXÚAs far as the application main function calls the board_init() function, this function as well as the Board_moduleClockInit() (with required for icss_emac application clocks) are implemented in the idkAM572x_jh.c file.r …�r }r (h*XÞAs far as the application main function calls the board\_init() function, this function as well as the Board\_moduleClockInit() (with required for icss\_emac application clocks) are implemented in the idkAM572x\_jh.c file.h+j ubaubhÒ)�r }r (h*X˜Thus the ported configuration file, the idkAM572x\_jh.c and makefiles are only new files required to port RTOS SDK existing project to jailhouse inmate.h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÉh>hh?]r hHX—Thus the ported configuration file, the idkAM572x_jh.c and makefiles are only new files required to port RTOS SDK existing project to jailhouse inmate.r …�r }r (h*X˜Thus the ported configuration file, the idkAM572x\_jh.c and makefiles are only new files required to port RTOS SDK existing project to jailhouse inmate.h+j ubaubhÒ)�r }r (h*XmThe jailhouse-inmate/Makefile has the "pruss\_test" and "icss\_emac\_test" targets to build the BIOS inmates.h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÍh>hh?]r hHXjThe jailhouse-inmate/Makefile has the "pruss_test" and "icss_emac_test" targets to build the BIOS inmates.r …�r }r (h*XmThe jailhouse-inmate/Makefile has the "pruss\_test" and "icss\_emac\_test" targets to build the BIOS inmates.h+j ubaubhÒ)�r }r (h*X'The structure of the ethercat\_slave\_demo example is very similar to the pruss and icss\_emac examples. As far as it depends on a particular version of the "PRU-ICSS Industrial Software", which has to be installed independently, building of the demo is not included into the top level makefile.h+jÙ h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MÐh>hh?]r! hHX$The structure of the ethercat_slave_demo example is very similar to the pruss and icss_emac examples. As far as it depends on a particular version of the "PRU-ICSS Industrial Software", which has to be installed independently, building of the demo is not included into the top level makefile.r" …�r# }r$ (h*X'The structure of the ethercat\_slave\_demo example is very similar to the pruss and icss\_emac examples. As far as it depends on a particular version of the "PRU-ICSS Industrial Software", which has to be installed independently, building of the demo is not included into the top level makefile.h+j ubaubhÅ)�r% }r& (h*XRTOS BIOS Porting Notesr' h+jÙ h/h0h1hÉh3}r( (h8]r) Urtos-bios-porting-notesr* ah7]h5]h6]h;]r+ h auh=Nh>hh?]r, hHXRTOS BIOS Porting Notesr- …�r. }r/ (h*j' h+j% ubaubhÒ)�r0 }r1 (h*XñAs you can see in the previous section, the RTOS BIOS inmates has only few new files. Almost all files were reused from RTOS SDK examples. But following notes have to be considered when porting an RTOS BIOS application to a Jailhouse inmate.r2 h+jÙ h/h0h1hÖh3}r3 (h5]h6]h7]h8]h;]uh=MÙh>hh?]r4 hHXñAs you can see in the previous section, the RTOS BIOS inmates has only few new files. Almost all files were reused from RTOS SDK examples. But following notes have to be considered when porting an RTOS BIOS application to a Jailhouse inmate.r5 …�r6 }r7 (h*j2 h+j0 ubaubhÒ)�r8 }r9 (h*X2Jailhouse inmate runs in a small cell. The cell is created by hypervisor, which was started from already booted Linux OS. That says that the SOC, board and most clocks are already initialized and the inmate don't need and usually cannot touch any resources not listed in the inmate cell configuration file.r: h+jÙ h/h0h1hÖh3}r; (h5]h6]h7]h8]h;]uh=MÞh>hh?]r< hHX2Jailhouse inmate runs in a small cell. The cell is created by hypervisor, which was started from already booted Linux OS. That says that the SOC, board and most clocks are already initialized and the inmate don't need and usually cannot touch any resources not listed in the inmate cell configuration file.r= …�r> }r? (h*j: h+j8 ubaubhÒ)�r@ }rA (h*XThus the using of board and i2c libraries were removed from cponfiguration file. Also OCRAM was removed from MMU configuration.rB h+jÙ h/h0h1hÖh3}rC (h5]h6]h7]h8]h;]uh=Mäh>hh?]rD hHXThus the using of board and i2c libraries were removed from cponfiguration file. Also OCRAM was removed from MMU configuration.rE …�rF }rG (h*jB h+j@ ubaubhÒ)�rH }rI (h*X"Jailhouse hypervisor allows inmate to access certain GICD registers, but only for those interrupt lines, which are listed in the cell configuration file. The cell creating routine reconfigures GICD target registers by itself. The standard gic\_init() BIOS API configures target registers for all interrupt lines. That is not permitted for an inmate. To avoid this the latest SYSBIOS release has a special feature, which allows to disable target configuration from GIC initialization function. See the following fragment at the configuration file:h+jÙ h/h0h1hÖh3}rJ (h5]h6]h7]h8]h;]uh=Mçh>hh?]rK hHX!Jailhouse hypervisor allows inmate to access certain GICD registers, but only for those interrupt lines, which are listed in the cell configuration file. The cell creating routine reconfigures GICD target registers by itself. The standard gic_init() BIOS API configures target registers for all interrupt lines. That is not permitted for an inmate. To avoid this the latest SYSBIOS release has a special feature, which allows to disable target configuration from GIC initialization function. See the following fragment at the configuration file:rL …�rM }rN (h*X"Jailhouse hypervisor allows inmate to access certain GICD registers, but only for those interrupt lines, which are listed in the cell configuration file. The cell creating routine reconfigures GICD target registers by itself. The standard gic\_init() BIOS API configures target registers for all interrupt lines. That is not permitted for an inmate. To avoid this the latest SYSBIOS release has a special feature, which allows to disable target configuration from GIC initialization function. See the following fragment at the configuration file:h+jH ubaubjˆ)�rO }rP (h*XOvar Hwi = xdc.useModule('ti.sysbios.family.arm.gic.Hwi'); Hwi.initGicd = false;h+jÙ h/h0h1j‹h3}rQ (j�jŽh8]h7]h5]h6]h;]uh=Mh>hh?]rR hHXOvar Hwi = xdc.useModule('ti.sysbios.family.arm.gic.Hwi'); Hwi.initGicd = false;rS …�rT }rU (h*Uh+jO ubaubhÒ)�rV }rW (h*X}The RTOS BIOS applications are built to \*.out format. RTOS loader may load this file to the board even if the image has multiple sections with their addresses spread across the entire SOC address range. The Jailhouse supports only \*.bin format, and inmate may use only allocated for it memory carved out from Linux. Therefore the ported application shall use only limited memory.h+jÙ h/h0h1hÖh3}rX (h5]h6]h7]h8]h;]uh=Mõh>hh?]rY hHX{The RTOS BIOS applications are built to *.out format. RTOS loader may load this file to the board even if the image has multiple sections with their addresses spread across the entire SOC address range. The Jailhouse supports only *.bin format, and inmate may use only allocated for it memory carved out from Linux. Therefore the ported application shall use only limited memory.rZ …�r[ }r\ (h*X}The RTOS BIOS applications are built to \*.out format. RTOS loader may load this file to the board even if the image has multiple sections with their addresses spread across the entire SOC address range. The Jailhouse supports only \*.bin format, and inmate may use only allocated for it memory carved out from Linux. Therefore the ported application shall use only limited memory.h+jV ubaubhÒ)�r] }r^ (h*XAJailhouse may start an inmate that start from virtual address 0x0, but an usual RTOS application is linked to the 0x80000000 address and with different from that entry point. The Jailhouse allows to start such applications (see above). But using the linux-loader required additional node in the inmate cell configuration.r_ h+jÙ h/h0h1hÖh3}r` (h5]h6]h7]h8]h;]uh=Müh>hh?]ra hHXAJailhouse may start an inmate that start from virtual address 0x0, but an usual RTOS application is linked to the 0x80000000 address and with different from that entry point. The Jailhouse allows to start such applications (see above). But using the linux-loader required additional node in the inmate cell configuration.rb …�rc }rd (h*j_ h+j] ubaubjˆ)�re }rf (h*X¸/* RAM loader */ { .phys_start = 0xed000000, .virt_start = 0x0, .size = 0x10000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, }, /* RAM RTOS 224MB*/ { .phys_start = 0xe0000000, .virt_start = 0x80000000, .size = 0xd000000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, },h+jÙ h/h0h1j‹h3}rg (j�jŽh8]h7]h5]h6]h;]uh=Mh>hh?]rh hHX¸/* RAM loader */ { .phys_start = 0xed000000, .virt_start = 0x0, .size = 0x10000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, }, /* RAM RTOS 224MB*/ { .phys_start = 0xe0000000, .virt_start = 0x80000000, .size = 0xd000000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_EXECUTE | JAILHOUSE_MEM_LOADABLE, },ri …�rj }rk (h*Uh+je ubaubhÒ)�rl }rm (h*XUYou may see that cell configuration for icss\_emac inmate configures two RAM regions:h+jÙ h/h0h1hÖh3}rn (h5]h6]h7]h8]h;]uh=Mh>hh?]ro hHXTYou may see that cell configuration for icss_emac inmate configures two RAM regions:rp …�rq }rr (h*XUYou may see that cell configuration for icss\_emac inmate configures two RAM regions:h+jl ubaubjê)�rs }rt (h*Uh+jÙ h/h0h1jíh3}ru (jïU.h8]h7]h5]jðUh6]h;]jñjòuh=Mh>hh?]rv (jô)�rw }rx (h*X8small one with virtual address 0x0 for the linux-loader;ry h+js h/h0h1j÷h3}rz (h5]h6]h7]h8]h;]uh=Nh>hh?]r{ hÒ)�r| }r} (h*jy h+jw h/h0h1hÖh3}r~ (h5]h6]h7]h8]h;]uh=Mh?]r hHX8small one with virtual address 0x0 for the linux-loader;r€ …�r� }r‚ (h*jy h+j| ubaubaubjô)�rƒ }r„ (h*X,main region for the icss\_emac test itself; h+js h/h0h1j÷h3}r… (h5]h6]h7]h8]h;]uh=Nh>hh?]r† hÒ)�r‡ }rˆ (h*X+main region for the icss\_emac test itself;h+jƒ h/h0h1hÖh3}r‰ (h5]h6]h7]h8]h;]uh=Mh?]rŠ hHX*main region for the icss_emac test itself;r‹ …�rŒ }r� (h*X+main region for the icss\_emac test itself;h+j‡ ubaubaubeubhÅ)�rŽ }r� (h*XGeneral Porting Notesr� h+jÙ h/h0h1hÉh3}r‘ (h8]r’ Ugeneral-porting-notesr“ ah7]h5]h6]h;]r” hauh=Nh>hh?]r• hHXGeneral Porting Notesr– …�r— }r˜ (h*j� h+jŽ ubaubhÒ)�r™ }rš (h*XùWhen you start porting your RTOS or bare-metal application to Jailhouse inmate, you have to consider several things. They are listed below. This list is not complete and has just recommendations based on common sense and previous porting experience.r› h+jÙ h/h0h1hÖh3}rœ (h5]h6]h7]h8]h;]uh=Mh>hh?]r� hHXùWhen you start porting your RTOS or bare-metal application to Jailhouse inmate, you have to consider several things. They are listed below. This list is not complete and has just recommendations based on common sense and previous porting experience.rž …�rŸ }r  (h*j› h+j™ ubaubjð)�r¡ }r¢ (h*Uh+jÙ h/h0h1jóh3}r£ (jõX-h8]h7]h5]h6]h;]uh=M!h>hh?]r¤ (jô)�r¥ }r¦ (h*X**Linux always starts first** before hypervisor. Linux initializes all (or almost all) common resources of SOC. Thus it initializes memory controller, clocks, interrupt controller etc. It configures PINMUX registers. In most cases it takes care about board configuration as well. h+j¡ h/h0h1j÷h3}r§ (h5]h6]h7]h8]h;]uh=Nh>hh?]r¨ hÒ)�r© }rª (h*X**Linux always starts first** before hypervisor. Linux initializes all (or almost all) common resources of SOC. Thus it initializes memory controller, clocks, interrupt controller etc. It configures PINMUX registers. In most cases it takes care about board configuration as well.h+j¥ h/h0h1hÖh3}r« (h5]h6]h7]h8]h;]uh=M!h?]r¬ (j_)�r­ }r® (h*X**Linux always starts first**h3}r¯ (h5]h6]h7]h8]h;]uh+j© h?]r° hHXLinux always starts firstr± …�r² }r³ (h*Uh+j­ ubah1jgubhHXú before hypervisor. Linux initializes all (or almost all) common resources of SOC. Thus it initializes memory controller, clocks, interrupt controller etc. It configures PINMUX registers. In most cases it takes care about board configuration as well.r´ …�rµ }r¶ (h*Xú before hypervisor. Linux initializes all (or almost all) common resources of SOC. Thus it initializes memory controller, clocks, interrupt controller etc. It configures PINMUX registers. In most cases it takes care about board configuration as well.h+j© ubeubaubjô)�r· }r¸ (h*XÝ**Inmate Cell Configuration** defines resources, which are available for the inmate. The ported application can use only those resources and responsible for theirs initialization only. The ported application will not run on the board it used to run, but on a different **virtual board**, defined by the cell configuration. Thats is why the application cannot use any common board\_init or soc\_init functions that may touch used by Linux resources. **Inmate is a guest only**. h+j¡ h/h0h1j÷h3}r¹ (h5]h6]h7]h8]h;]uh=Nh>hh?]rº hÒ)�r» }r¼ (h*XÜ**Inmate Cell Configuration** defines resources, which are available for the inmate. The ported application can use only those resources and responsible for theirs initialization only. The ported application will not run on the board it used to run, but on a different **virtual board**, defined by the cell configuration. Thats is why the application cannot use any common board\_init or soc\_init functions that may touch used by Linux resources. **Inmate is a guest only**.h+j· h/h0h1hÖh3}r½ (h5]h6]h7]h8]h;]uh=M'h?]r¾ (j_)�r¿ }rÀ (h*X**Inmate Cell Configuration**h3}rÁ (h5]h6]h7]h8]h;]uh+j» h?]r hHXInmate Cell Configurationrà …�rÄ }rÅ (h*Uh+j¿ ubah1jgubhHXð defines resources, which are available for the inmate. The ported application can use only those resources and responsible for theirs initialization only. The ported application will not run on the board it used to run, but on a different rÆ …�rÇ }rÈ (h*Xð defines resources, which are available for the inmate. The ported application can use only those resources and responsible for theirs initialization only. The ported application will not run on the board it used to run, but on a different h+j» ubj_)�rÉ }rÊ (h*X**virtual board**h3}rË (h5]h6]h7]h8]h;]uh+j» h?]rÌ hHX virtual boardrÍ …�rÎ }rÏ (h*Uh+jÉ ubah1jgubhHX¡, defined by the cell configuration. Thats is why the application cannot use any common board_init or soc_init functions that may touch used by Linux resources. rÐ …�rÑ }rÒ (h*X£, defined by the cell configuration. Thats is why the application cannot use any common board\_init or soc\_init functions that may touch used by Linux resources. h+j» ubj_)�rÓ }rÔ (h*X**Inmate is a guest only**h3}rÕ (h5]h6]h7]h8]h;]uh+j» h?]rÖ hHXInmate is a guest onlyr× …�rØ }rÙ (h*Uh+jÓ ubah1jgubhHX.…�rÚ }rÛ (h*X.h+j» ubeubaubjô)�rÜ }rÝ (h*XÎAs it mentioned above Linux initializes **Interrupt Controller** and dynamically configures crossbar registers. It has to be planned ahead which interrupts inmate may use. Those interrupts has to be reserved at Linux's dts file. Also used by the inmate interrupts have to listed in the inmate cell configuration. Hypervisor configures GIC target registers for those interrupt. Inmate is responsible only for enabling, disabling and acknowledging the interrupts. h+j¡ h/h0h1j÷h3}rÞ (h5]h6]h7]h8]h;]uh=Nh>hh?]rß hÒ)�rà }rá (h*XÍAs it mentioned above Linux initializes **Interrupt Controller** and dynamically configures crossbar registers. It has to be planned ahead which interrupts inmate may use. Those interrupts has to be reserved at Linux's dts file. Also used by the inmate interrupts have to listed in the inmate cell configuration. Hypervisor configures GIC target registers for those interrupt. Inmate is responsible only for enabling, disabling and acknowledging the interrupts.h+jÜ h/h0h1hÖh3}râ (h5]h6]h7]h8]h;]uh=M0h?]rã (hHX(As it mentioned above Linux initializes rä …�rå }ræ (h*X(As it mentioned above Linux initializes h+jà ubj_)�rç }rè (h*X**Interrupt Controller**h3}ré (h5]h6]h7]h8]h;]uh+jà h?]rê hHXInterrupt Controllerrë …�rì }rí (h*Uh+jç ubah1jgubhHX� and dynamically configures crossbar registers. It has to be planned ahead which interrupts inmate may use. Those interrupts has to be reserved at Linux's dts file. Also used by the inmate interrupts have to listed in the inmate cell configuration. Hypervisor configures GIC target registers for those interrupt. Inmate is responsible only for enabling, disabling and acknowledging the interrupts.rî …�rï }rð (h*X� and dynamically configures crossbar registers. It has to be planned ahead which interrupts inmate may use. Those interrupts has to be reserved at Linux's dts file. Also used by the inmate interrupts have to listed in the inmate cell configuration. Hypervisor configures GIC target registers for those interrupt. Inmate is responsible only for enabling, disabling and acknowledging the interrupts.h+jà ubeubaubjô)�rñ }rò (h*XëLinux owns **I2C** buses. Inmate cannot has its owe driver to control I2C bus. It is not practicable even if the both root-cell and inmate cell configurations share I2C region and Linux and the Inmate have an agreement not to use I2C at the same time. The problem is that the Linux I2C driver works in interrupt mode and if the Inmate issues an I2C transaction, Linux's interrupt handler will be called. It brakes the Linux's and Inmate's I2C drivers state machines (or whatever they have). h+j¡ h/h0h1j÷h3}ró (h5]h6]h7]h8]h;]uh=Nh>hh?]rô hÒ)�rõ }rö (h*XêLinux owns **I2C** buses. Inmate cannot has its owe driver to control I2C bus. It is not practicable even if the both root-cell and inmate cell configurations share I2C region and Linux and the Inmate have an agreement not to use I2C at the same time. The problem is that the Linux I2C driver works in interrupt mode and if the Inmate issues an I2C transaction, Linux's interrupt handler will be called. It brakes the Linux's and Inmate's I2C drivers state machines (or whatever they have).h+jñ h/h0h1hÖh3}r÷ (h5]h6]h7]h8]h;]uh=M8h?]rø (hHX Linux owns rù …�rú }rû (h*X Linux owns h+jõ ubj_)�rü }rý (h*X**I2C**h3}rþ (h5]h6]h7]h8]h;]uh+jõ h?]rÿ hHXI2Cr …�r }r (h*Uh+jü ubah1jgubhHXØ buses. Inmate cannot has its owe driver to control I2C bus. It is not practicable even if the both root-cell and inmate cell configurations share I2C region and Linux and the Inmate have an agreement not to use I2C at the same time. The problem is that the Linux I2C driver works in interrupt mode and if the Inmate issues an I2C transaction, Linux's interrupt handler will be called. It brakes the Linux's and Inmate's I2C drivers state machines (or whatever they have).r …�r }r (h*XØ buses. Inmate cannot has its owe driver to control I2C bus. It is not practicable even if the both root-cell and inmate cell configurations share I2C region and Linux and the Inmate have an agreement not to use I2C at the same time. The problem is that the Linux I2C driver works in interrupt mode and if the Inmate issues an I2C transaction, Linux's interrupt handler will be called. It brakes the Linux's and Inmate's I2C drivers state machines (or whatever they have).h+jõ ubeubaubjô)�r }r (h*X×Using **GPIO** may have the same as I2C problem. It is easy to disable an entire GPIO bank from using by Linux and use it for the Inmate. But it is not practical to share the same bank by the both Linux and Inmate. h+j¡ h/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r }r (h*XÖUsing **GPIO** may have the same as I2C problem. It is easy to disable an entire GPIO bank from using by Linux and use it for the Inmate. But it is not practical to share the same bank by the both Linux and Inmate.h+j h/h0h1hÖh3}r (h5]h6]h7]h8]h;]uh=MAh?]r (hHXUsing r …�r }r (h*XUsing h+j ubj_)�r }r (h*X**GPIO**h3}r (h5]h6]h7]h8]h;]uh+j h?]r hHXGPIOr …�r }r (h*Uh+j ubah1jgubhHXÈ may have the same as I2C problem. It is easy to disable an entire GPIO bank from using by Linux and use it for the Inmate. But it is not practical to share the same bank by the both Linux and Inmate.r …�r }r (h*XÈ may have the same as I2C problem. It is easy to disable an entire GPIO bank from using by Linux and use it for the Inmate. But it is not practical to share the same bank by the both Linux and Inmate.h+j ubeubaubjô)�r }r (h*X¸Even if it is possible to dedicate a timer for an inmate, the source clock for that timer still comes from the SOC clock tree. That means the parent clock for that timer will be controlled by Linux. So, if Linux has enabled clock frequency scaling it may change the frequency of the timer's source clock and that affects the timer. The inmate will not have any means to disable that behavior. To avoid that Linux should run at a fixed OOP. h+j¡ h/h0h1j÷h3}r (h5]h6]h7]h8]h;]uh=Nh>hh?]r hÒ)�r }r (h*X·Even if it is possible to dedicate a timer for an inmate, the source clock for that timer still comes from the SOC clock tree. That means the parent clock for that timer will be controlled by Linux. So, if Linux has enabled clock frequency scaling it may change the frequency of the timer's source clock and that affects the timer. The inmate will not have any means to disable that behavior. To avoid that Linux should run at a fixed OOP.r! h+j h/h0h1hÖh3}r" (h5]h6]h7]h8]h;]uh=MFh?]r# hHX·Even if it is possible to dedicate a timer for an inmate, the source clock for that timer still comes from the SOC clock tree. That means the parent clock for that timer will be controlled by Linux. So, if Linux has enabled clock frequency scaling it may change the frequency of the timer's source clock and that affects the timer. The inmate will not have any means to disable that behavior. To avoid that Linux should run at a fixed OOP.r$ …�r% }r& (h*j! h+j ubaubaubeubjˆ)�r' }r( (h*X§root@am57xx-evm:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 1500000 root@am57xx-evm:echo 1500000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freqh+jÙ h/h0h1j‹h3}r) (j�jŽh8]h7]h5]h6]h;]uh=M^h>hh?]r* hHX§root@am57xx-evm:cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq 1500000 root@am57xx-evm:echo 1500000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freqr+ …�r, }r- (h*Uh+j' ubaubhÅ)�r. }r/ (h*X&Migration from Jailhouse v0.8 to v0.10r0 h+jÙ h/h0h1hÉh3}r1 (h8]r2 U&migration-from-jailhouse-v0-8-to-v0-10r3 ah7]h5]h6]h;]r4 hauh=Nh>hh?]r5 hHX&Migration from Jailhouse v0.8 to v0.10r6 …�r7 }r8 (h*j0 h+j. ubaubjð)�r9 }r: (h*Uh+jÙ h/h0h1jóh3}r; (jõX-h8]h7]h5]h6]h;]uh=MXh>hh?]r< jô)�r= }r> (h*X­The v0.10 Jailhouse has common debug UART that is shared between root-cell, hypervisor and an inmate compiled with the inmate library. A cell configuration for each inmate. h+j9 h/h0h1j÷h3}r? (h5]h6]h7]h8]h;]uh=Nh>hh?]r@ hÒ)�rA }rB (h*X¬The v0.10 Jailhouse has common debug UART that is shared between root-cell, hypervisor and an inmate compiled with the inmate library. A cell configuration for each inmate.rC h+j= h/h0h1hÖh3}rD (h5]h6]h7]h8]h;]uh=MXh?]rE hHX¬The v0.10 Jailhouse has common debug UART that is shared between root-cell, hypervisor and an inmate compiled with the inmate library. A cell configuration for each inmate.rF …�rG }rH (h*jC h+jA ubaubaubaubcdocutils.nodes definition_list rI )�rJ }rK (h*Uh+jÙ h/h0h1Udefinition_listrL h3}rM (h5]h6]h7]h8]h;]uh=Nh>hh?]rN cdocutils.nodes definition_list_item rO )�rP }rQ (h*X2shall have ".console" subnode in the ".cell" node h+jJ h/h0h1Udefinition_list_itemrR h3}rS (h5]h6]h7]h8]h;]uh=M]h?]rT (cdocutils.nodes term rU )�rV }rW (h*X$shall have ".console" subnode in therX h+jP h/h0h1UtermrY h3}rZ (h5]h6]h7]h8]h;]uh=M]h?]r[ hHX$shall have ".console" subnode in ther\ …�r] }r^ (h*jX h+jV ubaubcdocutils.nodes definition r_ )�r` }ra (h*Uh3}rb (h5]h6]h7]h8]h;]uh+jP h?]rc hÒ)�rd }re (h*X ".cell" noderf h+j` h/h0h1hÖh3}rg (h5]h6]h7]h8]h;]uh=M]h?]rh hHX ".cell" noderi …�rj }rk (h*jf h+jd ubaubah1U definitionrl ubeubaubjˆ)�rm }rn (h*XÍ.console = { .address = 0x48020000, /* .divider = 0x0d, */ .type = JAILHOUSE_CON_TYPE_8250, .flags = JAILHOUSE_CON_ACCESS_MMIO | JAILHOUSE_CON_REGDIST_4, },h+jÙ h/h0h1j‹h3}ro (j�jŽh8]h7]h5]h6]h;]uh=Mph>hh?]rp hHXÍ.console = { .address = 0x48020000, /* .divider = 0x0d, */ .type = JAILHOUSE_CON_TYPE_8250, .flags = JAILHOUSE_CON_ACCESS_MMIO | JAILHOUSE_CON_REGDIST_4, },rq …�rr }rs (h*Uh+jm ubaubhÒ)�rt }ru (h*XB**must have** /* communication region */ in the ".mem_region" noderv h+jÙ h/h0h1hÖh3}rw (h5]h6]h7]h8]h;]uh=Mih>hh?]rx (j_)�ry }rz (h*X **must have**h3}r{ (h5]h6]h7]h8]h;]uh+jt h?]r| hHX must haver} …�r~ }r (h*Uh+jy ubah1jgubhHX /* communication region r€ …�r� }r‚ (h*X /* communication region h+jt ubcdocutils.nodes problematic rƒ )�r„ }r… (h*X*h3}r† (h8]r‡ Uid2rˆ ah7]h5]h6]h;]UrefidUid1r‰ uh+jt h?]rŠ hHX*…�r‹ }rŒ (h*Uh+j„ ubah1U problematicr� ubhHX/ in the ".mem_region" noderŽ …�r� }r� (h*X/ in the ".mem_region" nodeh+jt ubeubjˆ)�r‘ }r’ (h*XÄ/* communication region */ { .virt_start = 0x80000000, .size = 0x00001000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_COMM_REGION, },h+jÙ h/h0h1j‹h3}r“ (j�jŽh8]h7]h5]h6]h;]uh=M|h>hh?]r” hHXÄ/* communication region */ { .virt_start = 0x80000000, .size = 0x00001000, .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE | JAILHOUSE_MEM_COMM_REGION, },r• …�r– }r— (h*Uh+j‘ ubaubjð)�r˜ }r™ (h*Uh+jÙ h/h0h1jóh3}rš (jõX-h8]h7]h5]h6]h;]uh=Mth>hh?]r› (jô)�rœ }r� (h*XŒall inmates that uses jailhouse inmate library shall add their memory regions to MMU table. This SDK doesn't provide examples to show that. h+j˜ h/h0h1j÷h3}rž (h5]h6]h7]h8]h;]uh=Nh>hh?]rŸ hÒ)�r  }r¡ (h*X‹all inmates that uses jailhouse inmate library shall add their memory regions to MMU table. This SDK doesn't provide examples to show that.r¢ h+jœ h/h0h1hÖh3}r£ (h5]h6]h7]h8]h;]uh=Mth?]r¤ hHX‹all inmates that uses jailhouse inmate library shall add their memory regions to MMU table. This SDK doesn't provide examples to show that.r¥ …�r¦ }r§ (h*j¢ h+j  ubaubaubjô)�r¨ }r© (h*XFfor inmates are not started from 0x0 set the cpu_reset_address at cellrª h+j˜ h/h0h1j÷h3}r« (h5]h6]h7]h8]h;]uh=Nh>hh?]r¬ hÒ)�r­ }r® (h*jª h+j¨ h/h0h1hÖh3}r¯ (h5]h6]h7]h8]h;]uh=Mwh?]r° hHXFfor inmates are not started from 0x0 set the cpu_reset_address at cellr± …�r² }r³ (h*jª h+j­ ubaubaubeubhÒ)�r´ }rµ (h*Xconfiguration filer¶ h+jÙ h/h0h1hÖh3}r· (h5]h6]h7]h8]h;]uh=Mxh>hh?]r¸ hHXconfiguration filer¹ …�rº }r» (h*j¶ h+j´ ubaubjˆ)�r¼ }r½ (h*X .cpu_reset_address = 0x90000000,h+jÙ h/h0h1j‹h3}r¾ (j�jŽh8]h7]h5]h6]h;]uh=M‹h>hh?]r¿ hHX .cpu_reset_address = 0x90000000,rÀ …�rÁ }r (h*Uh+j¼ ubaubjð)�rà }rÄ (h*Uh+jÙ h/h0h1jóh3}rÅ (jõX-h8]h7]h5]h6]h;]uh=M~h>hh?]rÆ jô)�rÇ }rÈ (h*XÑThe new Jailhouse version uses shared communincation regions started at VA 0x80000000, which conflicts with the default RTOS memory configuration. All RTOS based inmate memory configuration has to be updated: h+jà h/h0h1j÷h3}rÉ (h5]h6]h7]h8]h;]uh=Nh>hh?]rÊ hÒ)�rË }rÌ (h*XÐThe new Jailhouse version uses shared communincation regions started at VA 0x80000000, which conflicts with the default RTOS memory configuration. All RTOS based inmate memory configuration has to be updated:rÍ h+jÇ h/h0h1hÖh3}rÎ (h5]h6]h7]h8]h;]uh=M~h?]rÏ hHXÐThe new Jailhouse version uses shared communincation regions started at VA 0x80000000, which conflicts with the default RTOS memory configuration. All RTOS based inmate memory configuration has to be updated:rÐ …�rÑ }rÒ (h*jÍ h+jË ubaubaubaubjê)�rÓ }rÔ (h*Uh+jÙ h/h0h1jíh3}rÕ (jïU.h8]h7]h5]jðUh6]h;]jñjòuh=M‚h>hh?]rÖ (jô)�r× }rØ (h*XHDDR start address at linker script changed from 0x80000000 to 0x90000000rÙ h+jÓ h/h0h1j÷h3}rÚ (h5]h6]h7]h8]h;]uh=Nh>hh?]rÛ hÒ)�rÜ }rÝ (h*jÙ h+j× h/h0h1hÖh3}rÞ (h5]h6]h7]h8]h;]uh=M‚h?]rß hHXHDDR start address at linker script changed from 0x80000000 to 0x90000000rà …�rá }râ (h*jÙ h+jÜ ubaubaubjô)�rã }rä (h*XOAlso update all RTOS inmate MMU congiration to reflect the new starting addressh+jÓ h/h0h1j÷h3}rå (h5]h6]h7]h8]h;]uh=Nh>hh?]ræ hÒ)�rç }rè (h*XOAlso update all RTOS inmate MMU congiration to reflect the new starting addressré h+jã h/h0h1hÖh3}rê (h5]h6]h7]h8]h;]uh=Mƒh?]rë hHXOAlso update all RTOS inmate MMU congiration to reflect the new starting addressrì …�rí }rî (h*jé h+jç ubaubaubjô)�rï }rð (h*XÌAs far as we don't use linux_loader anymore the RTOS imate has to start from address set at cpu_reset_address. You may need to set the application entry point explicitly at application configuration file h+jÓ h/h0h1j÷h3}rñ (h5]h6]h7]h8]h;]uh=Nh>hh?]rò hÒ)�ró }rô (h*XËAs far as we don't use linux_loader anymore the RTOS imate has to start from address set at cpu_reset_address. You may need to set the application entry point explicitly at application configuration filerõ h+jï h/h0h1hÖh3}rö (h5]h6]h7]h8]h;]uh=M…h?]r÷ hHXËAs far as we don't use linux_loader anymore the RTOS imate has to start from address set at cpu_reset_address. You may need to set the application entry point explicitly at application configuration filerø …�rù }rú (h*jõ h+jó ubaubaubeubjˆ)�rû }rü (h*XnProgram.sectMap[".c_int00"] = new Program.SectionSpec(); Program.sectMap[".c_int00"].loadAddress = 0x90000000;h+jÙ h/h0h1j‹h3}rý (j�jŽh8]h7]h5]h6]h;]uh=Mšh>hh?]rþ hHXnProgram.sectMap[".c_int00"] = new Program.SectionSpec(); Program.sectMap[".c_int00"].loadAddress = 0x90000000;rÿ …�r}r(h*Uh+jû ubaubeubeubeubh/hPh1hRh3}r(h5]h6]h7]h8]h;]rh&auh=Kh>hh?]rhHX3ti-processor-sdk-linux-[platformName]-evm-r…�r}r(h*X3ti-processor-sdk-linux-[platformName]-evm-h+h(ubaubh^hZhghchphlhyhuh‚h~h‹h‡h”h�h¤h hÀh¼h­h©h·h³hUhLuUparse_messagesr]r (cdocutils.nodes system_message r )�r }r (h*Uh+jÙ h/h0h1Usystem_messager h3}r(h5]UlevelKh8]rj‰ ah7]rjˆ aUsourceh0h6]h;]UlineMiUtypeUWARNINGruh=Mjh>hh?]rhÒ)�r}r(h*X0Inline emphasis start-string without end-string.h3}r(h5]h6]h7]h8]h;]uh+j h?]rhHX0Inline emphasis start-string without end-string.r…�r}r(h*Uh+jubah1hÖubaubj )�r}r(h*Uh+jÙ h/h0h1j h3}r(h5]UlevelKh8]h7]Usourceh0h6]h;]UlineMxUtypejuh=Mwh>hh?]rhÒ)�r}r(h*X;Bullet list ends without a blank line; unexpected unindent.h3}r (h5]h6]h7]h8]h;]uh+jh?]r!hHX;Bullet list ends without a blank line; unexpected unindent.r"…�r#}r$(h*Uh+jubah1hÖubaubeUcurrent_sourcer%NU decorationr&NUautofootnote_startr'KUnameidsr(}r)(hj" hjãhj“ h jh jŒh j® h jMh j* hjÄhj² hj‘hj±hjÞhjÂhjVhjChj'hjÜhj´hjªhj3 hjX hjˆ hj¹hjü hh:h jh!j£h"hÌh#jžuh?]r*h-ah*UU transformerr+NU footnote_refsr,}r-Urefnamesr.}r/Usymbol_footnotesr0]r1Uautofootnote_refsr2]r3Usymbol_footnote_refsr4]r5U citationsr6]r7h>hU current_liner8NUtransform_messagesr9]r:Ureporterr;NUid_startr<KU autofootnotesr=]r>U citation_refsr?}r@Uindirect_targetsrA]rBUsettingsrC(cdocutils.frontend Values rDorE}rF(Ufootnote_backlinksrGKUrecord_dependenciesrHNU rfc_base_urlrIUhttps://tools.ietf.org/html/rJU tracebackrKˆUpep_referencesrLNUstrip_commentsrMNU toc_backlinksrNj¾U language_coderOUenrPU datestamprQNU report_levelrRKU _destinationrSNU halt_levelrTKU strip_classesrUNhENUerror_encoding_error_handlerrVUbackslashreplacerWUdebugrXNUembed_stylesheetrY‰Uoutput_encoding_error_handlerrZUstrictr[U sectnum_xformr\KUdump_transformsr]NU docinfo_xformr^KUwarning_streamr_NUpep_file_url_templater`Upep-%04draUexit_status_levelrbKUconfigrcNUstrict_visitorrdNUcloak_email_addressesreˆUtrim_footnote_reference_spacerf‰UenvrgNUdump_pseudo_xmlrhNUexpose_internalsriNUsectsubtitle_xformrj‰U source_linkrkNUrfc_referencesrlNUoutput_encodingrmUutf-8rnU source_urlroNUinput_encodingrpU utf-8-sigrqU_disable_configrrNU id_prefixrsUU tab_widthrtKUerror_encodingruUUTF-8rvU_sourcerwh0Ugettext_compactrxˆU generatorryNUdump_internalsrzNU smart_quotesr{‰U pep_base_urlr|U https://www.python.org/dev/peps/r}Usyntax_highlightr~UlongrUinput_encoding_error_handlerr€j[Uauto_id_prefixr�Uidr‚Udoctitle_xformrƒ‰Ustrip_elements_with_classesr„NU _config_filesr…]Ufile_insertion_enabledr†ˆU raw_enabledr‡KU dump_settingsrˆNubUsymbol_footnote_startr‰KUidsrŠ}r‹(j" j jãjÞjªj¥jŒj‡j® j© jMjHj* j% j3 j. jÄj¿j² j­ j‘jŒjˆ j„ j±j¬j‰ j jÞjÙh:h-jÂj½jVjQjCj>j'j"jÜj×j´j¯jX jS jˆ jƒ jü j÷ jjj£jžhÌhÆjjj¹jµjžj™j“ jŽ uUsubstitution_namesrŒ}r�(X__sdk_install_dir__h&X__sdk_install_file__h^X__part_family_device_names__hgX__featuringmatrix__hpX__linux_ubuntu_version_long__hÀX__product_line_name__hyX__sdk_short_name__h‚X__rtos_ubuntu_version_long__h‹X__sdk_download_url__h”X__part_family_name__h¤X__sdk_full_name__h­X__linux_ubuntu_version_short__h·X__windows_supported_long__hUuh1h>h3}rŽ(h5]h8]h7]Usourceh0h6]h;]uU footnotesr�]r�Urefidsr‘}r’ub.