鸿蒙内核liteos_a添加reboot命令实现设备重启
2109 浏览 19 点赞 24 收藏
在鸿蒙内核的调试过程经常需要重启设备烧固件。
由于设备没有reset物理按键,需要经常长按POWER键进行强制关机,调试起来比较麻烦。
于是在shell中添加reboot命令实现类似Android设备的重启命令。
查找芯片手册,找到实现软件重启需要用到的寄存器

从Address Mapping章节找到CRU的基址:0x200000000

寄存器CRU_GLB_SRST_FST_VALUE所在偏移量 0x0100

根据手册得到CRU基址+CRU_GLB_SRST_FST_VALUE寄存器 = 0x20000000 + 0x0100 = 0x20000100
往0x20000100写入0xfdb9即可
转换成代码:
hmos/vendor/rockchip/rk3126c/board/include/asm/platform.h 添加寄存器宏定义
#define CRU_REG_ADDR 0x20000000
#define CRU_REG_BASE IO_DEVICE_ADDR(CRU_REG_ADDR)
#define CRU_GLB_SRST_FST_REG_BASE IO_DEVICE_ADDR(CRU_REG_ADDR + 0x0100)
#define CRU_GLB_SRST_FST_VALUE 0xfdb9
复制hmos/vendor/rockchip/rk3126c/board/board.c 添加reset方法实现,写0xfdb9到reset寄存器
void reset(void){
(*(volatile unsigned int *)(CRU_GLB_SRST_FST_REG_BASE) = (CRU_GLB_SRST_FST_VALUE));
}
复制hmos/kernel/liteos_a/fs/vfs/vfs_cmd/vfs_shellcmd.c 尾部添加reboot shell 命令以及对应入口函数osShellCmdReset
int osShellCmdReset(int argc, const char **argv)
{
#if (defined(LOSCFG_PLATFORM_RK3126C))
extern void reset(void);
reset();
#endif
return 0;
}
SHELLCMD_ENTRY(reset_shellcmd, CMD_TYPE_EX, "reset", XARGS, (CmdCallBackFunc)osShellCmdReset);
SHELLCMD_ENTRY(reboot_shellcmd, CMD_TYPE_EX, "reboot", XARGS, (CmdCallBackFunc)osShellCmdReset);
复制编译liteos.bin并烧写,进入命令行 敲help 显示刚刚添加的两个命令reboot和reset

输入reboot命令验证重启功能正常

不同芯片可根据芯片手册找到对应的reset寄存器实现重启。
©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
其它
标签
鸿蒙内核
reboot命令
设备重启
暂无评论数据
发布
相关推荐
深圳启用全国首个鸿蒙智慧地铁站
7912
0鸿蒙版千问重磅更新,开启瓜分30亿春节活动
三元桥的水冰兔
7289
0怎么实现一个图片一直循环上下匀速移动的动画效果?
鸿蒙小助手
7847
0如何实现选择多张图片上传?
鸿蒙小助手
3135
0半模态高度能否自适应,怎么实现?
鸿蒙小助手
7343
0宋你一朵小红花
我还没有写个人简介......
881
帖子
0
提问
1679
粉丝
最新发布
华为鸿蒙 HarmonyOS 6.0.0.108 SP2 Developer 版本新增 9 套桌面图标
2025-10-20 23:17:16 发布注意!华为开启鸿蒙6.0系统推送,稳定性提升
2025-10-14 15:10:36 发布热门推荐