This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM5728:Jailhouse 设置

Guru**** 2805925 points

Other Parts Discussed in Thread: AM5728, SYSBIOS, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/816963/linux-am5728-jailhouse-setup

器件型号:AM5728
Thread 中讨论的其他器件: SYSBIOSTPIC2810SysConfig

工具/软件:Linux

你(们)好。

我正在使用 PROCESSOR-SDK 05.02.00.10。 我在 AM5728评估板上成功地与 jailhouse Hypervisor 合作。

现在、我正在尝试在基于 AM5728的定制板上启动 jailhouse、该定制板只有1GB 的 DDR3。

修改 u-boot 后、我能够启动 Linux。 现在、我要尝试设置 jailhouse Hypervisor。

到目前为止我对 Linux DTS 文件所做的更改:

仅指定1 GB RAM:

diff --git a/arch/arm/boot/dts/am572x-idk-common.dtsi b/arch/arm/boot/dts/am572x-idk-common.dtsi
索引 f3aaab9..2df158c 100644
-- a/arch/arm/boot/dts/am572x-idk-common.dtsi
++ b/arch/arm/boot/dts/am572x-idk-common.dtsi
@@-14、7 + 14、7 @@
/{
存储器@0{
DEVICE_TYPE ="存储器";
- reg =<0x0 0x8000000 0x0 0x8000000000>;
+ reg =<0x0 0x8000000 0x0 0x40000000>;
};

保留存储器{

在有效内存地址中设置管理程序和 jailhouse 囚犯:


diff --git a/arch/arm/boot/dts/am572x-idk-jailhouse.dtsi b/arch/arm/boot/dts/am572x-idk-jailhouse.dtsi
索引8a75306.0d8a9bc 100644
----阿尔克/阿姆/boot/dts/am572x-idk-jailhouse.dtsi
++ b/arch/arm/boot/dts/am572x-idk-jailhouse.dtsi
@@-9、14 + 9、14 @@
/{
型号="TI AM5728 Jailhouse IDK";
保留存储器{
{\f2 -}{\f2 jailhouse:}{\f2 Jailhouse@}{\f2 ef000000}
- reg =<0x0 0xef000000 0x0 0x1000000>;
+ jailhouse:Jailhouse@bec00000{
+ reg =<0x0 0xbec00000 0x0 0x1000000>;
无地图;
状态="正常";
};

- JH_REGLER:JH_REGLER@EE000000{
- reg =<0x0 0xe0000000 0x0 0xf000000>;
+ JH_REGLER:JH_REGLER@afc00000{
+ reg =<0x0 0xafc00000 0x0 0xf000000>;
无地图;
状态="正常";
};

 

我修复了根单元配置文件 am57xx-evm.c 以匹配相关存储器地址。 (请参阅随附的 am57xx-evm.c)。

 

在尝试启用根单元时、我遇到以下错误:

Arago 项目 http://arago-project.org am57xx-EVM ttyS9

Arago 2018.10 am57xx-EVM ttyS9

am57xx-EVM 登录:root
登录时间:世界协调时2019年7月3日08:23:34日、从2015年4月20日起、分次/1
root@am57xx-EVM:~#
root@am57xx-EVM:~# modprobe jailhouse
root@am57xx-EVM:~# jailhouse enable ./am57xx-evm.cell

在 CPU 1上初始化 Jailhouse 管理程序
代码位置:0xf0000040
早期设置后的页面池使用情况:MEM 30/4072、重新映射32/131072
初始化处理器:
CPU 1...  
好的
CPU 0...  
好的
后期设置后的页面池使用情况:MEM 41/4072、重新映射38/131072
激活虚拟机监控程序
 在 bbbfd00000 (4)上未处理的数据写入
致命:未处理的陷阱(异常类0x24)
PC=0xc021ebb0 CPSR=0xa00a0013 HSR=0x93820047
R0=0xc1096e28 R1=0x00000001 R2=0x00000000 R3=0xfe600000
R4=0x00000004 R5=0x00000000 R6=0xc1096e28 r7=0xc105f5b8
R8=0xc05c48a0 R9=0xd2912000 R10=0x00000029 r11=0xd2913b94
R12=0xd2913b98 R13=0xd2913b88 r14=0xc02153ec
驻车 CPU 1 (单元:"AM57XX-EVM")
 在 bbbfd00000 (4)上未处理的数据写入
致命:未处理的陷阱(异常类0x24)
PC=0xc021ebb0 CPSR=0xa00f0013 HSR=0x93820047
R0=0x00000000 R1=0x9329d402 R2=0x00000000 R3=0xfe600000
R4=0xd42bcd90 R5=0xfa4867e0 R6=0x484867e0 r7=0xd439f810
R8=0xd42bcdb0 R9=0x9329d402 R10=0xd3af1300 r11=0xd3af7adc
R12=0xd3af7ae0 R13=0xd3af7ad0 r14=0xc02153ec
驻车 CPU 0 (单元:"AM57XX-EVM")

在查找地址 bbfd00000时,我在内核启动中找到了一条消息:(请参阅随附的 jh_dmesg.txt)

[0.000000]  OMAP4:将0x00000000bfd00000映射到 DRAM 隔离层的 fe600000

打印/proc/iomem 时,我觉得物理地址 bbfd00000是物理内存之外的第一个地址。 (请参阅随附的 jh_proc_iomem.txt)

根据工作评估板上的/proc/iomem、系统 RAM 以0xFFCFFFFF 结尾、相同的内核消息目标为0xFFD00000、这也是物理存储器之外的第一个地址。

我还能寻找什么?

非常感谢、

NIR。

 

 

e2e.ti.com/.../jh_5F00_dmesg.txt

e2e.ti.com/.../jh_5F00_proc_5F00_iomem.txt

 

e2e.ti.com/.../jh_5F00_proc_5F00_meminfo.txt

 

e2e.ti.com/.../6685.am57xx_2D00_evm.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    NIR、您好!

    感谢您发布详细信息。 我将在下周初查看此问题-接下来的两天是美国的假期。 很抱歉耽误你的时间。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我取得了一些进展、现在 Jailhouse 在定制板上正常运行。

    我决定将与 jailhouse 相关的存储块放置在物理 RAM (0xA0000000)的地址空间的中间、而不是像 TI 提供的示例那样放置在末尾、并且"未处理的数据写入"错误不再出现。

    修复 了 arch/arm/boot/dts/am572x-idk-jailhouse .dtsi

    diff --git a/arch/arm/boot/dts/am572x-idk-jailhouse.dtsi b/arch/arm/boot/dts/am572x-idk-jailhouse.dtsi
    索引8a75306.0d8a9bc 100644
    ----阿尔克/阿姆/boot/dts/am572x-idk-jailhouse.dtsi
    ++ b/arch/arm/boot/dts/am572x-idk-jailhouse.dtsi
    @@-9、14 + 9、14 @@
    /{
    型号="TI AM5728 Jailhouse IDK";
    保留存储器{
    {\f2 -}{\f2 jailhouse:}{\f2 Jailhouse@}{\f2 ef000000}
    - reg =<0x0 0xef000000 0x0 0x1000000>;
    + jailhouse:Jailhouse@af000000{
    + reg =<0x0 0xaf000000 0x0 0x1000000>;
    无地图;
    状态="正常";
    };

    - JH_REGLER:JH_REGLER@EE000000{
    - reg =<0x0 0xe0000000 0x0 0xf000000>;
    + JH_REGLER:JH_REGLER@a0000000{
    + reg =<0x0 0xa0000000 0x0 0xf000000>;
    无地图;
    状态="正常";
    };

    根单元配置已根据此存储器布局进行了调整。 请参见随附的 am57xx-evm.c

    在囚犯牢房配置中,我还更改了相关地址:

    /* RAM 加载器*/{
    -.phys_start = 0xed000000、
    +.phys_start = 0xad000000、
    virt_start = 0x0、
    .size = 0x10000、
    flags = Jailhouse MEM_READ | Jailhouse MEM_WRITE |
    Jailhouse MEM_execute | Jailhouse MEM_LOADable、
    }、
    /* RAM RTOS 224MB*/{
    -.phys_start = 0xe0000000、
    +.phys_start = 0xa0000000、
    virt_start = 0x8000000、
    .size = 0xd000000、
    flags = Jailhouse MEM_READ | Jailhouse MEM_WRITE |
    Jailhouse MEM_execute | Jailhouse MEM_LOADable、
    }、
    /*通信区域*/{
    -.phys_start = 0xEEF00000、
    -.virt_start = 0xEEF00000、
    +.phys_start = 0xAEF00000、
    +.virt_start = 0xAEF00000、
    .size = 0x00100000、
    flags = Jailhouse MEM_READ | Jailhouse MEM_WRITE |
    Jailhouse MEM_IO | Jailhouse MEM_ROOTSHARED、

    谢谢、

    NIR。

    e2e.ti.com/.../2287.am57xx_2D00_evm.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢您分享解决方案。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我能够将 PDK 示例 NIMU_BasicExample_idkAm572x_armExample 移植到监狱囚犯中并正确运行。

    现在、我尝试将自定义 SYSBIOS 项目移植到 Jailhouse 囚犯、并遇到一些错误。

    TI-RTOS 应用启动时调用 GPIO_init(),然后 GPIO_setConfig_v1()迭代 borad_cfg.h 中定义的 GPIO 列表,并设置它们的方向和输出值。

    不是在所有 GPIO 上、但在大多数 GPIO 上、我从内核中获取转储:

    [482.853148]---------- [在此处剪切]-----
    [482.857813]警告:CPU:0 PID:28、位于/home/stx-ti/Projects/tisdk/build/arago-tmp-external-linaro-toolchain/work-shared/am57xx-evm/kernel-source/drivers/bus/omap_l3_noc.c:147 L3_INTERRUPT_Handler+0x254/0x370
    [482.876436] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_WKUP (空闲):在功能访问期间以用户模式进行数据访问
    [482.887808]链接模块: JA512_generic SHA512_arm SHA256_generic SHA1_generic SHA1_arm MD5 CBC xhci_plat_hcd xhci_hcd usbcore dwc3 uDC_core USB_common ti_pruus prus_inc snd_plat_ip_mas ipc_plat_ipot_pr_mas ip_mas p_ipt_mas p_ip_ipot_ip_ip_m_ipot_mas p_ipt_ipot_mas p_ipt_ipot_ipot_ipot_ip_ip_ipot_ip_m_ip_ipot_ipot_ipot_ipot_ipot_ipot_ipot_ipot_ipot_mas virtio_rpmsg_bus rpmsg_core remoteproc sch_fq_codel cryptodev (O)
    [482.943469] CPU:0 PID:28 Comm:IRQ/23-L3-APP-I 被污染:G W O 4.14.79-rt47-g7dac5fd971 #2
    [482.943472]硬件名称:通用 DRA74X (平展器件树)
    [482.943474]回溯:
    [482.943493][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [482.943500] r7:00000009 r6:600f0013 r5:00000000 r4:c0d57d60
    [482.943508][ ](show_stack)从[ ](dump_stack+0x90/0xa4)
    [482.943519][ ](dump_stack)从[ ](_warn+0xec/0x104)
    [482.943524] r7:00000009 r6:c0ad8c40 r5:00000000 r4:d4a31e40
    [482.943534][ ](__warn)从[ ](WARN_RASPH_FMt+0x40/0x48)
    [482.943539] R9:00000010 R8:d4a16950 r7:c0ad8aac R6:00000000 R5:c0ad8b6c R4:c0ad8c10
    [482.943548][ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x254/0x370)
    [482.943552] r3:d4a167c0 r2:c0ad8c10
    [482.943554] R4:80080003
    [482.943563][ ](L3_interrupt_handler)、来自[ ](IRQ_Forced_thread_fn+0x28/0x7c)
    [482.943568] R10:c0181db0 R9:d4a16cc0 R8:d49e1100 r7:00000001 R6:00000000 R5:d49e1100
    [482.943570] R4:d4a16cc0
    [482.943577][ ](IRQ_Forced_thread_fn)、来自[ ](IRQ_THREAD+0x130/0x208)
    [482.943581] r7:00000001 R6:00000000 R5:ffe000 R4:d4a16ce4
    [482.943589][ ](IRQ_THread)、来自[ ](kthread+0x164/0x16c)
    [482.943594] R10:d4871b20 R9:c0182000 R8:d4a16cc0 r7:d4a30000 R6:00000000 R5:d4a16d00
    [482.943596] R4:d49e3080
    [482.943604][ ](kthread)、来自[ ](RET_FANK_F叉+0x14/0x24)
    [482.943609] R10:00000000 R9:00000000 R8:00000000 r7:00000000 R6:00000000 R5:c0149204
    [482.943611] R4:d4a16d00
    [482.943613]--[结束跟踪000000000004 ]--

    为什么会发生这种情况?如何解决?

    非常感谢、

    NIR。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    NIR、

    请确保在根单元 Linux 的 DTS 中禁用了相应的 GPIO 模块(在囚犯中使用的 GPIO 引脚)。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    此时我禁用 GPIO_init。 我们稍后会回来。

    我正在从 eMMC 引导 Linux、现在我正在尝试将 sdcard 传递给 ti-RTOS jailhouse 囚犯。

    在 arch/arm/boot/dts/am572x-idk-jailhouse .dtsi 中、我禁用了 mmc1。 在囚犯单元配置文件中、我添加了 mmc1的地址空间。

    在 FileSysInit()期间,代码一直到达写入 MMCHS_SysConfig 的 HSMMCSDSoftReset()(0x4809c110)

    然后、我从 Linux 内核获取转储:

    [553.691209]------ [在此处剪切]-----
    [553.695876]警告:CPU:0 PID:28、位于/home/stx-ti/Projects/tisdk/build/arago-tmp-external-linaro-toolchain/work-shared/am57xx-evm/kernel-source/drivers/bus/omap_l3_noc.c:147 L3_INTERRUPT_Handler+0x254/0x370
    [553.714500] 44000000.OCP:L3自定义错误:主 MPU 目标 L4_PER1_P3 (读取):在功能访问期间以用户模式访问数据
    [553.726133]中链接的模块: ja512_generic SHA512_arm SHA256_generic SHA1_generic SHA1_arm MD5 CBC xhci_plat_hcd xhci_hcd usbcore dwc3 uDC_core USB_common ti_pruus prues_inc snd_plat_mas ip_ipc_pr_mas pot_ip_ip_m_pr_mas p_ip_mas p_ipt_ip_ip_m_m_ip_ipot_ip_ip_m_pr_mas virtio_rpmsg_bus rpmsg_core remoteproc sch_fq_codel cryptodev (O)
    [553.781797] CPU:0 PID:28 Comm:IRQ/23-L3-APP-I 被污染:G O 4.14.79-rt47-g7dac5fd971 #2
    [553.781800]硬件名称:通用 DRA74X (平展器件树)
    [553.781802]回溯:
    [553.781817][ ](dump_backtrace)从[ ](show_stack+0x18/0x1c)
    [553.781823] r7:00000009 r6:600f0013 r5:00000000 r4:c0d57d60
    [553.781832][ ](show_stack)从[ ](dump_stack+0x90/0xa4)
    [553.781842][ ](dump_stack)从[ ](_warn+0xec/0x104)
    [553.781847] r7:00000009 r6:c0ad8c40 r5:00000000 r4:d4a31e40
    [553.781857][ ](__warn)从[ ](WARN_RASPH_FMt+0x40/0x48)
    [553.781862] R9:00000006 R8:d4a16950 r7:c0ad8aac R6:00000002 R5:c0ad8b6c R4:c0ad8c10
    [553.781872][ ](warn_slowpath_fmt)、来自[ ](L3_INTERRUPT_Handler+0x254/0x370)
    [553.781875] r3:d4a167c0 r2:c0ad8c10
    [553.781878] R4:80080003
    [553.781886][ ](L3_interrupt_handler)、来自[ ](IRQ_Forced_thread_fn+0x28/0x7c)
    [553.781892] R10:c0181db0 R9:d4a16cc0 R8:d49e1100 r7:00000001 R6:00000000 R5:d49e1100
    [553.781894] R4:d4a16cc0
    [553.781900][ ](IRQ_Forced_thread_fn)、来自[ ](IRQ_THREAD+0x130/0x208)
    [553.781904] r7:00000001 R6:00000000 R5:ffe000 R4:d4a16ce4
    [553.781912][ ](IRQ_THread)、来自[ ](kthread+0x164/0x16c)
    [553.781917] R10:d4871b20 R9:c0182000 R8:d4a16cc0 r7:d4a30000 R6:00000000 R5:d4a16d00
    [553.781920] R4:d49e3080
    [553.781928][ ](kthread)、来自[ ](RET_FANK_F叉+0x14/0x24)
    [553.781933] R10:00000000 R9:00000000 R8:00000000 r7:00000000 R6:00000000 R5:c0149204
    [553.781935] R4:d4a16d00
    [553.781937]--[结束跟踪0000000000000002 ]--

    不确定这是否相关、但在/proc/iomem 中、我看到了

    4a003400-4a003867:pinctrl-single

    e2e.ti.com/.../proc_5F00_iomem.txt

    我知道 CTRL_CORE_PAD_MMC1_SDCD (0x4A00376C)设置为 mmc1_sdcd。

    我想我无法完全禁用 Linux 端的 GPIO6、因为它可能会破坏电路板的功能。


    您能否解释一下导致此转储的原因、以及我在将 sdcard (mmc1)正确传递给 ti-RTOS 囚犯的配置中缺少什么?

    谢谢、

    NIR。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我仍在努力将 MMC1传递给 RTOS 囚犯。 我在内核 DTS 中禁用了 mmc1、并允许囚犯访问其单元格配置文件中的存储器地址空间。

    在内核 dts 中、我还删除了寄存器配置、该配置填充了我在上一篇文章中提到的内核转储。 现在、囚犯可以触摸 mmc1寄存器、而无需投诉 Linux 内核。

    arch/arm/boot/dts/dra7.dtsi、第1108行

    - reg =<0x4089c000 0x400>;

    CM_L3INIT_MMC1_CLKCTRL_REG 似乎配置良好、设置为0x03040002

    通过检查/sys/kernel/debug/pinctrl/4a003400.pinmux/pins、引脚多路复用器也配置正确。

    仍然,OSAL_FileSysInit()在 MMCU_v1_initSd()中失败

    1082 IF (MMCSD_OK = RET)
    1083{
    1084   /* CMD0 -重置卡*/
    1085   transaction.cmd = MMCSD_CMD (0U);
    1086   transaction.flags = MMCSD_CMDRSP_NONE;
    1087   transaction.arg = 0U;
    1088   ret = MMCSD_v1_transfer (handle、&transaction);
    1089}
    1090
    1091 IF (MMCSD_OK = RET)
    1092{
    1093   /* app cmd 应该在 CMD55之前*/
    1094   transaction.cmd = MMCSD_CMD (55U);
    1095   transaction.flags = 0U;
    1096   transaction.arg = object->RCA << 16U;
    1097   ret = MMCSD_v1_transfer (handle、&transaction);
    1098}

    首次调用 MMCSD_v1_transfer ()会成功返回。 第二个失败是因为 MMCSD_v1_cmdStatusFxn ()返回中断状态寄存器

    0x4809 C230 MMCHS_STAT = 0x00018000、这意味着发生了超时。

    您能解释什么可能导致此错误吗? 这可能是配置问题吗?

    不用说、当在内核 DTS 中启用 sdcard (mmc1)时、sdcard (mmc1)正常工作、并且当我移植到 jailhouse 囚犯的项目作为本地 RTOS 应用程序运行时、sdcard 也可以正常工作。

    非常感谢、

    NIR。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    在 CTRL_CORE_CONTROL_PBIAS (0x4A00 2E00)中、我必须确保 SDCARD_IO_PWRDNZ (位26)和 SDCARD_BIAS_PWRDNZ (位27)

    设置为1。

    现在、我在监狱囚犯一侧有 MMC1功能。

    非常感谢、

    NIR。