接下来的测试,出现了两个问题
第一个问题是demo程序启动不了,这是上一篇文章忘记说的事,启动不了的原因是权限问题,提示需要root,
但我是用busybox搭的文件系统,直接就是root,不存在权限问题,所以问题出在应用上,经过一番调试后发现,问题出在xenomai的应用库上,具体位置在xenomai/kernel/cobalt/posix/process.c,
把
static int gid_arg = -1;
修改成static int gid_arg=0;
这样就可以跳过权限的限制
第二个问题就是启动慢的问题,经过一番日志打印,追踪到是sys_mount加载过慢的问题,因为使用过几个实时系统都出现了同样问题,猜测是中断抢占了内核线程,导致读取yaffs文件的操作效率变低,
在内核源码的kernel/kthread.c里面找到了修改优先级的代码,然后把代码加在了init/main.c里面,
static int __ref kernel_init(void *unused)
{
int ret;
static const struct sched_param param = { .sched_priority = 0 };
sched_setscheduler_nocheck(current, SCHED_FIFO, ¶m);
kernel_init_freeable();
sched_setscheduler_nocheck(current, SCHED_NORMAL, ¶m);
等加载完init函数再切换成普通优先级,这样系统启动速度又回来到了原来的2秒时代