安裝最新的 ubuntu 13.04 會有內建的ftp 但是 為啥用ipv6的位址 卻一直出現 ftp: connect: Invalid argument ????? 用ping6 位址也是一樣出現 connect: Invalid argument 但是用ping6 -I eth0 綁定interface (網卡) 就成功了 直覺ftp 應該也是這樣 所以參考了這篇 IPv6: connect() always fail with errno 22 只要再加上ftp ipv6_addr%eth0 就可以連上啦 另外 ubuntu 內建ftp souce code netkit-ftp_0.17.orig.tar.gz patch:

jpsix 發表在 痞客邦 留言(1) 人氣()

1. 下載 https://fedorahosted.org/releases/e/l/elfutils/ 2. 解壓 tar -jxvf elfutils-0.155.tar.bz2 3. 指令: aclocal autoheader autoconf automake --add-missing 碰到一些問題 libdwfl/Makefile.am:73: ZLIB does not appear in AM_CONDITIONAL libdwfl/Makefile.am:76: BZLIB does not appear in AM_CONDITIONAL libdwfl/Makefile.am:79: LZMA does not appear in AM_CONDITIONAL 解決: autoreconf -f -i automake --add-missing 4. 組態 ./configure --host=arm-none-linux-gnueabi --prefix=<絕對安裝路徑> 5. 修改Makefile vim Makefile remove libcpu 6. 修改 backends/Makefile vim backends/Makefile 因為是arm 所以只留libebl_arm_pic.a libebl_pic = libebl_arm_pic.a 7. make make install 完成! 參考: https://sites.google.com/site/hhmasterthesis/project-updates/2012-06-02

jpsix 發表在 痞客邦 留言(1) 人氣()

1. download source code
http://www.tcpdump.org/

選左手邊的Latest Release
下載
tcpdump-4.3.0.tar.gz
libpcap-1.3.0.tar.gz

2. 編譯 libpcap
建立安裝目錄
mkdir install
解壓縮
tar -zxvf libpcap-1.3.0.tar.gz
cd libpcap-1.3.0/
配置:交叉編譯器及安裝目錄 (要絕對路徑)
./configure --host=arm-none-linux-gnueabi --prefix=/install
碰到錯誤:
configure: error: pcap type not determined when cross-compiling; use --with-pcap=...
加入--with-pcap=linux 再一次
./configure --host=arm-none-linux-gnueabi --prefix=/install --with-pcap=linux
配置成功!
編譯:
make
make install

會把相關動態連結資料檔都放在install目錄裡

接續:

你可以把這些libs copy到你的交叉編譯器lib的目錄 和rootfs/lib (可能需要root權限)

查看交叉編譯器位置

jpsix 發表在 痞客邦 留言(0) 人氣()

1. 下載source code ftp://ftp.netperf.org/netperf/ 2. 解壓 tar -jxvf netperf-2.6.0.tar.bz2 3. 設定 cd netperf-2.6.0 ./configure --host arm CC=arm-none-linux-gnueabi-gcc --config-cache 4. 訂正錯誤 錯誤訊息: configure: error: cannot check setpgrp when cross compiling 訂正方法: echo "ac_cv_func_setpgrp_void=yes" > config.cache 5. 再設定一次 ./configure --host arm CC=arm-none-linux-gnueabi-gcc --config-cache 6. 編譯 make 7. 執行檔 位於 src/ netperf netserver 完成!

jpsix 發表在 痞客邦 留言(0) 人氣()

1. 為什麼要用postgresql? http://sitig.blog.ithome.com.tw/post/3842/137072 2. 搞了一會兒,終於弄懂他的邏輯 sudo apt-get install postgresql (用套件安裝) 照理來說 套件安裝後 會自動在linux建立一個新帳號 "postgres" 密碼預設應該是空白的 如果真的登入不進去 就先繞去root吧 sudo -i su - postgres 為了日後方便 還是給此帳號自己的密碼吧! 再來我就傻傻的建立資料庫 createdb test_db 就得到 dropdb: could not connect to database postgres: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"? 這樣的error訊息 其實他代表server還沒有跑起來!! 請這樣做 mkdir data (你要放資料庫的地方) cd data /usr/lib/postgresql/8.4/bin/initdb ./ 然後他會印出兩種方法start db server Success. You can now start the database server using: /usr/lib/postgresql/8.4/bin/postgres -D . or /usr/lib/postgresql/8.4/bin/pg_ctl -D . -l logfile start server run起來後 createdb 就可以用了 其他教學: http://twpug.net/docs/postgresql-doc-8.0-zh_TW/tutorial-createdb.html 再來研究囉~

jpsix 發表在 痞客邦 留言(0) 人氣()

http://kerneltrap.org/node/2067

這篇說的

最大的原因是C++ compiler不夠可靠

還有其他原因

自己看吧~XD

jpsix 發表在 痞客邦 留言(0) 人氣()

有些網卡會加入checksum offload的機制

所謂的checksum offlaod 就是讓硬體自己算完checksum後再加入packet中

像是IP header 的checksum, TCP/UDP的checksum 就看網卡硬體本身有實作哪些checksum的機制

在linux中 也有加入這些功能喔

再寫網卡driver的時候 linux net_device 的資料結構中 有features這個欄位

jpsix 發表在 痞客邦 留言(0) 人氣()

安裝好gitweb以後 其實它的原理就是利用gitweb.cgi 去把你的source code用網頁的方式顯示出來 在每一個project裡加入cloneurl的檔案 在網頁中就可以顯示出下載的command git clone http://xxx.xxx.xxx.xxx/ 如果你前面的路徑都一樣 後面只有project名稱不同 又不想要每個project都去加入cloneurl 那就只好對gitweb.cgi做點小手腳 在gitweb.cgi裡 搜尋 git_get_project_url_list 底下有一個foreach的迴圈 這裡是去parse cloneurl的地方 再這個迴圈底下 加入 my $PREFIX = "http://127.0.0.1/" #這一行是一樣路徑定義的地方 my $git_url = "git clone $PREFIX$project" #這一行是要秀在網頁的路徑 print format_repo_url($url_tag, $git_url); #最後把它印到網頁上 這樣既使你的project目錄裡沒有cloneurl這個檔案 也會產生對應的下載路徑的指令 很方便吧~

jpsix 發表在 痞客邦 留言(0) 人氣()

作者獲得2008的諾貝爾經濟學獎
但是這本書卻看不到任何的經濟學公式
反而是在書的前面
用了一個國會照顧兒童戶助會的故事
去說明現在資本主義裡
貨幣的運作方式
非常的淺顯易懂
所述說的幾個金融危機
都是發生在近代的
但沒有到1930年代 美國經濟大蕭條這麼的遠
從墨西哥 阿根廷的龍舌蘭酒危機開始說起
日本失落的十年
亞洲金融風暴
到2008的金融海嘯 雷曼兄弟的倒閉
每一個事件的前因後果都交代得很清楚
但是文字卻不艱深

歷史一再的重演
景氣不斷的循環
你可以像是閱讀歷史故事一樣
慢慢的品嘗過去經濟的錯誤
用簡單的觀念
就可以了解金融危機的成因
是本不可多得的好書

Reference1. 面對失靈的年代:克魯曼談金融海嘯

jpsix 發表在 痞客邦 留言(1) 人氣()

linux kernel中
memory可以分成3種類型的ZONE
1. ZONE_DMA: 有些Device需要用DMA (direct memory access) 用途的memory
2. ZONE_NORMAL: 一般memory
3. ZONE_HIGHMEM: high memory, 不是永久都會是kernel space address的那些memory

在linux kernel中allocate page or memory的function
1. struct page * alloc_pages(gfp_t gfp_mask, unsigned int order)
gfp_mask 待會再說 先感受一下page要怎樣allocate
要注意的是,這裡的order指的是 2^order (1 << order)
例如
page = alloc_pages(GFP_KERNEL, 2);
要的是4個page
另 page_address(struct page *page) 可以回傳page的logical address

2. unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)
這個function的動作和alloc_pages()一樣,只是他是直接回傳page的logical address

3. struct page * alloc_page(gfp_t gfp_mask)
等同於
alloc_pages(gfp_mask, 0);

4. unsigned long __get_free_page(gfp_t gfp_mask)
等同於
__get_free_pages(gfp_mask, 0);

5. unsigned long get_zeroed_page(unsigned int gfp_mask)
這個function比較特別,回傳的是page 的logical address
但是內容已經被清為0

注意 以上function回傳的都是連續的physical space (連續的physical pages)!!

對應的free functions
void __free_pages(struct page *page, unsigned int order)
void free_pages(unsigned long addr, unsigned int order)
void free_page(unsigned long addr)

記住!
在alloc memory的時候必須加入錯誤偵測
因為並不一定每一次alloc memory 都會成功
sample code.
unsigned long page;
page = __get_free_pages(GFP_KERNEL, 3)
if (!page) {
/* 記憶體不足 */
return -ENOMEM;
}

/* 不需要用 請記得釋放它 */
free_pages(page, 3)

以上所說 都為page為單位
以下是以byte為單位
1. void * kmalloc(size_t size, gfp_t flags);
void kfree(const void *ptr);
回傳一個連續的physical space
Sample code.
struct dog *p;
p = kmalloc(sizeof(struct dog), GFP_KERNEL);
if (!p)
/* handling error... */
kfree(p);

很明顯的 這個function所回傳的資料
最小一定會比size大 這是因為kernel的最底層
會是以page為單位allocate
所以回傳的大小會是page size的倍數
注意!!
不用要kfree()去釋放不是由kmalloc()所配置的memory

剛剛用了這麼多gfp_mask
現在深入的談談gfp_mask 有哪些flag 和 要怎麼用
是可以分成action modifier, zone modifier, 和type flag
不過一般來說只會用到type flag
type flag是由action modifier和zone modifier組成
但是在這裡只會紀錄常用的type flag

Type Flags
1. GFP_ATOMIC
一看見atomic 然後去查字典 會發現是原子的意思
原子跟kernel 有甚麼關係 ??
其實應該是取他不可分割的意思
意思就是這個動作不會被中斷 一次做到完的意思
在alloc memory的時候 為了要回收memory可能會reschedule
會造成這個process sleep
所以這個flag就是確保在allocate memory的時候不會做以上的動作
這個特性 就是要用在
interrupt handles 之類,不能sleep的routine中

2. GFP_KERNEL
可以進入sleep,最常用的應該就是這個flag
如果沒有特殊需求 用這個就對了

3. GFP_NOIO, GFP_NOFS
NOIO 沒有初始化disk I/O
NOFS 沒有初始化filesystem I/O
為什麼需要用??
I/O只有一個
假設沒有使用這些flag
第一個allocator 配置memory 做了I/O的操作
另一個allocator 配置memory的時候也做了I/O的動作
allocator必需確認沒有人在使用I/O
會造成deadlock

4. GFP_DMA
通常使用在device drivers 而且和GFP_ATOMIC 或 GFP_KERNEL
其中之一連用

以下是一些情況和對應的flags
-------------------------------------------------------------
情況 flags
process context, can sleep            Use GFP_KERNEL
process context, cannot sleep       Use GFP_ATOMIC
interrupt handler                           Use GFP_ATOMIC
softirq                                            Use GFP_ATOMIC
tasklet                                           Use GFP_ATOMIC
need DMA memory, can sleep        Use (GFP_DMA | GFP_KERNEL)
need DMA memory, cannot sleep   Use (GFP_DMA | GFP_ATOMIC)

另外 virtual address的配置是使用
vmalloc vfree
vmalloc()只保證回傳連續的virtual pages
在virtual address 是連續的!
在kernel中為了效能
通常都會使用kmalloc

Reference

1. Linux Kernel Development 3rd-博客來

2. Linux Kernel Development 3rd-天瓏

jpsix 發表在 痞客邦 留言(0) 人氣()

紀錄一些寫code的時候最佳化的技巧 (主要是由Cortex-A Series Programmer's Guide看來的)
著重於souce code optimization方面,而不是演算法方面
當然有一個好的演算法能夠大大增加效能
因此在討論optimization方面
演算法是首先考慮的問題
再去追求code方面的optimization

1. Function inlining
call function會有overhead, 例如
必須把回傳值存起來、push 暫存器到stack、把參數存到暫存器...
所以如果這個function做的事情很少 (可能只有幾個指令)
但是又被呼叫很多次,就會造成效能無謂的浪費
function inlining 的作法就是複製一份function的原始碼到
程式裡面用到這個function的地方,取代掉function call的方式 (push stack)
(一般來說,把function宣告成inline,然後compiler會做複製的動作)
這樣最後呈現的組語就不會有call function這一段描述
但是缺點就是,因為他是複製一份function裡的source code,
所以會增加code size

那最好在那裡用inline functions呢?
a. 如果這個function只在一個地方被用到
b. 呼叫這個function的指令比真正function內執行的指令還多


哪裡不適合用?
a. functions that are intended to be patched
b. common library functions that are separate from the main codebase

-----
這兩點至於是為什麼? 我也不清楚 Orz
之後如果有解 在跟大家分享 或是有強者可以為大家解惑~

2. Eliminating common sub-expressions
盡量重複使用已經計算好的結果
例如


i = a + b + c;
j = a + b + d;


compiler 出來的code


t = a + b;
i = t + c;
j = t + d;



3. Loop unrolling
每跑一個迴圈,就必須檢查終止條件,會造成branch instruction的產生
會多花幾個cycle

jpsix 發表在 痞客邦 留言(0) 人氣()

外觀

由於之前種在辦公桌上的虎尾蘭
疑似澆太多水
葉子整個爛掉 死掉了@@
花盆空空的 擺了好一陣子
番薯米不知道去哪拿來的迎風草種子
想說就來種種看吧 希望能給辦公環境帶來生氣囉

 
外觀是一個圓盒子
上面打了消費看標章的圖案+gov的網址
有空可以去看看

    
內容物為一包種子和一包土 和一張簡單的栽培流程

   
地瓜粥照著栽培流程照做後 完成品

約5~15天會發芽
讓我拭目以待 希望會栽種成功!

參考資料
1. 環保署綠色生活資訊網

2. 類似商品1

jpsix 發表在 痞客邦 留言(0) 人氣()

1 2 3 4 5
Blog Stats
⚠️

成人內容提醒

本部落格內容僅限年滿十八歲者瀏覽。
若您未滿十八歲,請立即離開。

已滿十八歲者,亦請勿將內容提供給未成年人士。