2008年8月11日 星期一
[關於vista下的com port]
要在NB上抓usb com port
可是有問題
後來上google msdn裡有人給了解答
原來是語法問題XD
用dotNet就沒有這個問題了
附記一下有用的網站
1.http://tldp.org/HOWTO/Serial-Programming-HOWTO/index.html
2.linux port
http://www.bigwebmaster.com/General/Howtos/IO-Port-Programming.html
2008年7月28日 星期一
2008年7月25日 星期五
安裝emesene取代爛爛的aMSN
sudo apt-get install emesene
但是如果版本比較前面的話就要將source list更新如下:
1. 將/etc/apt/sources.list 加入
deb http://apt.emesene.org/ ./
deb-src http://apt.emesene.org/ ./
2. 執行 sudo apt-get install emesene
OK!!
2008年7月23日 星期三
8051 lab
===
寫個while loop 控制P3.5值不斷在 0、1間變化
-----------------------------------
lab2
===
UART設定:
SCON=0x50;
PCON = 0x80;
BRL = 126;
BDRCON = 0x1F;
手動加上下面:
Sfr (BDRCON , 0x92);
Sfr (BRL , 0x91);
-----------------------------------
lab3
學習使用interrupt 與 timer
init_INT: 設定interrupt 並將 keyboard interrupt啟動
init_INT0、init_INT1: 2個不同interval的timer
INTLED0: timer interrupt後將LED作開關動作
INTKeyBoard: keyboard 中斷事件
程式碼如下:
void init_INT()
{
IEN0=0x80;
IEN1=0x10;
KBCON=0x00;
}
void init_INT0()
{
TMOD = (TMOD & 0x0F) | 0x20; /* Set Mode (8-bit timer with reload) */
TH1 = 0; /* Reload TL1 to count 100 clocks */
TL1 = TH1;
ET1 = 1; /* Enable Timer 1 Interrupts */
TR1 = 1; /* Start Timer 1 Running */
EA = 1; /* Global Interrupt Enable */
}
void init_INT1()
{
TMOD = (TMOD & 0x0F) | 0x20;
TH1 = 100;
TL1 = TH1;
ET1 = 1;
TR1 = 1;
EA = 1;
}
void INTLED0 (void) interrupt 3
{
overflow_count++;
if(overflow_count==1000)
{
LED = !LED;
overflow_count =0;
}
}
void delay()
{
int i, j;
i=1000;
while(i!=0)
{
j=100;
while(j!=0)
{
j--;
}
i--;
}
}
void INTKeyBoard(void) interrupt 11 using 1
//使用11號中斷 //library為1
{
int recv = INPUT;
if(FUNC==INPUT)// && mode!=1)
{
ET1 = 0;
TR1 = 0;
init_INT0();
printu("Press FUNC\n");
}
else if(NEXT==INPUT)// && mode!=2)
{
LED = 0;
ET1 = 0;
TR1 = 0;
printu("Press NEXT\n");
}
else if(PREV==INPUT)// && mode!=3)
{
LED = 1;
ET1 = 0;
TR1 = 0;
printu("Press PREV\n");
}
else if(PLAY==INPUT)// && mode!=4)
{
ET1 = 0;
TR1 = 0;
init_INT1();
printu("Press PLAY\n");
}
KBSTA = 0x00;
delay();
}
-----------------------------------
lab4
重點在於必須看懂pdf檔裡面的時序圖
下面是lab4所要加上的code:
void ReadFlashID(unsigned char *MID,unsigned char *DID)
{
K9F_FUN = COMMAND;
K9F5608 = 0x90;
K9F_FUN = ADDRESS;
K9F5608 = 0x00;
K9F_FUN = D_DATA;
*MID = K9F5608;
*DID = K9F5608;
while(!(K9F_FUN & RB));
K9F_FUN = INACTIVE;
}
void ReadPage(unsigned int BlockPage,unsigned char *PageBuf)
{
unsigned int data i;
K9F_FUN = COMMAND;
K9F5608 = 0x00;
K9F_FUN = ADDRESS;
K9F5608 = 0x00;
K9F5608 = BlockPage;
K9F5608 = BlockPage>>8;
K9F_FUN = D_DATA;
i=512;
while(!(K9F_FUN & RB));
while(i--)
*PageBuf++ = K9F5608;
K9F_FUN = D_DATA;
K9F_FUN = INACTIVE;
}
void BlockErase(unsigned int BlockPage)
{
K9F_FUN = COMMAND;
K9F5608 = 0x60;
K9F_FUN = ADDRESS;
// K9F5608 = 0; //A0-A7
K9F5608 = BlockPage; //A9-A16
K9F5608 = BlockPage >> 8; //A17-A24
// K9F_FUN = D_DATA;
K9F_FUN = COMMAND;
K9F5608 = 0xD0;
K9F_FUN = D_DATA;
while(!(K9F_FUN & RB));
K9F_FUN = COMMAND;
K9F5608 = 0x70;
if(K9F5608==0) printu("Block Erase successful\n");
else printu("Block Erase failed\n");
K9F_FUN = INACTIVE;
}
MCU lab1 & lab2
修改 WAP_LCD.c 檔
找到func LCD_DAT_W_Timing
將 RW 設為 0
在lab2 中把溫度傳回RS232
----------------------------------
使用 WriteUSART(char);
後面要加delay不然會太快
itoa(T2_Buffer,ASCII_String);
Write1USART( ASCII_String[0] );
LCD_S_Delay();
LCD_S_Delay();
LCD_S_Delay();
//itoa(T2_Buffer,ASCII_String);
Write1USART( ASCII_String[1] );
LCD_S_Delay();
LCD_S_Delay();
LCD_S_Delay();
//itoa(T2_Buffer,ASCII_String);
Write1USART( ASCII_String[2] );
LCD_S_Delay();
LCD_S_Delay();
LCD_S_Delay();
在VB裡面的 Timer要在屬性裡面將interval設為20
MSComm 設定 輸入長度為 1
2008年7月4日 星期五
Embedded lab3 編譯問題
編譯時會有編譯nas 裡的程式undefined Xau開頭的function bug
解決辦法是 在參數加上 --disable-nas
mplayer所用參數如下
#./configure --target=i586-linux --disable-freetype --disable-select --enable-static --disable-tv-v4l --disable-tv-v4l2 --disable-lirc --enable-live --with-livelibdir=/root/embedded/lab3/live --enable-sdl --with-sdl-config=/root/embedded/lab3/SDL-1.2.8/sdl-config --disable-aa --disable-sse2 --disable-nas
#make
grub 壞掉造成不能開機處理
第二步 在liveCD環境中執行終端機
打入以下command
#sudo fdisk -l
找到妳安裝linux放根目錄的HD代號 如 /dev/sda1
#sudo mount /dev/sda1 /mnt
將這個HD掛上
#sudo grub-install --root-directory=/mnt /dev/sda
安裝grub到硬碟上
#sudo umount /mnt
成功~ 重新開機
如果失敗可能是因為HD選錯
2008年7月3日 星期四
embedded-lab1 Cross compiler
# Setup
PROJECT=embedded/lab1
USER=root
PRJDIR=/${USER}/${PROJECT}
BUILD_DIR=${PRJDIR}/build-tools
PREFIX=${PRJDIR}/tools/arm
TARGET=arm-pc-linux-gnu
SYSROOT=${PREFIX}/sysroot
export ARCH=arm
export CROSS_COMPILE=${TARGET}-
export PATH=$PATH:${PREFIX}/bin
mkdir -p ${BUILD_DIR}/src
# Get the sources
cd ${BUILD_DIR}
for URL in \
http://ftp.gnu.org/gnu/binutils/binutils-2.16.tar.gz \
http://ftp.gnu.org/gnu/gcc/gcc-3.4.4/gcc-3.4.4.tar.bz2 \
"http://gcc.gnu.org/cgi-bin/cvsweb.cgi/gcc/gcc/flow.c.diff?cvsroot=gcc&only_with_tag=csl-arm-branch&r1=1.563.4.2&r2=1.563.4.3" \
http://frank.harvard.edu/~coldwell/toolchain/t-linux.diff \
http://ftp.gnu.org/gnu/glibc/glibc-2.3.5.tar.bz2 \
http://ftp.gnu.org/gnu/glibc/glibc-linuxthreads-2.3.5.tar.gz \
http://frank.harvard.edu/~coldwell/toolchain/ioperm.c.diff \
http://ftp.kernel.org/pub/linux/kernel/v2.6/linux-2.6.10.tar.gz
do
FILE=${URL##*/}
FILE=${FILE%%\?*}
[ -f ${FILE} ] || wget -O ${FILE} ${URL}
done
# GNU binutils
cd ${BUILD_DIR}/src
tar xvfz ../binutils-2.16.tar.gz
mkdir -p ../BUILD/binutils-2.16
cd ../BUILD/binutils-2.16
../../src/binutils-2.16/configure --prefix=${PREFIX} --target=${TARGET} --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out
# Linux Kernel Headers
cd ${BUILD_DIR}/src
tar xvfz ../linux-2.6.10.tar.gz
ln -s linux-2.6.10 linux
#zcat 2.6.10-at91.patch.gz | patch -d linux -p1
#zcat 26_at91_serial.c.gz >linux/drivers/serial/at91_serial.c
cd linux
make lubbock_defconfig
make include/linux/version.h
mkdir -p ${SYSROOT}/usr/include
cp -a ${BUILD_DIR}/src/linux/include/linux ${SYSROOT}/usr/include/linux
cp -a ${BUILD_DIR}/src/linux/include/asm-arm ${SYSROOT}/usr/include/asm
cp -a ${BUILD_DIR}/src/linux/include/asm-generic ${SYSROOT}/usr/include/asm-generic
# Glibc headers
cd ${BUILD_DIR}/src
tar xvfj ../glibc-2.3.5.tar.bz2
patch -d glibc-2.3.5 -p1 <../ioperm.c.diff
cd glibc-2.3.5
tar xvfz ../../glibc-linuxthreads-2.3.5.tar.gz
cd ../..
mkdir BUILD/glibc-2.3.5-headers
cd BUILD/glibc-2.3.5-headers
../../src/glibc-2.3.5/configure --prefix=/usr --host=${TARGET} --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
make cross-compiling=yes install_root=${SYSROOT} install-headers 2>&1 | tee make.out
touch ${SYSROOT}/usr/include/gnu/stubs.h
touch ${SYSROOT}/usr/include/bits/stdio_lim.h
# Step 4: stage 1 gcc
cd ${BUILD_DIR}/src
bunzip2 -c ../gcc-3.4.4.tar.bz2 | tar xvf -
patch -d gcc-3.4.4 -p1 < ../flow.c.diff
patch -d gcc-3.4.4 -p1 < ../t-linux.diff
mkdir -p ../BUILD/gcc-3.4.4-stage1
cd ../BUILD/gcc-3.4.4-stage1
../../src/gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out
# Step 5: glibc
cd ${BUILD_DIR}
mkdir BUILD/glibc-2.3.5
cd BUILD/glibc-2.3.5
BUILD_CC=gcc CC=${CROSS_COMPILE}gcc AR=${CROSS_COMPILE}ar RANLIB=${CROSS_COMPILE}ranlib AS=${CROSS_COMPILE}as LD=${CROSS_COMPILE}ld ../../src/glibc-2.3.5/configure --prefix=/usr --build=i386-redhat-linux --host=arm-pc-linux-gnu --target=arm-pc-linux-gnu --without-__thread --enable-add-ons=linuxthreads --with-headers=${SYSROOT}/usr/include 2>&1 | tee configure.out
在make 之前必須將 csu/version-info.h修改
前後加上"如下
----------------------------
"Available extensions:"
""
----------------------------
make 2>&1 | tee make.out
make install_root=${SYSROOT} install
# Step 6: stage 2 gcc
cd ${BUILD_DIR}
mkdir BUILD/gcc-3.4.4
cd BUILD/gcc-3.4.4
../../src/gcc-3.4.4/configure --prefix=${PREFIX} --target=${TARGET} --enable-languages=c,c++ --with-sysroot=${SYSROOT} 2>&1 | tee configure.out
make 2>&1 | tee make.out
make install 2>&1 | tee -a make.out
cd ../..
# Step 7: Linux kernel
cd ${BUILD_DIR}/src/linux
make zImage
make modules
make INSTALL_MOD_PATH=${SYSROOT} modules_install
2008年7月2日 星期三
在Ubuntu上安裝openGL環境
一開始先裝基本函式庫
sudo apt-get install build-essential
接著安裝openGL Library
sudo apt-get install libgl1-mesa-dev
再安裝openGL Utility
sudo apt-get install libglut-dev
下面是範例測試程式
#include
void init();
void display();
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE);
glutInitWindowPosition(0, 0);
glutInitWindowSize(300, 300);
glutCreateWindow("OpenGL 3D View");
init();
glutDisplayFunc(display);
glutMainLoop();
return 0;
}
void init()
{
glClearColor(0.0, 0.0, 0.0, 0.0);
glMatrixMode(GL_PROJECTION);
glOrtho(-5, 5, -5, 5, 5, 15);
glMatrixMode(GL_MODELVIEW);
gluLookAt(0, 0, 10, 0, 0, 0, 0, 1, 0);
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 0, 0);
glutWireTeapot(3);
glFlush();
}
編譯指令
gcc example.c -o example.out -lGL -lGLU -lglut
測試成功會有茶壺
Embedded Lab3
沒想到gcc版本太新也會有問題
可以在configure時使用 --disable-debugchecking
可是make時會出現錯誤
後來安裝了gcc-2.95會出現inttypes.h 沒有的狀況
又試了gcc-3.4 make時會出現沒有cc1plus
加安裝g++-3.4後解決
但是又有新的問題出現 = =
所以改去下網路版的MPlayer rc file Try!
可是還是有bug => undefined reference to `ass_track'
2008年6月26日 星期四
linux下查詢記憶體使用情況
total used free shared buffers cached
Mem: 1023916 975816 48100 0 26376 465844
-/+ buffers/cache: 483596 540320
Swap: 2096440 105564 1990876
計算方式
total used free shared buffers cached
Mem: a b c d e f
-/+ buffers/cache: g h
Swap: i j k
a = 總記憶體大小
b = 配給 buffers 與 cache 的記憶體大小(包含未用的 buffers 與 cache)
c = 剩下的記憶體大小
e = 配給 buffers 但未用的記憶體大小
f = 配給 cache 但未用的記憶體大小
g = buffers 與 cache 被使用掉的記憶體大小,也就是實際被應用程式用走的
h = 那這個就是實際剩下的記憶體大小
a = b + c
a = g + h
g = b - e - f
h = c + e + f
buffer 與 cache 的區別:
A buffer is something that has yet to be "written" to disk.
A cache is something that has been "read" from the disk and stored for later use.
Quote: http://www.ubuntu.org.tw/modules/newbb/viewtopic.php?topic_id=6132
一般情況下,Linux kernel 會盡可能多地利用 RAM 的空閑空間作為 cache/buffer 以最大幅度地提高系統性能。當系統中運行的應用程序占用的 RAM 增加時,則將 cache/buffer 所占用的空間釋放出來,讓渡給應用程序使用。
Quote: http://web.mit.edu/rhel-doc/4/RH-DOCS/rhel-isa-zh_tw-4/s1-resource-rhlspec.html
Mem: 那一行顯示了實際記憶體的使用率;
Swap: 顯示的是系統 swap 空間的使用率;
-/+ buffers/cache: 則是目前撥給系統緩衝區的實體記憶體數量。
2008年6月24日 星期二
VIA Kernel xinit 參數設定
1. AIGLX unichrom_dri.so not found
solve: sudo apt-get install libgl1-mesa-dri
2. drmAGPbind err
solve: 更改bios AGP ram -> 64M
開機進入 錯誤
1. intel microcode:it it not intel compatable
solve: 取消 make menuconfig 裏
Processor type and features-> /dev/cpu/microcode
-> /dev/cpu/*/msr
-> /dev/cpu/*/cpuid
2008年6月22日 星期日
安裝錯誤訊息[ACPI: no DMI BIOS year, acpi=force is required to enable ACPI]
在/boot/grub/menu.list裡 kernel最後面加上
pci=noacpi acpi=off
2008年6月21日 星期六
安裝Ubuntu-server+LXDE
先用CD開機後進入安裝畫面再插入usb隨身碟
隨身碟必須先自己割好, 以4G為例
fdisk /dev/sdb 將根目錄與swap割好
cfdisk /dev/sdb 設定好type
之後在安裝導引時選取手動安裝
自行設定根目錄 and Next... install OK!
2. 安裝 LXDE 桌面環境
sudo apt-get install shared-mime-info
sudo apt-get install xserver-xorg lxde
sudo apt-get install xinit
sudo apt-get install xorg
......
下載耗時啊> <
如果一切無誤即可享用^^
2008年6月19日 星期四
opencv編譯lib路徑設定問題
PKG_CONFIG_PATH=/home/asyen/Desktop/tmp/opencv_install/lib/pkgconfig
export PKG_CONFIG_PATH
g++ -static `pkg-config --cflags --libs opencv` drawing.c -o drawing -lcxcore -lcv -lhighgui -lcvaux -lpthread
2008年6月18日 星期三
我自己安裝qt-embedded
2. 解壓縮並照裏面INSTALL說明安裝
3. 安裝完成後如果在~/.bashrc 裏面加入qt-embedded路徑的話預設出來的執行檔為embedded版本
qmake -project
qmake
make
PS. 如果要編譯靜態函式庫則為
./configure -static
make
sudo make install
不過不知道為什麼我的電腦就會失敗 另一台就一次ok = =
Framebuffer模擬器 QVFB
下面是執行例子
在專案資料夾下
#qvfb &
#./program_name -qws
如果有出現圖即為成功
g++ socket程式問題解決
1. inet_addr() 會找不到
2. close() 會找不到
3. pthread_create(&pid_recv,NULL,thread_recv,NULL); 參數3 方程式參數和回傳值問題
解決
1. 加入 #include "arpa/inet.h"
2. 加入 #include "unistd.h"
3. 方程式thread_recv修改如下
void* thread_recv(void* data)
{...}
裏面不可有回傳 return;
可用system("exit");取代
呼叫如下
pthread_create(&pid_recv,NULL,thread_recv,NULL);
QPainter & QPixmap
以下為範例程式碼
需注意繪圖部分必須寫在 paintEvent 裏面
-----------------------------------------------------------------
#include "qapplication.h"
#include "qwidget.h"
#include "qpainter.h"
#include "qpixmap.h"
class mywindow:public QWidget
{
public:
mywindow();
private:
void paintEvent(QPaintEvent* event);
QPainter *paint;
};
void mywindow::paintEvent(QPaintEvent* event){
QPixmap pm("bg1.jpg");
paint= new QPainter;
paint->begin(this);
paint->drawPixmap(0,0,pm);
paint->end();
}
mywindow::mywindow()
{ setGeometry(0,0,600,600); // (initial location in window x,y),(width, height)
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
mywindow window;
window.show();
return app.exec();
}
2008年6月17日 星期二
Ubuntu 安装 Qt/Embedded
codes: pda环境开源代码
tmake-1.11.tar.gz
qt-x11-2.3.2.tar.gz
qt-embedded-2.3.7.tar.gz
qtopia-free-1.7.0.tar.gz
一、gcc/g++-2.95 编译以上四个包,建议使用2.95版,4.0版会编译出问题
#apt-get install gcc-2.95
#apt-get install g++-2.95
#rm /usr/bin/gcc /usr/bin/g++
#ln -s /usr/bin/gcc-2.95 gcc
#ln -s /usr/bin/g++-2.95 g++
二、编译: //使用杭州立宇泰电子有限公司提供的 ARMsys2410开发套件 的Linux用户手册提供脚本文件
1:将代码放入同一个目录,我的为/armsys2410/qt_x86
2:修改/etc/ld.so.conf文件,内容如下:(路径需要与你代码存放路径一致)
/armsys2410/qt_x86/qt/lib
/armsys2410/qt_x86/qtopia/lib
/usr/kerberos/lib
/usr/X11R6/lib
/usr/lib/sane
/usr/lib/mysql
3:新建一个脚本文件buildx86,内容如下:
#!/bin/bash
tar xfvz tmake-1.11.tar.gz
tar xfvz qt-embedded-2.3.7.tar.gz
tar xfvz qtopia-free-1.7.0.tar.gz
tar xfvz qt-x11-2.3.2.tar.gz
mv tmake-1.11 tmake
mv qt-2.3.7/ qt
mv qtopia-free-1.7.0 qtopia
mv qt-2.3.2 qt-x11
cd qt-x11
export QTDIR=$PWD
echo yes | ./configure -static -no-xft -no-opengl -no-sm
make -C src/moc
cp src/moc/moc bin
make -C src
make -C tools/designer
make -C tools/qvfb
cp tools/qvfb/qvfb bin
strip bin/uic bin/moc bin/designer bin/qvfb
cd ..
cp qt-x11/bin/?* qt/bin
rm -fr qt-x11
export QTDIR=$PWD/qt
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
cd qt
make clean
cp ../qtopia/src/qt/qconfig-qpe.h src/tools/
(echo yes; echo yes ) |./configure -platform linux-generic-g++ -qconfig qpe -depths 16,24,32
make -C src
cd ..
cd qtopia/src
./configure -platform linux-generic-g++
make clean
make
执行该脚本, 开始编译。
4:本人编译出现问题:
make -C libraries/qtopia
make[1]: Entering directory `/home/chinazjn/armsys2410/qt_x86/qtopia/src/libraries/qtopia'
/home/chinazjn/armsys2410/qt_x86/qt/bin/uic passwordbase_p.ui -o ./passwordbase_p.h
make[1]: /home/chinazjn/armsys2410/qt_x86/qt/bin/uic:命令未找到
make[1]: *** [passwordbase_p.h] 错误 127
make[1]: Leaving directory `/home/chinazjn/armsys2410/qt_x86/qtopia/src/libraries/qtopia'
make: *** [libraries/qtopia] 错误 2
5:之后经过查找安装相关库支持:
libfreetype6-dev uuid-dev lib.jpeg62-dev libqt3-mt libpam0g-dev libpng12-dev
libbluetooth1-dev libpcsclite-dev pkg-config jpeg-6b
#apt-get install *(库名)* 有些需要查找下 #apt-cache srarch *****
6:之后再运行#./bulidx86 编译,问题依旧存在(安装成功后觉得这些包还是需要的,建议安装)
7:自己分析编译过程发现中间错误提示:
kernel/qt_x11_p.h:66:22: X11/Xlib.h: 没有那个文件或目录
kernel/qt_x11_p.h:71:23: X11 til.h: 没有那个文件或目录
kernel/qt_x11_p.h:72:21: X11/Xos.h: 没有那个文件或目录
kernel/qt_x11_p.h:73:23: X11/Xatom.h: 没有那个文件或目录
这个错是因为没有安装X11的开发包,安装这个开发包:
#apt-get install xlibs-dev
8:再次编译,终于在编译uic了,经过漫长过程,编译成功!
9:运行
首先要设置环境变量, cd 至 /armsys2410/qt_x86
export QTDIR=$PWD/qt
export QPEDIR=$PWD/qtopia
export TMAKEDIR=$PWD/tmake
export TMAKEPATH=$TMAKEDIR/lib/qws/linux-generic-g++
export PATH=$QTDIR/bin:$QPEDIR/bin:$TMAKEDIR/bin:$PATH
# . set-env (我的设置环境变量文件)
#qvfb & 然后执行 qvfb,虚拟出一个 framebuffer 设备供应用程序使用
#qpe 到此可以正常使用了,哈哈
Qt 介紹與安裝
以下說明如何在 Ubuntu 下安裝 Qt 4.3.1:
切換到 qt-x11-opensource-src-4.3.1 資料夾後:$ ./configure -help
這樣會列出幾頁參數,可以調整一堆雜七雜八的安裝內容 ( 其實預設就差不多了 )。比較重要的是預設 -shared 會讓之後編譯 Qt 專案時產生較小 binary file,需要使用 shared library,沒有 library 的系統不能跑。
而 -static 則會包 runtime library 進去,不過檔案大小會增加很多。
-shared 和 -static 可以並存,但是需要個別 configure & make 在不同的資料夾 ( 用 -prefix 來設定安裝路徑 )。
確定後開始 configure。參數僅供參考:$ ./configure -no-qt3support -optimized-qmake
然後會問你接不接受 license。你要填 no 嗎?
configure 有點久,不過跟下一步比起來不算啥:$ make
打個盹吧!
睡醒之後如果有幸完成了,就再接續下一步:$ sudo make install
真是神速無比啊!
預設是用 -shared 裝在 /usr/local/Trolltech/Qt-4.3.1,編譯完之後大約為 410MB。-static 則約 1.2GB ( 因為每個 example application / demonstration 都會包 runtime library 進去... )。
安裝完成了,就要調校 $PATH 變數啦!免得 compile 時啥 header 都找無。$ echo "export PATH=\"/usr/local/Trolltech/Qt-4.3.1/bin:\$PATH\"" >> ~/.bashrc
收工 (>ω<)♪♪
然後就可以開始玩 Qt 啦~
要編譯 Qt 程式時,就是寫好 main.cpp 後切進資料夾三部曲:$ qmake -project
$ qmake
$ make
就可以產生 binary file 了。檔案大小視程式規模而定,小玩具大概都在 50KB 以內。用了 -static 會增加約 7.7MB。
在linux下安裝Qt/Embedded開發環境主要需要三個軟件
tmake工具安裝包;Qt/Embedded安裝包;Qt的X11版的軟件安裝包,以下列舉了上述幾個軟件包及其版本號:
1. Tmake 1.11(或更高版本)軟件包(主要用來生成Qt/Embedded應用工程的Makefile文件)
2. Qt/Embedded 2.3.7(Qt/Embedded的安裝包)
3. Qt 2.3.2 for X11(Qt的X11版的安裝包,它將產生X11開發環境所需的兩個工具)
以上這些軟件可以從trolltech的WEB或FTP服務器上免費下載。
需要注意的是,由於上述軟件安裝包有許多不同的版本,由於版本的不同可能會造成潛在的衝突而影響使用,一個基本的原則是:選擇的Qt for X11的安裝包應該比Qt/Embeedded的安裝版本要舊,這是由於Qt for X11安裝包的兩個工具uic和designer產生的的源文件會和Qt/Embedded的庫一起被編譯鏈接,也就是考慮到“向前兼容”的原則。
目前,Qt/Embedded可以運行在inux所支持的各種處理器上,包括像Intel X86、ARM、MIPS和PowerPC等處理器上。Qt/Embedded對內存的消耗很低,因為它不需要X服務器或是Xlib庫,可以直接的寫緩衝 幀,對於不使用的功能可以在編譯的時候動態調節從而盡可能的減少對內存的使用,例如,在實際使用過程當中不想使用QlistView這個庫,可以通過定義 一個QT_NO_LISTVIEW的預處理標記來實現。它甚至可以把全部的應用功能編譯鏈接到一個簡單的靜態鏈接的可執行程序中。Qt/Embedded 提供了大約200多個可配置的特徵,在Intel X86平台上庫的大小範圍會在700KB到5000KB之間。
2008年6月16日 星期一
ttylinux上網(手動)
nameserver dnsip
ex: nameserver 163.28.112.1
nameserver 163.28.113.1
將 /etc/network.d/sample 改名 interface.eth0
修改 /etc/network.d/interface.eth0
ip, gateway
重新啟動network
/etc/rc.d/init.d/network restart
[轉]使用 apt 更新 glibc 及 glibc-common 掛點之自救法
使用 apt 更新 glibc 及 glibc-common 掛點之自救法
最近嘗試在老舊的電腦上灌 RedHat 9.0
(我只選 text-based internet 安裝後用了 5xx MB)
安裝過程還算順利,完成之後我立即為它裝上 apt 套件
然後執行
apt-get update
apt-get -y upgrade
中間顯示有許多套件將由 apt 執行更新(這裏頭包含了 glibc , glibc-common)
一開始更新的過程都很正常,直到要安裝 glibc-common glibc 時,
畫面出現了要命的訊息... 大意是說 rpm 的 database 好像出了問題,
還有一些不知名的 error。當一切結束回到命令列時,我發現一堆指令都不能用了
連 ls -l 都會出現 segment fault,我最擔心的 rpm 指令就更不用說了:(
經過一連串亂按的掙扎後,絕望的我只好用我這帶賽的食指按下 reset 鈕,
祈禱重新開機後一切恢復原狀。可是,畫面上只無力地顯示著一些系統不正常
的訊息。
但我不死心,我相信這一切只是 glibc-common 及 glibc 在安裝過程出了點
小問題(至今我尚未能理解為何有時候會,有時候不會),
系統的其它部分是完好如初的(glibc 提供系統所需的動態函式庫)。
我想如果是 glibc-common 或 glibc 沒裝好的話,應該有可能重新裝回去就可以了,
我知道 rpm 有個 --root 的指令可以指定 rpm 安裝的根目錄,其 database 的
也會以此目錄的相對目錄建立,理論上在 rescue mode 時管理系統上的 rpm 套件是可能的。
所以,我就把RedHat 9.0 disk 1 塞進光碟機,重新開機,輸入
linux rescue (進入救援模式)
開機完成後進到 mnt 的目錄下,可以看到兩個目錄
/mnt/source -- RedHat 9.0 disk 1 光碟的內容 (如果要回復之前的版本可在此取用rpm)
/mnt/sysimage -- 我掛點的系統內容
試試 rpm 指令,看看能不能用吧
rpm -qa --root /mnt/sysimage (yuho,真的可以用)
我再試試 rpm -qa --root /mnt/sysimage | grep glibc (看看 glibc 安裝的情況)
glibc-common-2.3.2-11.9
glibc-common-2.3.2-27.9
glibc-2.3.2-27.9
哈! 果然讓我找到兇手,舊的 glibc-common 居然還在沒被刪除,
小弟我比較大膽就自己 DIY 嘍
rpm -e glibc-common-2.3.2-11.9 --root /mnt/sysimage
(執行時很正常,沒什麼哀嚎的聲音)
應該沒問題了吧,我就執行 exit ,退出光碟,準備重新開機。
OK! 果然系統又恢復正常了。
以上是小弟的小小經驗,困擾我蠻久的(每次遇到要更新 glibc 總是怕怕的),
希望給和小弟有相同或相似困擾的朋友們一個參考。
[OpenCV]嵌入式ARM系統中安裝
OpenCV庫編譯
./configure --host=arm-linux --without-gtk --without-carbon \
--without-quicktime --without-1394libs --without-ffmpeg \
--without-python --without-swig --enable-static --disable-shared \
--disable-apps CXX=armv4l-unknown-linux-g++ CPPFLAGS=-I/usr/include
- --host=arm-linux :指出交叉編譯arm平臺
- --without-gtk:忽略gtk+2.0 windows
- --without-carbon: 不使用Mac OS上的X庫
- --without-quicktime
- --without-1394libs
- --without-ffmpeg
- --without-python
- --without-swig
- --enable-static :生成靜態庫
- --disable-shared:不生成動態庫
- CXX=armv4l-unknown-linux-g++ : 指定編譯工具
- CPPFLAGS=-I/usr/include :OpenCV會用到一些dev的包,如png.h,jpeglib.h,大部分頭文件在/usr/include下。
如果在編譯時出現png.h: No such file or directory ,意即缺少開發包,比如在Debian下可以apt-get install libpng2-dev,或者到libpng的網站 http://www.libpng.org/pub/png/libpng.html ,編譯安裝開發包即可。
用文本编辑器打开 /etc/ld.so.conf , 里面一般有一行include /etc/ld.so.conf.d/*. conf在后面用分号隔开, 然后加入 /usr/local/lib 保存退出就可以了。 这里说明一下,ld.so.conf这个文件。以后你用opencv函数写成的程序,编译成可执行程序后,如果你使用的动态链接库,那么,系统会到这个文件里去找你所指定的这个目录,也就是说执行程序所需要的动态库都在/usr/local/lib下。
編譯常式
- 編譯常式drawing.c
armv4l-unknown-linux-g++ `pkg-config --cflags --libs opencv` drawing.c -o drawing
- 編譯修改後的攝像頭標定程式:
armv4l-unknown-linux-g++ `pkg-config --cflags --libs opencv` calibration.cpp -o calibration
將生成的可執行程式拷貝到開發板上,運行。如果出現缺少libstdc++庫的情況,可以在arm編譯器目錄下的lib目錄中查找,拷貝到開發板中,並確保程式可以找到即可。
2008年6月15日 星期日
[轉]OpenCV 安裝&編譯
查詢OpenCV相關軟體包
$ apt-cache search opencv
libcv-dev - development files for libcv
libcv1 - computer vision library
libcvaux-dev - development files for libcvaux
libcvaux1 - computer vision extension library
libhighgui-dev - development files for libhighgui
libhighgui1 - computer vision GUI library
opencv-doc - OpenCV documentation and examples
python-opencv - Python bindings for the computer vision library
在這裡,OpenCV的庫CxCore和Cv都被包含入Deb包libcv中。
安裝相關軟體包
如果只是用來運行OpenCV程式,僅需安裝libcv1,libcvaux1,libhighgui1:
apt-get install libcv1 libcvaux1 libhighgui1
如果你要使用OpenCV來編寫程式,那麼還需要安裝libcv-dev,libcvaux-dev,libhighgui-dev包。
apt-get install libcv-dev libcvaux-dev libhighgui-dev
文檔在opencv-doc包中,python-opencv是OpenCV的Python語言包,可根據需要安裝。
測試安裝包
測試是否安裝成功,你可以使用以下的命令行編譯位於源代碼包中的drawing.c例子:
g++ `pkg-config opencv --libs --cflags opencv` drawing.c -o drawing
成功編譯後你應該能夠可以執行./drawing看到highgui輸出視窗的結果了.
[轉]安裝DSL到硬碟
它可以單純當成LiveCD或是LiveUSB用,也可以安裝到硬碟上,或是直接在原有的系統中使用。這次主要是要說安裝到硬碟的方法。
首先自己想辦法到終端機下,輸入:
sudo -s就會進入分割磁碟畫面,假設需要一個hda1做為swap,hda2做為/,可以選new來創造,建完之後選type就可以更改分割區的種類;swap是82,Linux type是83,其他還有很多,可以自己參考畫面上的列表。
cfdisk /dev/hda
決定完選write就完成更動了。
之後建議是重新開機,再一次進入DSL的Live模式;這次要把swap打開,所以輸入:
sudo -s就完成了分割磁區的設定。
mkswap /dev/hda1
swapon /dev/hda1
接下來不管是從開始選單或是輸入dsl-hdinstall指令來安裝都無所謂,跟著指示做就可以完成安裝了。
by http://legnaleurc.blogspot.com/2007/12/dsl.html
取消 「自動掛載抽取式儲存裝置」 功能 & 修改桌面路徑
以 ubuntu 7.10 為例, 在「系統」「偏好設定」「抽取式儲存裝置」 底下, 把所有選項都取消掉。 若是 ubuntu 8.04, 則要用 ubuntu 身份 (而不是用 root 身份) 執行 gconf-editor 指令, 選進 apps/nautilus/preferences, 把 media_automount 和 media_automount_open 的勾清除掉。
编辑文件 ~/.config/user-dirs.dirs 即可,可以任意修改桌面路径
ubuntu設定上網(手動)
nameserver dnsip
ex: nameserver 163.28.112.1
nameserver 163.28.113.1
修改 /etc/network/interfaces加入
auto eth0
iface eth0 inet static
address 140.116.117.108
netmask 255.255.255.0
gateway 140.116.117.253
ubuntu 編譯核心問題解決
編譯核心時遇到下面問題
scripts/basic/fixdep.c:107:23: 錯誤: sys/types.h:沒有此一檔案或目錄scripts/basic/fixdep.c:108:22: 錯誤: sys/stat.h:沒有此一檔案或目錄scripts/basic/fixdep.c:109:22: 錯誤: sys/mman.h:沒有此一檔案或目錄scripts/basic/fixdep.c:110:20: 錯誤: unistd.h:沒有此一檔案或目錄scripts/basic/fixdep.c:111:19: 錯誤: fcntl.h:沒有此一檔案或目錄
scripts/basic/fixdep.c:112:20: 錯誤: string.h:沒有此一檔案或目錄scripts/basic/fixdep.c:113:20: 錯誤: stdlib.h:沒有此一檔案或目錄scripts/basic/fixdep.c:114:19: 錯誤: stdio.h:沒有此一檔案或目錄
在包含自 /usr/lib/gcc/i486-linux-gnu/4.1.2/include/syslimits.h:7 的檔案中,
從 /usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h:11,
從 scripts/basic/fixdep.c:115:/usr/lib/gcc/i486-linux-gnu/4.1.2/include/limits.h:122:61: 錯誤: limits.h:沒有此一檔案或目錄
scripts/basic/fixdep.c:116:19: 錯誤: ctype.h:沒有此一檔案或目錄scripts/basic/fixdep.c:117:23: 錯誤: arpa/inet.h:沒有此一檔案或目錄
解決方法apt-get install build-essential
-----------------後續問題------------------
HOSTCC scripts/basic/fixdepHOSTCC scripts/basic/docproc
HOSTCC scripts/kconfig/conf.oHOSTCC scripts/kconfig/kxgettext.o
HOSTCC scripts/kconfig/lxdialog/checklist.o在包含自 scripts/kconfig/lxdialog/checklist.c:24 的檔案中:
scripts/kconfig/lxdialog/dialog.h:32:20: 錯誤 :curses.h:沒有此一檔案或目錄
解決方法apt-get install libncurses5-dev
-----------------問題解決----------------
可正常compiler跟編譯核心
[轉]ttylinux 掛載安裝
#qemu-img create -f cow ttylinux.img 200M
#qemu -m 256 -hda ttylinux.img -cdrom /home/cb/software/ttylinux/bootcd-i386-5.3.iso -boot d
启动后,以root:root登录,键入如下命令开始安装
[ttylinux]#installer mbr /dev/hdc /dev/had
安装完后,ttylinux.img实际占用空间15M,进去后,只有一些基本的命令,而且似乎经过了定制,感觉实用价值并不大,可以作为内核调试、救急盘,基本linux系统学习等用途。它的手册也明确说了它所针对的用途。
PS: qemu command
qemu -usb /dev/sdb
qemu -cdrom *.iso
----------------------------------------------
如果想用qemu掛載usb安裝的話方式如下
qemu -usb /dev/sdb -cdrom xxx.iso -boot d
進去後 iso會掛在/dev/hdc上 usb會掛在/dev/hda上
然後執行以下
installer mbr /dev/hdc /dev/hda1
----------------------------------------------
swap設定
mkswap /dev/hda2”来格式化交换分区,再输入“swapon /dev/hda2”来启用,最后输入“free+回车”,交换分区ok了吧!
编辑文件fstab,输入指令“vi /etc/fstab”,然后添加如下内容,见图9:
这样reboot后swap分区会自动的加载咯,那么/dev/hda5分区怎么处理呢,其实写在这个文件里也是可以的,不过会有一点点小问题,系统还是不会自动加载/dev/hda5的,那怎么办呢,那就直接在启动脚本里把加载放进去就好了,输入指令“vi /etc/rc.d/rc.sysinit”,在图示位置出直接添加图中信息,再次重启那么/dev/hda5也可以自动加载咯,见图