在 nctuns engine 的 裡面,mykvm.cc 會負責在 System.map 尋找要做 memory mapping 的 key word ,而這檔案會根據不同 release version 而命名,因此之前的作法都是在 package 的 install.sh 將 System.map-$KERNELVERSION link 成 System.map,而在之後 20060503 之後的版本我又將其 link name 改成 System.map-nctuns
雖然如此可以區別原使用者已經存在 System.map 檔案情況下,但當有不同版本 kernel 同時在開發時(這次我就是一次 porting 到 2.6.16.1 之後又 porting 到 2.6.17.8)還是會造成錯誤,我這次porting 到 2.6.17.8 一開始一直發生 panic ,後來才發現 System.map-nctuns 是 link 到舊版本 (2.6.16.1) 的檔案,所以造成 memory mapping 錯誤的情況
因此現在將這段 code 改成如下:
#include <sys/utsname.h>
…
…
Off_t search_kvm(char *name)
{
…
…
struct utsname version;
if (uname(&version) < 0) {
perror(“uname”);
exit(1);
}
sprintf(path, “/boot/System.map-$s”, version.release);
Pt = fopen(path, “r”);
…
}
如此一來,nctuns engine 就會根據目前開機所使用的 engine 來讀取對應的 System.map 檔案,減少多版本存在時錯誤的發生。
Home >
NCTUns engine
> System.map 變革與多 kernel 並存
Sunday, August 13, 2006
System.map 變革與多 kernel 並存
Subscribe to:
Post Comments (Atom)

0 Comments:
Post a Comment