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的類型。