Sunday, August 13, 2006

System.map 變革與多 kernel 並存

在 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 檔案,減少多版本存在時錯誤的發生。

HEMiDEMi Technorati Del.icio.us MyShare個人書籤 Yahoo

0 Comments: