2017年2月27日 星期一

FAST (Features from Accelerated Segment Test)

上一張經典的圖



















這張圖表示FAST取角點的方法
底下是python的範例

#!/usr/bin/env python3.4
import numpy as np
import cv2
from matplotlib import pyplot as plt

def main():
        """ Main behaviour """
        print("test")
        image = cv2.imread("lena.png")
        gray=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        fast = cv2.FastFeatureDetector_create()
        keypoints = fast.detect(gray,None)
        image2 = cv2.drawKeypoints(gray, keypoints, image, color=(255,0,0))
        cv2.imshow("Image",image2)
        #取出keypoint的x,y用numpy版本
        np_pts = np.asarray([kp.pt for kp in keypoints])
        print(np_pts[0])
       #keypoint轉成List格式 
        index = []
        for point in keypoints:
          temp = (point.pt, point.size, point.angle, point.response, point.octave, point.class_id)
          index.append(temp)
        print(index[0])
        #---------------List轉keypoint----------------------------------
        #kps = []
        #for point in index:
        #  temp = cv2.KeyPoint(x=point[0][0],y=point[0][1],_size=point[1], _angle=point[2], _response=point[3], _octave=point[4], _class_id=point[5])
        #  kps.append(temp)
        #image3 = cv2.drawKeypoints(gray, kps, image, color=(0,0,255))
        #-------------------------------------------------
        #cv2.imwrite('fast_false.png',image2)
        cv2.waitKey(0)

if __name__ == "__main__":

        main()

2013年8月30日 星期五

Porting new defconfig from versatile_defconfig

First, you need to know that the bootloader pass two information to kernel:
1: register r0  <---- 0
     register r1 <---- machine ID   (it should exist in arch/arm/tools/mach-types and kernel will check it!)
2: parameters structure name ATAG

We copy the source code from versatile board:
$> cp -rf arch/arm/mach-versatile arch/arm/mach-neo
$> cp -rf arch/arm/plat-versatile arch/arm/plat-neo

We add our machine type in arch/arm/tools/mach-types:
$> vi arch/arm/tools/mach-types
----------------------------------------------------------------------------
neo                     MACH_NEO                NEO                    387
----------------------------------------------------------------------------

We modify arch/arm/Kconfig to add ARCH_NEO & PLAT_NEO and source them:
$> vi arch/arm/Kconfig
--------------------------
.................
config ARCH_NEO
        bool "NEO development board"
        select ARM_AMBA
        select ARM_VIC
        select CLKDEV_LOOKUP
        select HAVE_MACH_CLKDEV
        select ICST
        select GENERIC_CLOCKEVENTS
        select ARCH_WANT_OPTIONAL_GPIOLIB
        select PLAT_NEO
        select PLAT_VERSATILE_CLCD
        select PLAT_VERSATILE_FPGA_IRQ
        select ARM_TIMER_SP804
        help
          This enables support for NEO development board.
...................
config PLAT_NEO
        bool
..................
source "arch/arm/mach-neo/Kconfig"
source "arch/arm/plat-neo/Kconfig"
..................
--------------------------

We modify arch/arm/Makefile to refer to mach-neo & plat-neo if we used:
$> vi arch/arm/Makefile
-------------------------
...................
machine-$(CONFIG_ARCH_NEO)      := neo
...................
plat-$(CONFIG_PLAT_NEO)         := neo
..................
-------------------------

We also need to modify arch/arm/mach-neo/Kconfig:
$> vi arch/arm/mach-neo/Kconfig
-------------------------
menu "NEO development board platform type"
        depends on ARCH_NEO

config ARCH_VERSATILE_PB
        bool "Support NEO Platform Baseboard for ARM926EJ-S"
        select CPU_ARM926T
        select MIGHT_HAVE_PCI
        default y
        help
          Include support for the ARM(R) Versatile Platform Baseboard
          for the ARM926EJ-S.

config MACH_VERSATILE_AB
        bool "Support NEO Application Baseboard for ARM926EJ-S"
        select CPU_ARM926T
        help
          Include support for the ARM(R) Versatile Application Baseboard
          for the ARM926EJ-S.

config MACH_VERSATILE_DT
        bool "Support NEO platform from device tree"
        select USE_OF
        select CPU_ARM926T
        help
          Include support for the ARM(R) Versatile/PB platform,
          using the device tree for discovery

endmenu
-------------------------

Modify arch/arm/plat-neo/Kconfig too:
$> vi arch/arm/plat-neo/Kconfig
-------------------------
if PLAT_NEO

config PLAT_VERSATILE_CLCD
        bool

config PLAT_VERSATILE_FPGA_IRQ
        bool

config PLAT_VERSATILE_LEDS
        def_bool y if LEDS_CLASS
        depends on ARCH_REALVIEW || ARCH_NEO

config PLAT_VERSATILE_SCHED_CLOCK
        def_bool y

endif
-------------------------

Now, we can create new defconfig:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- versatile_defconfig
$> make ARCH=arm menuconfig
-------------------------
System Type  --->
    ARM system type (ARM Ltd. Versatile family)  --->
          (X) NEO development board
    NEO platform type  --->
          [*] Support NEO platform from device tree
          
Kernel Features  --->
     [*] Use the ARM EABI to compile the kernel                                            
     [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW) 
-------------------------
$> cp .config arch/arm/configs/neo_defconfig

We can make zImage by using our new defconfig:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- neo_defconfig
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- versatile-pb.dtb

Emulator:
$> qemu-system-arm -M versatilepb -dtb ./versatile-pb.dtb -kernel zImage -initrd rootfs.img -serial stdio -append "root=/dev/ram rdinit=/sbin/init  console=ttyAMA0"


PS:
1 You can install QEMU in UBUNTU by:
$> sudo apt-get install qemu qmeu-kvm-extras
2 "CROSS_COMPILE=arm-none-linux-gnueabi-" depends on your toolchain.
3 rootfs.img.gz can be found in my old post named "Build Rootfs by Busybox for ARM on QEMU"
4 You can see versatile-pb.dts in path arch/arm/boot/dts
5 Because we use "-M versatilepb" to emulate, the machine type in  arch/arm/tools/mach-types should be 387.

Emulate Vexpress-a15 board on QEMU .............. (using Device Tree)

Download Linux Kernel 3.45 first:
$> wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.45.tar.bz2
$> tar xvf linux-3.4.45.tar.bz2

Configure:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- vexpress_defconfig
$> make ARCH=arm menuconfig
------------------------------------------------------------------------------------------------------------
System Type  --->
     Versatile Express platform type  --->
          [*] Device Tree support for Versatile Express platforms
------------------------------------------------------------------------------------------------------------
Now we can build zImage:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage
Build dtb:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- vexpress-v2p-ca15-tc1.dtb
Emulate:
$> qemu-system-arm -M vexpress-a15 -serial stdio -dtb ./vexpress-v2p-ca15-tc1.dtb -kernel zImage -initrd rootfs.img -append "root=/dev/ram rdinit=/sbin/init  console=ttyAMA0"



PS:
1 You can install QEMU in UBUNTU by:
$> sudo apt-get install qemu qmeu-kvm-extras
2 "CROSS_COMPILE=arm-none-linux-gnueabi-" depends on your toolchain.
3 rootfs.img.gz can be found in my old post named "Build Rootfs by Busybox for ARM on QEMU"
4 You can see vexpress-v2p-ca15-tc1.dts in path arch/arm/boot/dts

Emulate VersatilePB board on QEMU

Download Linux Kernel 3.45 first:
$> wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.4.45.tar.bz2
$> tar xvf linux-3.4.45.tar.bz2

Configure:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- versatile_defconfig
$> make ARCH=arm menuconfig
------------------------------------------------------------------------------------------------------------

Kernel Features  --->
     [*] Use the ARM EABI to compile the kernel                                          
     [*]   Allow old ABI binaries to run with this kernel (EXPERIMENTAL) (NEW)

------------------------------------------------------------------------------------------------------------
Now we can build zImage:
$> make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- zImage
Emulate:
$> qemu-system-arm -M versatilepb -m 128M -kernel arch/arm/boot/zImage -initrd ../rootfs.img.gz -append "root=/dev/ram rdinit=/sbin/init"



PS:
1 You can install QEMU in UBUNTU by:
$> sudo apt-get install qemu qmeu-kvm-extras
2 "CROSS_COMPILE=arm-none-linux-gnueabi-" depends on your toolchain.
3 rootfs.img.gz can be found in my old post named "Build Rootfs by Busybox for ARM on QEMU"

Build Rootfs by Busybox for ARM on QEMU

Download busybox first:
$> wget http://busybox.net/downloads/busybox-1.21.1.tar.bz2
$> tar xvf busybox-1.21.1.tar.bz2

Configure:
$> make menuconfig
------------------------------------------------------------------------------------------------------------
Busybox settings --> Build option
                                     "Build busybox as a static binary"
                           --> cross compiler prefix
                                      "arm-none-linux-gnueabi-"                       <----Depends on your cross_compiler
------------------------------------------------------------------------------------------------------------
$> make
$> make install
Now we can build rootfs.img:
$> cd _install
$> mkdir proc sys dev etc etc/init.d
$> cat << EOF > etc/init.d/rcS
#!/bin/sh
mount -t proc none /proc
mount -t sysfs none /sys
/sbin/mdev -s
EOF
$> chmod +x etc/init.d/rcS
$> find . | cpio -o --format=newc > ../rootfs.img
Create rootfs.img.gz:
$> cd ..
$> gzip -c rootfs.img > rootfs.img.gz

2012年12月31日 星期一

VI

sudo apt-get install vim

選擇顏色方案:

ls /usr/share/vim/vim73/colors/
可以看到很多方案
blue.vim      
...
evening.vim
等等

sudo vi ~/.vimrc


set fileencodings=utf-8,cp936,big5,latin1 
set encoding=utf-8 
set termencoding=cp936 
set fileencoding=utf-8
colorscheme evening 
set number
set nobackup 
set autoindent 
set smartindent 
filetype indent on

2012年12月19日 星期三

VMware-player 使用vmnetcfg.exe

在cmd命令行進入VMware安裝文件所在的目錄下運行:
VMware-player-4.0.3-703057.exe /e ./vmware-player-extend
然後會生成vmware-player-extend目錄,在裏面找到network.cab,解壓它之後可以找到vmnetcfg.exe文件,拷貝它至VMwarePlayer安裝根目錄下並運行,通過而配置

VPN

ubuntu:

sudo apt-get install pptpd
//--------------------------------------------------------------------
$ sudo vi /etc/pptpd.conf

#把logwtmp註解掉
#logwtmp

#這兩行去掉註解
localip 192.168.0.1
remoteip 192.168.0.234-238,192.168.0.245

 //--------------------------------------------------------
sudo vi /etc/ppp/pptpd-options
name pptpd 
ms-dns 8.8.8.8
 //------------------------------------------------------
$ sudo vi /etc/ppp/chap-secrets
#增加一個帳號密碼
# client    server  secret          IP addresses
user        pptpd   password        *
//----------------------------------
重新啟動pptpd
$ sudo /etc/init.d/pptpd restart
//--------------------------------
開啟 ipv4 forward
sudo vi /etc/sysctl.conf
#將以下值改為1
net.ipv4.ip_forward=1
使修改生效
$ sudo sysctl -p 
//---------------------------------
* 設定 iptables
#防火牆開這兩個:
iptables -A INPUT -p TCP -i $EXTIF --dport 1723 -j ACCEPT # vpn
iptables -A INPUT -p gre -i $EXTIF -j ACCEPT
#設定路由
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
#eth0為對外連線的網卡介面
#若MSN或一些網站無法連,可能是MTU問題,加下面這行限制MTU大小
iptables -A FORWARD -s 192.168.0.0/24 -p tcp -m tcp --tcp-flags SYN,RST SYN \
         -j TCPMSS --set-mss 1200

NoMachine

Ubuntu:

$ wget http://64.34.173.142/download/3.5.0/Linux/nxclient_3.5.0-7_i386.deb
$ wget http://64.34.173.142/download/3.5.0/Linux/nxnode_3.5.0-9_i386.deb
$ wget http://64.34.173.142/download/3.5.0/Linux/FE/nxserver_3.5.0-11_i386.deb

$ sudo dpkg -i nxclient_3.5.0-7_i386.deb
$ sudo dpkg -i nxnode_3.5.0-9_i386.deb
$ sudo dpkg -i nxserver_3.5.0-11_i386.deb

$ sudo /usr/NX/bin/nxserver --status
$ sudo /usr/NX/bin/nxserver --start
$ sudo /usr/NX/bin/nxserver --stop
$ sudo /usr/NX/bin/nxserver --restart

NX Client for Windows:
http://64.34.173.142/download/3.5.0/Windows/nxclient-3.5.0-9.exe

記得填
gnome-session --session=ubuntu-2d

sudo apt-get install xfce4
/usr/bin/startxfce4 

2012年12月14日 星期五

ubuntu 11.10開機進入文字畫面

sudo vi /etc/default/grub


GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
改成:
GRUB_CMDLINE_LINUX_DEFAULT="text"
再執行sudo update-grub即可

如果是lightdm

sudo vi /etc/X11/default-display-manager

/usr/sbin/lightdb
改成
false



gdm的話:/user/sbin/gdm
lightdm:/user/sbin/lightdm
lxdm:/usr/sbin/lxdm



要進入X用
sudo start gdm

startx

記得在
~/.profile加上

export LANGUAGE="en_US.UTF-8"
export LANG="en_US.UTF-8"

避免中文亂碼

Xen

建立硬碟 (20000M=20G)
dd if=/dev/zero of=xen.img bs=1M count=20000

設定檔
注意boot = "c"是硬碟開機 boot = "d" 是光碟開機
vif中bridge=virbr0,script=vif-bridge"為橋接
vif = [ "ip=192.168.1.100, bridge=virbr0, script=vif-bridge" ]
如果要NAT的話
vif = ['ip=10.0.0.1' , script='vif-nat']

每台虛擬機要配不同port號(5900+N)
vncdisplay =要配的號碼
或者用自動找可用的port分配
vncunused = 1

不限定連進IP
vnclisten = "0.0.0.0"
限定本機
vnclisten = "127.0.0.1"

解決滑鼠飄移問題

usb=1
usbdevice="tablet"


neo.cfg
//-------------------------------------------------------------------------
name = "neo"
maxmem = 4096
memory = 1024
vcpus = 4
builder = "hvm"
kernel = "/usr/lib/xen/boot/hvmloader"
boot = "d"
pae = 1
acpi = 1
apic = 1
localtime = 1
device_model = "/usr/lib64/xen/bin/qemu-dm"
vnc = 1
vncunused = 1
vncconsole = 1
vnclisten = "0.0.0.0"
vncpasswd = "密碼"
keymap = "en-us"
disk = [ "file:/home/neo/vmimage/xen.img,hda,w", "file:/home/neo/ISO/win7.iso,hdc:cdrom,r" ]
vif = [ "ip=192.168.1.100, bridge=virbr0, script=vif-bridge" ]
usb=1
usbdevice="tablet"
//-------------------------------------------------------------------------------------------------------------

看開啟的Dom-U
sudo xm list

啟動Dom-U(對設定檔檔名)
sudo xm create neo.cfg

關閉Dom-U(對設定檔裡的name)
sudo xm shutdown neo


 brctl show

/sbin/ip a | grep '^[0-9]'

 vif0.0 綁到 virbr0 :
brctl addif virbr0 vif0.0


http://www.cdus.org/bbs/forum.php?mod=viewthread&tid=42295


建立bridge
brctl addbr xenvbr11
brctl stp xenvbr11 off
brctl setfd xenvbr11 0 //set forward delay time
ip link set xenvbr11 up
建vlan(區隔區網)
vconfig set_name_type DEV_PLUS_VID_NO_PAD
vconfig add peth0 11 //在peth0上创建vlan
ip link set peth0.11  address fe:ff:ff:ff:ff:ff
ip link set peth0.11 up





把vlan加入到网桥中
brctl addif xenvbr11 peth0.11
创建端口配置文件
cd /etc/sysconfig/network-scripts/

cat ifcfg-peth0.11


DEVICE=peth0.11
TYPE=Ethernet
ONBOOT=yes
MACADDR=fe:ff:ff:ff:ff:ff
VLAN=yes
IPADDR=192.168.5.1
NETMASK=255.255.255.0
VLAN_NAME_TYPE=DEV_PLUS_VID_NO_PAD
BRIDGE=xenvbr11


cat ifcfg-xenvbr11


DEVICE=xenvbr11
TYPE=Bridge
DELAY=0
STP=off
ONBOOT=yes

2012年11月21日 星期三

Makefile

    CC=arm-elf-gcc
    LD=arm-elf-ld
    CFLAGS= -c -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -g -mapcs-32 -march=armv4 -mtune=arm7tdmi
    LDFLAGS= -N -p -X -T $(LDS)
    LIB=
    SRC = $(wildcard $(CURDIR)/*.c)
    ASRC = $(wildcard $(CURDIR)/*.S)
    SRC += $(ASRC)
    OBJ := $(patsubst %.c,%.o,$(SRC))
    OBJ := $(patsubst %.S,%.o,$(OBJ))
    LDS = neo.lds
all: image.elf
    @echo $(OBJ)
   
image.elf: $(OBJ)
    $(LD) $(LDFLAGS) $(OBJ) -o $@


%.o: %.c
    $(CC) $(CFLAGS) $< -o $@
%.o: %.S
    $(CC) $(CFLAGS) $< -o $@
clean:
    rm -rf *.o *.elf
   

2012年11月18日 星期日

skyeye

sudo yum -y install automake
sudo yum -y install libtool
yum install glibc.i586
yum install texinfo
yum install python-dev*
 
yum install gtk2.i586 gtk2 gtk2-devel.i586
*yum install libgcc gcc-c++
yum groupinstall "X Window System" 
 yum install llvm 
 
ncurses

ncurses-devel

glibc

glibc-devel

libXpm

libXpm-devel

xterm

xorg-x11-fonts-misc
 
 
./autogen.sh
automake
./configure
make lib
make
make install_lib
sudo make install 
 
cd /opt/skyeye/testsuite/arm_hello 
/opt/skyeye/bin/skyeye_main.py -e arm_hello 
即會叫出   <skyeye>, 此時分別輸入命令
$  <skyeye> start        // 會出現一個小視窗, 此為模擬Embedded System之輸出
$  <skyeye> run          // 會在小視窗中出現 Hello World , 這是 arm_hello 所送出
$  <skyeye> stop        // 停止arm_hello 之執行, Hello World會停止出現
$  <skyeye> quit         // 離開 skyeye 
 
 
##############################################
Ubuntu
 
sudo apt-get install libgtk2.0-dev pkg-config libatk1.0-dev 
libpango1.0-dev libfreetype6-dev libglib2.0-dev libx11-dev binutils-dev 
 libncurses5-dev  libxpm-dev 


 llvm-2.8:
./configure
make
sudo make install  
 
skyeye-1.3.3_rel.tar.gz
 
./configure

make lib

make

sudo make install

sudo make install_lib 

Samba smb.conf

[global]
workgroup = WORKGROUP
server string = Samba File Server
security = user
encrypt passwords = yes
unix password sync = yes
obey pam restrictions = yes
pam password change
[homes]
comment = Home Directories
browseable = no
writable = yes
valid users = %S
[Temp]
comment = Temp
browseable = yes
writable = yes
path = /tmp


dos charset = CP950
unix charset = UTF-8
log file = /var/log/samba/log.%m 
max log size = 1000
syslog = 0
panic action = /usr/share/samba/panic-action %d
passwd program = /usr/bin/passwd %u



#記得用smbpasswd -a user 新增使用者

2012年11月15日 星期四

Pointer

int *a;
int b = 10;
a = &b;
printf("%p\t%d",a,*a);
// a 印出 0012FF70 , *a印出 10
//-----------------------------------------------------
int *a;
int b[] = {1,2,3};
a = b;
printf("%p\t%d\n",a,*a);
a++;
printf("%p\t%d\n",a,*a);
//印出 0012FF68 1
//         0012FF6C 2
//char (+1), short (+2), int (+4), float (+4),double (+8)
//-----------------------------------------------------
 int *a;
 int b[][2] = {{1,2},{3,4},{5,6}};
 a = b[0];
 printf("%p\t%d\n",a,*a);
 a++;
 printf("%p\t%d\n",a,*a);
 a++;
 printf("%p\t%d\n",a,*a);
//印出 0012FF5C 1

//         0012FF60 2
//         0012FF64 3
//-----------------------------------------------------
#include "stdio.h"
int neo_max(int a,int b)
{
    return (a > b ? a: b);
}
int main(int argc, char* argv[])
{
    int (*ptr)(int,int);
    ptr = neo_max;
    printf ("max is %d\n",ptr(1,2));
    return 0;
}
//印出 max is 2

//-----------------------------------------------------
#include <stdio.h>
#include <windows.h>
#include <process.h>

void print_ch(void * a)
{
    char ch = (char) a;
    printf ("This is %c\n",ch);
}

int main(int argc, TCHAR* argv[])
{

    _beginthread(print_ch,0,(void*)('a'));
    _beginthread(print_ch,0,(void*)('b'));
    return 0;
}
//印出 This is a
//印出 This is b
//----------------------------------------------------------

2012年11月14日 星期三

函數指針

在C中

#include "stdio.h"

int foo(int a)
{
    printf("This is foo => %d\n",a);
}

int foo2(int a)
{
     printf("This is foo2 => %d\n",a);
}

int main()
{
     int (*pFunction)(int) = foo;         //宣告pFunction指針是int (*)(int)函數指針且為初值為foo函數
     pFunction(100);                          //<=印出 This is foo => 100
     pFunction = foo2;
     pFunction(200);                        //<=印出 This is foo2 => 200

     return 0;
}
----------------------------------------------------------------------------------------------------------------------------
在C++的類別中

class Neo
{
public:
    void (*pFun)();
    void go(void);
};
在函式中可用void(Neo::*pFun)() = &Neo::go;指定函數
在同類別中用(this->*pFun)();來呼叫
-----------------------------------------------------------------------------------------------------------------------------
類別函數指標

class Neo
{
public:
void go1(void);
void go2(void);
}
//先宣告成員函數指標
typedef void (Neo::*pfun)();
//再宣告結構體的方式
typedef struct ActionStruct
{
ptr function;
char* name;
} AS;

接著再cpp先註冊函數表
AS Actions[] =
{
{ &Neo::go1, "go1"},
{ &Neo::go2, "go2"}
};

呼叫方式如下
(this->*(Actions[1].function))();
char *functionName = Actions[1].name;

2012年11月12日 星期一

colinux fedora 11


執行指令 colinux-daemon.exe -t nt @fedora.conf

fedora.conf
//------------------------------
kernel=vmlinux
initrd=initrd.gz
cobd0="d:\colinux\fedora11.img"
cobd1="d:\colinux\swap512m.img"
root=/dev/cobd0 ro
cofs0=c:\
cofs1=d:\
cofs2=e:\
mem=512
# cocon=120x40
#eth0=slirp,,tcp:5901:5900
#eth1=pcap-bridge,"Local Area Connection",,
# eth2=tuntap
eth0=pcap-bridge,"BackBone"
//------------------------------
 
加硬碟
在cmd下 
fsutil file createnew d:\colinux\disk\ext4_4G.disk 4294967296 
在fedora.conf加入
cobd2=d:\colinux\disk\ext4_4g.disk
在fedora中
mkfs.ex4 /dev/cobd2
mount –t ext4 /dev/cobd2 /mnt/newDisk
 

建立網路
vi /etc/sysconfig/network-scripts/ifcfg-eth0
//---------------------------------
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
//----------------------------------
vi /etc/rc.local
加上
/etc/sysconfig/network-scripts/ifup eth0
vi /etc/resolve.conf
nameserver 8.8.8.8

增加sudoer
vi /etc/sudoers



建立ssh_host_..._key

# cd /etc/ssh/

# /usr/bin/ssh-keygen -q -t rsa1 -f ./ssh_host_rsa1_key -C '' -N ''
# chmod 600 ./ssh_host_rsa1_key
# chmod 644 ./ssh_host_rsa1_key.pub

# /usr/bin/ssh-keygen -q -t rsa -f ./ssh_host_rsa_key -C '' -N ''
# chmod 600 ./ssh_host_rsa_key
# chmod 644 ./ssh_host_rsa_key.pub

# /usr/bin/ssh-keygen -q -t dsa -f ./ssh_host_dsa_key -C '' -N ''
# chmod 600 ./ssh_host_dsa_key
# chmod 644 ./ssh_host_dsa_key.pub

修改/etc/yum.repos.d

註解掉以下所有mirrorlist

fedora.repo

[fedora]
baseurl=ftp://ftp.stu.edu.tw/Linux/Fedora/linux/releases/11/Everything/i386/os/

[fedora-debuginfo]
baseurl=ftp://ftp.stu.edu.tw/Linux/Fedora/linux/releases/11/Everything/i386/debug/

 [fedora-source]
baseurl=ftp://ftp.stu.edu.tw/Linux/Fedora/linux/releases/11/Everything/source/SRPMS/

//--------------------------------------------------------------------------------------------------------
GPL 18 KB 2007/7/4 上午 12:00:00
Packages
2009/6/4 上午 12:00:00
README-BURNING-ISOS-en_US.txt 11 KB 2009/5/14 上午 12:00:00
RPM-GPG-KEY-fedora
2009/4/10 上午 12:00:00
RPM-GPG-KEY-fedora-11-primary 2 KB 2009/5/12 上午 12:00:00
RPM-GPG-KEY-fedora-i386
2009/4/10 上午 12:00:00
RPM-GPG-KEY-fedora-ia64 2 KB 2009/5/12 上午 12:00:00
RPM-GPG-KEY-fedora-ppc
2009/4/10 上午 12:00:00
RPM-GPG-KEY-fedora-ppc64
2009/4/10 上午 12:00:00
RPM-GPG-KEY-fedora-x86_64
2009/4/10 上午 12:00:00
drpms
2009/6/4 上午 12:00:00
repodata
2009/6/4 上午 12:00:00
repoview
2009/6/5 上午 12:00:00





//-------------------------------------------------------------------------------------------------------

fedora-updates.repo
[updates]
baseurl=ftp://ftp.stu.edu.tw/Linux/Fedora/linux/updates/11/i386/

 [updates-source]
baseurl=ftp://ftp.stu.edu.tw/Linux/Fedora/linux/updates/11/SRPMS/

好了之後安裝
sudo yum install yum-plugin-fastestmirror
sudo yum install screen
sudo yum -y install gcc
sudo yum -y install gcc-c++
sudo yum -y install make
sudo yum -y install cmake
sudo yum -y install pkgconfig
sudo yum -y install subversion


安裝X

yum groupinstall "X Window System" "XFCE"
yum groupinstall chinese-support

#####################################
vi /etc/X11/xinit/xinput.d/gcin.conf
#加入
DISABLE_IMSETTINGS=yes

######################################
自動登入 tty 文字介面
vi /sbin/autologin
#!/bin/sh
exec 0</dev/$1 1>/dev/$1 2>&1
shift
exec $*
vi /etc/event.d/tty1
respawn
#exec /sbin/getty 38400 tty1
exec /sbin/autologin tty1 login -f your_name
or
vi /etc/inittab
#1:2345:respawn:/sbin/mingetty tty1
1:2345:respawn:/sbin/autologin tty1 login -f your_name

 ####################################
自動登入 GNOME 桌面
vi /etc/gdm/custom.conf
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=account
TimedLoginEnable=true
TimedLogin=account
TimedLoginDelay=0

自動登入 Xfce 桌面
Step 1: 上面
Step 2: sudo vi /etc/inittab → id:3:initdefault:
Step 3: vi ~/.bash_profile
if [ -z "$DISPLAY" ] && [ $(tty) == /dev/tty1 ]; then
export IMSETTINGS_INTEGRATE_DESKTOP=yes
export DISABLE_IMSETTINGS=true
export GTK_IM_MODULE=gcin
export IMSETTINGS_MODULE=gcin
export QT_IM_MODULE=gcin
export XMODIFIERS=@im=gcin
startxfce4
fi

產生 xorg.conf
Xorg -configure :1
sudo cp ~/xorg.conf.new /etc/X11/xorg.conf
設定 VGA out 解析度
#本機螢幕顯示畫面, 外接螢幕解析度 1024x768
xrandr --output VGA1 --mode 1024x768
#本機螢幕不顯示畫面, 外接螢幕解析度 1024x768
xrandr --output LVDS1 --off --output VGA1 --mode 1024x768
#停止 VGA out 輸出
xrandr --output LVDS1 --auto --output VGA1 --off


 ############################
 sudo yum -y install xauth
 sudo yum -y install kdebase
 sudo yum -y install gdm







2012年11月5日 星期一

ANT

執行方式
Ant
表示當前目錄的構建文件為build.xml 運行 ant 執行默認的目標。

Ant –buildfile   test.xml
使用當前目錄下的test.xml 文件運行Ant ,執行默認的目標






ANT典型的層次結構

src存放原始碼
class存放邊譯過的文件
lib存放第三方的jar
dist存放打包發佈後的文件

每個build.xml文件定義一個唯一的項目(Project元素)。
每個項目下可以定義很多目標(target元素),
這些目標之間可以有依賴關係。
當執行這類目標時,需要執行他們所依賴的目標。 

 每個target中可以定義多個任務,其中還定義了所要執行的任務序列。
Ant在構建target時必須調用所定義的任務。

(1) 核心任務。(Ant自帶的任務)
(2) 可選任務。可選任務實來自第三方的任務,因此需要一個附加的JAR文件。
(3) 用戶自定義的任務。

<project>標籤
內在屬性
    (1) default表示默認的運行目標,這個屬性是必須的。
    (2) basedir表示項目的基準目錄。
    (3) name表示項目名。
    (4) description表示項目的描述。 

<target>標籤
一個項目標籤下可以有一個或多個target標籤。
一個target標籤可以依賴其他的target標籤。
target的所有屬性如下。
    (1).name表示標明,這個屬性是必須的。
    (2).depends表示依賴的目標。
    (3)if表示僅當屬性設置時才執行。
    (4)unless表示當屬性沒有設置時才執行。
    (5)description表示項目的描述。 

每個target。在執行之前,首先需要執行它所依賴的target。
例如程序中的名為run的target的depends屬性compile,
而名為compile的target的depends屬性是prepare,
所以這幾個target執行的順序是prepare->compile->run。


<property >標籤
定義需要的變數名稱
    (1).name表示變數名,這個屬性是必須的。
    (2).value表示變數其內的值。
  例如<property name="class.root" value="${basedir}/test"/>

<mkdir>標籤
該標籤用於創建一個目錄,它有一個屬性dir用來指定所創建的目錄名,其代碼如下:
<mkdir dir="${class.root}"/>
通過以上代碼就創建了一個目錄,這個目錄已經被前面的property標籤所指定。

<jar>標籤
該標籤用來生成一個JAR文件,其屬性如下。
    (1) destfile表示JAR文件名。
    (2) basedir表示被歸檔的文件名。
    (3) includes表示別歸檔的文件模式。
    (4) exchudes表示被排除的文件模式。
例如
   <jar jarfile="${jar.file}" basedir="${class.dir}">
            <exclude name="**/*.html"/>
   </jar>

<javac標籤>
該標籤用於編譯一個或一組java文件,其屬性如下。
    (1).srcdir表示源程序的目錄。
    (2).destdir表示class文件的輸出目錄。
    (3).include表示被編譯的文件的模式。
    (4).excludes表示被排除的文件的模式。
    (5).classpath表示所使用的類路徑。
    (6).debug表示包含的調試信息。
    (7).optimize表示是否使用優化。
    (8).verbose 表示提供詳細的輸出信息。
    (9).fileonerror表示當碰到錯誤就自動停止。
例如
<javac srcdir="${test.src.dir}"
               destdir="${test.class.dir}"
               debug="${build.debug}"
               debuglevel="${build.debuglevel}"
               source="${build.source}"
               target="${build.target}"
               deprecation="${build.deprecation}">
            <classpath refid="test.classpath"/>
            <compilerarg line="${build.extraparams}"/>
  </javac>

<java>標籤
該標籤用來執行編譯生成的.class文件,其屬性如下。
    (1).classname 表示將執行的類名。
    (2).jar表示包含該類的JAR文件名。
    (3).classpath所表示用到的類路徑。
    (4).fork表示在一個新的虛擬機中運行該類。
    (5).failonerror表示當出現錯誤時自動停止。
    (6).output 表示輸出文件。
    (7).append表示追加或者覆蓋默認文件。

<delete>標籤
該標籤用於刪除一個文件或一組文件,去屬性如下。
    (1)/file表示要刪除的文件。
    (2).dir表示要刪除的目錄。
    (3).includeEmptyDirs 表示指定是否要刪除空目錄,默認值是刪除。
    (4).failonerror 表示指定當碰到錯誤是否停止,默認值是自動停止。
    (5).verbose表示指定是否列出所刪除的文件,默認值為不列出。
例如
    <delete dir="${class.dir}"/>
    <delete file="${jar.file}"/>
      

<copy>標籤
該標籤用於文件或文件集的拷貝,其屬性如下。
    (1).file 表示源文件。
    (2).tofile 表示目標文件。
    (3).todir 表示目標目錄。
    (4).overwrite 表示指定是否覆蓋目標文件,默認值是不覆蓋。
    (5).includeEmptyDirs 表示制定是否拷貝空目錄,默認值為拷貝。
    (6).failonerror 表示指定如目標沒有發現是否自動停止,默認值是停止。 
    (7).verbose 表示制定是否顯示詳細信息,默認值不顯示。 
例如
    <copy todir="${class.dir}">
    <fileset dir="${basedir}" includes="*.properties"/>
    <fileset dir="${src.dir}" includes="**/*.xml"/>
    </copy>       


Ant的數據類型
數據類型包含在org.apache.tool.ant.types包中
幾個常用的數據類型。 

1. argument 類型
可以通過<arg>元素向其傳遞命令行參數
    (1).values 是個命令參數。如果參數種有空格,但又想將它作為單獨一個值,則使用此屬性
    (2).file表示一個參數的文件名。在構建文件中,此文件名相對於當前的工作目錄。
    (3).line表示用空格分隔的多個參數列表。    
    (4).path表示路徑。

2.ervironment 類型
   由Ant構建文件調用的外部命令或程序,
    <env>元素制定了哪些環境變量要傳遞給正在執行的 系統命令,
    可以接受以下屬性。
    (1).file表示環境變量值得文件名。此文件名要被轉換位一個絕對路徑。
    (2).path表示環境變量的路徑。Ant會將它轉換為一個本地約定。
    (3).value 表示環境變量的一個直接變量。
    (4).key 表示環境變量名。
注意file path 或 value只能取一個。

3.filelist類型
Filelist 是一個支持命名的文件列表的數據類型,包含在一個filelist類型中的文件不一定是
存在的文件。以下是其所有的屬性。
    (1).dir是用於計算絕對文件名的目錄。
    (2).files 是用逗號分隔的文件名列表。
    (3).refid 是對某處定義的一個<filelist>的引用。
注意dir和files 都是必要的,除非指定了refid(這種情況下,dir和files都不允許使用)。

4.fileset類型
Fileset 數據類型定義了一組文件,並通常表示為<fileset>元素。不過,許多ant任務構建成了
隱式的fileset,這說明他們支持所有的fileset屬性和嵌套元素。以下為fileset 的屬性列表。
    (1).dir表示fileset 的基目錄。
    (2).casesensitive的值如果為false,那麼匹配文件名時,fileset不是區分大小寫的,其默認
         值為true.
    (3).defaultexcludes 用來確定是否使用默認的排除模式,默認為true。
    (4).excludes 是用逗號分隔的需要派出的文件模式列表。
    (5).excludesfile 表示每行包含一個排除模式的文件的文件名。
    (6).includes 是用逗號分隔的,需要包含的文件模式列表。
    (7).includesfile 表示每行包括一個包含模式的文件名。

5.patternset 類型
Fileset 是對文件的分組,而patternset是對模式的分組,他們是緊密相關的概念。
<patternset>支持4個屬性:
    (1)includes
    (2)excludex
    (3)includexfile
    (4)excludesfile
與fileset相同。Patternset 還允許以下嵌套元素:include,exclude,includefile 和 excludesfile.

6.filterset 類型
Filterset定義了一組過濾器,這些過濾器將在文件移動或複製時完成文件的文本替換。
主要屬性如下:
    (1).begintoken 表示嵌套過濾器所搜索的記號,這是標識其開始的字符串。
    (2).endtoken表示嵌套過濾器所搜索的記號這是標識其結束的字符串。
    (3).id是過濾器的唯一標誌符。
    (4).refid是對構建文件中某處定義一個過濾器的引用。

7.Path類型
Path元素用來表示一個類路徑,不過它還可以用於表示其他的路徑。在用作揖個屬性時,路經中的各項用分號或冒號隔開。在構建的時候,此分隔符將代替當前平台中所有的路徑分隔符,其擁有的屬性如下。
    (1).location 表示一個文件或目錄。Ant在內部將此擴展為一個絕對路徑。
    (2).refid 是對當前構建文件中某處定義的一個path的引用。
    (3).path表示一個文件或路徑名列表。

8.mapper類型
Mapper類型定義了一組輸入文件和一組輸出文件間的關係,其屬性如下。
    (1).classname 表示實現mapper類的類名。當內置mapper不滿足要求時,用於創建定製     mapper.
    (2).classpath表示查找一個定製mapper時所用的類型路徑。
    (3).classpathref是對某處定義的一個類路徑的引用。
    (4).from屬性的含義取決於所用的mapper.
    (5).to屬性的含義取決於所用的mapper.
    (6).type屬性的取值為identity,flatten glob merge  
regexp其中之一,它定義了要是用的
內置mapper的類型。
 

2012年10月13日 星期六

gentoo

用livedvd安裝:

按Esc回到boot:
/boot/gentoo root=/dev/ram0 init=/linuxrc initrd=/boot/gentoo.igz dokeymap aufs looptype=squashfs loop=/images.squashfs cdroot nomodeset
在命令後面加上 nox
/boot/gentoo root=/dev/ram0 init=/linuxrc initrd=/boot/gentoo.igz cdroot nomodeset nox



開機後:
第一步開啟sshd1:設網絡
    ifconfig eth0 xxx.xxx.xxx.xxx
    route add default gw xxx.xxx.xxx.xxx
2:設密碼
    passwd root
3:啟動 sshd 服務:
   /etc/init.d/sshd start
4:連putty
   echo nameserver 8.8.8.8 > /etc/resolv.conf
   echo nameserver 8.8.4.4 > /etc/resolv.conf
第二步格式化硬碟
1:利用cfdisk分區
   cfdisk /dev/sda
sda1做boot, sda2做swap, sda3做主要磁區,
--------------------------------------------------------------------
Name    Flags    Part Type    FS Type
---------------------------------------------------------------------
sda1      Boot      Primary       Linux            250MB
sda2                    Primary       Linux            700MB
sda3                    Primary       Linux
---------------------------------------------------------------------
2:格式化分區:
    mkfs.ext3 /dev/sda1
    mkswap /dev/sda2
    mkfs.ext4 /dev/sda3
3:啟動swap交換分區:
   swapon /dev/sda2
4:把sda3,sda1掛上
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot
5:開始複製LiveCD上的系統:
cp -apf  /mnt/static/* /mnt/gentoo/

cd /
cp -avx bin sbin lib lib32 lib64 boot usr opt emul etc root home var sys /mnt/gentoo/

mkdir /mnt/gentoo/proc /mnt/gentoo/dev
cd /mnt/gentoo/dev
mknod -m 660 console c 5 1
mknod -m 660 null c 1 3
mount -t proc none /mnt/gentoo/proc
mount -o bind /dev /mnt/gentoo/dev

6:查uuid
 blkid 
會看到

/dev/sda1: UUID="2df87859-21a2-4412-a33a-1881f0dd5ece" SEC_TYPE="ext2" TYPE="ext3"
/dev/sda2: UUID="8696720a-1c06-4940-b377-24167c5af002" TYPE="swap"
/dev/sda3: UUID="b92f275f-e0d0-4118-9ace-330c67e02f05" TYPE="ext4" 


改變uuid
tune2fs -U b92f275f-e0d0-4118-9ace-330c67e02f05 /dev/sda3


 7:把環境切換到硬盤
chroot /mnt/gentoo /bin/bash
env-update && source /etc/profile

8:修改硬盤 root 密碼
passwd root

9:從默認boot中移除啟動AutoConfig服務,否則您的root密碼是每次啟動時復位。
rc-update del autoconfig default

12:寫入下面的分區信息:
nano -w /etc/fstab
#/dev/sda1
UUID=41c22818-fbad-4da6-8196-c816df0b7aa8 /boot ext3 noauto,noatime 1 2
#/dev/sda2
UUID="8696720a-1c06-4940-b377-24167c5af002" none swap sw 0 0
#/dev/sda3
UUID="b92f275f-e0d0-4118-9ace-330c67e02f05" / ext4 defaults 0 1
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
proc /proc proc defaults 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec,size=128m 0 0


11:複製 kernel 到 /boot區
cp /usr/src/linux/System.map /boot/System.map
cp /usr/src/linux/arch/x86/boot/bzImage /boot/vmlinuz
genkernel ramdisk
 ln -s initramfs-genkernel-x86-3.3.0-gentoo initrd.img

11改開機選單nano -w  /boot/grub/grub.conf
//----------------------------------------
default 0
timeout 30
splashimahe=(hd0,0)/boot/grub/splash.xpm.gz
title neo-Gentoo-Linux
root (hd0,0)
search –no-floppy –fs-uuid –set b92f275f-e0d0-4118-9ace-330c67e02f05  #用sd3的uuid
kernel /boot/vmlinuz root=/dev/rm0 real_root=UUID=b92f275f-e0d0-4118-9ace-330c67e02f05 ramdisk_size=8192 vga=791 noxinitrd /boot/initrd.img
//----------------------------------------

10:安裝 grub 到 mbr
grub
root (hd0,0)
setup (hd0)
quit

13:設定時區,hostname
cp /usr/share/zoneinfo/Asia/Taipei /etc/localtime
nano -w /etc/conf.d/hostnameHOSTNAME="GentooVM"

14:網路設定
nano -w /etc/conf.d/net
//----------------------------------
# DHCP config_eth0=( "dhcp" )  
# 使用CIDR形式表示的靜態IP 
config_eth0=( "192.168.0.7/24" ) 
routes_eth0=( "default via 192.168.0.1" ) 
# 使用netmask形式表示的靜態IP 
config_eth0=( "192.168.0.7 netmask 255.255.255.0" ) 
routes_eth0=( "default via 192.168.0.1" )
//---------------------------------- 
建立符號連接net.eth0指向net.lo 
# cd /etc/init.d 
# ln -s net.lo net.eth0
啟動和停止網絡腳本
# /etc/init.d/net.eth0 start
# /etc/init.d/net.eth0 stop
配置網絡接口以便在啟動的時候裝載它
# rc-update add net.eth0 default
 
15:加入sshd服務
rc-status確認有沒有開sshd
rc-update add sshd default

16:退出環境,重開機,退出光碟
exit
reboot

--------------------------------------------------------------------------------------------------------------------------------

minimal CD安裝:
 
可先檢查系統效能評估安裝時間 
# grep bogo /proc/cpuinfo
bogomips       : 3337.81
# hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   1100 MB in  2.00 seconds = 549.97 MB/sec
 Timing buffered disk reads:  224 MB in  3.01 seconds =  74.36 MB/sec
# grep MemTotal /proc/meminfo
MemTotal:       509248 kB

開機後
boot: gentoo-nofb
 
檢查安裝模組
livecd root # lspci 
若有需要安裝的模組  
modprobe r8169
 
確認網卡模組
/usr/sbin/lspci | grep -i ethernet
底下是VM模組 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
VGA compatible controller: Cirrus Logic GD 5446
Ethernet controller: Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ (rev 20)
Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
RAM memory: Red Hat, Inc Virtio memory balloon


 
 
第一步設定網路
撥接部份
pppoe-setup
pppoe-start
VPN部份
nano -w /etc/ppp/chap-secrets 
nano -w /etc/ppp/options.pptp 
# pptp <server ip> 
區網部份
net-setup eth0
 ifconfig eth0 xxx.xxx.xxx.xxx
 route add default gw xxx.xxx.xxx.xxx
 echo nameserver 8.8.8.8 > /etc/resolv.conf
 開啟sshd
passwd root
/etc/init.d/sshd start

第二步格式化硬碟
1:利用cfdisk分區
   cfdisk /dev/sda
sda1做boot, sda2做swap, sda3做主要磁區,
--------------------------------------------------------------------
Name    Flags    Part Type    FS Type
---------------------------------------------------------------------
sda1      Boot      Primary       Linux            250MB
sda2                    Primary       Linux            700MB
sda3                    Primary       Linux
---------------------------------------------------------------------
2:格式化分區:
    mkfs.ext3 /dev/sda1
    mkswap /dev/sda2
    mkfs.ext3 /dev/sda3
3:啟動swap交換分區:
   swapon /dev/sda2
4:把sda3,sda1掛上
mount /dev/sda3 /mnt/gentoo
mkdir /mnt/gentoo/boot
mount /dev/sda1 /mnt/gentoo/boot

連上gentoo網站下載stage3

# links http://www.gentoo.org/main/en/mirrors.xml
cd /mnt/gentoo
wget ftp://gentoo.cs.nctu.edu.tw/gentoo/releases/x86/current-stage3/stage3-i686-*.tar.bz2
time tar xjpf stage3*
(解出bin dev etc home lib media mnt opt proc root run sbin sys tmp usr var)
cd /mnt/gentoo/usr
wget ftp://gentoo.cs.nctu.edu.tw/gentoo/snapshots/portage-latest.tar.bz2
time tar xjf portage-lat*
 (解出/mnt/gentoo/usr/portage)

掛上proc,dev跟切換磁碟
cd / 
mount -t proc proc /mnt/gentoo/proc
mount --rbind /dev /mnt/gentoo/dev
cp -L /etc/resolv.conf /mnt/gentoo/etc/
chroot /mnt/gentoo /bin/bash
env-update && source /etc/profile
 
設定hostname 
livecd / # cd /etc
livecd etc # echo "127.0.0.1 neo.at.neoplace neo localhost" > hosts
livecd etc # sed -i -e 's/hostname.*/hostname="neo"/' conf.d/hostname
(Use defined host name and check)
livecd etc # hostname neo
livecd etc # hostname -f
neo.at.neoplace
 

編譯內核安裝:
nano -w /etc/make.globals
GENTOO_MIRRORS="http://distfiles.gentoo.org/"改成 ftp://ftp.isu.edu.tw/pub/Linux/Gentoo/

for EPC
CFLAGS = "-0s -march=pentium-m -pipe -fno-ident -fomit-frame-pointer"  
其他
CFLAGS="-O2 -march=i686 -pipe"
# Use the same settings for both variables
CXXFLAGS="${CFLAGS}"
 

emerge --sync
emerge -av app-misc/screen
screen

emerge axel
nano -w /etc/make.globals
最後加上 
FETCHCOMMAND='/usr/bin/axel -a -S4 -o "\${DISTDIR}/\${FILE}" "\${URI}"'
RESUMECOMMAND="${FETCHCOMMAND}"

time emerge gentoo-sources 
(在/usr/src/linux裝source) 
cd /usr/src/linux
make menuconfig
time make -j2
make modules_install
cp /usr/src/linux/arch/x86/boot/bzImage /boot/kernel
cp arch/i386/boot/bzImage /boot/kernel 
建立initramfs檔   
emerge genkernel
genkernel --install --no-ramdisk-modules initramfs    

寫入下面的分區信息:
nano -w /etc/fstab
/dev/sda1 /boot ext3 noauto,noatime 1 2
/dev/sda2 none swap sw 0 0
/dev/sda3 / ext3 noatime 0 1
/dev/cdrom /mnt/cdrom iso9660 noauto,ro 0 0
proc /proc proc defaults 0 0
shm /dev/shm tmpfs nodev,nosuid,noexec,size=128m 0 0


安裝grub
time emerge grub
nano -w /boot/grub/grub.conf
//------------------------------------- 
default 0
timeout 10
splashimahe=(hd0,0)/boot/grub/splash.xpm.gz
 
title Gentoo
root (hd0,0) 
kernel /boot/kernel root=/dev/rm0 real_root=/dev/sda3 ramdisk_size=8192 vga=791 nox 
initrd /boot/initramfs
//-----------------------------------------------------
grub
grub> root (hd0,0)
grub> setup (hd0)
grub> quit
 
passwd
 
cd /etc/init.d
ln -s net.lo net.eth0
cd ../conf.d
echo 'config_eth0="xxx.xxx.xxx.xxx netmask 255.255.255.0"' >> net
echo 'routes_eth0="default via xxx.xxx.xxx.xxx"' >> net     
echo 'hostname="myhostname"' > hostname
rc-update add net.eth0 default
rc-update add sshd default
 
 
 
echo 'modules="r8139cp"' >> /etc/conf.d/modules
 
 
reboot     

2012年10月11日 星期四

linux 雙核問題

邏輯CPU個數

cat /proc/cpuinfo | grep "processor" | wc -l

cat /proc/interrupts

           CPU0       CPU1      
  0:        168          0   IO-APIC-edge      timer
  1:         79          0   IO-APIC-edge      i8042
  4:          2          0   IO-APIC-edge   
  8:          1          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 10:     302080          0   IO-APIC-fasteoi   virtio0, eth0
 11:        314          0   IO-APIC-fasteoi   uhci_hcd:usb1, sym53c8xx, Intel 82801AA-ICH
 12:        667          0   IO-APIC-edge      i8042
 14:      35182          0   IO-APIC-edge      ata_piix
 15:       3225          0   IO-APIC-edge      ata_piix
NMI:          0          0   Non-maskable interrupts
LOC:    2361875    2546808   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          0          0   Performance monitoring interrupts
IWI:          0          0   IRQ work interrupts
RES:      23414      23637   Rescheduling interrupts
CAL:         48      21032   Function call interrupts
TLB:       2334       1823   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:          0          0   Machine check polls


可以看到

10: 302080 .................eth0

利用

cat /proc/irq/irq編號/smp_affinity

cat /proc/irq/10/smp_affinity

秀3表示用CPU0和CPU1 (2^0+2^1)

Binary       Hex
CPU 0    0001         1
CPU 1    0010         2
CPU 2    0100         4
CPU 3    1000         8

利用

echo 3 > /proc/irq/10/smp_affinity 
有些網卡在開機啟動時要加上pci=nomsi的參數

也可裝上irqbalance
#yum install irqbalance

chkconfig--level 345 irqbalance on    //開機啟動。
serviceirqbalance start