迅维网

查看: 1137|回复: 4
打印 上一主题 下一主题
[其他]

优麒麟 | RISC-V开发板关机流程浅析

  [复制链接]
跳转到指定楼层
1#
发表于 2022-3-30 14:58:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式 来自: 加拿大 来自 加拿大

马上注册,获取阅读精华内容及下载权限

您需要 登录 才可以下载或查看,没有帐号?注册

x
[size=1.4]HiFive Unmatched 是一款基于 RISC-V 处理器的 PC 形态开发板,此开发板开创了 RISC-V Linux 开发的新时代。它拥有一个名为 SiFive FU740 SoC 的 SiFive 处理器,一个 5 核处理器,由四个 SiFive U74 核和一个 SiFive S7 核构成,具有足够的性能来支撑图形桌面的运行。
[size=1.4]2021 年 12 月 29 日,在优麒麟社区和海河实验室研发团队的共同努力下,发布了优麒麟社区首个支持 RISC-V 架构的 20.04 Pro 版本操作系统,此版本系统针对 HiFive Unmatched 进行了深度适配,其中系统无法关机的问题,在研发团队的努力下取得了突破,实现了通过系统关机断电的功能。
[size=1.4]
[size=1.4]1、Hifive Unmatched 开发板硬件支持
[size=1.4]
[size=1.4]PMIC 是 power management IC 的缩写,中文是电源管理集成电路,主要特点是高集成度,将传统的多路输出电源封装在一颗芯片内,使得多电源应用场景效率更高,体积更小。此开发板使用 DA9063 芯片作为其 PMIC ,实现电源管理模块。
[size=1.4]Hifive Unmatched 开发板硬件关机共支持两种方式,一种是由 CPU 相关功能引脚直接外接开/关机按键,通过按键使对应引脚产生高低电平变化实现关机,用户可以通过按键操作直接关机。另一种是通过开发板硬件电源管理模块(即上述 DA9063 )外接开/关机按键实现开/关机功能。
[size=1.4]
[size=1.4]2、优麒麟系统关机流程软件实现
[size=1.4]在 Linux Kernel 中,主流的 shutdown 和 restart 都是通过“reboot”系统调用(具体可参考 kernel/sys.c )来实现的,关机也是一种特殊的 restart 过程,所以,内核根据不同的表现方式,将 reboot 分为如下的几种方式:
[size=1.4]
[size=1.4]本篇文章主要讲解关机流程,即其中的 POWER_OFF ,执行该动作后,系统会停止操作系统,并去除所有供电。在优麒麟中可以通过 poweroff 命令,发起如下流程:
[size=1.4]
[size=1.4]用户空间程序通过 reboot 系统调用,进入内核空间。具体实现是在内核目录的 kernel/reboot.c 中的下图函数中:
[size=1.4]
[size=1.4]其中针对 cmd 有多个 case,poweroff 等关机命令实际调用的是:
[size=1.4]
[size=1.4]内核空间提供了 kernel_restart 处理函数,响应用户空间的 reboot 请求。其处理流程主要包括:
[size=1.4]●  向关心 reboot 过程的进程发送 Notify 事件;
[size=1.4]●  调用 drivers 核心模块提供的接口,关闭所有的外部设备;
[size=1.4]●  调用 drivers syscore 模块提供的接口,关闭 system core;
[size=1.4]●  调用 Architecture 相关的处理函数,进行后续的处理;
[size=1.4]●  紧接着执行了 machine_power_off 函数。
[size=1.4]我们在 machine_power_off 函数中可以看到,如果 pm_power_off 这个函数指针不为空,那么系统就会通过调用这个函数进行关机。
[size=1.4]
[size=1.4]实际上 pm_power_off 函数指向了 gpio-poweroff.c 中的 gpio_poweroff_do_poweroff 函数,在此函数中去实际操作 GPIO 。
[size=1.4]整个关机流程会依次进行如下调用:
-->kernel_power_off()-->kernel_shutdown_prepare-->migrate_to_reboot_cpu-->syscore_shutdown-->machine_power_off  // 该函数根据具体平台而定,riscv 平台在 arch/riscv/kernel/reset.c 文件中
[size=1.4]Hifive Unmatched 开发板中的 SiFive FU740 芯片将 GPIO2 口用作关机使用,我们只需要给 GPIO2 发送低电平脉冲即可实现关机,具体流程如下:
[size=1.4]首先要更改内核源码中对应开发板的设备树文件,在内核源码中的 /arch/riscv/boot/dts/sifive/hifive-unmatched-a00.dts 文件,向其中增加关机设备节点:
gpio-poweroff {    compatible = "gpio-poweroff";    gpios = ;}
[size=1.4]其次,需要在内核中相应的驱动代码中将设备树节点与驱动匹配。
[size=1.4]
[size=1.4]将设备节点与驱动相匹配后,当用户发起关机请求,经过上述关机流程,最后控制硬件完成关机断电的操作。
[size=1.4]以上即为 Hifive Unmatched 开发板的整体关机流程,感兴趣的小伙伴,赶紧到优麒麟官网下载体验吧。


2#
发表于 2022-3-31 09:48:00 | 只看该作者 来自: 北京丰台 来自 北京丰台
看了起来很高端的样子

回复 支持 反对

使用道具 举报

3#
发表于 2022-3-31 09:49:51 | 只看该作者 来自: 山东德州 来自 山东德州
谢谢                                                         分享

回复 支持 反对

使用道具 举报

4#
发表于 2022-4-4 13:19:53 | 只看该作者 来自: 中国 来自 中国
多少钱,估计玩不起

回复 支持 反对

使用道具 举报

5#
发表于 2022-4-22 13:37:07 | 只看该作者 来自: 湖南长沙 来自 湖南长沙
看起来很高大上

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长提醒 上一条 /1 下一条

快速回复 返回顶部 返回列表
附近
店铺
微信扫码查看附近店铺
维修
报价
扫码查看手机版报价
信号元
件查询
点位图


芯片搜索

快速回复