Wednesday, June 30, 2010

S3C2440 - Kernel - Build Code

最近再用skyeye, 這是一套可以 simulate S3C2440 的 simulator. 之前是用 skyeye-1.26, 後來才發現沒有支援 S3C2440, 雖然可以成功在上面跑, 但是沒有辦法掛上flash. 只好 upgrade 到 skyeye-1.30.

可是我始終build 不起來這個版本, 也困擾了好幾個晚上在這邊. 索性找找找, 找到要在 aclocal.m4 做一些修正, 其實是增加幾個定義, e.g. PKG_PROG_PKG_CONFIG ... etc.

於是本篇就來介紹另外一種更方面於 makefile 的 build code 方法.

傳統 build code 都要寫上一堆複雜的 makefile, 而且要 follow rule. 但是這種方法碰到大 project 會很麻煩. 於是在 linux 上有了一些工具可以輔助開發. e.g. Autoscan, aclocal, autoconf, automake

至於使用方法以下是轉錄下面的網站:
Automake 所產生的 Makefile 除了可以做到程式的編譯和連結,也已經把如何產生程式檔(如 manual page, info 檔及 dvi 檔) 的動作,還有把原始程式包裝起來以供散 的動作都考慮進去了,所以原始程式所存放的目錄架構最好符合 GNU 的標準慣例,接下來我拿hello.c 來做為例子。

在工作目錄下建立一個新的子目錄 ``devel'',再在 devel 下建立一個``hello'' 的子目錄,這個目錄將作為我們存放 hello 這個程式及其相關檔案的地方:

% mkdir devel
% cd devel
% mkdir hello
% cd hello

用編輯器寫個 hello.c 檔,
#include stdio.h
int main(int argc, char** argv)
{
printf(``Hello, GNU! '');
return 0;
}

接下來就要用 Autoconf 及 Automake 來幫我們產生 Makefile 檔了,

1. 用 autoscan 產生一個 configure.in 的雛型,執行 autoscan 後會產生一個configure.scan 的檔案,我們可以用它做為configure.in檔的藍本。

% autoscan
% ls
configure.scan hello.c

2. 編輯 configure.scan 檔,如下所示,並且把它的檔名改成configure.in
dnl Process this file with autoconf to produce a con figure script.
AC_INIT(hello.c)
AM_INIT_AUTOMAKE(hello, 1.0)
dnl Checks for programs.
AC_PROG_CC
dnl Checks for libraries.
dnl Checks for header files.
dnl Checks for typedefs, structures, and compiler ch aracteristics.
dnl Checks for library functions.
AC_OUTPUT(Makefile)

3. 執行 aclocal 和 autoconf ,分別會產生 aclocal.m4 及 configure 兩個檔案
% aclocal
% autoconf
% ls
aclocal.m4 configure configure.in hello.c

4. 編輯 Makefile.am 檔,內容如下
AUTOMAKE_OPTIONS= foreign
bin_PROGRAMS= hello
hello_SOURCES= hello.c

5. 執行 automake --add-missing ,Automake 會根據 Makefile.am 檔產生一些檔案,包含最重要的 Makefile.in
% automake --add-missing
automake: configure.in: installing `./install-sh'
automake: configure.in: installing `./mkinstalldirs'
automake: configure.in: installing `./missing'

6. 最後執行 ./configure ,
% ./configure
creating cache ./config.cache
checking for a BSD compatible install... /usr/bin/in stall -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal... found
checking for working autoconf... found
checking for working automake... found
checking for working autoheader... found
checking for working makeinfo... found
checking for gcc... gcc
checking whether the C compiler (gcc ) works... yes
checking whether the C compiler (gcc ) is a cross-co mpiler... no
checking whether we are using GNU C... yes
checking whether gcc accepts -g... yes
updating cache ./config.cache
creating ./config.status
creating Makefile

現在你的目錄下已經產生了一個 Makefile 檔,下個 ``make'' 指令就可以開始編譯 hello.c 成執行檔,執行 ./hello 和 GNU 打聲招呼吧!

% make
gcc -DPACKAGE="hello" -DVERSION="1.0" -I. -I. -g -O2 -c he llo.c
gcc -g -O2 -o hello hello.o
% ./hello
Hello! GNU!


轉自以下這篇文章

Bali 照片

晚上花一點時間整理一下 bali 的地圖囉. 大家就看看圖吧.

下面這張是第一間 SPA 附近的圖片, 他其實是一條街道, 有市集喔. 只是不知道距離 Bali Rich Villa 有多遠. 看起來是在街尾 ...



因為第一間住宿圖片太少, 所以重點就在第二間啦. 以下是 Novotel Bali Benoa 附近的 SuperMarket 喔. 應該可以去那買東西到海邊享受日光浴啦.


這應該就是大門了, 果然有 bali 的風格.

下面這張是海邊附近拍的. 很漂亮吧.



以下這張是 ?? 這是 SPA 附近的地點啦, 因為 Natalie SPA 真的離住宿有點遠, 有人說有專車接送, 這倒是要問一下囉. 不過做完應該可以去那附近吃吃喝喝阿 .......



SPA 就某人可以開始挑囉. Natalie SPA 可以做 special package ? 網路上看到還滿推薦的.



Monday, June 21, 2010

八月出國計畫

八月要去巴里島, 新加坡以及吉隆坡. 第一次這樣大工程一次去三個國家, 雖然吉隆坡我去過可以省一點時間. 不過看起來還是有很多功課要做, 而這些功課都要在毛離開澳洲前做完. 這樣他才可以立即加入, 另外一個是因為暑假到啦, 所以有很多東西都漲價了.

目前機票定囉, Bali 房間也訂好了, SIN 房間也訂好了, KUL 的還沒, 預計是這週會定. 我的第一天行程也快排好囉, 因為要去吃好吃的早餐和有名的海南雞飯. 我可是努力找資料喔. 這個時候也順便排新加坡行程啦. Bali 的 SPA 也找了兩間, 還有一間還要再找.

目前還有要帶的預備金要整理出來, 吉隆坡交通問題也要整理出來. Bali 的木雕貓也要找, 新加坡就應該好一點了, 有毛導遊在, Ok 啦. 不過我也會 list 一些資料.

八月, 我來啦. 人生的大突破.


Sunday, June 20, 2010

溜冰初體驗

下午莫名其妙接到一通電話, 原來是綠豆男打來了, 原本正在整理新加坡行程的我就這樣被中斷了. 原來他是要找我去溜冰啦. 我還確認了好幾次安全阿, 要帶什麼, 多少錢之類的. 最後考慮了 10 分鐘還是答應去了, 反正初體驗就看看吧.

我們是去小巨蛋溜冰場, 一進去跟著指標就看到溜冰場了, 不過先有一家借用器材的店, 因為在這邊似乎比較便宜, 主要是我們有戴手套去, 事後證明手套是很重要, 後面會解釋. 在量了腳型之後 ( 我和綠豆男都是 9 號 ), 試戴了一下還 ok 就提著溜冰鞋和護具以及一頂帽子就上二樓了.

這種炎熱夏天很多人都來囉, 所以要排隊買票. 也看到小朋友也有過來. 買好票之後我們就進去溜冰場了. 這裡建議去這種地方別帶太貴重東西, 因為找地方放會怕小偷, 如果放置物櫃又要收費. 找個好地方放之後, 就開始穿溜冰鞋了, 是有滑刀那種的. 調整好久才穿, 不過我的左腳被綠豆男用有一點緊 ( 這是後來在溜的時候才發覺到的 ). 所以這裡建議調到自己喜歡的就好.

因為我還是希望安全一點, 護具我都戴了, 膝蓋的手肘的都有, 因為我可不想出國前受傷阿. 可是綠豆男沒穿那些東西就下去了. ( 這邊提醒帽子和手套是一定要帶的 ) 我們兩個人就這樣慢慢走下去. 再跨到門前的那一剎那, 天阿, 我要進去囉.

第一腳進去, 不會吧. 超滑的. 第二腳進去, 我快滑倒了, 欄杆欄杆在那邊. 什麼 ? 完全沒有欄杆, 連邊邊可以摸的地方都幾乎沒有. 阿哩勒 .... 這大概是要保護在高速會衝撞到而受傷吧. 我只好沿著邊邊一直走, 結果沒有想到走沒幾步就捐出了我的第一次摔倒. 然後我還走錯邊, 另外一邊是新人練習區. 我只好硬著頭皮給他走一圈.

好不容易慢慢走回新人練習區 了, 結果綠豆男根本就不是第一次溜, 看到超順還會練習轉身 .... 我只好慢慢學習. 第一步是要學習站立, 根據小朋友說法是原地踏步, 因為要保持重心. 白話一點就是要學走路不會摔倒啦. 前面幾圈我都只是沿著牆壁慢慢走慢慢走, 因為我根本不知道他何時會前進何時會煞車. 當然我又摔了 ............. 我還很努力的和旁邊也是第一次進來的路人說要一起加油阿.

走了兩三圈之後我有找到一點點的平衡感這種東西, 也大概知道該怎麼煞車了. 不過我發現左腳有點太緊, 我只好找個地方休息一下, 順便調整我的左腳. 調整到差不多之後我又開始上路了. 這次有嘗試不摸牆壁慢慢走幾圈, 這次終於有好一點了, 的確有小朋友在笑我在原地走路, 沒辦法, 我的確需要學習 ......

這次終於有好一點點了, 接著我嘗試慢慢滑動, 奇怪, 怎麼不動. 在嘗試看看, 還是不動. 問了綠豆男, 他說煞車是要內八, 滑動是外八. 我還是努力中, 結果又摔了 ........ 這次摔了之後我發現我手有點痛, 因為摔倒第一個都會用手去撐地, 可是當時全身力量都在手上, 再加上地上是冰, 冰可是很痛, 因此這個時候真的要說跌倒最好用護具去頂, 別祇用手而已.

後來我都只是在新人區練習中, 練習前進不摔倒, 練習努力向前. 我還跑去問服務人員, 結果他跟我說重心要往前就會前進了. 這不是廢話嗎, 重點是起步要怎麼作才會順. 綠豆男也是有和我說, 不過他有示範一下, 可是我有看沒有懂. 最後只好自己邊看別人自己學了.

這個時候真的要說, OX 的服務人員. 對女生就特別 ok, 還手牽手教學ㄟ. 男生就不能牽手教學阿. 真的是差別待遇. 不過後來有碰到媽媽帶小朋友來, 媽媽應該是以前常常來或是教練. 小朋友是第一次進來, 當然也是和我一樣超級不穩狀態, 媽媽也是有點身疏吧. 還有看到應該是大學生穿畢業制服進來, 不過沒看到很久就消失了, 應該是不穩狀態摔了很慘就閃了.

我到後來已經可以不用摸牆繞外圍了, 雖然感覺是幾乎用走的, 還沒有辦法到正常速度前進, 不過至少比剛開始摔摔摔好多了. 最後當我要去外面休息時, 我再門口又摔一次 ..... 這是進來摔出去也要摔是吧. 綠豆男也有摔, 不過他摔是整個身體趴地頂住, 看他也摔不少次.

回到休息地方發現我帶的水倒了 ? 而且是從包包裡面就倒了, 我的鞋整個都是水, 而且是一雙鞋都是水, 超慘.

事後和綠豆男說這種初體驗, 一次就夠了. 多虧這個溜冰初體驗, 我運動超多, 流好多汗, 感冒也有好一點了.

Never, 下次絕對不去了. 綠豆男轉行去當奧運選手啦.

Thursday, June 17, 2010

回應

這篇是要回應給某人的. 我有收到你的照顧, 這幾年一直都是你給我很多加油, 我才可以努力走到這一步. 因為我總是想到如果我不努力, 我就給你更好的生活, 因此我必須要更加努力.

結婚是兩個人和兩個家族的事情. 生小孩則是我們要負責的事情, 為了妳和小孩我會努力存未來的基金. 我也收到你的擔心和擔憂, 可是我願意和你一起背負這些責任.

結婚也是需要一種勇氣, 因為總是想這個想那個就會退卻. 可是不想也不行. 因此只有做好準備之後, 然後就一股腦做下去.


Wednesday, June 16, 2010

S3C2440 - Kernel - Start Kernel -1

上一篇介紹了在 Start Kernel 的幾個步驟, 這邊會詳細介紹每個步驟的目的.

(1) lock_kernel();
第一件要做的事情就是先 lock kernel.
static inline void lock_kernel(void)
{
if (!++current->lock_depth) // task_struct /include/linux/sched.h, initialized by fork.c
spin_lock(&kernel_flag);
}
current = get_current( ) , 也就是取得目前 process 的 task_struct*

kernel_flag 是一個 kernel local spin lock. 所有的 process 獲得這個 kernel local spin lock 才可以存取 kernel resource.

process 的 lock_depth 初始值是 -1. 在 fork.c 中設置. 當 lock_depth >= 0 時候, process 才可以得到 kernel local spin lock.

在 kernel 有很多種方法可以作為 kernel control path 的 synchronous. Kernel control path 可以當成是一連串的執行命令. Spin lock 是最常使用到的, 而且也適用於 all cpu.

(2) Print linux version
printk(linux_banner); // Linux version 2.4.18-rmk7-pxa1 (harlan@harlan) (gcc version 2.95.3 20010315 (release)) #13 日 6月 3 08:02:23 CST 2007

這其實是列印 linux version. 至於 printk 內容就請自己去看了.


Sunday, June 13, 2010

S3C2440 - Kernel - Start Kernel

這個 head-armv.S 檔案主要是介紹從 assembly 跳到 C code. 當然裡面有做很多事情就不介紹啦. 最重要的當然是已下這個指令: b SYMBOL_NAME(start_kernel). 也就是跳到 main.c 的 stark_kernel function 囉.

再 stark_kernel 列出一堆要做的事情. 仔細看看還真不少阿. 包含以下幾項:
  1. lock_kernel();
  2. setup_arch(&command_line);
  3. parse_options(command_line);
  4. trap_init();
  5. init_IRQ();
  6. sched_init();
  7. softirq_init();
  8. time_init();
  9. console_init();
  10. init_modules();
  11. allocate boot memory
  12. kmem_cache_init();
  13. sti();
  14. calibrate_delay();
  15. mem_init();
  16. kmem_cache_sizes_init();
  17. pgtable_cache_init();
  18. fork_init(mempages);
  19. proc_caches_init();
  20. vfs_caches_init(mempages);
  21. buffer_init(mempages);
  22. page_cache_init(mempages);
  23. signals_init();
  24. proc_root_init();
  25. smp_init();
  26. rest_init();

別看我只是複製貼上一堆, 其實每一項目都包含一堆有的沒的工作. 要好好搞清楚這些是做什麼事情, 才能更深入了解一套 OS.

Saturday, June 12, 2010

一日

早上睡到自然醒, 忙碌了一星期, 終於有機會可以睡到飽飽飽. 於是今天把老姊的電腦搬了起來修理. 原來 acer 的機殼有夠難拆, 我拿了鐵鎚, 潤滑油, 再經過一個多小時的折磨, 我終於把那難拆的機殼拆了. 換上硬碟之後終於修好啦.

下午我又偷咪了一下下, 讓後跑去士林夜市剪頭髮. 剪完之後舒服許多. 呼 ..... 涼爽了好多阿.

輕鬆的過一日, 沒有任何工作正是休息的一日.

Friday, June 11, 2010

dream

好累, 又作夢了, 這次做了好多夢. 醒來之後只覺得好像走了好多好多路.

夢到我有個同父異母的兄弟 ? 不知道為何突然在一起. 夢到唱國歌比賽, 我好像是起音的, 結果似乎沒跟上拍子 ? 夢到 ...... 忘記了.

最近的夢特別多.

剩下 63 天. 就可以看到 baby 了. 剩下一個月, baby 就要開始旅行囉. 加油. 我想和 baby 一起過我們的生活. 因為有妳, 我的生活才是彩色的.

Wednesday, June 9, 2010

SIN -> KUL 過境簽證

今天打去簽證處詢問過境簽證的事情. 雖然已經有在網路上做了作業, 不過還是問清楚比較好.

也好加在有問才更明確.

1. 要準備 KUL 回台北的電子機票收據 ( 要列印下來 )
2. SIN 到 KUL 的機票票跟要留著
3. 轉機簽證只能 72 hours. 網路上看到是 5 天說, 詭異.

順便查詢了一下吉隆坡的 twin tower 空橋. 一般都是早上七點就去排囉. AM 8:30 開始發放牌子. 平常只有 200 人次, 早上下午各一班. 這次應該可以去看空橋啦.

另外有在考慮 SIN -> 吉隆坡要做長程火車嗎 ? 可是網路上說火車票很難定, 而且有變數. 我看了一下機票只有 900 TW, 吉隆坡住宿還滿便宜的. so ........... 還是定飛機票吧.

SIN 住宿應該已經押到很低了. 畢竟要找 private room 還是有他的價格.

Bali 那間海邊的正在尋找備案. 全部算一算還滿貴的.

SPA 預備金我放進去囉. 扣掉第一天和最後一天可以做 3 次喔.

SIN 目前想去新加坡環球影城 or 夜間動物園. 我覺得可以去環球影城. 因為 baby 也沒去過, 再加上白天去比較好.

這週會把目前已經好的給 baby . 有些東西我想先定了. ex: SIN 住宿 / 飛機票. 因為暑假也快到了. 應該一窩蜂人潮會出現吧.

baby 你覺得呢 ?






Tuesday, June 8, 2010

意外發現

晚上原本想打電動, 在看看影片之後. 就在努力找資料了. 意外的發現一對小氣鬼的網站. 怎麼和我走的路線有點相似. 不過他很厲害喔. 竟然找到超便宜的機票. 年底我也要搶 asia air 的免費機票阿.

於是我把我的預算表整理一下. 意外發現當然要繞道 Kul 去阿. 便宜許多, 再加上有更多東西可以更清楚囉.

某人快點選 bali 住宿阿. SIN 的住宿我已經在找到幾家不錯的囉. KUL 還在努力發現中.



Sunday, June 6, 2010

刷油漆

婚姻這個辭早就已經是眾所皆知的事情. 這個念頭我從沒想過這個想法. 可是自從認識了毛毛之後, 我開始想著毛毛今天有吃飽嗎 ? 今天有睡飽嗎 ? 出去在外有沒有受傷 ? 會不會被人欺負 ?

漸漸的, 我的生命走進了一位讓我早想晚想都在想的人. 在妳決定要出國的時候, 我為妳高興. 可是我有很多很多的不捨, 我也選擇讓你高高興興的完成夢想. 同事問我不擔心我女友在國外就把我甩了嗎 ? 我也只能苦苦的回說, 到時再說吧. 沒有出遠門去更多地方, 因為那些就會花費更多. 我想留下和毛毛在一起出去.

我愛妳, 愛妳的唸唸唸. 我愛妳, 妳會給我支持給我加油, 在我碰到困難的時候會給我打氣.

我想照顧妳, 和妳一起過我們兩個的生活. 我想讓妳過好的生活, 一起建築我們的房子.

一直遲遲都沒有和妳說, 因為不想給妳更多壓力. 我希望毛毛可以開開心心的在澳洲享受生活.

這也是我的夢想, 再等你踏上台灣這塊土地的夢想. 一起刷我們家油漆的夢想

Tuesday, June 1, 2010

睡不著

睡不著的夜晚. 想起第一次和毛作飛機去馬來西亞, 第一次踏入機場, 坐上飛機時還不知道不能拍照還被警告. 第一次自己一個人搭著華航到雪梨去找毛毛, 在機上要寫什麼資料時我還不知道怎麼寫, 就憑我那好死不死的英文還是把他寫完. 看著通關路口不知道要走那邊, 還好多看幾眼總算看到了出口. 不知道機場大廳不能拍照我還拿像機給他拍了幾張. 出關時第一個想法是想找個地方坐時, 就看到我最熟悉的人給了我一個大驚喜.

人生總是有許多的第一次, 有了這些許許多多的第一次讓我給有勇氣往前. 謝謝你. 毛.