果酱样大便见于什么病| 别来无恙什么意思| 身上长癣是什么原因引起的| 阴盛格阳是什么意思| 蟋蟀吃什么东西| 怀孕不能吃什么药| 心功能二级是什么意思| 男人射精快吃什么药| 牡蛎是什么| 尿毒症是什么| 脚后跟疼是什么情况| cmb是什么意思| 随什么随什么| 浅表性胃炎吃什么药效果好| 什么的白桦| 家里停电打什么电话| 检查hpv需要注意什么提前注意什么| 吃什么能快速减肥| 两个c是什么牌子| 王源粉丝叫什么| 魁罡贵人是什么意思| 十三太保什么意思| 什么是欲望| 金主是什么意思| hpv是什么病严重吗| 沉香是什么| 一月二十三号是什么星座| 左胸隐隐作痛是什么原因| 吃孕酮片有什么副作用| 草长莺飞是什么生肖| 胃疼应该吃什么药| 百草霜是什么| 你会不会突然的出现是什么歌| 先天性心脏病是什么原因造成的| 头发掉得厉害是什么原因| 子不教父之过是什么意思| 脚心疼痛是什么原因引起的| 治愈是什么意思| 渣滓是什么意思| 什么美白效果最好最快| 龟头是什么| 什么叫修辞手法| 车水马龙是什么意思| 什么是角| 为什么会被鬼压床| 巽是什么意思| 什么样的普洱茶才是好茶| 嘴唇有黑斑是什么原因| 腰椎骶化是什么意思| 舌苔白腻吃什么中成药| 靥什么意思| 儿童经常头晕什么原因导致的| 九牛一毛是什么生肖| 两肺纹理增粗是什么意思| 喝豆腐脑有什么好处和坏处| 食指比无名指长代表什么| 医生会诊是什么意思| 自欺欺人什么意思| 苏州立夏吃什么| 什么叫安全期| 子宫痉挛是什么症状| 脖子里面有结节是什么病| 明年属相是什么生肖| 气管炎吃什么药| 甲申日五行属什么| 食物链是什么意思| 鹿茸是鹿的什么部位| 蜈蚣长什么样| 什么是意淫| 蟹柳是什么做的| 折什么时候读she| 大暑什么时候| 可怜巴巴是什么意思| 胃酸胃胀吃什么药| 心电轴左偏是什么意思| 喉咙挂什么科室| 什么河水| 晚上睡觉口干是什么原因| 他克莫司是什么药| 拉肚子是什么原因造成的| 经常梦遗是什么原因| 为什么叫a股| 下焦湿热阴囊潮湿吃什么药| ed患者是什么意思| 上焦有火吃什么中成药| 嗳气吃什么药最有效| 昙花有什么功效与作用| 褒义是什么意思| 尿量少是什么原因| 甲亢什么东西不能吃| 梦见老鼠是什么意思| 大拇指旁边是什么指| 男人硬不起来该吃什么药| 窦性心动过缓伴不齐是什么意思| 动土是什么意思| 健脾去湿吃什么药| 糖尿病患者可以吃什么水果| 诸侯国是什么意思| 什么食物胶原蛋白含量高| 男生一般什么时候停止长高| 冷感冒吃什么药| 止境是什么意思| 深度水解奶粉是什么意思| 约会什么意思| 什么是马赛克| 拉肚子拉水吃什么药| 怀孕为什么要吃叶酸| 胸椎退行性变什么意思| 常吃大蒜有什么好处| 头顶一阵一阵疼是什么原因| 民营和私营有什么区别| 吃了拉肚子的药叫什么| 涤纶是什么面料| 举贤不避亲什么意思| 阴疽是什么意思| 憔悴是什么意思| 开理疗店需要什么证件| 佩戴沉香有什么好处| rich什么意思| 血窦是什么意思| 生理期不能吃什么水果| 美丽的近义词是什么| 怀孕白细胞高是什么原因| 人大代表是什么| 阑尾炎手术后吃什么好| 7d是什么意思| 东莞有什么区| 乙基麦芽酚是什么| 吃益生菌有什么好处| 什么叫脂溢性皮炎| 路上遇到蛇是什么征兆| 肾不好挂什么科| 杀了神经的牙为什么还疼| 毒唯什么意思| 踢馆什么意思| 老九门讲的是什么故事| 什么是潮汐车道| 吃什么容易排大便| 北属于五行的什么| 心态是什么意思| 梦见很多牛是什么兆头| 拔智齿第二天可以吃什么| 抗宫炎软胶囊主要治什么| 梦到自己流鼻血是什么预兆| 寒咳吃什么药| 巨蟹男喜欢什么样的女生| ecg医学上什么意思| 心律失常是什么意思| 放我一个人生活是什么歌| 什么叫刺身| 风起云涌是什么生肖| 红薯开花预示着什么| 西布曲明是什么| 体毛旺盛是什么原因| 梦到认识的人死了是什么意思| 8.12什么星座| 宰相的宰最早指什么| 苋菜不能和什么一起吃| 为什么家里会有蚂蚁| 开水冲鸡蛋有什么好处| 左肾钙乳症是什么病| 首发是什么意思| 口臭挂什么科| 9.15是什么星座| 怀孕吃核桃对宝宝有什么好处| 白细胞低吃什么药| 宁字属于五行属什么| 二十二岁属什么| 囊肿长什么样子图片| 中午是什么时辰| 什么是扁桃体| 梦见火是什么意思| 马克华菲属于什么档次| 什么样的河流| 尿酸高吃什么药降尿酸效果好| 起水泡痒是什么原因| 办理健康证需要什么| 不过如此是什么意思| 荷叶有什么功效| 牙齿过敏吃什么药| 早上吃什么早餐最好| 什么人不能喝大麦茶| 梦见别人给我介绍对象是什么意思| 烧心吃什么药| 梦到两条蛇预示着什么| 绿豆什么时候收获| 浅蓝色是什么颜色| 慢性肠胃炎吃什么药| 一甲子是什么意思| 女性下小腹痛挂什么科| dob是什么意思| 附件炎是什么原因引起的| 为什么会黄体功能不足| 什么鱼最好养不容易死| 空调一匹是什么意思| prl是什么激素| 偏安一隅是什么意思| 一什么图画| 草鱼又叫什么鱼| 孤僻是什么意思| 内内是什么意思| 喉咙发痒咳嗽吃什么药| 跑路什么意思| 姑娘是什么意思| 老年人爱出汗是什么原因| 抗体是什么| 今年53岁属什么生肖| 路旁土命什么意思| 嗓子挂什么科| 跑单是什么意思啊| 吃什么受孕率又快又高| 日午念什么| 老出汗是什么原因| 鱼肝油有什么功效| 喝什么水对身体好| 胃痛吃什么| 吃什么水果可以护肝| 心功能一级什么意思| 为什么会长白头发| 后脑勺发麻是什么原因| 什么样的女人最旺夫| 3e是什么意思| 女宝胶囊的作用和功效是什么| 老人吃什么钙片补钙效果最好| 有什么病| 糖尿病可以吃什么零食| 补脑吃什么最好| 四月四号是什么星座| 神经性皮炎是什么原因引起的| 女生月经迟迟不来是什么原因| 阑尾切除后有什么影响和后遗症| 为什么会长疣| 前列腺肥大吃什么药效果最好| 什么颜色加什么颜色等于灰色| 哪吒是什么意思| 什么是生僻字| 倒拔垂杨柳是什么意思| shiraz是什么名字红酒| 顺势而为什么意思| 橙色加蓝色是什么颜色| 弟弟的孩子叫什么| 什么是前列腺钙化| 今年56岁属什么生肖| 金钱肚是什么| ab是什么| 荔枝不能跟什么一起吃| 胃上面是什么器官| 月经腰疼是什么原因引起的| 咯血是什么意思| 黄精泡水喝有什么功效| 77年什么命| 里脊肉是什么肉| diamond是什么牌子| 小囊性灶是什么意思| 澳大利亚位于什么板块| 美帝是什么意思| 什么是压缩性骨折| 烂嘴是什么原因| 全套是什么意思| beams是什么品牌| 小便有泡沫是什么情况| 肚脐眼叫什么穴位| 跟腱是什么| 一月27日是什么星座| 百度
"); //-->

博客专栏

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

企业老板“成长烦恼”系列案例之:薪酬惹的“祸”?

发布人: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 的说明文档。


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




相关推荐

技术专区

关闭
可怜巴巴的意思是什么 女人安全期是什么时候 晨勃是什么意思 下巴发黑是什么原因 无济于事的意思是什么
荨麻疹可以吃什么水果 不让看朋友圈显示什么 肌电图是检查什么的 头发汗多是什么原因 湿化瓶内放什么水
不知道干什么 窦房结内游走性心律是什么意思 拔凉拔凉是什么意思 脚膜炎用什么药最好 冠脉钙化是什么意思
脚汗多是什么原因 生活质量是什么意思 九月初十是什么星座 梦见掉粪坑里了是什么意思 阴道排气是什么原因
爱慕内衣什么档次weuuu.com 急性肠胃炎吃什么药hcv9jop4ns0r.cn 四字五行属什么hcv8jop2ns1r.cn 梦见手机屏幕摔碎了是什么意思hcv8jop3ns0r.cn 梦到捉鱼是什么意思hcv7jop5ns3r.cn
螃蟹过街的歇后语是什么hcv9jop1ns5r.cn 卡西欧手表什么档次hcv9jop5ns1r.cn 狮子座女和什么星座最配hkuteam.com 什么样的伤口算开放性hcv8jop5ns0r.cn 蛔虫和蛲虫有什么区别hcv8jop2ns0r.cn
青柑是什么hcv8jop5ns2r.cn 黄疸高对婴儿有什么影响dayuxmw.com 武警和特警有什么区别bjcbxg.com 前列腺ca是什么意思hcv9jop6ns5r.cn 西安有什么好吃的特产hcv8jop2ns6r.cn
手麻脚麻是什么原因引起的hcv9jop4ns6r.cn 和解少阳是什么意思hcv8jop4ns8r.cn 斑秃去医院挂什么科hcv8jop3ns7r.cn 胃黏膜受损是什么症状hcv9jop1ns5r.cn 山魈是什么hcv8jop0ns1r.cn
百度