K230 启动优化指南
1.k230启动顺序
k230整体启动流程如下图所示
2.启动时间测量
2.1 软件测量
k230的CPU核为RISCV,用户可以在大小核的任意软件内使用以下代码获取当前时间。
uint64_t perf_get_smodecycles(void)
{
uint64_t cnt;
__asm__ __volatile__(
"rdcycle %0" : "=r"(cnt)
);
return cnt;
}
获取的值为当前CPU运行的时钟周期数,除以CPU的频率即为当前运行的时间。k230_sdk默认大核的时钟频率为1.6GHz,小核的时钟频率为800MHz。
2.2 硬件测量
在需要测量的点加入GPIO的边沿变化,通过逻辑分析仪或示波器可获得更精准的时间。 可通过K230_EVB_LPDDR3_UNSIP板J1的14脚检测开发板上电信号(需要用跳线帽短接15、16脚)。
2.3 外部观测
视频录制整个系统启动过程,板载电源灯亮代表系统上电,VO显示VI图像代表视频pipeline完成建立且可以显示。出现画框框住人脸表示完成人脸识别。
3.系统裁剪
从上一节的图中看出bootrom启动后第一步就是要加载大小核的镜像,所以优化启动时间的第一步就是要先裁剪大小核镜像。
3.1 小核裁剪
3.1.1 linux镜像裁剪
请参考文档 中的Linux模块删除章节。
3.1.2 rootfs裁剪
删除rootfs中不会被使用的程序或库,对于门锁POC项目主要包括如下内容,裁剪过程参考文件k230_sdk/board/k230_evb_doorlock/gen_image_script/gen_doorlock_image.sh
rm -rf usr/bin/fio;
rm -rf usr/bin/lvgl_demo_widgets;
rm -rf usr/bin/ssh*
rm -rf usr/bin/sftp
rm -rf usr/bin/lat*
rm -rf usr/bin/hostapd_cli
rm -rf usr/bin/*test*
rm -rf usr/bin/k230_timer_demo
rm -rf usr/bin/gpio_keys_demo
rm -rf lib/modules/5.10.4+/kernel/drivers/gpu/
rm -rf lib/tuning-server;
rm -rf usr/bin/stress-ng bin/bash usr/sbin/sshd usr/bin/trace-cmd usr/bin/lvgl_demo_widgets;
3.1.3 文件系统选型
当前nor flash支持的文件系统有ubifs和jffs2,门锁POC默认使用ubifs的镜像。他们都是压缩文件系统,ubifs的读写性能要强于jffs2。注意使用ubifs文件系统时,系统下电前,小核需要先输入halt命令,再进行断电否则可能会对文件系统造成破坏
3.2大核裁剪
3.2.1 大核应用程序裁剪
strip会去掉应用程序与库的符号信息和调试信息,大大减少空间占用。编译门锁POC时,会在k230_sdk/board/k230_evb_doorlock/gen_image_script/gen_doorlock_image.sh
中裁剪大核应用程序。
/opt/toolchain/riscv64-linux-musleabi_for_x86_64-pc-linux-gnu/bin/riscv64-unknown-linux-musl-strip fastboot_app.elf;