顯示具有 Embedded 標籤的文章。 顯示所有文章
顯示具有 Embedded 標籤的文章。 顯示所有文章

2008年5月3日 星期六

Porting MySQL

同樣的事情對岸也有人做過了,照本宣科.
下載: mysql-5.0.51b.tar.gz

./configure --prefix=/home/showtime/mysql --build=i386-linux --host=arm-linux --with-charset=utf8 --without-debug --without-docs --without-man --without-bench --with-named-curses-libs=/home/showtime/mysql/ncurses-5.6/lib/libncurses.a遇到下列錯誤:
1) checking "return type of sprintf"... configure: error: cannot run test program while cross compiling
2) checking for atomic operations... configure: error: cannot run test program while cross compiling
3) checking for int8... configure: error: cannot run test program while cross compiling
4) checking for restartable system calls... configure: error: cannot run test program while cross compiling
5) checking if conversion of longlong to float works... configure: error: cannot run test program while cross compiling
6) error: Your compiler cannot convert a longlong value to a float!
在網路上搜尋發現這幾個似乎是常碰到的問題,表示此版本的mysql尚未支援corss-compile
看別人的解法是直接略過configure裡面的測試(不知道使用的時候會不crash?)
configure script裡在checking若遇到錯誤就會中斷
於是移除上方這些測試的離開語句{ (exit 1); exit 1; }; (請注意大括號的配對)

參數--with-named-curses-libs是因為錯誤訊息: checking for termcap functions library... configure: error: No curses/termcap library found
請自行下載ncurses,並cross-compile
./configure --host=arm-linux && make

mysql configure通過後, make && make install
將install的東西copy起來準備到target上測試

將lib放到正確的路徑,或使用link達成
開始安裝: ./mysql_install_db --user=root
出現錯誤:
Please configure the 'hostname' command to return a correct
hostname.
If you want to solve this at a later stage, restart this script
with the --force option

執行hostname看看名字是什麼
新增/etc/hosts
127.0.0.1 localhost
127.0.0.1 你的hostname
再安裝一次,成功了.

啟動server: ./mysqld_safe --user=root & (有時後會失敗,但重開機後又正常?)
建立密碼: ./mysqladmin -u root password 'your password' (這一步應該可以省略了)
連接server: ./mysql -u root
成功連接上以後就會出現歡迎訊息
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.51b Source distribution

稍微測試一下:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| test |
+--------------------+
3 rows in set (0.00 sec)
mysql> use mysql;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL ser
ver version for the right syntax to use near 'user mysql' at line 1
(不知道為什麼)
mysql> use test;
Database changed
跑一下mysql tutorial的sample
mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),
-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);
mysql> INSERT INTO pet VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);
mysql> SELECT * FROM pet;
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Puffball | Diane | hamster | f | 1999-03-30 | NULL |
+----------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)

大致上都還蠻正常的;)

ref:
MySQL Typical configure Options
mysql數據庫在arm+linux平台上的移植

2008年4月30日 星期三

Porting Qtopia 4.3.3

這次編譯還算順利,參考人家編譯過的經驗.
Hardware: III PXA270 Platform
Software: QT-X11, Qtopia 4.3.3, Cross-Compile 3.3.6

Install QT-X11 in Ubuntu
sudo apt-get install qt-x11-free-dbg
使用到的執行檔都會安裝到/bin底下,編譯Qtopia的時候就會自行取用

Install Qtopia
下載 qtopia-core-opensource-src-4.3.3.tar.gz
解壓縮到/opt底下
改個名字 mv /opt/qtopia-core-opensource-src-4.3.3 /opt/qtopia
把Toolchain路徑加到$PATH
export QTDIR=/opt/qtopia
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
開始編譯
./configure -embedded arm -xplatform qws/linux-arm-g++ -qt3support -depths 16 -qt-libjpeg -qt-mouse-linuxtp -no-stl
make
-xplatform參數對應到所使用的toolchain,若使用不同的請到./qtopia/mkspecs/qws/linux-arm-g++/qmake.conf去修改
我使用P4 HT 3.2G 大概要40分鐘

完成後,所需要的library都在qtopia/lib底下包括font檔
libQt3Support.so.4.3.3
libQtCore.so.4.3.3
libQtGui.so.4.3.3
libQtNetwork.so.4.3.3
libQtScript.so.4.3.3
libQtSql.so.4.3.3
libQtSvg.so.4.3.3
libQtXml.so.4.3.3
包含link也一併copy起來.我是用隨身碟來存放,格式化成ext3格式就可以存link了
接著再拿./qtopia/example下的範例程式測試

記得在target上執行時要先link一下路徑,因為執行程式的時候會去target上的/opt/qtopia/lib找library
另外我還出了一個錯誤:
QFontDatabase: Cannot find font directory /usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib/fonts - is Qt installe?
"/usr/local/Trolltech/QtopiaCore-4.3.3-arm"算是他預設的安裝路徑,不知道為什麼沒改變? 可能是configure的時候要加prefix參數吧? 沒關係一樣用個link就可以解決

執行起來沒什麼問題,畫面明顯比QT3好看(是錯覺嗎?)
另外我使用背景執行一次開兩個視窗是可以顯示,不過畫面卻不是很理想.

ref:
QT、QPE、Qtopia、Qt/Embedded、Qtopia Core 究竟是什麼?
小弟在Xscale PXA255上移植qtopia 4的經驗
qtopia-opensource-4.2.0交叉編譯記錄
configure參數中文解說

2008年4月29日 星期二

Porting GTK+ on DirectFB

移植GTK的過程真的很繁雜,要先編幾十個library.
過程請直接參考強者同學的網誌: GTK+ on DirectFB on Creator PXA270
遇到error時通常把message原封不動的拿到google搜尋都可以找到解決的辦法, 以下提供新手參考.

編譯glib-2.9.6時
Error: cannot run test program while cross compiling See 'config.log' for more details
Solution:
echo ac_cv_type_long_long=yes>arm-linux.cache
echo glib_cv_stack_grows=no>>arm-linux.cache
echo glib_cv_uscore=no>>arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
configure參數多加 --cache-file=arm-linux.cache

編譯atk-1.10.3時
Error: glib-genmarshal: error while loading shared libraries: /opt/DYNAMIC/lib/libglib-2.0.so.0: ELF file OS ABI invalid
Solution: 先將環境變數LD_LIBRARY改為空白, make後再復原

執行GTK程式時
Error: (!) Direct/Modules: Could not open module directory `/usr/myproj/usr/myproj/lib/directfb-1.0-0/systems'! --> No such file or directory
Solution: 可以看到路徑重複兩次, 不知道是為什麼. 自行建立link即可

Error: (!) Direct/Modules: Could not open module directory `/usr/myproj/usr/myproj/lib/directfb-1.0-0/gfxdrivers'! --> No such file or directory
Solution: 在編譯directfb的時候gfxdrivers已經選擇none, 應該是不需要額外的driver才對, make一個空的資料夾可以過

Error: GdkPixbuf-WARNING **: Cannot open pixbuf loader module file '/usr/myproj/etc/gtk-2.0/gdk-pixbuf.loaders': No such file or directory
Solution:
在target執行/usr/myproj/bin/gdk-pixbuf-query-loaders > /usr/myproj/etc/gtk-2.0/gdk-pixbuf.loaders
參考: problem with realplayer

Error: (!) DirectFB/FBDev: Panning display failed! --> Invalid argument
Solution: (目前未解)

Error: No fonts found; this probably means that the fontconfig library is not correctly configured. You may need to edit the fonts.conf configuration file.
Solution: 修改etc/fonts/fonts.conf, 加入字型檔的路徑
然後把字型複製到預定的路徑裡面, 可以是windows的ttf

Error:
Gdk-DirectFB-WARNING **: gdk_window_set_keep_above() not implemented.
Gdk-DirectFB-WARNING **: gdk_window_set_keep_below() not implemented.
視窗畫面上的toolbar都顯示不出來, 不支是否跟這有關係
Solution: Warning而已不用理他, 強者同學說沒有window manager的觀念所以視窗不會有toolbar

Ref:
GTK+ on DirectFB on Creator PXA270
Porting GTK+ on DirectFB
與afreez一起學習DirectFB之:編譯最小的DirectFB

2008年2月24日 星期日

自製電腦遙控器

基於在被窩裡想操控電腦又懶得下床,於是就想搞一個來玩玩。其實最初的目的只是想操控聲音的大小,同學說可以用機械式的馬達外接在後面再配合紅外線模組...這對我來說太難了。後來在網路上搜尋一下,用遙控器控制電腦這議題已經有很多人做過,在市面上也找的到商品,如:ATI Remote Wonder。功能上不僅限在調整音量,替代滑鼠鍵盤都沒問題,透過script撰寫更複雜的動作都能完成,端看個人需求摟。

原理不外乎利用遙控器發射命令,紅外線模組接收/解碼,訊號透過com port或usb傳送到電腦內部,常駐程式針對不同的命令去做對應的事情。軟體方面相當純熟,WinLiRC、IRCtrl、Girder...不過不同的軟體所接收訊號的方式也不同,所以硬體製作也不同。

我是按照mobile01的Jetter大的文章製作,他的電路算是最簡單的,使用的接收器也找台灣比較容易買到的。過程中最難的莫過於採購了吧,我也是第一次進電子材料行,琳瑯滿目的,還是請老闆幫我找比較保險。而其困難之處就是往往買不到一模一樣的材料,像我的接收器腳位就跟文中不同。最好問清楚型號方便上網查規格,沒型號的話至少要問各腳位是接什麼的,建議新手還是多找幾間比較保險,記得要買適合一般電視要控器頻率的(38kHz)。電路如果有異動,最好是重畫一張,不然一直對照真的超累。材料費大概50~100,前提是要有"工具"。遙控器的話...先拿家裏面現成的來用用看(冷氣機、電視盒)。


『完成品』。 在Mobile01看到的都是裝在美美的盒子裡,這樣的手工算粗糙了~"~


這是我用的接收器款式,中間有一長條突出那面朝自己,接腳朝下 - 左:GND 中:Vcc 右:Signal(Vout)

以下是我整理的相關資料,有興趣可以玩玩。
1. [很好DIY] WinLIRC電腦萬用紅外線遙控器 - Mobile01 - 使用軟體WinLirc,配合WinLIRC Helper功能才齊全。WinLIRC Helper可模擬鍵盤滑鼠動作,內建系統命令(聲音大小、視窗最小化、視窗切換...),也可執行指定程式。建議把討論串看一看!

2. 自制遥控电脑完全手册-应用技术-自制遥控电脑-天极网, 《自制遥控电脑完全手册》补遗- 對岸寫的,使用IRCtrl軟體,版本到2.1有繁體中文化,功能很齊全。

3. 自制PC遥控器 - 放飞技术网

4. Implementation USB into microcontroller - 採USB介面

5. Remote control of computer

6. 電子元件及基本電學儀器的認識 - 電阻色碼、電容正負、二極體正負

2007年12月13日 星期四

Porting QT/Embedded-3.3.6 on PXA270

QT/Embedded 3.3.6
Cross-Compiler: gcc-4.0.2
以下流程為編譯QTE並驅動Touch Screen(尚未成功)

事前工作
編kernel時要加入touch screen及LCD module
->UCB1400 Touchscreen support
->LCDtype(MTLCD-0353224A 3.5 inches)

下載:
qt-x11-free-3.3.5.tar.bz2
qt-embedded-free-3.3.6.tar.bz2
tslib-1.0.tar.bz2

編譯Qt-X11 (後面會用到)
./configure -thread -no-xft -no-cups -no-stl -no-ipv6 -no-freetype -disable-opengl -disable-xml -disable-canvas -shared
make

編譯tslib (後面會用到)
將toolchain路徑加入$PATH
echo "ac_cv_func_malloc_0_nonnull=yes" > arm-linux.autogen
//解決rpl_malloc的error
CONFIG_SITE=arm-linux.autogen ./configure CC=arm-unknown-linux-gnu-gcc CXX=arm-unknown-linux-gnu-g++ --host=arm-linux --target=arm-linux --prefix=$PWD/_install
make; make install

編譯QT/Embedded
QTE對路徑要求嚴格,在target的library路徑需和編譯時的一樣,這邊預設為/opt/qte
為了讓QT支援Touch Screen
修改qte/src/embedded/qmouselinuxtp_qws.h, 加入
#define QT_QWS_IPAQ
#define QT_QWS_IPAQ_RAW

修改qte/src/embedded/qmouselinuxtp_qws.cpp, 指定TS的device node為/dev/ts
...
#if defined(QT_QWS_IPAQ)
# ifdef QT_QWS_IPAQ_RAW
if ((mouseFD = open( "/dev/ts", O_RDONLY | O_NDELAY)) < 0) {
# else
if ((mouseFD = open( "/dev/ts", O_RDONLY | O_NDELAY)) < 0) {
# endif
qWarning( "Cannot open /dev/ts (%s)", strerror(errno));
return;
}
...

將QT-X11編出來的bin/uic, bin/moc copy到 qte/bin底下
將tslib編出來的include/tslib.h copy到qte/include底下
修改qte/mkspecs/qws/linux-arm-g++/qmake.conf, 修改gcc為自己所用的
arm-linux-gcc -> arm-unknown-linux-gnu-gcc
arm-linux-g++ -> arm-unknown-linux-gnu-g++

開始編譯
./configure -thread -embedded ipaq -shared -depths 16 -no-cups -no-ipv6 -thread -no-gfx-qvfb -no-freetype -disable-opengl -disable-xml -disable-canvas -qt-libjpeg -qt-mouse-linuxtp -xplatform qws/linux-arm-g++ -L/tslib/lib -L/tslib/lib/ts -I/tslib/include -lts
make sub-src
-L接tslib的library, -I接tslib的include 編譯時一同加入
make完成在qte/lib下產生libqte-mt.so, libqte-mt.so.3, libqte-mt.so.3.3, libqte-mt.so.3.3.6, 前三個為link, 最後一個即為object檔

安裝到target
受限於空間的不足, 可以將object檔放在flash,再用link的方式完成
假設libqte-mt.so.3.3.6放在sda1的根目錄mount /dev/sda1 /mnt/sda1
ln -s /mnt/sda1/libqte-mt.so.3.3.6 /opt/qte/lib/libqte-mt.so
ln -s /mnt/sda1/libqte-mt.so.3.3.6 /opt/qte/lib/libqte-mt.so.3
ln -s /mnt/sda1/libqte-mt.so.3.3.6 /opt/qte/lib/libqte-mt.so.3.3

寫一個hello world放上去跑, 經測試可以正常顯示, 不過touch screen的部份不能使用, 目前僅能以外接滑鼠的方式來操控. (註: 執行程式前要記得export QTDIR=/opt/qte)

參考資料:
QT/Embedded-3.3.8初步交叉编译的完全整理
Qt-embedded-3.2.3到PXA270上的移植
Qt/Embedded 2.3.10 到PXA270上的移植

TSLIB相關資料:
QTE與觸摸屏
tslib 1.4 - WeiBing
Qt-embedded-interest Archive - Touchscreen with qt examples?
Embedded Systems-GUI
tslib download and cross compile for arm

2007年12月12日 星期三

Porting MPlayer on PXA270

期末專題要在PXA270上實做一個播放器, 為了要能播mp3而且支援stream的形式選擇MPlayer. (MADPlayer 不支援stream, VLC太過複雜). 移植過程供大家參考.

Target: Create XScale-PXA270
Kernel: 2.6.15.3
Cross-Compiler: gcc-4.0.2
MPlayer-1.0rc2
libmad-0.15.1b (MAD: MPEG Audio Decoder用來mp3解碼)

事前工作:
toolchain路徑加入$PATH
編譯kernel時把audio相關的module一起編入
在target上建立device node (此為OSS預設的device)
mknod /dev/dsp c 14 3
ln -s /dev/dsp /dev/sound/dsp

編譯libmad
CC=arm-unknown-linux-gnu-gcc ./configure --host=arm-linux --prefix=$LIBMAD
make; make install
$LIBMAD為安裝library的目錄

編譯MPlayer
./configure --cc=arm-unknown-linux-gnu-gcc --host-cc=gcc --enable-cross-compile --target=arm-linux --enable-linux-devfs --disable-dvdread --disable-libdvdcss-internal --enable-fbdev --disable-mencoder --enable-liba52 --enable-mad --disable-libmpeg2 --disable-mp3lib --enable-static --disable-dvb --disable-dvbhead --disable-live --with-extraincdir=$LIBMAD/include --with-extralibdir=$LIBMAD/lib 2>&1 | tee logfile
make
--enable-static 用靜態編譯, 避免安裝library到板子上麻煩.
--enable-mad 採用mad的codec
--with-extraincdir 指向libmad的include
--with-extralibdir 指向libmad的lib
因為我只需要播放mp3的功能, 其他configure的參數就沒太理會, 其實大多可以disable. 只是過程可能會遇到error, 大部分都可以找的解決方法.
make 完之後在目錄下產生mplayer執行檔, 大概7mb, 可以用strip在將其大小縮減.

放到板子上測試
./mplayer -ao oss -ac mad test.mp3
./mplayer -ao oss -ac mad http://192.168.0.1/test.mp3
-ao指定device
-ac指定codec
經測試後播放時delay很嚴重,使用mad library來解碼,將浮點運算轉成整數運算,以滿足沒有浮點數運算的cpu,理論上應該很順才對.

補充: PXA270上對應的audio device node是/dev/dsp 需自行建立.

參考資料:
摩托學園討論區-embedded system
最新版本mplayer移植pxa270成功
MPlayer播放選項