2014/02/26

[Linux] Ubuntu12.04下利用QEMU + chroot來編譯Linux Kernel (二)

參考上篇設定,利用QEMU執行Ubuntu,且連上網路。下載完Linux Kernel後,就可以準備來進行編譯Linux的Kernel了。細節可以參考這篇http://linux.vbird.org/linux_basic/0540kernel.php,目標是Ubuntu 12.04採用3.2版Kernel改成3.5版的Kernel。

查詢目前Kernel版本
\>uname -r

2014/02/20

[Linux] Ubuntu12.04下利用 QEMU + chroot來編譯 Linux Kernel

為了避免在編譯Linux Kernel的錯誤,把原本的Linux OS損壞。可以採用在原本的Linux中使用QEMU的Guset OS的Linux的環境來編譯Kernel,這樣就可以避免修改到原本的OS系統,細節可以參考這篇文章

不過照著教學的步驟,使用Ubuntu 12.04來設定QEMU和編譯可能會遇到一些問題,像是一開始安裝QEMU和KVM之後
$ sudo apt-get install qemu qemu-kvm
會發現其實在Ubuntu 12.04找不到qemu的指令

2014/02/13

[Android] 用WifiManager來get wifi的SSID, power level和所使用的channel基本資訊

***2017/01/06更新***
請參考 [Android] WifiManager for Android M or later
******

在行動裝置上最常用到的莫過於是網路了,其中因為Wi-Fi在很多政府機關、公共場所都是免費可使用的,因此Wi-Fi應該算得上是在行動裝置中很重要的一部分。

Android本身有提供WifiInfoWifiManager兩個類別提供我們來使用及控制Wi-Fi,除了可以開啟、關閉Wi-Fi之外,也可以取得目前的位置有哪些Wi-Fi網路存在、訊號強度如何,所使用的頻帶有否跟其他Wi-Fi網路重疊,也可以取得目前連線的Wi-Fi IP資訊、速度等資訊。

以下利用WifiInfo和WifiManager類別簡單的開發一個查詢目前周遭有哪些Wi-Fi網路,取得服務設定的識別碼(Service Set Identifie, SSID),並且回報最強的訊號是哪一個SSID,所使用的是哪個頻段(2.4G/5G)等等。

2014/01/16

[Android] Android Virtual Device path 設定

隨著Android版本越出越新,但其實還是有大多手機使用者是使用舊版Android,所以開發程式的時候就得載很多版本的Android來測試。

但偏偏Eclipse預設存在C槽,假設空間不夠大的話常常就會爆掉了。所以可以修改增加系統變數ANDROID_SDK_HOME,再把Eclipse重開就可以看到Android Virtual Device的路徑變成自己所設定的位置了。

設定新增系統變數 我的電腦->按右鍵->內容->進階系統設定->進階->環境變數->新增系統變數

[VirtualBox] Ubuntu Waiting for network configuration

工程師換新電腦最麻煩的事情就是要重架環境,假設不想重架可以直接用VirtualBox來開啟虛擬作業系統的vdi檔案,就可以直接執行了。

不過網路的設定上卻遇到了"Waiting for network configuration"的問題,Google了一下要做以下的設定修正

2014/01/11

[Java] 使用DatagramSocket類別來撰寫UDP網路程式

除了TCP之外,另外一種網路連線方式就是透過UDP。與TCP相較之下,UDP因為不需要連線,也沒有麻煩的重傳等機制,雖然在可靠度上不如TCP,但對於不要求每個byte都不能損失的資料型態,像是影音串流,就適合用UDP來傳送。

最有名的UDP程式的例子,非DNS(Domain Name Server)莫屬了,假設每個電腦要詢問網址的主機IP位址都要透過TCP建連線的話,在資源使用上是很浪費的,而且IP位址的封包資料並沒有很大,因此就很適合利用UDP來實作。

2013/12/16

[Java] Web Server撰寫

網路的連線可以分成TCP以及UDP連線,TCP是連線導向且為可靠式,傳送上以每個byte為單位,有重傳機制確保資料可以正確地送到目的IP位址,適合用在傳輸文字、各種檔案、HTTP網路連線等這種不能損失封包的資料上,缺點是較無效率;而UDP則是非連線導向且為不可靠式,傳送上以每個packet為單位,因為不保證資料都能夠送達目的地,沒有重傳機制,速度較快,適合用在傳輸影音串流上,缺點是封包會有損失。

網路的連線可以從Physical layer -> Data Link layer -> Network layer -> Transport layer -> Application layer來探討,舉HTTP這個在user上的application為例子,是透過網路連線,經過電腦的MAC和IP位址,還有IP port number 80,最後透過HTTP的protocol來連線溝通。

2013/12/10

[Android] Bundle Error: java.lang.NullPointerException

使用Eclipse編寫Android程式,撰寫兩個Activity以上之間的切換,常常Activity之間會需要有資料的傳遞,就必須要透過Intent()及Bundle()來完成。

Android的資料傳遞架構如下

2013/12/09

[網際網路] 乙太網路封包格式(MAC Frame Format)

Ethernet (802.3 MAC frame format)

在網路傳輸資料是透過所謂的封包來傳送,封包內包含了目的及來源的MAC位址、IP和Port,才能夠讓資料正確的傳送到目的地。不過整個電腦的網路是利用各種網路拓樸連結在一起,有時候封包間會發生碰撞的問題,可以想像成在單行道上,兩台車都要通過,就會造成堵塞的現象。因此透過CSMA/CD(Carrier Sense Multiple Access with Collision, IEEE 802.3)的設計,訂定出了網路的封包大小最小為64bytes;最大為1518bytes,來避免封包碰撞的現象。

TCP/IP封包為例子,扣掉MAC位址及一些辨識碼[6(DA)+6(SA)+2(Ether type)+4(FCS)=18bytes],因此IP封包的大小為46~1500bytes,所以也常常會看到人家說網路的MTU1500bytes,就是這麼來的。

2013/12/05

[Linux] 常用指令:chmod

在執行Linux的執行檔時,有時候會發現並不能執行,這是因為目前的使用者沒有這個權限。
權限的概念在Linux中很常使用,有分為 user / group / other三種,根據不同的使用者狀態,就會有不同的檔案使用權限( read / write / execute ) 。

要改變使用權限就要使用chmod指令
chmod [options] mode file

-R recursive, i.e. include objects in subdirectories

-rwx 421

[Linux] 常用指令:grep

除了find之外,還有一個類似的指令是grep,這指令主要用來搜尋檔案裡相關的程式碼結果,在trace code的時候都非常的好用。

用法:
grep [-acinv] [--color=auto] 'find things' filename

-d, --directories=ACTION  how to handle directories;
-R, -r, --recursive       equivalent to --directories=recurse
-n, --line-number         print line number with output lines