fggg dfgfg fdggg fdgdf sddsf 

爲週歲添購新衣新鞋去今年要帶奕璇回澎湖過新年怕澎湖風大幫她買了一件紅色的ELLE大衣打完折還要2仟多塊~忍痛買了下來沒想到澎湖天氣竟是出乎意料的熱結果只有搭船的時候才穿到~再過兩天就是奕璇滿週歲了今天拿著麗嬰房的生日優惠劵幫她買了幾件新裝每件春裝都好可愛喔 ~生女兒真的很花錢 忍不住買了好幾套~因為66折真的好便宜 週歲的時候要穿新衣跟新鞋~所以也幫奕璇買了 一雙新鞋 結帳的時候嚇了一跳~不知不覺也買了6仟多~不過真的很捨得買東西給小孩~我想很多媽咪都跟我有同樣的感覺吧

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

dfg sddsf fdgdf dfg sdfsdf 

與小艾相約玩口金包-----第一次相約作品集!謝謝羽軒媽的建議唷!因為小艾第一次辦相約!所以有很多細節不懂!謝謝各位的體諒!小艾更喜歡大家給與小艾意見讓小艾有機會改進唷!相約的夥伴們完成作品後可以來這一篇交作業唷!之前已經交作業的夥伴們小艾也會整理到這一篇唷! 和小艾相約玩口金包PATR1-----參加的夥伴!001 Linda 002 小河馬 003悠悠晨曦 004 咖啡貓 005 小雅 006 Little Jane 007 Betty 008 Kite 009 晶 010 阿華田011甜心寶貝 012 梵苓 013 Crystal 014酷媽 015 Dona016 Hui 017 黑美麻 拔 018 哪達相膏手作 019 愛子 020 Jo Jo滴媽咪021 French Dolphin 022 小蘭 023 莉媽咪 024 air 025 Yo Yo MAY026 小瑪莉 0270 小龍女 028 貝貝的媽 029 Rita 030 BellaStar031 大魚 032 Q妹 033 祈晴 034阿芯 035 米粒036 alice 037 nina 038 yaya 039 安姑娘 040 儀041 chi 042 nancy 043 amos 045 irin046 卡洛 047歸於塵 048 annie 049英英~~~美黛子 050 honey051 celina 052 fi 053 小毛 054 喵媽 055慧056 酢漿草 057想當美美的辣媽 058大白熊 059 慢郎中 060 小柔061甯甯寶貝 062 betty 063 森 064 豬頭妹 065嫩 066chotolate 067 小格格 068 carol 臻 069 jane 070 萱071 maclulala 072MAMA 073 無尾熊 074 yuki 075 Eva076 奶茶 077 光光 078 vivi 079 Joy羽軒媽 080 傻瓜 081小侯子 082 幸福拼布小小窩 083 球球 084 winnie 085ㄚ琪086 suyin 087 瑪姬 088娃娃 089 妮子 090 clare091 ruth .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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

fdggg sdfsdf dfgfg fdgdf fggg 

艾的初體驗---戀家戀物玩拼貼-----蝶谷巴特安全帽! 安安各位!加油ㄋㄟ!第一次和小艾相約玩口金包的夥伴們!很開心知道有一些夥伴已經完成了第一個相約的作品了ㄋㄟ!還沒完成的夥伴請您別緊張唷!各位已完成的夥伴們~小艾希望如果有同學和您請教有關於口金包的問題時小艾希望各位秉持著互相學習 互相欣賞 一起成長的心來玩口金包!因為自私的行為與想法在小艾的部落格中是不允許存在的唷!小艾辦相約的目的就是希望各位和小艾及大家互相分享玩口金包的心情  大家一起成長一起進步一起玩出美美的口金包!如果您只是要小艾的紙型而不願意和大家分享您玩口金包的心情!久而久之大家會不歡迎的唷!部落格玩手作的世界說大不大 您說他小嗎!也是很廣的ㄋㄟ!但是地球是圓的  繞圈圈繞久了大家還是會碰再一起!所以請大家記得小艾的叮嚀~~~要互相分享唷! 前一陣子小艾的狀況不是很好!但是因為大家的關心小艾已經沒事了唷!請大家不要再為小艾擔心了唷!雖然經過這些事但是小艾想玩口金包的心是不會變唷!But小艾會改變想法~想玩一些不一樣的口金包!所以關於第二次的相約~~~~~ 請大家拭目以待囉!蝶谷巴特!小艾很早就想要嘗試了!但是幾千元的學費要小艾一次付出對小艾而言還是粉吃力的!真是幸運!因為本來在小艾家附近的戀家 戀物門市遷居至高雄市苓雅區林泉街8巷6號因為喬遷之喜才有的體驗課程唷!蝶谷巴特安全帽下一次小陶老師還要教我們做蝶谷巴特陶盆唷!小艾報名了課程之後大女兒就一直說:好期待星期五唷!因為要陪媽媽去上課!老師把那裏布置得好美唷!連小朋友進去都不想出來了ㄋㄟ!所以小艾就去和小陶老師玩了小艾生平第一次的跌古巴特拼貼!PS:還帶著三個小搗蛋!(吵了老師一個下午!)但是老師還是耐心的教小艾!學費只要600元(還包含使用到的用具及消耗用品唷!)真是太划算了ㄋㄟ!(安全帽是小艾在老師那兒買的也才150元唷!) 說了那麼多!還是請大家看一下小艾的作品吧! 這一張是正面!愛兔兔的小艾第一次接觸拼貼還是希望兔兔與小艾同在唷! 側面是玫瑰唷!是老師教小艾搭配的!要不然怎麼可能配得那麼美麗ㄋㄟ!真的粉粉有層次感唷!這是帽帽的後面唷!醜醜的扣環經過老師的巧手!化身為帽帽美麗的一部分! 帽帽的兩邊!真的好開心唷!一個下午的成果成品出乎小艾意料中真的美! 想一想!哪一天小艾也拿口金包做胚體!來試一試蝶谷巴特的口金包吧! 又是口金包!真是三句不離口金包啊!哈!哈!哈!各位同好們!記得~~~~~~~要互相分享唷!

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

fdggg sddsf dfgfg fdgdf sdfsdf 

嗚!嗚!嗚!小艾的YAHOO拍賣(=艾不釋手手作坊=)圓底口金材料包遭人檢舉!嗚!嗚!嗚!小艾今天整理部落格的資料整理了一天!希望能將各位的紙型如期寄出!好不容易下午5點把各位的紙型寄出了!回到家卻看到信箱中YAHOO通知小艾拍賣商品被檢舉的訊息!怎麼辦啦!小艾的YAHOO拍賣遭人檢舉!小艾該怎麼辦ㄋㄟ!而且還是這一次相約作品10公分半圓型圓底口金材料包被檢舉的網頁紀錄!為什麼?小艾辛苦經營的拍賣 好不容易有一些好的評價卻被人檢舉!小艾真的好怕遭到停權的處分唷!小艾又沒有錢可以請人架設銷售的網站!小艾1月14日才刊登上去的ㄋㄟ!而且刊登的方式與方式和其他材料包幾乎一模一樣!這一次相約進口金時也被進口金的廠商刁難!廠商告訴小艾有另外一個客戶(林小姐)說請廠商不要再出貨給小艾了!當下小艾聽到真的覺得好難過唷!小艾只想要提供品質優 價格合理的口金給喜歡口金包的夥伴!卻受到前輩的打擊!怎麼辦!小艾剛才抱著孩子一直哭!孩子們也不知怎麼回事!也跟著小艾一起哭!大概是小艾的舉動有點兒嚇到他們了吧!大女兒這個時候冒出一句話:媽媽!我會存錢和您買材料包!聽到時小艾真的不知如何回答!其實這已經不是第一次小艾受到前輩的打擊了!小艾剛開始和這一家廠商進口金時就已經被前輩警告過一次了!只因為小艾進了一款前輩覺得只有他能賣的口金款式!而且重點是-----小艾賣的比她便宜!那時候小艾的先生剛到宜蘭工作 小艾一個人陪著三個孩子過著宛如單親媽媽一般的生活!而且部落格也剛成立!還不認識大家!但是小艾不想放棄口金包!因為我真的很愛她ㄋㄟ!小艾喜歡手作因為他單純  小艾喜歡口金包 因為他比拼布容易學習不需要太多而貴的用具!小艾喜歡在部落格分享口金包給各位 因為小艾希望人人喜愛且學習口金包!但是如果口金包的世界不再單純 不再簡單 不能與人分享!小艾不會學習當一個弱者!小艾會努力守護她!就像小艾守護著三個孩子一樣!因為我想~~~當一個媽媽遇到危險時不會選擇逃跑而是保護自己的孩子才對!大概是小艾相約玩口金包這個活動惹到前輩了吧!但是小艾不是弱者~小艾是一個媽媽唷!不好意思!和各位說這些!小艾只是希望各位更了解小艾的心境和處境!小艾不想把委屈放在心裡也不希望有一天壓力過大而身體不適~但是請各位不要為小艾擔心唷!愈是如此!小艾愈是要努力做出更多不一樣的口金包!請各位也要加油唷!您們是小艾的精神支柱唷!PS:小艾說:林大姐!您和我先生一樣姓林 而且您說您也是高雄人!如果您也希望參加相約或是想看一看小艾的紙型!請您告訴小艾您的地址!小艾可以寄給您唷! .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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

fggg dfgfg sddsf dfg fdggg 

Windows XP環境變數漫談Windows XP環境變數早從DOS就有環境變數(UNIX-like系統也都有)。環境變數是儲存與系統相關的資訊,它的格式很簡單,就是將字串值指定給變數名稱。系統在開機之後,會自行設定若干環境變數,以作為系統運作之用,而這些環境變數的值,原本是存放在登錄資料庫,開機之後才自登錄資料庫取出,並指定給環境變數。舉例來說,雖然安裝程式預設會將Windows系統安裝到C磁碟機的Windows資料夾、會將軟體安裝到C磁碟機的Program Files資料夾,但這只是預設值,不見得每個Windows都如此,而這些資料夾的實際位置,也會記錄在特定的環境變數:%WinDir%:記錄Windows系統資料夾

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

fggg sddsf dfg dfgfg fdgdf 

世家(Sega Dreamcast)遊戲機來學習製作嵌入式中文出處:www.cosoft.org.cn 這裏介紹一個可以不用花費很多錢去購買專門的硬體但是又可以學習嵌入式Linux系統的方法。這就是利用世家(Sega Dreamcast)遊戲機來學習製作嵌入式Linux。(Embedded Linux) 這篇文章將會詳細的講解如何在Sega Dreamcast上面安裝Linux.包括Linux Kernel, Boot loader和Utility kernel patches. 同時也提供以上工具的下截連接地址。 簡介:在學習Embedded Linux的時候,最重要的就是價錢和系統的相容性了。人人都知道,Linux在桌面電腦和伺服器上面都可以非常好的運作。但是,這些都不能稱作嵌入式系統。你知道嗎,其實利用你的Sega Dreamcast遊戲機,你就可以自己學習製作一次嵌入式的Linux了。 要學習嵌入式Linux,首先,當然你要有足夠的文件。同時,你要必須要有一個不是基於X86的硬體平臺,包括一顆不是X86的微處理器。除了電腦以外,比較理想的就是:PDA, Internet appliances 和遊戲機啦。 沒錯,就是遊戲機。那種爲了讓大家購買遊戲而幾乎不賺錢,或者虧錢在賣的東西。現在價位最合適的就應該算是Sega Dreamcast了。因爲Sega 已經出了新的産品了,目前Sega Dreamcast已經被廠家已經停止生産。所以Sega Dreamcast的價位現在非常的好。下面我們就看看如何在Sega Dreamcast上面跑Linux. Linux 是如何運作在 Sega Dreamcast 上的: 在討論Linux 是如何運作在 Sega Dreamcast上之前,我們首先要知道是如何把Linux裝到Sega Dreamcast裏面去的。其實秘密就在於放入Sega Dreamcast裏面的那個CD的格式啦。也就是說,並不需要什么特殊的工具。 Sega Dreamcast: Sega Dreamcast支援 Hitachi SH7750 CPU,運行速度是200MHz. 有 16MB的RAM.你可以選擇使用電視機(PAL制式或者NTSC制式)或者利用乙太網配置器(Ethernet Adapter)直接連接到VGA的電腦螢幕上面。Saga關這種卡叫做“Broadband Adapter”或者“BBA”,也能買到專門給Saga Dreamcast使用的鍵盤和滑鼠。  在Dreamcast上安裝Linux: 在Saga Dreamcast遊戲機啓動的時候,Saga Dreamcast內建的一個啓動程式會嘗試讀取 CD-R(要確定,不能用CD-RW),嘗試找到最少兩個CD-R的recording sessions.第一個session是音軌,boot loader並不會去管它。但第二個session必須是CD/XA資料軌。(mode 2, form 1)這個資料軌必須是標準的ISO9660的文件系統,同時這個文件系統的前16個磁區必須包含一個含有啓動資訊的文件IP.BIN。IP.BIN包含啓動後,啓動程式需要開啓的檔案名。IP.BIN同時包含元資料用以識別硬體,以確定CD上的哪個程式將被執行。(例如自動選擇遊戲是在Sega Dreamcast上執行,還是在Saga其他類型的遊戲機上執行)地區標誌,會控制遊戲以那種格式顯示(PAL或者NTSC),同時也顯示遊戲所需要的控制器(遊戲手柄啦什么的)和CRC. 一但Saga Dreamcast內建的啓動程式讀到有效的IP.BIN文件。系統就會自動把命名的文件從ISO9600的文件系統讀到記憶體中,並交出全部的控制許可權。這裏,我們做的就是,當Saga Dreamcast系統開機以後,啓動程式會把Linux進去。還可以利用Saga Dreamcast的串列介面(serial port)或者乙太網介面(enthernet port)來下截一些東西。一個RTOS,好比eCos就不錯。 Saga Dreamcast的系統硬體同時提供一個類似於BIOS功能的東西用於系統可以從GD-ROM drive讀取資料,(GD-ROM drive是一種從CD-ROM改裝出來的東西,它跟CD-ROM最大的區別就是GD-ROM可以容納1GB的資料)訪問內建的flash memory等等。可惜的是目前這些東西還沒有支援。也許當你讀到這片資料的時候就已經有了這方面的支援了。 接下來做什么? 我們要知道了如何製作一個可在Saga Dreamcast上運行的系統image, 我們就必須對Linux有一定的瞭解: Linux的Kernel本身是不能啓動的。她需要一個啓動程式,比如lilo來幫助她。Lilo會把開始系統的一些資訊,例如系統情況,系統平臺等等傳送給Kernel. Lilo同時也支援解壓縮,這樣可以把壓縮的Kernel image直接拿給用。在嵌入式系統中,我們也同樣需要一個類似於lilo的boot loader. 簡單的來說,Linux的啓動分爲以下幾個步驟: Boot loader 最先得到系統的控制權。這個控制權是從BIOS或啓動硬體中得到的。Boot loader 把kernel的image丟到memory裏面去並且解開壓縮。Boot loader 進入已經解壓縮的memory image中。這個memory image裏面就是Linux的 Operation System Kernel啦。 Kernel 對自己進行初始化,然後mount root 目錄。載入device drive,初始化硬體,最後開始運行應用程式。 現在我們知道了這些,應該清楚CD上的image裏面的內容了吧。我們需要一個boot loader,和一個Linux 的 Kernel, 我們需要讓我們的boot loader在Saga Dreamcast啓動後,能得到控制權,且找到Linux的Kernel,同時轉換控制權。 Linux 和應用程式: 接下來,我們還有很多的事情要做。一旦kernel可 以成功的運行了,我們還需要應用程式。桌面系統跟嵌入系統有個很大的區別。桌面系統通常系統只負責跟應用程式之間的交換。但是嵌入系統就不同了,在嵌入式 系統中,通常系統和應用程式是同一個。也就是說,他們是綁在一起的。因爲他們綁的實在是太緊了,很難分辨出來,所以勉強的區分辨那個是作業系統那個是應用 程式就有點不符合實際了。 Linux是一個通用性的很好的桌面作業系統,也就是說,我們需要有應用程式才可以。在這篇文章的結尾。會介紹一個類似的應用程式:shell Linux和文件系統: 如果你觀察一下Linux的startup code,你就會發現,最後一步就是kernel尋找一個可執行的叫做“init”的檔案,並且把它截入到記憶體裏。這裏並不只是說我們需要一個叫做“init”的文件。這裏同時指出,我們需要一個文件系統去取出這個檔案。 也許你會想,Saga Dreamcast並沒有硬碟,那么如何存放系統文件呢?其實,很多的電腦工作站也是沒有硬碟----最少,在系統還沒有初始化IDE或者SCSI控制卡之前。所以,其實Linux在開機的時候是會自動類比出一個硬碟來的。  當沒Linux開機的時候,Linux會自動用ramdisk的功能,把一部分記憶體類比成一個硬碟。工作站的boot loader在開機時從軟碟中獨取image,然後後截入ramdisk,再把ramdisk的地址傳送給kernel. Kernel從ramdisk讀取磁片控制卡的的資料,然後進行初始化,載入。這時候真正的物理硬碟才工作。一旦物理硬碟工作了,ramdisk就會被釋放。 Ramdisk提供所有Linux需要的磁片導向設備。所以說,一個系統只要有足夠的存放程式和device drive的記憶體。那么這個系統可以完全不需要硬碟。Saga Dreamcast就是在用ramdisk代替傳統硬碟的。 爲Saga打造Linux,你都需要些什么: 首先,你必須擁有一台電腦,這台電腦必須是Linux或者Unix-like的作業系統。你必須有root的許可權。 其次,你需要一台CD-R的讀寫器(Writer),讀寫器和燒錄程式必須要支援 multisession CD using CD/XA data track (mode 2, form 1)格式。其實大多數的CD-R writer和程式都支援個。要注意的是:Saga Dreamcast的GD-ROM驅動器不能讀取CD-RW,不過用CD-RW燒錄的CD-R是沒有問題的。也就是說,只能用CD-R的片子,不能用CD-RW. 最後,就是需要一些工具啦,這些工具基本上你在網上都能找得到的: 下面我也把link都給了出來  binutils-2.11.2.tar.gz -- The linker, assembler, and object management utilities.gcc-3.0.1.tar.gz -- The GNU Compiler Collection. Contains the C/C++ compiler.glibc-2.2.4.tar.gz -- The GNU C runtime library.busybox-0.60.1.tar.gz -- Small, embedded versions of common Unix utilities.kernel-sh-linux-dreamcast.tar.gz -- Linux kernel for the Dreamcast.sh-boot-20010831-1455.tar.gz -- Linux bootloader for the Dreamcast.binutils-2.11.2-sh-linux.diff -- Patches for binutils.gcc-3.0.1-sh-linux.diff -- Patches for gcc.glibc-2.2.4-sh-linux.diff -- Patches for glibc.busybox-0.60.1-sh-linux.diff -- Patches for Busybox.kernel-sh-linux-dreamcast.diff -- Patches for the Linux kernel.sh-boot-20010831-1455.diff -- Patches for sh-boot.  打造我們需要的工具: 想在Saga Dreamcast上運行Linux.第一步就是我們需要打造一些工具包括:cross assembler, linker, compiler, C runtime library。下面,我們就用這些工具打造出一個Saga Dreamcast用的作業系統,並且在系統開機以後,運行一個簡單的shell。最後,我們把所有的東西方到一個ramdisk image裏。並燒錄CD. Build cress assembler, linker, and bootstrap compiler 我們首先需要打造一個cross assembler和linker,然後是bootstrap compiler.用一個迷你的compiler可以打造runtime libraries和system kernels。但是不能打造應用程式。 首先,確定/usr/local/bin/有在PATH裏設定噢login as root user,然後按照下面的script: # export TARGET=sh4-linux //這裏是設定環境變數# export PREFIX=/usr/local //這樣好處就是不用以後老打那么多字# export PATH=${PATH}:${PREFIX}/bin //結束 # tar xzf binutils-2.11.2.tar.gz # patch -p0 < binutils-2.11.2-sh-linux.diff# mkdir -p build-binutils && cd build-binutils# ../binutils-2.11.2/configure --target=$TARGET \ --prefix=$PREFIX# make all install# cd .. # tar xzf gcc-3.0.1.tar.gz# patch -p0 < gcc-3.0.1-sh-linux.diff# mkdir -p build-gcc && cd build-gcc# ../gcc-3.0.1/configure \ --target=$TARGET --prefix=$PREFIX \ --without-headers --with-newlib \ --disable-shared --enable-languages=c# make all-gcc install-gcc# cd .. 最後的可執行檔案在/usr/local/bin下面,名字是 sh4-linux-as, sh4-linux-ld.用同樣的方法就可以build bootstrap compiler了。Bootstrap compiler也是在/usr/local/bin下面執行檔案的名字叫做sh4-linux-gcc. Configure the Kernel source: 這裏主要是要configure kernel的header file. 非常的簡單,不過請注意,這裏不要對選項做任何的修改。在menuconfig的時候,直接選擇Exit.(按一下鍵盤的箭頭右鍵,然後按enter就好了) #tar vxf kernel-sh-linux-dreamcast.tar.gz#path –p0 < kernel-sh-linux-dreamcast.diff#cd kernel# make ARCH=sh CROSS_COMPILE=sh4-linux- menuconfig#cd .. Building a runtime library 現在我們有了bootstrap compiler和一個設置適當的kernel了。我們現在可以開始build runtime library和header files了。我們使用的run-time library是GNU的glibc.這個library裏面有大家都熟悉的printf()之類的東西。同時還包含動態連接(dynamic linker)和其他的一些東西。 首先解壓縮,然後patch,接下來把 Linux kernel的header files 拷貝過去。實際上,我們需要調用make兩次來build glibc. 第一次的時候,建立library,但是並沒有安裝,第二次才是安裝library. Touch的命令實際上是爲了騙過glibc讓它以爲所有的東西都已經有了(實際上有些東西是我們不需要的)最後echo指令做了一個link libc.so 如果你在built完 binutils, bootstrap, gcc以後重新啓動過你的電腦(或者重新login過)那么你必須重新設定PATH,TARGET,PREFIX這三個變數才可以build gligc. Glibc在build的時候可能花的時間會比較多。當然,主要也是看你的系統而定。不過到是可以利用現在這個時間休息一下,吃點東西,泡杯茶。 # tar xzf glibc-2.2.4.tar.gz# patch -p0 < glibc-2.2.4-sh-linux.diff# mkdir -p build-glibc && cd build-glibc# mkdir -p ${PREFIX}/${TARGET}/include# cp -r ../kernel/include/linux \ ${PREFIX}/${TARGET}/include# cp -r ../kernel/include/asm-sh \ ${PREFIX}/${TARGET}/include/asm# CC=sh4-linux-gcc ../glibc-2.2.4/configure \ --host=$TARGET --prefix=$PREFIX \ --disable-debug --disable-profile \ --disable-sanity-checks \ --with-headers=${PREFIX}/${TARGET}/include# make# touch iconv/iconv_prog login/pt_chown# make install_root=${PREFIX}/${TARGET} \ prefix="" install# echo "GROUP ( libc.so.6 libc_nonshared.a )" \ > ${PREFIX}/${TARGET}/lib/libc.so# cd .. Rebuild the cross compiler: 在有了正確完善的header files和runtime library之後。我們現在可以build一個完整的c/c++ cross compiler. # mkdir -p build-gcc2 && cd build-gcc2# ../gcc-3.0.1/configure --target=$TARGET \--prefix=$PREFIX --enable-languages=c,c++# make all install# cd .. Building a Dreamcast Linux kernel 現在我們有了完整的跨平臺的toolchain了。現在到了該用到這些東西的時候了。前面我們已經把我們的linux的kernel爲Saga Dreamcast設置好了。現在只要compile和link kernel就好了。最後compile出來的文件叫做zImage,在kernel/arch/sh/boot/下面。這個文件是以個被壓縮了的kernel image. 以後,當你用這個kernel正常開機以後,你就可以隨意用menuconfig來調整kernel裏面的各種設置了。然後再recompile一下kernel就好了。 # cd kernel# make ARCH=sh CROSS_COMPILE=sh4-linux- \ clean dep zImage# cd .. Building a Saga Dreamcast Bootloader當你有了一個正確的compiled kernel image.那么下一步我們就該做一個bootloader用來在Saga Dreamcast 開機的時候,把kernel載入到Saga Dreamcast的記憶體裏面去。 但是,現在還不行。還記得嗎,Saga Dreamcast的硬體載入一個單一的可執行的image到它的RAM裏面。這樣,除非應用程式知道如何與Saga Dreamcast的GD-ROM去溝通,不然就沒有辦法從GD-ROM裏面讀去更多的新資料。我們使用的bootloader並不知道如何來跟Saga Dreamcast的GD-ROM來溝通。所以唯一的方法就是,我們在一開始,就把所有需要的東西全部load進去:bootloader, kernel image, ramdisk image.一旦所有的東西全部load進去,這時候,bootloader就需要分析記憶體,分清楚kernel和ramdisk image.。這就需要bootloader知道kernel和ramdisk的精確的大小。唯一的方法就是,當做好kernel和ramdisk以後,去計算他們的大小,然後在打造 bootloader的時候,把這些準確的資料提供給bootloader。(source code) 所以,我們現在先要去打造一個應用程式(shell),然後再做一個大小合適的ramdisk給它。最後我們再回到Building Saga Dreamcast Bootloader這裏。 打造一個應用程式 對Linux來說,也許最重要的一個應用程式就是Linux的shell了吧。沒有了shell,甚至不可能去載入其他的程式,不能mount設備,不能…… 如果你的Saga Dreamcast沒有鍵盤,那么你就沒有辦法享受Saga Dreamcast上的shell的那種感覺啦。因爲沒有鍵盤,你就沒有辦法輸入指令。 打造一個shell的同時,shell也可以運行你在ramdisk裏面的程式或者script.當你能成功的在Saga Dreamcast上面運行一個shell,那么也就意味著你可以隨意的在Saga Dreamcast上面運行任何一個你想要運行的程式。下面講述如何爲Saga Dreamcast build一個BusyBox . 在基本的Shell的基礎上,Busybox還提供了幾個很有用的工具:mount, ls and modprobe. 第一步先建立一個目錄叫做 initrd,包含了最初ramdisk的東西。PREFIX是爲了把Busybox安裝到正確的位置。DOSTATIC是告訴sh4-linux-gcc Busybox不要用shared libraries.因爲我們沒有安裝動態的linker (dynamic linker).# mkdir -p initrd# export INITRD=`pwd`/initrd# tar xzf busybox-0.60.1.tar.gz# patch -p0 < busybox-0.60.1-sh-linux.diff# cd busybox-0.60.1# make CROSS=sh4-linux- DOSTATIC=true \ CFLAGS_EXTRA="-I ${PREFIX}/${TARGET}/include" \ PREFIX=${INITRD} clean all install# cd .. 你可以對Busybox做很多的改變,具體請看Config.h和libbb/libbb.h這兩個文件。 現在我們要在ramdisk上面做device nodes: 因爲ramdisk在Saga Dreamcast中,是扮演的root directory的腳色。所以上面必須有所有的kernel在運行中可能需要的東西。除了shell或者其他的應用程式,我們必須提供device nodes.這樣程式才能跟我們的硬體溝通。 在Saga Dreamcast中,只有一個真正的實質性的device node:/dev/console node.如果沒有這個node,那么文字程式將無法跟console device溝通。簡單的說,就是你看不到螢幕上的顯示。用下面的指令做出device node: # mkdir -p ${INITRD}/dev# mknod ${INITRD}/dev/console c 5 1 製作ramdisk image: 現在,我們已經製作好了ramdisk的directory了。接下來我們就該把這個目錄製作成一個image file了。 # dd if=/dev/zero of=initrd.img bs=1k count=4096# mke2fs -F -vm0 initrd.img# mkdir initrd.dir# mount -o loop initrd.img initrd.dir# (cd initrd ; tar cf - .) | (cd initrd.dir ; tar xvf -)# umount initrd.dir# gzip -c -9 initrd.img > initrd.bin 製作bootloader: Saga Dreamcast的bootloader是Hitachi SH的bootloader的一部分,叫做sh-boot。一些Saga Dreamcast的特定的code被放在sh-boot的目錄中。在子目錄tools/dreamcast中,包含Makefile用來製作bootloader的image檔案。另外還有一個script叫做roast.sh,可以用來製作一個包含Saga Dreamcast bootloader的boot CD。下面的指令將建立Saga Dreamcast的bootloader image: # tar xzf sh-boot-20010831-1455.tar.gz# patch -p0 < sh-boot-20010831-1455.diff# cd sh-boot/tools/dreamcast# cp ../../../kernel/arch/sh/boot/zImage ./zImage.bin# cp ../../../initrd.bin .# make scramble kernel-boot.bin bootloader的image在這裏是文件kernel-boot.bin.這個文件包含了bootloader自己和前面我們做出來的Linux kernel還有ramdisk image. 製作Dreamcast Boot CD 現在只差最後一步了,那就是把kernel-boot.bin燒錄到CD上去。然後把CD放到Saga Dreamcast上。打開Saga Dreamcast的電源,你就可以看到你的kernel boot了。前面提到過,sh-boot中有一個叫做roast.sh的script.這個script會幫助我們自動完成CD燒錄步驟。這個script首先把kernel-boot.bin改名爲1ST_READ.BIN(啓動檔案名紀錄爲IP.BIN)然後調用mkisofs來建造一個ISO9660的文件系統image,最有用cdrecoder來燒錄CD. 爲了能正確的使用這個script,在這個文件的最開始部分,你必須給cdrecoder設定一些東西,用以識別你的CD-R機器。 利用下面的指令的到你的CD-r driver的ID。然後把roast.sh中的”1,0,0”換成你的CD-R driver的正確的ID.如果你的CD-R drive不是SCSI的。那么你需要用“ide-scsi”來做SCSI的類比。也就是說把IDE的drive類比成SCSI來用。截入ide-scsi這個module前,如果你進入了X-window,請記得推出X-window. # modprobe ide-scsi# cdrecord -scanbusscsibus1: 1,0,0 100) 'PHILIPS ' 'PCRW804 ' ' 1.5' Removable CD-ROM 當設定好了一切以後,現在放入一片CD-R。並且運行下面的script。當一切完成以後,你就可以把CD-R放到你的Saga Dreamcast裏面,打開電源,幾秒鐘以後,你就可以在你的Saga Dreamcast中運行Busybox shell啦。 # ./roast.sh kernel-boot.bin 後記 這篇文章講解了一些簡單的步驟來製作一個自己的嵌入式系統,包括打造一個cross compiler, GNU C runtime library, linux kernel, Busybox shell, ramdisk image。以及最後把所有的東西方到一起,燒錄出一片可以在Saga Dreamcast運行的CD. 這裏的一切都只是一個開始。嵌入式系統還有很多的東西等待你去發掘、探索。你可以把你的Busybox換掉,換成你自己寫的程式,或者從網上找到其他的程式,也可以把你的Saga Dreamcast做成好象你的桌面型電腦一樣。給你的Saga Dreamcast加上Sega Broadband Adapter (Ethernet)這樣你可以用你的Saga Dreamcast上網遊覽,收郵件。也可以爲你的Saga Dreamcast加上一個RS232的serial port。這樣你就可以利用這個serial port來跟你的桌上型電腦溝通。還有很多很多的東西可以做…… Copyright This article is Copyright (c) 2001 by Bill Gatliff. All rights reserved. Reproduction for personal use is encouraged as long as the document is reproduced in its entirety, including this copyright notice. For other uses, contact the author. About the Author Bill Gatliff is an independent consultant with almost ten years of embedded development and training experience. He specializes GNU-based embedded development, and in using and adapting GNU tools to meet the needs of difficult development problems. He welcomes the opportunity to participate in projects of all types. Bill is a Contributing Editor for Embedded Systems Programming Magazine, a member of the Advisory Panel for the Embedded Systems Conference, maintainer of the Crossgcc FAQ, creator of the gdbstubs project, and a noted author and speaker. Bill welcomes feedback and suggestions. Contact information is on his website, at http://www.billgatliff.com. 中文出處:www.cosoft.org.cn .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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

sdfsdf sddsf fdggg fdgdf sdfsdf 

Bash shell 彩色定義概述 Shell 的配置shell 彩色配置出現在 bash 的個人配置文件 ~/.bashrc 或者是全局配置文件 /etc/bashrc 裡面。 可以通過 bashrc 裡面的 PS1 變量來設置提示符的外觀。 例如: PS1="\s-\v\$ "\s 表示 shell 的名稱,-\v 表示版本號。 在提示符的最後面放置了一個 $。PS1="\u@\h \w \$ "表示 用戶@ 當前目錄 $ 轉義序列要是通過彩色化提示符來增加個性化,就要用到轉 義序列。 轉義序列就是一個讓 shell 執行一個特殊步驟的控制指令。 轉義序列通常都是以 ESC 開頭(這也是它的命名原因)。 在 shell 裡表示為 ^[。也可以用 \033 完成相同的工作(ESC 的 ASCII 碼用十進製表示就是 27,  用八進製表示為 33)。要直接在 shell 裡面輸入轉義序列需要先按 ctrl-v:CTRL-v ESC。 使用 shell 的顏色下面用一個提示符的例子來解釋 shell 的顏色。 PS1="\[\033[0;32;40m\u@\h:\w\$ \]"這樣提示符就全部顯示成綠色了。就像這樣: nico@ebrain:~$ \033 聲明了轉義序列的開始,然後是 [ 開始定義顏色。 後面的 0 定義了默認的字體寬度。稍後我會介紹其他的可用字符。 轉義序列字符串要用 \[ 和 \] 括起來, 防止轉義序列的文本顯示在 shell 裡佔用太多的空間。下面要選擇前景色(這裡是 32,代表綠色)。背景色的 40 表示黑色。 要是不想讓提示符後面的文字也變成綠色,需要用 \033[0m 關閉轉義序列, \033[0m 是 shell 的默認顏色。前景色和背景色都有 8 種可用的選擇。可選顏色:紅色、綠色、黃色、藍色、洋紅、青色和白色。 他們對應的顏色代碼是:30(黑色)、31(紅色)、32(綠色)、 33(黃色)、34(藍色)、35(洋紅)、36(青色)、37(白色)。用同樣色方法設置背景色,不過要把第一個數字「3」替換成「4」, 例如 40、41、42、43、44、45、46、47。示例: PS1="\[\033[0;37;44m\u@\033[0;32;43m\h:\033[0;33;41m\w$\033[0m\]"這給了非常多彩的提示符: nico@ ebrain: ~$使用 export PS1="string" 來測試這些設置;PS1="\[\033[1;34;40m[\033[1;31;40m\u@\h:\w\033[1;34;40m]\033[1;37;40m $\033[0;37;0m\] " [ nico@ebrain:~ ] 文本屬性 剛才提到了,在第一個轉義序列後面的「0」是提示符的文本的默認顏色設置。 對於文本屬性來說,有意義的值及對應關係為:0、默認值1、粗體22、非粗體4、下劃線24、非下劃線5、閃爍25、非閃爍7、反顯27、非反顯通過下面這一段短小的腳本,可以看看色彩組合。 #!/bin/sh############################################################# Nico Golde <nico(at)ngolde.de> Homepage: http://www.ngolde.de# Last change: Mon Feb 16 16:24:41 CET 2004############################################################for attr in 0 1 4 5 7 ; do echo "----------------------------------------------------------------" printf "ESC[%s;Foreground;Background - \n" $attr for fore in 30 31 32 33 34 35 36 37; do for back in 40 41 42 43 44 45 46 47; do printf '\033[%s;%s;%sm %02s;%02s ' $attr $fore $back $fore $back done printf '\n' done printf '\033[0m'done 另一個程序在 shell 中設置顏色不僅僅能創建更加漂亮的提示符, 在編寫控制台程序的時候也非常有用。對於一個要使用彩色的程序員,就必須要使用類似 slang 或 ncurses 這樣的的庫,者通常會增加執行文件的大小。 Ncurses 有著或多或少的獨立於終端的類型的優勢。 C 語言示例用綠色打印「Hello Word」: #i nclude <stdio.h>int main(void){ const char *const green = "\033[0;40;32m"; const char *const normal = "\033[0m"; printf("%sHello World%s\n", green, normal); return 0;}另外一個有用的轉義序列是 printf("\033[2J"),它和 system(clear) 完成的功能一樣。但是可以不需要頭文件 unistd.h。使用printf("\033[1K") 可以刪除一行。 初始化腳本示例如果想在 /etc/init.d 的 init 腳本成功的執行後, 得到一個漂亮的、清晰易讀的提示,而不是一個簡單的 '.', 可以再一次的使用轉義序列。這是一段 cron init scrīpt 的摘錄: #!/bin/sh# Start/stop the cron daemon.test -f /usr/sbin/cron || exit 0 case "$1" in start) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cron echo ".";;如果 cron 腳本執行成功就會顯示一個句點。 可以用 [Ok] 給這些信息添加上彩色特徵,通過改變 echo 字符串,例如: #!/bin/sh# Start/stop the cron daemon.test -f /usr/sbin/cron || exit 0case "$1" instart) echo -n "Starting periodic command scheduler: cron" start-stop-daemon --start --quiet --exec /usr/sbin/cronecho "\[ \033[1;34;40m[ \033[1;32;40mOk \033[1;34;40m]\033[0m\]" ;; 把這個設置應用到所有的 init腳本上非常耗費時間, 除非使用轉義序列 \033 —— 因為 Ctrl-v 不是作為一個字符來處理的。  .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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

fdgdf sdfsdf dfgfg sddsf fdgdf 

我們都太脆弱很想存到人生的第一個壹百萬很想買房子(聽說帝寶,湯泉很不賴)理想好像很遠會不會常常感覺很無力?我們都太脆弱什麼時候可以有一個新的自己?這樣才能脫離自怨自艾的惡性循環吧! .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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

fdgdf dfg fggg fdggg dfg 

我們都太脆弱很想存到人生的第一個壹百萬很想買房子(聽說帝寶,湯泉很不賴)理想好像很遠會不會常常感覺很無力?我們都太脆弱什麼時候可以有一個新的自己?這樣才能脫離自怨自艾的惡性循環吧! .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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

sddsf fggg sdfsdf fdggg dfgfg 

接受缺點,更接近完美接受自己的缺點,是培養自信的開始! 接受自己的缺點,才有機會改進缺點。 對無法改進的缺點,才能自我解嘲,以自愚來娛人。 人,沒有十全十美。但我們總習慣對別人要求完美;也對別人謊稱自己完美。就算表面上很謙虛,骨子裡卻堅持完美。 謀職面試中,當主管問道:「你最大的缺點是什麼?」 「呃……」很多年輕人第一次被直接擊中要害時,不得不緊急思索一下,妙的是很快就有答案:「我最大的缺點是--凡事都追求完美!」 我猜想,類似的問答大概常常被刊登在報章雜誌「面試時最常碰見的考古題」這種專題中,所以大家也都習慣了,甚至還對答如流。彷彿,進行了一場很完美的面試表演。 可是,誰的人生真的可以完美?誰的性格真的沒有缺點? 回答說:「我最大的缺點是--凡事都追求完美!」跟回答:「我最大的缺點是--根本就沒有缺點!」答案其實是很接近的。 講出這種答案,若不是故意說謊瞞騙,就是不願意面對自己的缺點。 除非對方很缺乏人生經驗,否則絕對不會相信這種說法。甚至,還會對說出這種話的人,產生很負面的評價。 所以,與其一味地逃避面對自己的缺點,不如勇敢找出自己的缺點,看看哪些是可以改進的,哪些是必些坦然接受,或換個角度欣賞。 了解自己的缺點,需要的是反省與檢討的能力。 接受自己的缺點,可就需要勇氣與智慧了! 而最重要的其實是心態上的改變,如果我們都能夠體認到世界上沒有完美的人,承認自己有缺點,就是天經地義的事。對別人的缺點,也就比較能夠體諒、並加以包容。 一個人有缺點,是很正常的事;不知道自己的缺點,是很危險的事;知道自己缺點但不肯接受,是很可惜的事。 接受自己的缺點,是培養自信的開始!接受自己的缺點,才有機會改進缺點。對無法改進的缺點,才能自我解嘲,以自愚來娛人。生命將因此而更接近完美! E世代生活的黃金定律: 承認自己有缺點,是天經地義的事。 對別人的缺點,也就比較能夠體諒、並加以包容。 (本文摘錄自時報出版吳若權作品集7《打造自己的幸福.com》) .msgcontent .wsharing ul li { text-indent: 0; } 分享 Facebook Plurk YAHOO!

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