2009年12月27日 星期日

移植 Busybox 1.15.3 到 BeagleBoard

首先下載 Busybox 1.15.3CodeSourcery Sourcery G++ Lite Edition 2009q3

將 Busybox 1.15.3 解開,並修改 Makefile 裡的 CROSS_COMPILE 如下:

CROSS_COMPILE ?= arm-none-linux-gnueabi- 

然後編譯 Busybox:

$ make defconfig
$ make
$ make install

到這裡已經備妥 Busybox 了。

接著使用 dd 指令建立一個 64MB 大小的檔案(rootfs-1.15.3-2009q3.bin),並格式化為 ext2 格式。

$ dd if=/dev/zero of=rootfs-1.15.3-2009q3.bin bs=1024 count=65536
$ sudo mkfs.ext2 rootfs-1.15.3-2009q3.bin

建立 file system 除了需要 Busybox 外,還需要再編寫像是 etc/inittab 及 etc/profile 等設定檔,這些檔案可以在 Busybox 的原始碼裡的 examples 和 examples/bootfloppy 目錄裡找到範例,此外也可以利用 BeagleBoard 的範例,例如從 http://code.google.com/p/beagleboard/downloads/list 下載 rd-ext2-8M.bin 及 ramdisk_revc_v3.gz 來取得範例。

$ sudo mount -o loop rootfs-1.15.3-2009q3.bin /tmp/rootfs
$ sudo mount -o loop rd-ext2-8M.bin /tmp/orig

將 rootfs-1.15.3-2009q3.bin 掛載在 /tmp/rootfs,並將當參考範例的 rd-ext2-8M.bin 掛載在 /tmp/orig,然後將編譯後的 Busybox 複製到 /tmp/rootfs,並從 cross compiler 複製需要的 libc。

$ (cd ./busybox-1.15.3/_install/ && sudo tar cf - .) | \
(cd /tmp/rootfs/ && sudo tar xvf -)

$ (cd /opt/CodeSourcery/arm-2009q3/arm-none-linux-gnueabi/libc/lib/ \
&& sudo tar cf - .) | (cd /tmp/rootfs/lib/ && sudo tar xvf -)

再取用 rd-ext2-8M.bin 的 etc 目錄。

$ (cd /tmp/orig/etc/ && sudo tar cf - .) | \
(cd /tmp/rootfs/etc/ && sudo tar xvf -)

最後再建立 console 及 null 兩個裝置節點,基本上 file system 就建立完成了。

sudo mknod -m 600 console c 5 1
sudo mknod -m 666 null c 1 3

OK~~~以下是這個 file system 在 BeagleBoard 執行起來後的訊息摘錄:

VFS: Mounted root (ext2 filesystem) on device 1:0.
Freeing init memory: 120K

beagleboard.org (v0.90) : System initialization...

Kernel release : Linux 2.6.32-rc8-06879-g4355c41
Kernel version : #1 Sun Nov 29 12:20:43 CST 2009

Mounting /proc : [SUCCESS]
Mounting /sys : [SUCCESS]
Mounting /dev : [SUCCESS]
Mounting /dev/pts : [SUCCESS]
Enabling hot-plug : [SUCCESS]
Populating /dev : [SUCCESS]
Mounting other filesystems : [SUCCESS]
Starting syslogd : [SUCCESS]
Starting telnetd : [SUCCESS]
/etc/init.d/rcS: line 100: can't create /sys/power/fb_timeout_value: nonexistent directory
Jan 1 00:00:04 beagleboard syslog.info syslogd started: BusyBox v1.15.3

System initialization complete.

Please press Enter to activate this console.

延伸閱讀:

2009年10月7日 星期三

使用 SyntaxHighlighter

什麼是 SyntaxHighlighter 呢?在它的網站上可以找到以下這段解釋:

SyntaxHighlighter is a fully functional self-contained code syntax highlighter developed in JavaScript.

它採用了 LGPL 3

在 SyntaxHighlighter 1.5.1 版以前,SyntaxHighlighter 是放在 Google code 上的,根據 http://code.google.com/p/syntaxhighlighter/ 網頁上的說明,自 SyntaxHighlighter 2.0 版開始則搬家到 http://alexgorbatchev.com/wiki/ 了。

SyntaxHighlighter 吸引我的理由是它會自動為程式碼加上「行號」,這點比 google-code-prettify 優,因為如此一來當程式碼篇幅較大時,閱讀起來也方便許多。但 SyntaxHighlighter 在使用時除了框住程式碼,還得告訴它這段程式碼所使用的語言,相較之下,google-code-prettify 又較為聰明。

不過,SyntaxHighlighter 的設定相對地也麻煩些,之前嘗試使用 1.5 版時,總是被 <br /> 搞得快瘋了,怎麼弄都搞不定。幸好 SyntaxHighlighter 2.0 在設定上比起 1.5 / 1.5.1 版問題少了些。

同樣地,進入 Blogger 版面配置的「修改 HTML」裡,然後將以下這段加到 <head> 及 </head> 之間。


<link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/2.0.320/styles/shCore.css"/>
<link type="text/css" rel="stylesheet" href="http://alexgorbatchev.com/pub/sh/2.0.320/styles/shThemeDefault.css" id="shTheme"/>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shCore.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shLegacy.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushBash.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushCpp.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushCSharp.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushCss.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushDelphi.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushDiff.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushGroovy.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushJava.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushJScript.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushPhp.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushPlain.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushPython.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushRuby.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushScala.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushSql.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushVb.js"></script>
<script type="text/javascript" src="http://alexgorbatchev.com/pub/sh/2.0.320/scripts/shBrushXml.js"></script>
<script type='text/javascript'>
SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.ClipboardSwf = 'http://http://alexgorbatchev.com/pub/sh/2.0.320/scripts/clipboard.swf';
SyntaxHighlighter.all();
</script

http://alexgorbatchev.com/wiki/SyntaxHighlighter 上提供了 Hosting 的使用方法,這裡我選擇使用 2.0.320 這個版本,原本我嘗試使用 current 的連結,但似乎有點問題,始終無法正確描繪程式碼的 Syntax,所以最後修改成使用 2.0.320 這個版本。

儲存之後,張貼程式碼只要使用 <pre class="brush: js"> </pre> 這樣的語法將程式碼框住就可以了。

不過,SyntaxHighlighter 需要指定程式碼所使用的語言,其中例如 class="brush: js" 表示這段程式碼使用 Javascript。在 http://alexgorbatchev.com/wiki/SyntaxHighlighter:Brushes 這一頁裡列出了 SyntaxHighlighter 支援的語言種類。以下列出其中幾個:

  1. Bash / shell:class="brush: bash" 或 class="brush: shell"
  2. C#:class="brush: c-sharp"
  3. C++:class="brush: cpp" 或 class="brush: c"
  4. Diff:class="brush: diff" 或 class="brush: patch"
  5. Java:class="brush: java"
  6. Python:class="brush: python"
  7. XML:class="brush: xml"

延伸閱讀:

2009年10月6日 星期二

使用 google-code-prettify

什麼是 google-code-prettify 呢?在它的網站上解釋得其實很簡潔、清楚:

syntax highlighting of code snippets in a web page

google-code-prettify 最吸引我的理由就是它簡單、易用,不但容易設定,在使用上也相對地非常方便,而且最方便的就是只要框住程式碼,並不需要告訴 google-code-prettify 那段程式碼是什麼語言,因為 google-code-prettify 會自動判斷。不過呢…它的一個小小缺點就是不會自動為程式碼加上行號。

那,怎麼設定使用 google-code-prettify 呢?

進入 Blogger 版面配置的「修改 HTML」裡,然後將以下這段加到 <head> 及 </head> 之間。

<link href="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.css" type="text/css" rel="stylesheet" /> 
<script type="text/javascript" src="http://google-code-prettify.googlecode.com/svn/trunk/src/prettify.js"></script>

嘿!這裡用了點偷懶的方法,直接從 subversion 中取用 prettify.css 及 prettify.js 這兩個檔案。

接著找到 <body>,將它修改為 <body onload="prettyPrint()">。

儲存之後,當要張貼程式碼時,只要使用 <pre class="prettyprint"> </pre> 或 <code class="prettyprint"> </code> 框住整段程式碼就 OK 了。

延伸閱讀:

2009年6月10日 星期三

綠壩?中共控制網路的最近鉅作

據說,「綠壩」是由鄭州金惠計算機系統工程有限公司(Zhengzhou Jinhui computer system engineering Co., Ltd.),以及北京大正語言知識處理科技有限公司(Beijing Dazheng Human Language Technology Academy Co)合作開發而成的一套軟體。這個軟體的功能是用來封鎖特定網站的,而且該軟體的研發業者還擁有一份網路「黑名單」和關鍵字。

這是今天在爬文時看到的,據說中共要求自今年七月一日起,所有在中國出售的個人電腦 (PC) 都必須安裝「綠壩」這套軟體。美其名是為了建立「和諧的網路環境」,其實不過就是進一步控制網路的工具罷了!

中共一直以來都使用「防火長城」(the Great Firewall) 來過濾網路上的資訊,基本上只要是中共不想讓人民知道的事情都會被過濾掉。然而這還是可以透過像「無界瀏覽」或 Tor 這類的工具避開防火長城的過濾,不過如果將來在每一台個人電腦上都強迫安裝上「綠壩」之後呢?呵!那可就能控制得更嚴格囉!

延伸閱讀:

2009年6月4日 星期四

天安門事件二十週年

勿忘六四

在許多人的記憶裡,這首由飛碟、滾石、可登、寶麗金四大唱片公司共同製作的「歷史的傷口」應該不容易被遺忘的吧!

蒙上眼睛,就以為看不見
捂上耳朵,就以為聽不到
而真理在心中,創痛在胸口
還要忍多久,還要沉默多久?!

如果熱淚可以洗淨塵埃
如果熱血可以換來自由
讓明天能記得今天的怒吼
讓世界都看到歷史的傷口!

六四天安門事件發生也已經滿二十年了,一如往昔,中共在這之前又開始封鎖網路、媒體上有關六四事件的訊息,但說實在的,不去面對、不承認並不表示這件事沒有發生過。

我倒是覺得,愈是心虛之人愈會去遮掩真相,或是企圖強迫眾人遺忘。

延伸閱讀:

2009年5月3日 星期日

不需要「開關」的手機

大約在農曆年前後吧!我的手機 (Nokia 6030) 因為開關元件卡住,導致無法正常開關機,回去神腦維修,卻偏偏已經超過保固期了。

既然如此,那我只好記得每天在睡前充電,並且將旅充放在平時背著跑來跑去的背包裡,以避免不小心讓手機斷電。

只是有時候實在會不小心忘了充電,偏偏又在外面出差,找不到地方為手機充電,於是在前幾天拿到合適的螺絲起子後,決定動手將這支手機拆了,下面這張相片就是它被拆開後的樣子。

拆開之後,首先確認開關元件的線路後,然後將故障的開關元件取下來,最後直接將開關線路的兩端焊接在一起,就像下面這張相片一樣。

嘿!這麼一來,這支手機只要裝上電池之後,就會直接開機了。我也不用擔心因為不小心讓這支手機斷電了,呵!太開心了。