2009年10月25日 星期日
SimpleSDK and Xcode
這是一位12歲大的小男生,在 youtube 上的 Xcode 教學,教你如何使用 Xcode 寫你的 iPhone App,不但口齒清晰,整個流程都很流暢,整體看起來很棒。
從影片中,約略可以知道 SimpleSDK 對 php 及網頁相關的技術似乎還有一點了解。剛開始的時候有些不敢相信,一直覺得這是位女生,仔細端倪後才發現是個非常專業的小朋友。也許是因為 Xcode 的設計還不錯,讓買 Mac 的使用者都可以很方便的加入寫程式的行列,並 publish program。
看到這影片真的是讓我大開眼界,那種震撼的感覺一直到現在都還在。
只能說,自己要努力啊~
參考:
http://blog.simplesdk.com/
http://www.youtube.com/user/SimpleSDK
2009年4月25日 星期六
Ubuntu 9.04 and Grub
最近寫 code 的感覺又會來了,索性在家裝起了ubuntu 9.04-rc1,整體感覺還不錯!
比起以前的 gentoo,FC,似乎親切許多。其實裝 Linux 的原因,只是想寫程式,因為真的太久沒有寫自己好玩的 code,都是被別人叫去玩 code。
加上最近的 Android & iPhone 的 sdk 都陸續的釋出,看起來的成熟度都還不錯,是可以開始寫寫屬於自己的程式了,不然老是在用別人提供的 source code 感覺很沒貢獻度。
因為家中的網路速度過慢,所以每次 apt-get 都很久,看來也要順便更新一下網路。
不過在安裝完後遇到一個小問題,就是 grub 沒辦法開到 xp。花了一點時間思考跟搜尋,知道了問題點。
原本硬碟配置
grub 我安裝在 sdc 的 mbr 上面,然後 BIOS 設定從第三顆硬碟(Linux)開機。開到 grub 後,第三顆硬碟(sdc)變成(hd0),所以第一顆硬碟(sda)變成(hd1),第二顆硬碟(sdb)變成(hd2),如下
進入 grub
但是這時候 bios 的裡面還是:
所以 grub 要去啟動 xp loader(Ntldr) 的時候,Ntldr 就會發現開機碟變成 (hd1) 跟原本 bios 中的設定不同,所以會造成沒辦法載入 XP。要解決這樣的問題,可以用 grub 裡面的 map 指令,將硬碟作虛擬對應。使得loader可以正常載入。
原本的 /boot/grub/menu.lst
這邊就算將 rootnoverify (hd0,0) 改成 rootnoverify (hd1,0)還是沒辦法順利開到 XP。
修改後如下,可正常開啟 XP:
參考資料:
http://www.gnu.org/software/grub/manual/html_node/DOS_002fWindows.html#DOS_002fWindows
比起以前的 gentoo,FC,似乎親切許多。其實裝 Linux 的原因,只是想寫程式,因為真的太久沒有寫自己好玩的 code,都是被別人叫去玩 code。
加上最近的 Android & iPhone 的 sdk 都陸續的釋出,看起來的成熟度都還不錯,是可以開始寫寫屬於自己的程式了,不然老是在用別人提供的 source code 感覺很沒貢獻度。
因為家中的網路速度過慢,所以每次 apt-get 都很久,看來也要順便更新一下網路。
不過在安裝完後遇到一個小問題,就是 grub 沒辦法開到 xp。花了一點時間思考跟搜尋,知道了問題點。
原本硬碟配置
sda(hd0) -> XP (已經安裝很久)
sdb(hd1) -> no OS
sdc(hd2) -> Linux (剛剛安裝完)
grub 我安裝在 sdc 的 mbr 上面,然後 BIOS 設定從第三顆硬碟(Linux)開機。開到 grub 後,第三顆硬碟(sdc)變成(hd0),所以第一顆硬碟(sda)變成(hd1),第二顆硬碟(sdb)變成(hd2),如下
進入 grub
sdc(hd0)
sda(hd1)
sdb(hd2)
但是這時候 bios 的裡面還是:
sda(hd0)
sdb(hd1)
sdc(hd2)
所以 grub 要去啟動 xp loader(Ntldr) 的時候,Ntldr 就會發現開機碟變成 (hd1) 跟原本 bios 中的設定不同,所以會造成沒辦法載入 XP。要解決這樣的問題,可以用 grub 裡面的 map 指令,將硬碟作虛擬對應。使得loader可以正常載入。
原本的 /boot/grub/menu.lst
title Microsoft Windows XP Professional
rootnoverify (hd0,0)
savedefault
chainloader +1
這邊就算將 rootnoverify (hd0,0) 改成 rootnoverify (hd1,0)還是沒辦法順利開到 XP。
修改後如下,可正常開啟 XP:
title Microsoft Windows XP Professional
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd1,0)
savedefault
chainloader +1
參考資料:
http://www.gnu.org/software/grub/manual/html_node/DOS_002fWindows.html#DOS_002fWindows
2008年1月5日 星期六
GNU gcc and ld
由於之前常常使用 makefile 去產生執行檔,但往往很多 makefile 都是從其他已經寫好的範例複製過來的,常常會忘記基本的 gcc 與 ld 的使用,甚至要拿來幫助 debug 的時候都忘記指令要怎麼下了,所以寫下這個筆記,以後要找比較方便。
寫程式有時候想瞭解某部份程式碼是否有問題,但卻礙於當程式編譯後,不知道確切的執行位址,要 debug 的時候就麻煩許多。而這時候最好就是拆解成 asm code 並同時產生 program map file 來尋找相對應的地方。這樣的情況在 embedded system 中更容易遇到,因需要定義哪邊的記憶體位置可以拿來使用,而 program (通常是 startup code)通常會被載入某特定區域,所以會在 linking 時做給予位址的動作,此時會有一個 linker script 來作為 mapping 的依據。 當然這個 script 也是事先寫好的。
參考 test.ld 如下:
用gcc編譯時:
#產生 test.o(object code), test.s(asm code)
會有下列檔案:
#手動連結,產生 t.out 執行檔,產生 test.map(map file),依照 test.ld(linker script),並連結標準函式庫-lc(libc)
這樣就可以完成 debug 所需要的資訊,而如果對看 asm code 覺得吃力,可以在想要看的程式馬前後插入下列程式碼(在 C 中):
這樣就可以明確知道要 debug 的源碼到底位於那一段記憶體區段,甚至可以知道在編譯時最佳化會不會影響到程式的運作。
PS.太久沒寫code,很多東西快忘光了趕快紀錄一下。XD
參考連結:
寫程式有時候想瞭解某部份程式碼是否有問題,但卻礙於當程式編譯後,不知道確切的執行位址,要 debug 的時候就麻煩許多。而這時候最好就是拆解成 asm code 並同時產生 program map file 來尋找相對應的地方。這樣的情況在 embedded system 中更容易遇到,因需要定義哪邊的記憶體位置可以拿來使用,而 program (通常是 startup code)通常會被載入某特定區域,所以會在 linking 時做給予位址的動作,此時會有一個 linker script 來作為 mapping 的依據。 當然這個 script 也是事先寫好的。
參考 test.ld 如下:
ENTRY (main)
MEMORY
{
ram : ORIGIN = 0x00200000, LENGTH = 32M
rom : ORIGIN = 0x60000000, LENGTH = 16M
}
SECTIONS
{
data :
{
_DataStart = . ;
*(.data)
_DataEnd = . ;
} >ram
bss :
{
_BssStart = . ;
*(.bss)
_BssEnd = . ;
} >ram
text :
{
*(.text)
} >ram
}
用gcc編譯時:
#產生 test.o(object code), test.s(asm code)
# gcc -c -S -Wall test.c
會有下列檔案:
test.c
test.o
test.s
#手動連結,產生 t.out 執行檔,產生 test.map(map file),依照 test.ld(linker script),並連結標準函式庫-lc(libc)
# ld -o t.out -Map test.map -T test.ld -lc
這樣就可以完成 debug 所需要的資訊,而如果對看 asm code 覺得吃力,可以在想要看的程式馬前後插入下列程式碼(在 C 中):
__asm__("nop");
...
code...
...
__asm__("nop");
這樣就可以明確知道要 debug 的源碼到底位於那一段記憶體區段,甚至可以知道在編譯時最佳化會不會影響到程式的運作。
PS.太久沒寫code,很多東西快忘光了趕快紀錄一下。XD
參考連結:
訂閱:
文章 (Atom)