# PSCI 测试
- 本例程已经经过多元异构系统部署方案整改,`amp_config.json`具体配置方式含义参考[多元异构系统部署](../../../../system/amp/README.md)
- 新的方案只生成一个组合镜像(包含多个子镜像),由引导程序进行镜像解析,多核启动.
## 1. 例程介绍
``介绍例程的用途,使用场景,相关基本概念,描述用户可以使用例程完成哪些工作 `
`
本例程主要演示了PSCI 初始化特性以及CPU hotplug 的功能
本例程一共包含了两个工程目录,分别如下所示:
1. psci_test ---- 为psci特性测试与CPU hotplug 主程序源码
2. psci_slave ---- 从核程序,程序运行之后会倒数5秒之后,进入power down 模式,等待主核唤醒
## 2. 如何使用例程
> ``描述开发平台准备,使用例程配置,构建和下载镜像的过程 `
`
>
> - 具体的配置方案可以参考文档 doc/reference/usr/how_to_use.md
### 2.1 硬件配置方法
> ``哪些硬件平台是支持的,需要哪些外设,例程与开发板哪些IO口相关等(建议附录开发板照片,展示哪些IO口被引出)`
`
1. 准备一块E2000Q/D开发板
2. 将串口连接好电脑,波特率设为 115200-8-1-N
### 2.2 SDK配置方法
> ``依赖哪些驱动、库和第三方组件,如何完成配置(列出需要使能的关键配置项)`
`
本例程提供独特的编译指令,具体如下:
1. make menuconfig_test 配置主核中的相关参数
2. make menuconfig_slave 配置从核中的相关参数
3. make backupconfig 将配置的主核与从核参数保存
4. make clean 清理./下的编译结果
5. make amp_make AMP_CONFIG=config[num] 将当前目录下的amp_config.json定义的配置项编译打包,config[num]为配置项的名称
6. 具体使用方法为:
- 为了方便快速配置测试,本项目配置文件列举了11个默认配置项目,会同时加载apu、rpu的默认配置,然后使用`make amp_make AMP_CONFIG=config[num]`命令进行对应soc的对应aarch编译
- 在当前 makefile 目录下
- make + 以上指令
### 2.3 构建和下载
> ``描述构建、烧录下载镜像的过程,列出相关的命令 `
`
- 以E2000Q为例:
通过amp_config.json我们可以看到config0,config1分别代表目录下的aarch64、aarch32配置项,输入:
```
make amp_make AMP_CONFIG=config0
```
然后进行编译,在目标目录下/mnt/d/tftpboot/生成 baremetal.elf 文件,如果您没有此路径,可自行使用packed_image.elf即可
- 网口烧录请参考:
[SDK 使用说明](https://gitee.com/phytium_embedded/phytium-standalone-sdk/blob/release/doc/reference/usr/usage.md)
- 利用串口终端工具,烧录镜像
```
setenv ipaddr 192.168.4.20;
setenv serverip 192.168.4.50;
setenv gatewayip 192.168.4.1;
tftpboot f0000000 baremetal.elf;
bootelf -p f0000000
```
### 2.4 输出与实验现象
> ``描述输入输出情况,列出存在哪些输入,对应的输出是什么(建议附录相关现象图片)`
`
#### 操作步骤
- bootcode会同时自动启动主核与从核,并等待5s从核关闭
1. 程序内交互命令:
```c
psci feature
```
- 此命令用于查看当前psci 例程支持的特性
![psci_feature](figs/psci_feature.png)
```c
psci amp
```
- 此命令用于主核与从核之间进行cpu hotplug 操作的特性
![master_slave_test](figs/master_slave_test.png)
## 3. 如何解决问题 (Q&A)
> ``主要记录使用例程中可能会遇到的问题,给出相应的解决方案 `
`
## 4. 修改历史记录
> ``记录例程的重大修改记录,标明修改发生的版本号 `
`
- 2023-06-27 :v1.0.0 初始化项目
- 2024-06-27 :v1.1.0 整改多核启动方式,优化代码结构