Chinaunix首页 | 论坛 | 博客
  • 博客访问: 93992
  • 博文数量: 32
  • 博客积分: 960
  • 博客等级: 准尉
  • 技术积分: 335
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-22 23:09
文章分类

全部博文(32)

文章存档

2011年(31)

2010年(1)

我的朋友

分类: LINUX

2011-03-27 01:36:19

如果直接修改了代码段,需要Flush Dcache、Invalidate Icache,让修改之后的指令生效。


VxWorks下可以通过cacheTextUpdate来实现,Linux+MIPS下可以通过系统调用_sys_sysmips完成同样的工作:


/* 通过宏_syscall4,定义了函数sysmips */

_syscall4(int, sysmips, int, cmd, long, arg1, int, arg2, int, arg3);


……

#if ( HARDWARE_PLATFORM. == MIPS )

/*

如果直接修改了代码段,需要(1)Flush DCache;(2)Invalidate ICache。这个系统调用同时完成两者。

当前Linux内核版本(2.6.14~2.6.27)中,该系统调用sysmips不是对外的;后续Linux可能对外提供cachectl,替换即可。

*/

sysmips(3/*FLUSH_CACHE*/, 0, 0, 0);

/* #define FLUSH_CACHE 3 */ /* writeback and invalidate caches */ /*inlude/asm/sysmips.h*/

#endif

……


sysmips刷新了整个Cache,动作有点大;后续cachectl会提供和cacheTextUpdate一样的按地址刷新的功能。

阅读(2162) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~