1. 環境說明
使用的是rhel5.4的系統:
$cat /etc/issue
red hat enterprise linux server release 5.4 (tikanga)
$uname -a
linux myhost 2.6.18-164.el5 #1 smp tue aug 18 15:51:48 edt 2009 x86_64 x86_64 x86_64 gnu/linux
2. 需要的rpm包
安裝基本工具包:rpm-build redhat-rpm-config unifdef。一般情況這三個包都是安裝過的,檢查一下即可。
$sudo yum install rpm-build
package rpm-build-4.4.2.3-18.el5.x86_64 already installed and latest version
$sudo yum install redhat-rpm-config
package redhat-rpm-config-8.0.45-32.el5.noarch already installed and latest version
$sudo yum install unifdef
package unifdef-1.171-5.fc6.x86_64 already installed and latest version
3. 下載下傳并安裝源碼包
現在的rhel發行版中,已經不再帶源碼包,是以需要單獨下載下傳,供flashcache編譯使用。
3.1 準備目錄
[supu@host]$ cd
[supu@host]$ mkdir -p rpmbuild/{build,rpms,sources,specs,srpms}
[supu@host]$ echo '%_topdir %(echo $home)/rpmbuild' > .rpmmacros
3.2 下載下傳源碼包
可以在ftp://ftp.redhat.com/下載下傳到對應的源碼包。這裡的核心版本号是:
$uname -r
2.6.18-164.el5
是以需要下載下傳的是kernel-2.6.18-164.el5.src.rpm,完整的url是:
ftp://ftp.redhat.com/pub/redhat/linux/enterprise/5server/en/os/srpms/kernel-2.6.18-164.el5.src.rpm
注:最好選擇合适的鏡像下載下傳,速度會差很多的。
3.3 安裝源碼包
有了前面的目錄準備,現在可以安裝源碼包了
sudo rpm -i kernel-2.6.18-164.el5.src.rpm
cd ~/rpmbuild/specs
rpmbuild -bp --target=`uname -m` kernel-2.6.spec 2> prep-err.log | tee prep-out.log
ok,這時候源碼包就安裝到了如下目錄:/home/supu/rpmbuild/build/kernel-2.6.18/linux-2.6.18.x86_64
3.4 準備子產品編譯
在源碼目錄執行如下指令,主備flashcache子產品編譯
cd ~/rpmbuild/build/kernel-2.6.18/linux-2.6.18.x86_64
make oldconfig
make prepare
make modules_prepare
4. 編譯flashcache
可以在github上下載下傳flashcache的源代碼,和linux源碼一起編譯,編譯完成後會生成三個可執行程式和一個可動态加載的核心子產品:
flashcache_create
flashcache_load
flashcache_destroy
flashcache.ko
4.1 下載下傳并準備編譯
在在github上可以下載下傳到flashcache最新的源碼。這裡下載下傳的是flashcache-1.0.11,解壓後,有如下目錄:
[supu@host facebook-flashcache-15adea8]$ ls
doc flashcache-wt license makefile readme readme-centos5.4 readme-dkms src
其中src包含了普通的flashcache(這裡的普通指的是write-back版本的flashcache),flashcache-wt包含了write-through版本的源碼;檔案readme-centos5.4中包含了在rhel5.4下編譯的注意事項,本文主要參考該檔案。
按照readme-centos5.4中的說明,修改檔案src/makefile,将行extra_cflags(第一行),用如下内容替換:
注意:這裡沒有換行。
4.2 編譯之
make kernel_tree=/home/supu/rpmbuild/build/kernel-2.6.18/linux-2.6.18.x86_64/
4.3 動态加載子產品
最後需要将子產品flashcache.ko加載到核心,這裡可以将flashcache.ko拷貝到相應目錄:
sudo cp flashcache.ko /lib/modules/2.6.18-164.el5/kernel/drivers/block
或者使用insmod指令,動态加載之:
sudo insmod flashcache.ko
job done! enjoy!