2011年1月9日 星期日

Linux Modules(1.1)module parameters


Linux Module允許使用者在insmod時帶入相關的parameters,這些parameters必須被宣告成golbal,並且使用module_param()宣告資料型態與權限,目前支援的資料型態有byte, short, ushort, int, uint, long, ulong, charp, bool等等。也可以使用module_param_array(name, type, num, perm)宣告成陣列。perm(權限)會決定/sys/module/顯示該參數的權限。

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("GPL");

static unsigned char b_byte = 1;
module_param(b_byte, byte, S_IRUGO|S_IWUSR);

static short int b_short = 2;
module_param(b_short, short, S_IRUGO|S_IWUSR);

static unsigned short int b_ushort = 3;
module_param(b_ushort, ushort, S_IRUGO|S_IWUSR);

static int b_int = 6;
module_param(b_int, int, S_IRUGO|S_IWUSR);

static unsigned int b_uint = 5;
module_param(b_uint, uint, S_IRUGO|S_IWUSR);

static long b_long = 6;
module_param(b_long, long, S_IRUGO|S_IWUSR);

static unsigned long b_ulong = 7;
module_param(b_ulong, ulong, S_IRUGO|S_IWUSR);

static char *b_charp = "brook";
module_param(b_charp, charp, S_IRUGO|S_IWUSR);

static int b_bool = 1;
module_param(b_bool, bool, S_IRUGO|S_IWUSR);

static int __init init_modules(void)
{
    printk("b_byte: %d\n", b_byte);
    printk("b_short: %d\n", b_short);
    printk("b_ushort: %u\n", b_ushort);
    printk("b_int: %d\n", b_int);
    printk("b_uint: %u\n", b_uint);
    printk("b_long: %ld\n", b_long);
    printk("b_ulong: %lu\n", b_ulong);
    printk("b_charp: %s\n", b_charp);
    printk("b_bool: %d\n", b_bool);

    return 0;
}

static void __exit exit_modules(void)
{
}

module_init(init_modules);
module_exit(exit_modules);



Kernel Version:2.6.35
    參考資料:
  1. Linux Device Drivers, 3e
  2. Document/printk-formats.txt



2011年1月8日 星期六

Internet Explorer 7 on Linux with Wine


brook@vista:~$ wget http://www.kegel.com/wine/winetricks
brook@vista:~$ ./winetricks ie7
brook@vista:~$ ./winetricks fakechinese顯示中文
brook@vista:~$ wine 'c:\program files\internet explorer\iexplore'

裝了IE8常常會出現問題,所以最後就安裝IE7了。


    參考資料:
  1. Community Documentation - Wine
  2. Wine 1.2 IE8
  3. Issue 159: winetricks ie8 verb doesn't yield working browser



2011年1月2日 星期日

step by step to install Vserver


vserver是OS-Level的virtual machine,是一種進階的 chroot 機制,提供 processes 完全獨立的file systems,但系統其它部份並不是獨立的。Kernel必須要加上Patch才能支援VServer。

下載支援的kernel和patch
brook@vista:/usr/src$ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.37.tar.bz2
brook@vista:/usr/src$ wget http://vserver.13thfloor.at/Experimental/patch-2.6.37-vs2.3.0.37-rc1.diff

解開kernel並且給予patch
brook@vista:/usr/src$ tar jxvf linux-2.6.37.tar.bz2
brook@vista:/usr/src$ cd linux-2.6.37
brook@vista:/usr/src/linux-2.6.37$ patch -p1 < ../patch-2.6.37-vs2.3.0.37-rc1.diff

利用make-kpkg建立kernel的.deb檔
brook@vista:/usr/src/linux-2.6.37$ cp /boot/config-`uname -r` .config
brook@vista:/usr/src/linux-2.6.37$ make oldconfig
brook@vista:/usr/src/linux-2.6.37$ make-kpkg clean
brook@vista:/usr/src/linux-2.6.37$ fakeroot make-kpkg --initrd --append-to-version=-vserver kernel-image kernel-headers
brook@vista:/usr/src/linux-2.6.37$ cd ..
brook@vista:/usr/src$ sudo dpkg -i linux-image-2.6.37-vs2.3.0.37-rc1-vserver_2.6.37-vs2.3.0.37-rc1-vserver-10.00.Custom_amd64.deb
brook@vista:/usr/src$ sudo dpkg -i linux-headers-2.6.37-vs2.3.0.37-rc1-vserver_2.6.37-vs2.3.0.37-rc1-vserver-10.00.Custom_amd64.deb



接著就是重新用新的kernel開機,並且建立vserver。
下載並且compile新的util-vserver
brook@vista:/usr/src$ sudo apt-get install e2fslibs-dev libnss3-dev phthon-dev
brook@vista:/usr/src$ wget http://people.linux-vserver.org/~dhozac/t/uv-testing/util-vserver-0.30.216-pre2926.tar.bz2
brook@vista:/usr/src$ tar jxvf util-vserver-0.30.216-pre2926.tar.bz2
brook@vista:/usr/src$ cd util-vserver-0.30.216-pre2926/
brook@vista:/usr/src/util-vserver-0.30.216-pre2926$ ./configure
brook@vista:/usr/src/util-vserver-0.30.216-pre2926$ make -j3
brook@vista:/usr/src/util-vserver-0.30.216-pre2926$ sudo make install
brook@vista:/usr/src/util-vserver-0.30.216-pre2926# sudo vserver BrookVS build -m debootstrap --hostname BrookVS --interface eth0:192.168.1.2/24 --interface lo:127.0.0.1/8  -- -d maverick -m http://tw.archive.ubuntu.com/ubuntu/
brook@vista:/usr/src/util-vserver-0.30.216-pre2926# sudo vserver BrookVS start
brook@vista:/usr/src/util-vserver-0.30.216-pre2926# sudo vserver BrookVS enter




Kernel Version:2.6.37
參考資料:
  1. How to compile a kernel on Ubuntu 10.04
  2. Linux - Vserver
  3. Virtual machine - Wikipedia, the free encyclopedia
  4. VServer - DebianWiki
  5. Linux - Vserver, Installation on Linux 2.6




熱門文章