我讀 «現代嵌入式系統開發專案實務»

這本書雖然只能說是入門書, 對我的同事們已經不太適用, 不過對新人來說真的是一本很好的書. 本書的副標題叫做 “菜鳥成長日誌與專案經理的私房菜", 所以書中也是以菜鳥的角度來看 embedded system, 從什麼都不會, 一點一滴地學習, 終於熬到產品量產, 結案. 關於這本書的內容, 還是要實際去翻翻才會知道. 我想要特別提到的是書中和我們公司不同的四個點.

1. 這本書更適用於 system design house, 而不是 IC design house. 只不過現在 IC design house 經常撈過界, 使得這本書對我們也變得很真實.

2. 如果沒有 C-model, 我們就必須像書上說得一樣, 去建一套 PC 上的模擬開發環境, 以便設計 UI. 不過我既有 C-model for firmware, 又有 Linux demo system, 所以就省去了再做一套模擬器的時間.

3. 書上的實例是開發一個專案. 專案結束, 案子結了, 人就散了. 但我們是採用部門制, 人力編制也相對龐大 (10 倍?), 所以並不會有專案需要和 RD 部門借用人力的問題.相形之下, 我們專案就是部門, 問題的確比較少. 當然也和產品生命週期夠長有關, 若不是一個產品可以連做好幾年, 大家就不會在一起這麼久了.

4. 書上提到強勢的 QA 導致 RD 抓狂, 品質低落. 我們倒是沒有這個狀況. 或許跟我們的 QA 直接隸屬 DVR project 有關, 這樣大家比較像在同一條船上, 無謂產生什麼意氣之爭. 當然,我們的 QA 做得很不錯, 還是可以稱讚一下.

Samba server 設定的小 memo

我們公司的 server 前幾天快爆了, 於是我就加了一顆硬碟上去. 由於排線有點小問題, 拆裝硬碟之後, 大家密集使用的 server, 突然就變得不能開機了. 雖然 server 上沒有甚麼重要的資料, 但是我們工讀生的 script 都在上面, 萬一她那邊不能 release code 了, 誰都幫不上忙. 我們緊張了一陣子, 還好把排線換掉之後, 每一顆硬碟的內容都在.

電腦不會動, 當然就是重灌囉! 不幸的是, 我們的 Fedora 版本太舊了, 安裝上去之後, telnet, samba, nfs 統統不會動了, 在本機上選 upgrade, service 也統統都沒反應. 因此我把手動安裝的 samba 的步驟稍微整理一下, 以備不時之需. 其實我覺得更應該記下來的是, 我們同事 hack 的方法, 竟然都不用啟動 smb 耶, 而是依序執行某 3 隻程式也行. 我們先講正統的做法吧!

1. 檢查 samba 的 package 在不在?

rpm -qa samba

沒看到印東西, 那麼 /etc/init.d 下面應該沒有smb 這隻程式.

2. 安裝 yam -y install samba

接者 samba 就被安裝好了, 但是還沒有啟動.

3. 加 user, vi /etc/samba/smb.conf

檔案的上半部有一些 global rule, 開得鬆一點, 底下的目錄就隨便都可以進得去.

4. 測試 testparm

如果有問題會 complain.

5. 加 user, smbpasswd -a username

這個程式會要求輸入 password, 並且再 confirm 一次

值得留意的地方是, smbpasswd 是一個執行檔, 但是 /etc/samba/smbpasswd 底下真的有一個同名的檔案是放 password 的實體位置.

6. 可以省略的部分

6.0 其實連 5 都可以省略, 假如大家開公用目錄來用, 就不要分那麼細了.

6.1 防火牆設置,  vi /etc/sysconfig/iptables

6.2 重新啟動 iptable, /etc/rc.d/init.d/iptables restart

6.3 將 samba 設為自動啟動, chkconfig smb on

6.4 確認自動啟動的狀態, chkconfig –list smb

7. 啟動 samba server,  /etc/init.d/smb start

系統會印出

starting smb service: [OK]

starting nmb service: [OK]

8. 若不按照上面 7 的步驟, 硬是執行 smbd, nmbd, winbinbd 也是有同樣的效果. 而且不用 smb restart  也可以對 smb.conf 立刻生效喔! 這就是我們同事的最精簡 hack 版.

若慎重一點的話, 要按照下面的步驟.

以下抄襲自:由 jengyic 發表於 週六 6月 03, 2006 5:22 pm,

網址為: http://www.daemon-land.idv.tw/phpBB3/viewtopic.php?f=18&t=143

安裝 samba

1.cd /usr/ports/net/samba3

make install clean

options for samba

不修改預設值,僅多勾選 AD Support 選項。

2.cp /usr/local/etc/smb.conf.default /usr/local/etc/smb.conf

3.開機時啟動

(1)察看 samba.sh 內容,寫入 samba_enable="YES"

(2)寫入
smbd、nmbd、winbindd

smbd_enable="YES"

smbd_flags="-D"

nmbd_enable="YES"

nmbd_flags="-D"

winbindd_Enable="YES"

winbindd_flags=""

inetd_enable="YES"

4.使用 swat 管理

vi /etc/inetd.conf

將 swat 敘述前的 # 符號刪除,重新啟動 inetd

/etc/rc.d/inetd restart

開啟瀏覽器,輸入 http://FQDN:901

註1:

inetd.conf

# Enable the following two entries to enable samba startup from inetd
# (from the Samba documentation). Enable the third entry to enable the swat
# samba configuration tool.
#
#netbios-ssn stream tcp nowait root /usr/local/sbin/smbd smbd
#netbios-ns dgram udp wait root /usr/local/sbin/nmbd nmbd
#swat stream tcp nowait/400 root /usr/local/sbin/swat swat

前兩行表示如果要在開機的時候,自 inetd 啟動 samba ,需要將 netbios* 前的 # 符號刪除;如果要使用第三方 samba 設定工具(指的是 swat ),就需要將 swat 前的 # 符號刪除。

但是,發現系統主機前會不斷出現訊息r

….inetd[1228]: netbios-ssn/tcp: bind: Address already in use
….inetd[1228]: netbios-ns/udp: bind: Address already in use

最後,將 /etc/inetd.conf 中的 netbios* 前的 # 符號填上,就不再出現;猜測可能是因為先前寫入 /etc/rc.conf 檔案中的 smbd、nmbd 兩者已經在開機的過程中啟動,而後 inetd 要再啟動 smbd、nmbd 時,便出現已使用的訊息。

註2:

會了能夠在網路上看見中文檔案名稱的分享資料夾,需要在 smb.cond 檔案中加入 unix charset = big5 (發現僅在 xp 中見到中文僅需修改 big5 即可,但在 98 會呈現空白,需再添加 dos charset = 0xb9 ,由 CP850 修改為 0xb9 ,方可辨識中文)(亦可在 swat 中修改);而安全性設定則設為 user 即可。

註3:samba 的使用者帳號必須是存在系統上的帳號。

Excel 小技巧

有時候, 在 excel 的工作表 2008 中想要參考工作表 2007 中某一格的內容, 它的寫法如下:

工作表 2007 假設有一個 A1 = 5

工作表 2008 假設有一個 A1 = 8, A2 想要用工作表 2007 的 A1 去加工作表 2008 的 A1,

則 A2 的公式是 +(‘2007’!A1)+A1

其中 +() 是不能少的, 關鍵字 ‘2007’ 是工作表 2007 的名字, 然後用單引號刮起來, 後面要有驚嘆號! 接下來就是欄位的寫法, 和平常一樣.

如果對應的欄位, 希望在 copy and paste 之後對到固定的欄位還是不變的, 那就要把
A1 改成 $A$1 這種格式.

BT 小檔案

前幾週, 因為我的 PDA 又無預警電力全失, 所以我的正版 Papago 5.7 版也就這樣不認得主人了, 還得要重灌一次. 為此我發願要改灌一個盜版的 Papago, 以免斷電後, 它又不認得我了. [注意! 我有買正版喔]

在這個因緣際會之下, 我上網找到了一個 Papago 5.7 版的 crack. 當然, 又同時發現了 9.0, 10.0 版的 crack. 不過要把他們 download 下來試用的話, 那個網站要我裝一個哇嘎 (Vagaa) 的軟體. 就這樣, 繼多年前用過 eZPeer 後, 我又安裝了一次 P2P 軟體. Papago 10.0 版真的很好用, 所以我又買了個正版. 因為升級價還不到 900 塊, 算是很便宜的合法化.此外它又多送一個正版 5.7, 也有升級的權利. 

言歸正傳, 裝了 Vagaa, 結果惹來了一堆垃圾軟體. 因為 Vagaa 是簡體中文的介面, 所以我在不明就理的情況下, "自願" 灌了一大堆 bundle 軟體而不知不覺. 當然, 我重新安裝的時後, 就不會再去選他們, 結果也就平安無事了. Vagaa 有很強的搜尋能力, 所以可以輕易地找到一些沒空去看的電影.而且它是採積分制的, 上傳愈多, 積分愈高, 就愈容易下載檔案.

不過 Vagaa 雖然容易上手, 但是它還是一直讓我怕怕的. 首先它完全不遵守上傳限制的規定. 明明我限制它 3KB/sec, 它還是會衝到 50KB/sec, 害我都不能用 browser 了. 另外一個缺點就是它的界面不能 sorting. 我想看看那個檔案快傳完了, 這樣也都做不到.尤有甚者, 不知道有那一個垃圾軟體巴在我的電腦裡面, 害我有一陣子狂當機, 只好重灌整個系統. 不過看在它效率不錯的份上, 重灌之後, 我還是不計前嫌又將就著用了它幾天. 不過它似乎有點危險性, 所以不敢介紹給大家.

前幾天我去大潤發, 看見有一本書叫做 "BT, ClubBox, P2P 下載三冠王". 就買回來研究. 也把附贈光碟裡面的軟體全部都安裝了 . 看來看去, 還是騾子比較順眼, 所以我現在裝得是 eMule. BitComet, Vagaa 都擺\到一邊去了. eMule 是 eDonkey 的後代 (騾子是驢子的後代, 真的沒話說), 據說比 eDonkey 更高明. 它有不錯的使用者界面, 搜尋能力也很強. 支援 KAD, 可以不用像 BT 一樣一定要到 Tracker server 去找東西, 可以把 tracker server 的功\能分散到每一台 client電腦的身上.如果不開 KAD,  eMule 仍然須要登入一台 server, 以便搜尋"資源", 不過即使 server 掛了 (eMule 的繁體界面就是這樣顯示的: XXX server 似乎掛了, 蠻親切的), 仍然可以上傳, 下載. 當然, 它可以 sort 各種 information, 限制了上傳速率之後, 就決不會越軌…

ClubBox 的觀念, 和一般的 P2P 不一樣. 它需要把上傳資料全部丟到 server, 然後大家在 server 上互 copy. 它的好處就是: 絕不會下載到一半, 就遇到 source 消失, 檔案從此變成半吊子的孤兒. 至於它的另類神奇用途, 我覺得可以用來緊急備份自己的 hard disk, 然後在 10 天內自己去下載回來.

prevent tail call 小檔案

因為想要解決 relocation truncate 的問題, 在網路上不小心查到 prevent tail call 的資訊. 覺得還蠻有趣的.

所謂 prevent tail call 就是在 function 的最後面又 call 一個 function (tail call).

由於這個 tail call 完成之後, 唯一要做的事情就是 return 原 function,

原 function 又 return 回上一層.

因此這裡就不必囉囌地 return 兩次, 一次就讓它回老家, 這就是 prevent tail call 的精神.

有興趣的人可以去看: http://blog.chinaunix.net/43233/showart_464991.html