2006/05/31 

Linux的檔案屬性(關於時間的部份)

Linux的檔案屬性(關於時間的部份)
Linux(也許應該說是Unix都是如此)中的檔案具有三種時間的屬性:
atime(access最近被讀取的時間) <== command ll所顯示的時間
ctime(status/mode模式被改變的時間)
mtime(最近被寫入或建立的時間)<==這是我們一般所說的檔案時間戳記(timestamp)

相關命令範例:
ls 指令可以顯示檔案的屬性
-l atime (ll就是ls -l)
-la atime (-l和-a相同)
-lc ctime
-lu mtime

#ll inode.h
-rw-rw-rw- 1 root root 67463 Mar 20 13:53 fs.h
#ll inode.h -la
-rw-rw-rw- 1 root root 67463 Mar 20 13:53 fs.h
#ll inode.h -lu
-rw-rw-rw- 1 root root 67463 May 31 16:26 fs.h
#ll inode.h -lc
-rw-rw-rw- 1 root root 67463 Mar 25 19:20 fs.h

以上屬性定義在Kernel Source中的fs.h(取自Kernel 2.6.16)
include/linux/fs.h
struct inode {
...
struct timespec i_atime;
struct timespec i_mtime;
struct timespec i_ctime;
...
}

2006/05/28 

LinuxDevices所做的embedded Linux 市場調查(2006年五月)

LinuxDevices所做的embedded Linux 市場調查(2006年五月)
個人雖然覺得LinuxDevices對Linux有所偏好,以致"Embedded OS sourcing trends"中,Enbedded Linux高到47%,但有幾個趨勢值到我們參考:
1. 從數據上來看,企業對商業的付費支援、商業套件、工具和服務意願都提高了;
2.
ARM(29%)和X86(26%)架構還是主流,但MIPS(7%)未來可能成長最快(10%);
另外有一項"Linux sourcing trends in embedded device applications"列出了一些像是Fedora,Mandrake...這樣的Desktop套件,再次說明,其實大家對何謂Embedded Systems的認定,還是有很大的解釋空間的。
參考資料:Snapshot of the embedded Linux market


2006/05/24 

Linux中的printk()追蹤

Linux中的printk()追蹤
Kernel Source Code版本為2.6.16

1.printk實作在kernel/printk.c中
2.printk透過在vprintk()中的release_console_sem()將text送到buffer中
3.release_console_sem利用call_console_drivers() 呼叫 一個底線的_call_console_drivers() -> 再呼叫 兩個底線的__call_console_drivers()
4.最後利用con->write() 將LOG_BUF寫出
註 con(console)則定義在linux/include/linux/console.h中

//以下原始碼為kernel/printk.c
514 asmlinkage int printk(const char *fmt, ...)
515 {
516 va_list args;
517 int r;
518
519 va_start(args, fmt);
520 r = vprintk(fmt, args);
521 va_end(args);
522
523 return r;
524 }
525
526 /* cpu currently holding logbuf_lock */
527 static volatile unsigned int printk_cpu = UINT_MAX;
528
529 asmlinkage int vprintk(const char *fmt, va_list args)
530 {
...
534 static char printk_buf[1024];
...
546
547 /* Emit the output into the temporary buffer */
548 printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args);
549
550 /*
551 * Copy the output into log_buf. If the caller didn't provide
552 * appropriate log level tags, we insert them here
553 */
554 for (p = printk_buf; *p; p++) {
...
605 }
606
...
627 release_console_sem();
...
749 void release_console_sem(void)
750 {
751 unsigned long flags;
752 unsigned long _con_start, _log_end;
753 unsigned long wake_klogd = 0;
754
755 for ( ; ; ) {
756 spin_lock_irqsave(&logbuf_lock, flags);
757 wake_klogd |= log_start - log_end;
758 if (con_start == log_end)
759 break; /* Nothing to print */
760 _con_start = con_start;
761 _log_end = log_end;
762 con_start = log_end; /* Flush */
763 spin_unlock(&logbuf_lock);
764 call_console_drivers(_con_start, _log_end);
765 local_irq_restore(flags);
766 }
767 console_locked = 0;
768 console_may_schedule = 0;
769 up(&console_sem);
770 spin_unlock_irqrestore(&logbuf_lock, flags);
771 if (wake_klogd && !oops_in_progress &&amp;amp; waitqueue_active(&log_wait))
772 wake_up_interruptible(&log_wait);
773 }

396 static void call_console_drivers(unsigned long start, unsigned long end)
397 {
...
406 while (cur_index != end) {
...
416 while (cur_index != end) {
417 char c = LOG_BUF(cur_index);
418
419 cur_index++;
420 if (c == '\n') {
421 if (msg_level <> (end & LOG_BUF_MASK)) {
381 /* wrapped write */
382 __call_console_drivers(start & LOG_BUF_MASK,
383 log_buf_len);
384 __call_console_drivers(0, end & LOG_BUF_MASK);
385 } else {
386 __call_console_drivers(start, end);
387 }
388 }
389 }

362 static void __call_console_drivers(unsigned long start, unsigned long end)
363 {
364 struct console *con;
365
366 for (con = console_drivers; con; con = con->next) {
367 if ((con->flags & CON_ENABLED) &amp;& con->write)
368 con->write(con, &LOG_BUF(start), end - start);
369 }
370 }

 

QT embedded的Compiler Time錯誤

QT embedded的Compiler Time錯誤
QT Embedded版本:qt-embedded-free-3.0.2.tar.gz
同事用2.x版也得到同樣的錯誤
環境:Fedora Core 5 (FC4亦同)
make[1]: Entering directory `/work/qt/qt-embedded-free-3.0.2'
cd qmake && make
make[2]: Entering directory `/work/qt/qt-embedded-free-3.0.2/qmake'
make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/work/qt/qt-embedded-free-3.0.2/qmake'
cd src/moc && make
make[2]: Entering directory `/work/qt/qt-embedded-free-3.0.2/src/moc'
make[2]: Nothing to be done for `first'.
make[2]: Leaving directory `/work/qt/qt-embedded-free-3.0.2/src/moc'
cd src && make
make[2]: Entering directory `/work/qt/qt-embedded-free-3.0.2/src'
g++ -c -pipe -DQWS -fno-exceptions -fno-rtti -Wall -W -O2 -fPIC -DQT_NO_DEBUG -DQT_NO_CHECK -DQT_NO_QWS_DEPTH_8GRAYSCALE -DQT_NO_QWS_VGA_16 -DQT_NO_QWS_DEPTH_4 -DQT_NO_QWS_DEPTH_24 -DQT_NO_QWS_DEPTH_32 -DQT_NO_QWS_VOODOO3 -DQT_NO_QWS_MACH64 -DQT_NO_QWS_REPEATER -DQT_NO_QWS_MATROX -DQT_NO_QWS_VNC -DQT_NO_NIS -DQT_NO_REMOTE -DQT_NO_IMAGEIO_MNG -DQT_NO_IMAGEIO_JPEG -DQT_NO_STYLE_AQUA -DQT_NO_STYLE_MAC -DQT_NO_STYLE_INTERLACE -DQT_NO_STYLE_COMPACT -I3rdparty/freetype/src -I3rdparty/freetype/include -I3rdparty/freetype/builds/unix -I3rdparty/freetype2/include -I3rdparty/libpng -I3rdparty/zlib -I3rdparty/libpng -I3rdparty/zlib -I/work/qt/qt-embedded-free-3.0.2/include -I.moc/release-emb-x86/ -I/work/qt/qt-embedded-free-3.0.2/mkspecs/qws/linux-x86-g++ -o .obj/release-emb-x86/allmoc.o .moc/release-emb-x86/allmoc.cpp
/work/qt/qt-embedded-free-3.0.2/include/qjpunicode.h:82: warning: ‘class QJpUnicodeConv’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qnetworkprotocol.h:58: warning: ‘class QNetworkProtocolFactoryBase’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qpolygonscanner.h:48: warning: ‘class QPolygonScanner’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qlistbox.h:191: warning: unused parameter ‘i’
/work/qt/qt-embedded-free-3.0.2/include/qsortedlist.h: In destructor ‘QSortedList::~QSortedList()’:
/work/qt/qt-embedded-free-3.0.2/include/qsortedlist.h:51: error: there are no arguments to ‘clear’ that depend on a template parameter, so a declaration of ‘clear’ must be available
/work/qt/qt-embedded-free-3.0.2/include/qsortedlist.h:51: error: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
/work/qt/qt-embedded-free-3.0.2/include/qsqldatabase.h: At global scope:
/work/qt/qt-embedded-free-3.0.2/include/qsqldatabase.h:63: warning: ‘class QSqlDriverCreatorBase’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qasyncimageio.h:48: warning: ‘class QImageConsumer’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qtooltip.h:86: warning: ‘class QToolTip’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qfiledialog.h:78: warning: ‘class QFilePreview’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:221: warning: ‘class QXmlReader’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:406: warning: ‘class QXmlContentHandler’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:423: warning: ‘class QXmlErrorHandler’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:432: warning: ‘class QXmlDTDHandler’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:440: warning: ‘class QXmlEntityResolver’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:447: warning: ‘class QXmlLexicalHandler’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qxml.h:460: warning: ‘class QXmlDeclHandler’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:44: warning: ‘struct QUnknownInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:58: warning: ‘struct QDispatchInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:150: warning: ‘struct QObjectInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:160: warning: ‘struct QComponentInformationInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:173: warning: ‘struct QComponentFactoryInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:183: warning: ‘struct QLibraryInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:195: warning: ‘struct QFeatureListInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qcom_p.h:205: warning: ‘struct QComponentRegistrationInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:69: warning: ‘struct QUBuffer’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:77: warning: ‘struct QUType’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:104: warning: ‘struct QUType_Null’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:287: warning: ‘struct QUType_enum’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:307: warning: ‘struct QUType_ptr’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:326: warning: ‘struct QUType_iface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:345: warning: ‘struct QUType_idisp’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:364: warning: ‘struct QUType_bool’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:384: warning: ‘struct QUType_int’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:404: warning: ‘struct QUType_double’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:424: warning: ‘struct QUType_charstar’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucom_p.h:446: warning: ‘struct QUType_QString’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qimageformatinterface_p.h:18: warning: ‘struct QImageFormatInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qsqldriverinterface_p.h:62: warning: ‘struct QSqlDriverFactoryInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qstyleinterface_p.h:19: warning: ‘struct QStyleFactoryInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qtextcodecinterface_p.h:21: warning: ‘struct QTextCodecFactoryInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qucomextra_p.h:53: warning: ‘struct QUType_QVariant’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/private/qwidgetinterface_p.h:60: warning: ‘struct QWidgetFactoryInterface’ has virtual functions but non-virtual destructor
/work/qt/qt-embedded-free-3.0.2/include/qgfxraster_qws.h:107: warning: unused parameter ‘t’
/work/qt/qt-embedded-free-3.0.2/include/qgfxraster_qws.h:107: warning: unused parameter ‘c’
/work/qt/qt-embedded-free-3.0.2/include/qgfxraster_qws.h:107: warning: unused parameter ‘swc’
/work/qt/qt-embedded-free-3.0.2/include/qgfxraster_qws.h:107: warning: unused parameter ‘ot’
/work/qt/qt-embedded-free-3.0.2/include/qgfxraster_qws.h:107: warning: unused parameter ‘lo’
/work/qt/qt-embedded-free-3.0.2/include/qwindowsystem_qws.h:201: warning: ‘class QWSServer::KeyboardFilter’ has virtual functions but non-virtual destructor
make[2]: *** [.obj/release-emb-x86/allmoc.o] Error 1
make[2]: Leaving directory `/work/qt/qt-embedded-free-3.0.2/src'
make[1]: *** [sub-src] Error 2
make[1]: Leaving directory `/work/qt/qt-embedded-free-3.0.2'
make: *** [init] Error 2

這個問題在於Fedora Core 5使用了
#g++ -v
gcc version 4.1.0
只要換成
#g++32 -v
gcc version 3.2.3就可以啦

g++32包含在 compat-gcc-32-c++-3.2.3-55.fc5.rpm中

 

1st working model (OLPC)

1st working model (OLPC)
終於看到第一個OLPC的 working model,
由於Flash實在太小,要灌上Fedora Core 5加上gnome實在費了不少時間
創下了這個Project最"晚"下班的一次
照片來源:Flickr1 Flickr2

2006/05/17 

如何用RPM檔編譯Fedora core 5的kernel

如何用RPM檔編譯Fedora core 5的kernel

雖 然我們可以到kernel.org下載最新的kernel source,但因Fedora有部份patch並不一定有更新到kernel.org中,如果我們因為某種特別的需要,可以用以下方式,做出和 Fedora core 5光碟上一模一樣的核心影像檔,利用後續的修改及做出特別的版本。

1. 取得kernel-2.6.15-1.2054_FC5.src.rpm
有以下種方式
  • 從光碟上找,但必須是SRPMS的光碟
  • 從FTP上下載
ftp://ftp.isu.edu.tw/
  • 從rpm.pbone.net找
Fedora core 5的kernel source及其patch檔

  • 使用apt-get
#apt-get source kernel
會被下載到/usr/src/redhat/BUILD/之下

2.安裝 rpm
#rpm -ivh kernel-2.6.15-1.2054_FC5.src.rpm
#cd /usr/src/redhat/SPECS
#rpmbuild -bp --target $(uname -m) /usr/src/redhat/SPECS/kernel-2.6.spec

3.kernel的source會被安裝到以下路徑
#cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686

3.選擇適當的kernel的config檔
有二個方式
  • 由rpm解開後的Source中找(在/usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686之下)
#cp configs/kernel-2.6.15-i686.config .config
  • 如果系統本身也是Fedora core5,可以由/boot/Config-2.6.1x-x.xxxx_FC5取得
#cp /boot/Config-2.6.15-1.2054_FC5 .config

3.編譯核心
#cd /usr/src/redhat/BUILD/kernel-2.6.15/linux-2.6.15.i686
#make menuconfig //載入.config檔
#make bzImage //編譯核心
#make modules //編譯模組
#make modules_install //安裝 模組到/lib/modules/之下
#make install //安裝kernel及loader (GRUB)

*補充:有些人可能喜歡使用rpmbuild,省掉麻煩
#rpmbuild --recompile xxx.src.rpm

2006/05/10 

OLPC原型機

OLPC原型機
太可愛了
有二支天線
圖片來源:OLPC

2006/05/08 

X Window出現could not open default font 'fixed'

X Window出現could not open default font 'fixed'
完整錯誤訊息如下:
Could not init font path element unix/:7100, removing from list!
Fatal server error:
could not open default font 'fixed'

個人的環境Fedora core 5
修改/etc/X11/xorg.conf解決這個問題
#FontPath "unix/:7100"
FontPath "/usr/share/X11/fonts/misc"

2006/05/07 

Combimouse

Combimouse
有人跟我一樣覺得手指在keyboard/mouse間移來移去很煩嗎? 希望這個可以解決 !
右邊的keyboard同時也是mouse,不知ebay有沒有賣?! 太需要了:p


來源:CombimouseLink

2006/05/06 

Nokia 770使用經驗及中文問題

Nokia 770使用經驗及中文問題
手上這台Nokia 770作業系統用的是 Linux Nokia770-43 2.6.12.3-omap armv5
預先安裝了以下的應用程式
  • Web Browser是Opera 8(支援了Flash Player 6)
  • PDF reader
  • Audio player
  • Video player
  • News reader
  • Images
  • File manager
  • Connection manager (WiFi 802.11b)
  • 還有一些utilities (Calculator,Clock,Notes,Sketch);Games(Chess,Mahjong,Marbles)
  • Control panel內有 Application installer (debian) ,Backup/Restore ,Certificate manager,Connectivity,Language/region(沒有任何亞洲字元,當然也沒有中文),Screen calibration
  • Date and time,Device,Display,Memory,Personalization,Security,Sounds,Text input settings

另外個人還安裝了
  • X Terminal
  • ssh server
  • MANaOS (一個支援中文的Browser)
個人覺得Nokia 770的電源管理做的還不錯,connection manager也不賴,連上AP還蠻方便的
但 對需要中文的我來說,由於預設沒有中文字型,所以你需要找一個中文字型*.ttf檔放在/home/user/.fonts之下,建議同時將它hard link在/usr/share/fonts,內建的PDF reader可以支援中文,但Opera 8不知為何,一直無法成功顯示中文,所以安裝了在PALMisLIFE 討論區網友adamchang提到的另一個Brower:MANaOS暫時解決Browser無法看中文的麻煩。
整理而言,如果你需要一個拿出來20秒內就可以連上WiFi的行動裝置,Nokia 770是個好選擇,另一個值得推薦的是如果你想自已開發Embedded Linux,那專為NOKIA 770而設的maemo
社群和SDK也很合適,很多人Porting了不少OSS在它身上,而且maemo每天都有數十封的mail list在交流,是個非常活躍的OSS組織。
另一個值得一提的是,如果你想要改一些系統設定,那麼你會需要安裝X terminal,而且需要讓裝置進入RD Mode,才能取得root的權限,這一點讓我一開始浪費了不少時間

MANaOS下載網址
http://home.ufam.edu.br/~agan/maemo/manaos/unstable/debs/0.1.2/arm/old/

進入RD Mode的方法
建議先安裝X Terminal
switch off the device
在你的PC/NB上執行
download flasher:http://www.maemo.org/downloads/d3.php
./flasher --enable-rd-mode --reboot
(2006年版,請使用./flasher-2.0 --enable-rd-mode --reboot)
接上USB
switch on the device
在Device的XTerminal執行
#sudo gainroot # Login到root

maEmo
http://www.maemo.org/

About me

  • I'm Martin's blog 馬汀的部落格
  • From 中壢市, 桃園縣, Taiwan
  • -----BEGIN GEEK CODE BLOCK----- Version: 3.1 Comment: For info see http://www.geekcode.com GC/CS/CC/E/IT/TW d- s a C++++ L++++ P+ L++++ E--- W+++ N++ o+ K- w+++ O- M- V- PS+ PE++ Y+ PGP+ t 5- X++ R- tv- b+++ DI+ D-- G e+++ h+ r+ y+ z? ------END GEEK CODE BLOCK------ /**************************** 旅行是我生命的動力 它的樂趣從計劃旅行開始 我樂於分享旅行及Linux Kernel上的每一件事. ****************************/
My profile