星期五, 5月 11, 2007
建立jffs2 root file system
JFFS2 全名是Journalling Flash File System Version 2, 其功能就是在管理MTD裝置上所實作的日誌型檔案系統.
相較於其他Flash儲存方案, JFFS2並沒有提供讓傳統檔案系統也可以使用Flash的轉譯層(translation layer).它只會直接在MTD裝置上實做日誌結構的檔案系統. JFFS2會在mount的時候, 掃瞄MTD裝置的日誌內容, 並在RAM中重新建立檔案系統結構本身.
JFFS2的特性,
1, 其斷電可靠度,.
2, 在MTD裝置上實做耗損平衡(wear leveling). 可以確保flash 上所有的區塊具有一致的使用率, 因此可以平衡每個區塊的損耗程度.
3, 在MTD裝置上實做資料壓縮(data compression). 除了節省空間外, 在使用資料前先將它解壓到RAM上.不過, jffs2不能使用XIP(就地執行eXecute In Place).
4, 有實做垃圾收集(garbage collection). 它可以確保你的應用程式不會成長到到埴滿整個檔案系統.也就是寫入前會先檢查檔案系統的可用空間
如何建立jffs2 root file system.
我們在flash 中規劃了一塊32MB的區塊, 想要建構一個大約有2MB資料, 其他30MB可以自由讀寫的檔案系統.
請注意, 雖然我們在driver裡規劃32MB的flash 區塊, 但是我們如果做了一個2MB的jffs2 root file system image, 燒入flash後,能使用的空間仍然是2MB, 而非32MB, 另外的30MB就浪費掉了.
1,假設我們巳經有一個rootfs的資料夾裡, 巳經放好檔案系統了.
2, 把想要增減的檔案或資料夾, 就從rootfs裡加入或移除.
3,用mkfs.jffs2來製作jffs2的image.(一般全部安裝的linux distribution都會有這個命令)
mkfs.jffs2 -r rootfs -o rootfs.jffs2 -e 0x40000 --pad=0x02000000
(1) -r : 指定我們要做image的來源資料夾.
(2) -o : 指定我們要輸出的image檔案的檔名.
(3) -e : 每一塊要抹除的block size. 預設是64KB. 因為較舊的flash, 其block size會不一樣. 要注意.
(4) --pad : 用16進位來表示所要輸出檔案的大小. 也就是root.jffs2的size. 很重要的是, 為了不浪費flash空間, 這個值最好符合flash driver所規劃的區塊大小.以我們的例子來說, 就是32MB.
4, 不同於一般磁碟檔案系統, 無法使用mount -o loop .....命令在loopback裝置上mount jffs2. 必須從真正的MTD裝置來mount jffs2.不然就要使用jffs2reader來檢視image檔的內容.(註, jffs2reader我沒有成功使用過).
5, 若是使用NFS的話, 可以透過網路遠端mount這個image檔案.
google code prettify
<link href="prettify.css" type="text/css" rel="stylesheet">
<script src="prettify.js" type="text/javascript"></script>
星期四, 5月 10, 2007
星期三, 5月 09, 2007
於Blog中使用程式碼區塊功能
CODE {
display: block;
/* fixes a strange ie margin bug */ font-family: Courier New;
font-size: 8pt;
overflow:auto;
background: #f0f0f0 url(http://klcintw.images.googlepages.com/Code_BG.gif) left top repeat-y;
border: 1px solid #ccc; padding: 10px 10px 10px 21px; max-height:200px;
line-height: 1.2em;
}
在文章中將程式碼置於<code></cdoe>區塊中即可,如:
<code>
.comment-body-author {
margin:0;
padding:0 0 0 20px;
background-color:#C0C0C0;
}</code>
星期二, 5月 08, 2007
安裝mkfs.jffs2
http://www.microtime.com.tw/document/Linux%20for%20Creator-EPXA1%20User%20Guide.pdf#search=%22mkfs.jffs2%22
(1)安裝
cvs -d :pserver:anoncvs@cvs.infradead.org:/home/cvs login(password: anoncvs)
cvs -d :pserver:anoncvs@cvs.infradead.org:/home/cvs co mtd
cvs在目錄下建立mtd的目錄
mtd/util 之中有mkfs.jffs2.c
這檔案為了產生mkfs.jffs2,我們必須編譯......
How to compile?
cd ~/sh-linux/utils/jffs2_utils/
make cleanmake
cp mkfs.jffs /sbin
如果compile過不了,這裡有現成的bin可以下載
http://sources.redhat.com/jffs2/
最後複製到/sbin目錄下
cp /mtd/mkfs.jffs2 /sbin
(2)建立mkfs.jffs2檔案系統
mkfs.jffs2 -r DIR -o jffs2.image
(jffs2.imag是我們要輸出的檔案名稱)
(參數 -r 跟 -d 都是root dir的意思)
# ./mkfs.jffs2 -d /usr/src/linux/fs/jffs2 -o jffs2test.img
爾後我們可以將此image掛載上去
# cp jffs2test.img /dev/mtd0
(3)mount
mount -t jffs2 /dev/mtdblock0 /mnt/xxx
xxx為自行建立的新資料夾
目錄有掛載就要卸載,umount可以卸載
我們可以在裡面讀寫檔案測試
卸載後應該就看不見了
星期五, 5月 04, 2007
Busybox錯誤訊息[applets]
applets/applets.c:20:2: error: #warning Static linking against glibc produces buggy executables
applets/applets.c:21:2: error: #warning (glibc does not cope well with ld --gc-sections).
applets/applets.c:22:2: error: #warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
applets/applets.c:23:2: error: #warning Note that glibc is unsuitable for static linking anyway.
applets/applets.c:24:2: error: #warning If you still want to do it, remove -Wl,--gc-sections
applets/applets.c:25:2: error: #warning from top-level Makefile and remove this warning.
make[1]: *** [applets/applets.o] Error 1
這個警告的定義在applets/applets.c中,將這段警告註釋掉就可以了。這段的意思就是告訴你最好用uclibc編譯,而不用glibc因為glibc比較大,busybox在寸土寸金的內嵌系統中運用比較多,所以會有這樣的要求。編輯 ~/applets/applets.c , 將警告註解掉即可 (第 20-25 行)
...
/*
#if ENABLE_STATIC && defined(__GLIBC__) && !defined(__UCLIBC__)
#warning Static linking against glibc produces buggy executables
#warning (glibc does not cope well with ld --gc-sections).
#warning See sources.redhat.com/bugzilla/show_bug.cgi?id=3400
#warning Note that glibc is unsuitable for static linking anyway.
#warning If you still want to do it, remove -Wl,--gc-sections
#warning from top-level Makefile and remove this warning.
#endif
*/
...
星期六, 4月 28, 2007
星期二, 11月 28, 2006
教導學弟
發現到,如果一下子太多事情要做,一時間做不完,心理總會掛念著。當忙著這件事時,卻又會想起另一件事也還沒做完。
或許頓悟的太慢,或許選錯了廠商,當初有太多太多的時間浪費在錯誤的地方。現在有時回想起來,還真的有點懊悔。那些是真的努力過,但也白費了(傳說中的白努力!?)。說真的,做的東西沒有老師、學長可以問,效率真的差很多。還蠻羨慕小C、可方與勞仔獸那組,有著不錯的資源與輔導。
大四,和不良一樣,為了專題辭掉打工。為了專題也翹了很多重要的課,也因如此那些課的成績並沒有達到自己的理想。感覺已為專題犧牲了好多好多,一年半了...現在讓我們自私ㄧ下,以三個月來為自己打算,想這不為過吧...但這段時間卻還是個更痛苦的考驗。許多的事壓縮在三個月內,人生的轉戾點也在這三個月之中。希望...希望一切順利!也祝跟我身邊一起努力的同學,可以有好的結果!讓我們一起熬過去!!
11月的太陽、冷風、閃電與颱風
也因為如此,感冒了...身邊的同學一一的感冒,而我也在從台南回高雄的路上,感冒了。雖然感冒,但是不知道為什麼,今天竟然可以撐著睏意,慢慢的看通訊系統,還去輔導程式設計的課程。
另一方面,自己學校的成績單總算收到了,之前沒收到,感覺大家比我還急一樣,天天問候我......的成績。後來發現我把"高雄市楠梓區"寫成了"高雄縣楠梓區"。難怪這麼久才來,哈哈。
在同學間的成績比較後,發現大概自己是正取了吧。但自己卻也不是很高興,因為必須要在23號決定是否放棄,但是其他學校卻要等到更後面的時間才知道呢。而如果是備取,可以等到27號再決定,真是好。
同實驗室的,算過了一下,也都正取了。但身邊的一些朋友可就緊張了,大家一直問來問去,深怕自己不是正取那位。但後來我也試著鼓勵他們可以用考的看看,雖然很難,但我們以後還能是同學!不太捨得跟大家分開...
希望他們加油了,也希望接下來的幾間學校也能順利...希望大家往後還能在當兩年(?)同學!
星期二, 11月 21, 2006
唱歌、烤肉、生日
後來當天晚上他找我門去通宵唱歌,於是便在好樂迪為他慶生了。K金就幫忙買了一個蛋糕,在播放康康的生日快樂那首歌時,就拿了進來。而在吃到一半時,不知怎麼了突然砸起蛋糕了!誰知道戰火持續蔓延,全部在場的都受到了波及。哪知在最氣氛最High的時候,鄭國華老師跟景漢還有宗慶以訪客身分出現了!!當下又是一個大戰XD
而今天(11.21)的烤肉,今日還是因為通宵唱歌的關係,睡過頭去準備。由於下午四點還要打工助教的課,一起床便衝衝忙忙,連午餐都沒吃就去鳥仔家準備切菜了。在切完時,由於時間快到,要去上課,便很捨不得的出發了。能夠這樣跟著同學忙著東西,一起分工合作,這感覺真是不錯!往後或許都能夠成為很好的回憶...
在上完課後,也趕著時間,載著泰勞仔同學回家拿吐司,然後趕著去烤肉。一到烤肉現場,真是有夠熱鬧的!我們也就加入了烤肉的行列,不過好像醃製的肉太鹹了(看來醃太久或是醬油太鹹吧),真是對不起大家了,下次我會好好的在訓練技術的~呵。不過這次能夠有20個人來參加,還真是多阿。難得大家會聚在一起辦活動,希望以後還有機會在一次!
而在結束時,則拿出了括鬍泡與繩子,慶祝阿杜的生日啦。不過為了綁他,還真是動用超多人力的,想不到他力氣也蠻大的阿。今天佳霖砸他時,他應該很爽吧~哈哈
最後想列出有參加這次烤肉活動的同學名單,好往後回憶!
================================================================
不良、白雪、黑豬、鳥仔、泰勞仔、小安、宗義、益毅、小璟、千惠、阿杜、K金、小K、胖胖、小C、可方、小白(以及他女友)、雞姐、佳霖還有我
最後祝阿杜生日快樂!
星期一, 11月 13, 2006
太多也不好....
在這忙碌的幾天來,又抽了一天特地回去幫親戚修電腦。今天早早就準備好,原打算趁電腦在重灌的時候,去買一直沒時間買的襯衫跟西裝褲以及皮鞋。誰知道剛好親戚他們有事,到台南時已經九點多了。看來又要另花時間去買衣服了...
今天在修好電腦的回程上,跟姑丈聊了許多他的"人生經驗"吧。其中我也說出了我目前的憂慮與看法,但他的感覺是我想的太多,過早煩惱。這問題我也注意到了,但是好像要我不擔心往後的事情,真的有點難。
但我覺得還是要試著努力去改變,因我發覺,憂慮的太多、想的太多反而會使一個人的行動力下降,我應該培養的是一個深思熟慮後,果斷且有自主性的想法與做法。只有深思熟慮,卻不付諸實行,這就表示了想法還不夠成熟,沒考慮到了當下,導致計畫一直在構思。
或許該學學豬豬或勞仔獸的想到啥就做啥的想法,這是他們的特點,也是我應該學習的地方!
(PS.誰知道後來電腦挑片,我只好另用辦法讓那已關閉封鎖快顯,卻還是不會彈跳視窗的故障IE以另一種瀏覽器開啟,注定今天不能買西裝>"<)








