發表文章

目前顯示的是 12月, 2007的文章

quiz: ioctl 與 down的問題

在IOCTL中有一段這樣的code: if ( down(&(enc->ptr_frame_queue[0]->frame[0].ptr_sem)) ) return -EFAULT; 錯誤訊息如下: void value not ignored as it ought to be 問題在哪裡? 答案是down的return value是void,無法傳回值給if 改用down_interruptible即可。

linux 不解之謎:在inflate.c 中加入gzip_mark的類似函示

狀況:需要在核心解壓縮RAMDISK時,添加額外的watchdog reset函示 想要參考 gzip_mark的作法, 在arch/arm/boot/compressed/misc.c中加入自製的touch_wdog 結果:在合成zImage時總是出現undefined symbol (lib/inflate.c)

MKV 製作修改小技巧

MKV 如同 AVI,是一種多媒體的Envelop(信封) 意思是可以同時支援許多編碼格式,例如說:DivX、Xvid、h.264以及MPEG等。 還有先進的章節功能,像是網路可以找到影集某季的幾十集做成的單一MKV, 不用分成許多小檔案,這實在是網路下載者的福音呀。 MKV的好,大家都知道,但這不是本文的重點。 今天要講如何編輯,有時候網路抓到的影片,也許是字幕語言不對, 也許是長度太長(12GB的FullHD影片)。想要編輯的時候怎麼辦呢? 請參考以下連結: http://bbs.mychat.to/read.php?tid=569752 有一個事情要注意的就是,有時候會發生字幕加載失敗的狀況, 通常是影片本身已經帶有字幕了,在加上另外的字幕造成格式混亂。 這時候只要先把本來的字幕軌去除存檔,然後在加載一次字幕就可以了。

Windows 系統軟體安裝 分類法

圖片
這兩天有數次重灌電腦的念頭,不過不單單只想重灌電腦,還想多做一些。 希望能灌的又快又好,所以開始想一些東西。 第一是資料轉移問題: 最好的話,可以用GHOST或者TRUE IMAGE幫本來的系統碟做備份, 然後把映像檔存到其他地方,之後如果發現有東西漏了,還可以從映像檔找回來。 第二是程式安裝問題: 重灌電腦最大的麻煩除了資料轉移之外,還有另外一個問題就是要重建本來的所有程式, 實在是件苦差事,所以解決方法有兩個:一是多多愛用免安裝綠色軟體,免除一再安裝的惡夢。 二是事先計畫要安裝的軟體,預先把他們集中在一個地方,在一起安裝回去。 第三是安裝順序問題: 或許手上有很多軟體,但是對於他們的分類沒有仔細想過, 會發生很多做白工或者互相依賴的情形,這也是本篇想要記下的重點。 我把軟體分為幾大類: 第零類:是作業系統本身,重要性就不多談了,這是一切的基礎。 第一類:是驅動程式跟基本服務。驅動程式就不多說,沒有他硬體就不能用。 基本服務講的是軟體面的驅動程式,例如解壓縮程式、虛擬光碟等。 第二類:系統工具。像是檔案總管、狀態偵測、光碟燒錄跟防毒。 這種非必要,但對於系統動作有正面助益的,都規在這類。 第三類:應用程式。這類就不用介紹了,按照電腦用途又可以分做好幾個次類別:像是文書處理、網路、多媒體、影像處理跟使用者介面等。 他們的關係,可以用下圖說明: 概念是這樣,以我的NB ASUS W6A舉例如下: OS:Windows XP Home隨機版 Service:Tochiba BT driver、自然輸入法、WinRAR、Net Profiles、Open Command Here、Auto Complete、Logitech SetPoint、Alcohol、Intel ProSet/Wireless、True Image、Synergy Utility:xplorer2、Process Tamer、NHC、Allway Sync、KAV、HD Tune、Unlocker、Nero Document:Office、FreeMind、UltraEdit、CDIndex、SmartDraw、Acrobat PDF Reader Network:Flashget、Maxthon、Goolgle toolbar、MSN、Alibabar、JAVA、RoboForm、ViewPag

實體記憶體映射技術:mmap ioremap

要在AP中直接設定裝置或者直接存取實體記憶體位址, 在作業系統的保護下,通常要透過ioctl或read/write方法。 但是對於大量資料進出,比如video或streaming這樣的方法就顯的效能很低, 所以Linux提供了另外一套機制叫做mmap。 透過mmap可以把檔案映射到使用者虛擬位址空間,透過這個指標就可以存取檔案。 那檔案怎麼支援mmap呢?答案是要實做mmap這個方法,把上層的mmap請求, 轉換成實際的動作。 那怎麼利用mmap做實體記憶體的應用呢? AP要利用/dev/mem這支檔案,它可以映射到實際的記憶體。 DRIVER端則要用ioremap把實體記憶體轉換成核心虛擬位址,之後就讀寫這個記憶體指標。 最後簡單圖解如下: AP->開啟/dev/mem->mmap到實體記憶體位址->AP快樂的存取 DRIVER->module_init時做ioremap->取得記憶體指標->DRIVER快樂的存取

Linux remote logging

參考連結: [問題] 使用 busybox 的 syslogd, klogd 如何做訊息的過濾? http://forum.jollen.org/index.php?showtopic=19 Syslogger Tutorial http://linux.cudeso.be/linuxdoc/syslog.php 問題: 系統會異常自動重新開機,要如何除錯? 本來的LOG重新開機又會歸零消失,如何記錄追蹤重新開機原因? 解法: 使用remote log。 server端修改/etc/syslog.conf or /etc/sysconfig/syslog.conf (redhat): 把SYSLOGD_OPTIONS加入"-r"選項 servser端修改/etc/services: 確認 syslog 514/udp不是在註解狀態 client端,啟動klogd使printk可以記錄到/var/log/messages client端,啟動syslogd並加上 -R [IP]參數 (busybox版本) 大功告成