人怕冷是什么原因引起的| 腹泻是什么原因| 血液循环不好吃什么药| 报考军校需要什么条件| 床上为什么会有跳蚤| ab和b型血生的孩子是什么血型| 春天的雨是什么| 6月20日是什么日子| 桥本甲状腺炎有什么症状| 胃疼有什么办法缓解| 白扁豆长什么样| 学籍卡是什么样子图片| 牛奶加咖啡叫什么| 满天星是什么意思| 阴霾是什么意思| 太乙是什么意思| 绿色心情是什么意思| 走南闯北是什么生肖| apf是什么意思| 明哲保身是什么生肖| 茄子炒什么好吃又简单| 宫腔线分离是什么意思| 耳道炎用什么药最有效| 宫禁糜烂用什么药| sob是什么意思| 何以是什么意思| 超能力是什么意思| 腋毛上有白色附着物是什么| robot什么意思| 老是吐口水是什么原因| mua什么意思| nf是什么意思| 公园里有什么有什么还有什么| 做梦梦见别人怀孕是什么意思| 手机壳买什么材质的好| 总是掉头发是什么原因| 河蚌用什么呼吸| 滴水不漏是什么生肖| 大油边是什么肉| 梦见水里有蛇是什么意思| 1985年是什么命| 一月六号是什么星座| 上天是什么意思| 经常脚抽筋是什么原因| 股票放量是什么意思| 小便尿色黄是什么问题| 日午念什么| 排斥是什么意思| 男才女貌是什么意思| 家中养什么鸟最干净| 黄瓜为什么叫黄瓜| 夏天吹空调感冒了吃什么药| 伤风流鼻涕吃什么药好| 7到9点是什么时辰| 梦见野猪是什么预兆| 属狗男和什么属相最配| 甲状腺是挂什么科| pioneer是什么牌子| 日本投降是什么时候| 小孩肚子疼是什么原因引起的| 抑制是什么意思| 重庆五行属什么| 主是什么结构的字体| 额头和下巴长痘痘是什么原因| 湛蓝湛蓝的什么| 脸上长痘是什么原因| 睡意是什么意思| 生辰八字指的是什么| 动脉导管未闭是什么意思| 桂鱼吃什么食物| 语文是什么意思| 腹水是什么原因引起的| 黑发晶五行属什么| 京东pop是什么意思| 毒奶粉是什么游戏| 腋下属于什么科| 很能睡觉是什么原因| 肝血虚吃什么药| 肝做什么检查最准确| 眼皮肿痛什么原因| 2020年是什么生肖| 1973年属牛的是什么命| 头皮痛什么原因| 夏天床上铺什么凉快| 尿素氮是什么| 异常心电图是什么意思| hcg低有什么补救的办法| 手腕扭伤挂什么科| 卵巢早衰吃什么可以补回来| 神经过敏是什么意思| 什么是埋线减肥| 空白是什么意思| 不知所云是什么意思| 下面有点痒用什么药| fwb什么意思| 女性外阴瘙痒用什么药| 什么是鳞状细胞| 纸醉金迷下一句是什么| 白化病是什么能活多久| 女生经常手淫有什么危害| 成人发烧38度吃什么药| 什么是偏旁什么是部首| 被和谐了是什么意思| rop是什么意思| 空调嗡嗡响是什么原因| airwalk是什么牌子| 慈母手中线的下一句是什么| 指甲紫色是什么原因| 曹操的脸谱是什么颜色| 河南有什么美食| 肿瘤手术后吃什么好| 男生被口是什么感觉| 什么时候用顿号| 碘酒是什么| 青豆是什么豆| 头上爱出汗是什么原因| 梦见自己会飞是什么意思| 68岁属什么生肖| 什么是ntr| 老花眼有什么症状| 8月8是什么星座| 膀胱过度活动症是什么原因引起的| 山麻雀吃什么| 小孩喜欢吃什么菜| 蚯蚓吃什么| 双肾实质回声增强是什么意思| 跑水是什么意思| 时柱将星是什么意思| 美林是什么药| 艾滋病皮肤有什么症状| 宫颈肥大伴纳氏囊肿是什么意思| 射精无力吃什么药最佳| 啫啫煲为什么念jue| 落日余晖什么意思| 农历9月21日是什么星座| 蛋糕用什么奶油好| 10月31日什么星座| 敏感肌是什么意思| 靶子是什么意思| 黄体期是什么时候| 电镀对人体有什么危害| 嘴巴下面长痘痘是什么原因引起的| 词又被称为什么| 可字五行属什么| 胎儿腹围偏大说明什么| 老人脚肿吃什么药消肿| 矿泉水敷脸有什么作用| 心衰是什么原因引起的| 孝庄是康熙的什么人| 逻辑性是什么意思| 一代明君功千秋是什么生肖| 卡码是什么意思| 粘纤是什么| 皮肤科属于什么科室| 粗粮是什么| 胃胀疼是什么原因| 哈比是什么意思| 头部mra是什么检查| 什么是风湿| 公务员国考和省考有什么区别| 懵懵懂懂是什么意思| 榔头是什么意思| 红肿痒是什么原因| 血小板压积偏低是什么原因| 粉红是什么意思| 晚上睡觉喉咙干燥是什么原因| 回族为什么不吃猪肉| 千千阙歌什么意思| 任意门是什么意思| 吃什么解油腻| 转氨酶高是怎么回事有什么危害| 史迪奇是什么动物| vjc是什么品牌| drg什么意思| bravo是什么意思| 紫苏煮水喝有什么功效| 急性肾炎什么症状| 气场什么意思| boss是什么意思| mr和mri有什么区别| 什么水果美白| 尾椎骨痛挂什么科| 胃酸多吃什么药| 膀胱壁增厚是什么原因| 息肉样病变是什么意思| 人中附近长痘痘什么原因| 胰腺做什么检查| 情结是什么意思| 动土是什么意思| 什么动物睡觉不闭眼| 游走性疼痛挂什么科| 宫颈息肉不切除有什么危害| 金陵十二钗是什么意思| 什么叫烟雾病| 一般细菌涂片检查是查什么| 吃什么食物补脾虚| 下嘴唇溃疡是什么原因| 什么补肾壮阳最好| 左侧卵巢无回声是什么意思| 慢性萎缩性胃炎吃什么药可以根治| 9月19是什么星座| 慢性肠炎是什么症状| 甲减饮食需要注意什么| 肛门湿疹用什么药膏最有效| 脚心发热吃什么药| pp1是什么意思| 天生一对是什么意思| 梦见下雪是什么意思| 空调吹感冒吃什么药| 马蜂菜什么人不能吃| 什么样的西瓜甜| 1930年属什么生肖| prp是什么意思| 女性湿气重喝什么茶| 刘邦为什么要杀张良| 吃枸杞对身体有什么好处| 随访是什么意思| 吃什么有助于排便| 飞机加什么油| 苦口婆心是什么生肖| 教师节给老师送什么礼物| 红曲红是什么东西| 什么地飞翔| 脱靶是什么意思| 尾牙是什么意思| 梦见考试是什么意思| 男人左眼皮跳是什么预兆| 胆经不通吃什么中成药| 夏雨什么| 检查是否怀孕挂什么科| 出家人不打诳语是什么意思| 为什么起荨麻疹| 胃炎糜烂吃什么食物好| 库欣综合征是什么病| 脸上长闭口是什么原因导致的| 什么叫疝气| 表姐的儿子叫什么| 司长是什么级别的官| 兰台是什么意思| 保鲜袋什么材质好| saq是什么意思| 对别人竖中指是什么意思| 暂住证和居住证有什么区别| 有酒窝的女人代表什么| 上海什么时候解放的| 饿了胃疼是什么原因| 股癣用什么药| 胃疼吃什么药好的快| 奇花初胎矞矞皇皇是什么意思| 尿隐血2十是什么原因| 女人气血不足吃什么补| 犄角旮旯是什么意思| 上海属于什么方向| 身上长小红点是什么原因| 泡饭为什么对胃不好| 什么是性早熟| 安全期一般是什么时候| 女人大腿内侧黑是什么原因引起的| 左氧氟沙星的功效是什么| 为什么腰痛| 炮制是什么意思| 经常喝苏打水有什么好处和坏处| 鱼腥草与什么相克| 蒲公英的种子像什么| 百度
"); //-->

博客专栏

EEPW首页 > 博客 > NXP iMX8QM 通过 SCFW 隔离 AP_M4 核资源

彩电高端市场爆发,创维OLED布局赢先机

发布人:toradex 时间:2025-08-04 来源:工程师 发布文章
百度 “美国对中国采取的行为并不可取,令人失望。

By Toradex 胡珊逢

简介

Apalis iMX8QM 使用了 NXP 的 iMX8 Quad Max 处理器。该 CPU 提供 A72 和 A53 Application Processor 和 M4 MCU。文章将介绍如何在硬件层面上隔离 AP 和 MCU 的资源,从而提高系统的可靠性。


System Controller Unit (SCU)System Controller Unit 是 iMX8 Quad Max 处理器上的一个专用 M4 核,连接 PMIC 和控制处理器上的子系统,为处理器的硬件功能提供抽象接口,供子系统使用。其主要管理以下功能和资源:


系统初始化与启动系统控制器通信电源管理资源管理引脚配置定时器中断处理


默认情况下,AP 核和 M4 核均能够使用 Apalis iMX8QM 的所有资源,包括 DDR RAM。SCU 可以通过分区 partition 的方式,将 AP 和 M4 之间,以及两个 M4 核之间所使用的资源从硬件上隔离开。一个分区中除了处理器核心外,还可以有外设、引脚 Pads 和内存区域。处理器核只能访问位于同一个分区内的资源。如果尝试访问其他分区的资源,则会返回总线错误。


当 AP 核和 M4 核在同一个分区时,AP 上的 Linux 虽然可以通过 reserved memory 方式不去使用相关 RAM 区域,但是直接物理地址访问的方式仍起作用。这对于 M4 端也是如此。使用 SCU 的分区,可以从底层规避该问题。除此之外,AP 和 M4 使用独立 Power Domain,在隔离分区情况下,对于 M4 的实时关键任务和 AP 上基于富操作系统 Linux 的应用独立运行提供可能。

在刚启动时,系统会划分三个分区。

SCU:包含所有运行 SCFW 固件所需的 Pads、外设和内存区域SECO:Security Controller 运行所需的相关资源Boot:系统剩余的所有资源如 Pads、外设和内存区域都将会划分到该分区

当系统继续启动时,如果不做进一步的分区,默认情况下 AP 和 M4 核都将运行在 Boot 分区中,它们之间只能通过软件的方式隔离各自的资源。为了实现 AP 和 M4 之间的硬件隔离,可以采用下面分区。


AP0:拥有运行 U-boot,Linux 的分区MCU0 和 MCU1:两个 Cortex-M4 核各自运行的分区Shared:共享资源的分区,例如将一段用于 rpmsg 通信的 RAM 区域划分到其中,AP 和 M4 就能够相互发送消息

分区的创建和资源划分在 SCU 的固件 SCFW 中调整。


SCU 固件 SCFW


SCFW 的下载和编译方法参考Build Custom i.MX 8/8X System Controller Firmware (SCFW)。接下来将针对上面使用 AP0、MCU0、MCU1 和 Shared 分区案例进行说明。按照上面方法下载的 SCFW 源码中,mx8qm_apalis/board.c 已经包含上面分区的实现代码,所以无需额外的修改。在组装 Boot Container 时传入特定的 Flags 值可以启用。

在 platform/board/mx8qm_apalis/board.c 中配置分区和资源。宏定义 PARTITION_NAME 命令系统启动时的设置三个分区名字。

  PARTITION_NAME(SC_PT, "SCU");
  PARTITION_NAME(SECO_PT, "SECO");
  PARTITION_NAME(pt_boot, "BOOT");


检测标志位判断是否需要创建 AP0、MCU0、MCU1 和 Shared 分区。

  if (alt_config != SC_FALSE)
  {


在需要进行分区时,PARTITION_NAME 设置相应分区的名称。

  PARTITION_NAME(pt_boot, "AP0");
  ...
  PARTITION_NAME(pt_m4_0, "MCU0");
  ...
  PARTITION_NAME(pt_m4_1, "MCU1");
  ...
  PARTITION_NAME(pt, "Shared");


这里以 MCU0 分区为例,rsrc_list中包含了划分到 MCU0 分区的资源,如 M4 中断、Message Unit、定时器等。

  static const sc_rsrc_t rsrc_list[7U] =
  {
      SC_R_SYSTEM,
      SC_R_IRQSTR_M4_0,
      SC_R_MU_5B,
      SC_R_MU_7A,
      SC_R_MU_8B,
      SC_R_GPT_4,
      SC_R_SECO_MU_4
  };


pad_list 中包含 MCU0 分区所使用的引脚范围。

  static const sc_pad_t pad_list[2U] =
  {
      RM_RANGE(SC_P_M40_I2C0_SCL, SC_P_M40_GPIO0_01)
  };


结合 sc_fw_api_qm_b0.pdf 文档,index 7~10 的引脚都将在划分到 MCU0 分区。

sc_rm_mem_list_t 配置了包括 RAM 在内的可使用存储空间。

  static const sc_rm_mem_list_t mem_list[2U] =
  {
      {0x088000000ULL, 0x0887FFFFFULL},
      {0x008081000ULL, 0x008180FFFULL}
  };


rm_partition_create 使用上面配置的所有资源创建 MCU0 分区。

  BRD_ERR(rm_partition_create(pt_boot, &pt_m4_0, SC_FALSE,
      SC_TRUE, SC_FALSE, SC_TRUE, SC_FALSE, SC_R_M4_0_PID0,
      rsrc_list, ARRAY_SIZE(rsrc_list),
      pad_list, ARRAY_SIZE(pad_list),
      mem_list, ARRAY_SIZE(mem_list)));


组装 Boot Container

NXP i.MX 8QuadMax 处理器使用前面提到的 SCU 来启动系统。启动时除了加载 SCFW,它还可以加载 ATF 和 U-Boot,以及直接加载 M4 核的固件。Boot Container 组装方法参考 Specifics: Build U-Boot for NXP i.MX 8/8X-based SoMs。默认情况下,如网页描述,使用下面命令组装 Boot Container。该方法生成的 flash.bin 文件中并不包含 M4 核的固件,并且 AP 和 M4 在同一个分区。M4 的固件在 U-Boot 启动时,使用 bootaux 命令从 eMMC 上加载后运行。

make SOC=iMX8QM flash_b0


为了使用上面 SCFW 中划分的分区,使用下面命令组装 Boot Container。

make SOC=iMX8QM flash_regression_linux_m4


编译目标来自 imx-mkimage/iMX8QM/soc.mak 中的定义。flash_regression_linux_m4: $(MKIMG) $(AHAB_IMG) \
scfw_tcm.bin u-boot-atf.bin m4_image.bin m4_1_image.bin \
  ./$(MKIMG) -soc QM -rev B0 -append $(AHAB_IMG) \
  -c -flags 0x00200000 -scfw scfw_tcm.bin \
  -ap u-boot-atf.bin a53 0x80000000 \
  -p3 -m4 m4_image.bin 0 0x34FE0000 \
  -p4 -m4 m4_1_image.bin 1 0x38FE0000 \
  -out flash.bin


-flags 0x00200000向 SCFW 的 board.c 传递,SCU 在启动时将会创建 AP0、MCU0、MCU1 和 Shared 的分区。

  if (alt_config != SC_FALSE)
  {


sc_fw_port.pdf 中说明了 Bit 21 SCFW_SC_BD_FLAGS_ALT_CONFIG 为更改 SCFW 配置的位,对应 0x00200000。

上面命令中 m4_image.bin 和 m4_1_image.bin 为两个 M4 各自的固件,从各自的 TCML 运行。因此,在执行上面命令前,需要把两个 M4 的固件复制到 imx-mkimage/iMX8QM 目录下。

如下修改 U-boot 源码中 U-boot/cmd/booti.c,重新编译后将 u-boot.bin 复制到 imx-mkimage/iMX8QM 目录下。

  if (dest < gd->ram_base || dest > gd->ram_top) {
      puts("kernel_comp_addr_r is outside of DRAM range!\n");
      //return -EINVAL;
  }


Linux device tree 更新


接下来的演示中,我们在 M4 上使用 multicore_examples/rpmsg_lite_pingpong_rtos 作为演示,在 AP 上的 Linux 系统中也需要开启 rpmsg 节点并加载驱动。针对 Apalis iMX8 BSP 7 的 imx8qm-apalis-v1.1-ixora-v1.2.dtb 需要打该补丁。


更新 Boot Container 文件

上面命令执行成功后生成的 flash.bin,需要更新到 Apalis iMX8 模块上的 eMMC 上。对于使用 Toradex Easy Installer 进行批量烧写或者重装系统,可以将 flash.bin 重名为 imx-boot,替换原来的烧录文件中 imx-boot。在开发期间,使用 U-Boot 直接更新 flash.bin 会更加方便,免于重装整个系统镜像。

将 flash.bin 复制到的一台 TFTP 服务器的下载目录中。然后在 U-Boot 中配置 Apalis iMX8 和 TFTP 服务器 IP 地址。

Apalis iMX8 # setenv ipaddr 192.168.3.181
Apalis iMX8 # setenv serverip 192.168.3.196
Apalis iMX8 # saveenv


使用 tftpboot 和 mmc 命令将 flash.bin 下载并写入到 eMMC 上。mmc write $loadaddr 0 0x973中最后的数值是写入的 block 数量。tftpboot 在下载时会显示文件大小,例如这里为 1238016 字节。需要写入的 block = (1238016+511)/512,计算结果向上取整,并转为十六进制数值。

Apalis iMX8 # tftpboot $loadaddr flash.bin
Using ethernet@5b040000 device
TFTP from server 192.168.3.196; our IP address is 192.168.3.181
Filename 'flash.bin'.
Load address: 0x95400000
Loading: ##################################################  1.2 MiB
3.4 MiB/s
done
Bytes transferred = 1238016 (12e400 hex)


Apalis iMX8 # mmc dev 0 1
Apalis iMX8 # mmc write $loadaddr 0 0x973


测试
在 U-Boot 中配置启动时加载的 device tree 文件。
Apalis iMX8 # setenv fdtfile imx8qm-apalis-v1.1-ixora-v1.2.dtb
Apalis iMX8 # saveenv
Apalis iMX8 # reset
启动后可以在 Linux 和两个 M4 的调试串口上看到启动内容。
Linux 中进入 kernel modules 驱动目录 kernel/drivers/rpmsg,加载 imx_rpmsg_pingpong.ko。两个 M4 上的固件在发现 rpmsg 通道后,自动向 Linux 发送消息。# insmod imx_rpmsg_pingpong.ko
...
[   67.386427] get 91 (src: 0x1f)
[   67.389556] get 101 (src: 0x1e)
[   67.392707] imx_rpmsg_pingpong virtio1.rpmsg-openamp-demo-channel.-1.30: 
goodbye!
[   67.401771] get 93 (src: 0x1f)
[   67.406364] get 95 (src: 0x1f)
[   67.410982] get 97 (src: 0x1f)
[   67.415594] get 99 (src: 0x1f)
[   67.420212] get 101 (src: 0x1f)
[   67.423388] imx_rpmsg_pingpong virtio3.rpmsg-openamp-demo-channel-1.-1.31: 
goodbye!

总结

文章介绍了如何使用 SCU 划分不同的分区,将 AP 和 M4 之间做硬件隔离,并使用 SCFW 直接加载 M4 的固件,不仅提高系统可靠性,也将 M4 运行提前到 U-Boot 之前,加快启动速度。更多关于 SCU 的高级高级功能,可以参考 SCFW 的说明文档。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。




相关推荐

技术专区

关闭
甘油三酯偏高是什么意思 11年是什么婚 肾阴阳两虚用什么药 血压低吃什么药 局气什么意思
什么叫高尿酸血症 水柔棉是什么面料 a03是什么 mas是什么意思 hbv病毒是什么意思
脾虚生痰吃什么中成药 代表什么意思 为什么会得子宫腺肌症 心意已决是什么意思 手脱皮什么原因
但求无愧于心上句是什么 未扪及是什么意思 坐飞机什么不能带 窦性心动过速是什么意思 腱鞘炎用什么药最好
日新月异什么意思hcv8jop9ns5r.cn 苯磺酸氨氯地平片是什么药hcv7jop9ns2r.cn 右手大拇指发麻是什么原因hcv8jop5ns9r.cn 眼干眼涩眼疲劳用什么眼药水hcv9jop2ns6r.cn 子宫彩超能检查出什么hcv7jop7ns2r.cn
脊髓病变是什么病hcv8jop7ns6r.cn 三个六代表什么意思hcv9jop0ns1r.cn 低压偏高是什么原因引起的hcv9jop7ns2r.cn 为什么会得肩周炎helloaicloud.com 脾疼是什么原因hcv7jop4ns6r.cn
欣字属于五行属什么hcv8jop7ns4r.cn 锦是什么意思xinmaowt.com 蓝颜知己是什么意思hcv8jop1ns7r.cn 吃什么东西会长胖hcv7jop6ns0r.cn 精液为什么是苦的xinjiangjialails.com
什么是水印照片sanhestory.com 肚子疼应该挂什么科hcv9jop1ns7r.cn 四个一是什么字hcv9jop7ns3r.cn 女人依赖男人说明什么wmyky.com 刘禹锡是什么朝代的hcv9jop6ns9r.cn
百度