在每次初始化VB前,都會去先初始化MPP系統,再去初始化VB
1 HI_MPI_SYS_Exit(); 2 HI_MPI_VB_Exit();
但是去初始化不會清楚先前對緩存池的設置,且若有VB被占用,去初始化就會失敗
1 HI_MPI_VB_SetConf failed with 0xa0018012! //系統忙
查看/dev/logmpp, 確實有VB被占用,沒有被釋放。
1 <3>[ vb] [Func]:vb_set_config [Line]:1719 [Info]:VB is initialized! 2 <3>[ vb] [Func]:destroy_pool [Line]:465 [Info]:blk in this pool(6) occupied by someone, please release first! 3 <3>[ vb] [Func]:destroy_pool [Line]:465 [Info]:blk in this pool(6) occupied by someone, please release first!
方法有二:
1. 找到VB被占用,程序退出時VB沒有釋放的原因
2. 在程序退出時,由系統強制銷毀VB(插入 hi35xx_base.ko 時加上模塊參數 vb_force_exit=1)
在程序運行時,查看pool(6),cat proc/umap/vb ,發現pool(6)是AI模塊使用的,所以定位到Ai,可能是由於用戶手動獲取Frame, 程序退出時,沒能手動釋放Frame,
導致AI占用的VB未能回收導致的。
寫測試程序驗證,的確是這個原因。