2013年5月2日 星期四

Eclipse Modeling Projects

講到 modeling,這是一個抽象的東西。不過我想 Unified Modeling Language (UML),應該有不少人都聽過才對。而 Model Driven Architecture (MDA) 聽過的人可能就少了點...

以 UML 的 Class Diagram (類別圖) 來說,可能有些人有玩過。當我們設計了一個如下的簡單的類別圖:
我們是否能將上面的類別圖直接轉換成程式碼?答案是肯定的,印象中現在已經有不少工具是可以將 UML 建構出來的 MODEL直接轉換成可執行的程式碼,微軟的VISUAL STUDIO 似乎也有一套這樣的工具,而 ECLIPSE 也當然有這樣的東西。

ECLIPSE 具相當多的 Modeling Projects 而且還是OPEN SOURCE, 如: Eclipse Modeling Framework (EMF), Graphic Modeling Projects (GMP), Textual Modeling Framework (TMF) ... etc.

當我們在解決各式各樣的問題的時後,有些時後我們可能會定義一些自己的 model來幫忙自解決問題。而我們自己定義的這些 model 是不是一樣可以跟 UML 一樣轉換成我們要的程式碼?答案也是肯定的。透過ECLIPSE 的Modeling Projects,我們可以很輕鬆的做到這件事。

以底下的範例來說:
筆者自己定義了幾個 pattern , , 想要來協助撰寫 dual core (mpu+dsp)的程式,然後將這些定義好的 pattern model在轉換成對應的程式碼。我們就可以用eclipse本身所提供的一堆 modeling tools/projects 來做到這件事。



上圖的範列就不多做解釋,因為不是本篇重點,而且那只是筆者曾經小小的論文的一部份。

不過 ECLIPSE對筆者來說,確實是一個知識的寶庫,可以直接跟著有十幾年軟體經驗的人學習,再來後續的幾篇會來整理有關 EMF, GEF, GMF 的介紹。

2013年4月28日 星期日

Master Boot Record (MBR) Bootkit

Master Boot Record (MBR),中文又叫做 主開機紀錄 或 主引導磁區,MBR位於電腦硬碟最起始的SECTOR。
MBR 可說是電腦在開機的時後不可或缺的一環,當電腦按下 POWER 鍵,BIOS做完POST (Power-On Self Test),接著便會將 MBR 載入到記憶體 0000:7C00,然後將CPU執行的控制權交給 MBR 這段程式碼。

一般來說,MBR所記載的開機程式碼,都是固定的。 如下圖所示 Windows XP MBR sample:
(圖片的來源取自於: http://thestarman.pcministry.com/asm/mbr/Win2kmbr.htm ,跟著大師學習)




而 MBR 的程式碼的部份 (0000-012B),主要是讀取Partition Table (ps: partition table裡記錄的就是硬碟裡的分割磁區,假設一顆硬碟裡有兩個分割槽: C槽跟 D槽,那麼 partition table 裡面就會有這兩筆 record)裡的 Active Partition (0x80),以上圖來說 01BE 的 80 便是ACTIVE的 PARTITION,而ACTIVE的 PARTITION 會指到對應的可開機的BOOT PARTITION,一般來說就是 WINDOWS OS 的BOOTLOADER 安裝所在,而假使 MBR 找不到對應的開機磁區,這時電腦螢幕便會看到藍紫色裡的ERROR MESSAGE (ex: Missing operation system.)。(PARTITION TABLE跟後續的WINDOWS OS的BOOTLOADER 這邊就簡單帶過,不是本篇的重點)

而所謂的 MBR BOOTKIT ,便是會將自己的惡意程式塞入MBR裡,藉由MBR開機的時後便執行起來,以往比較常見的BOOTKIT都是直接代換掉MBR 原先的 CODE 部份,換成自己的惡意程式。不過最近倒是遇到了一些更機車的變種,是修改USER的PARTITION TABLE,一般來說partition table 只要壞了,那麼那顆硬碟也就廢了,電腦不會認得裡面的資料。

底下的圖,是改自 自己電腦的一個sample,其中 MBR BOOTKIT是將自己的CODE 放在硬碟的第 52 (0x34) SECTOR 裡:

之前有段時間因為一直收不到sample,造成 rescue disk detect 不到,而無法清除的窘境... (荼)。

2013年4月27日 星期六

Linux Hardware Detection

在玩 Rescue Disk 的時後,當初遇到最頭痛的問題是 hardware 問題。

比方說 我有一台電腦的 硬碟 Linux 根本 MOUNT 不起來。
這時後理想的情況是找出 LINUX 跟 HARDWARE 的關係,讓LINUX也能認得那顆硬碟。

目前手邊知道的方式有兩個:

  • 其中一個是用 Hardware Detection Tool (HDT): Link

    這個 tool 一直到近幾個月都有在更新,可靠度應該也是不錯的。玩open source有趣的一個地方,是像這樣看到一堆人再做各式各樣的東西。

    底下的這張圖,是我用 vmware 截取下來的,它可以很清楚的列出這台機器的硬體所需要Linux Kernel Module的支援 (ata_piix, i2c_piix4 ... etc)。



  • 另一個方式,是用 COMMAND LINE 下指令取得資料。

    雖然我本身不太玩HARDWARE的東西...,不過一般來說 PCI 扮演著主機板跟HARDWARE DEVICE間接連的重要角色。而 LINUX 也提供 "lspci" - list all pci device 這個有用的指令。而 "lspci -k" , -k 這個參數 是可以附帶列出 Linux 對應的 kernel driver/module。

    如底下這張圖所示:



    另外 lsmod, lsusb ... 似乎也都是些有用的指令。


而在硬碟找到對應的 Linux Kernel Module,進一步可以在製作 LINUX KERNEL時,決定要不要將對應的 KERNEL Module/Driver 放入製作的 LINUX KERNEL。
底下的圖,是在編譯LINUX KERNEL前的 make menuconfig:


不過要真的快又正確的的找到所需的 LINUX KERNEL MODULE跟DRIVER,大概還是需要相當的經驗 Orz... 

2013年3月31日 星期日

PXE: boot from network

最近在研究一個叫 Preboot Execution Environment (PXE) 的東西。
而這是一個什麼東西,簡單來說就是可以讓一台電腦不需要硬碟,就可以從網路端做開機的動作。
透過網卡下載開機所需的檔案、目前可以做到下面幾件事 (當然應該還有很多可能的應用):

  1. 開機進到一個OS
  2. 從網路端來透過大量部屬OS的動作
  3. Network boot into RESCUE DISK。


先從 SLACKWARE (Linux 的一個分支) 講起,網路上已經有詳細的文章教大家如何透過網路來部屬 SLACKWARE LINUX: PXE: Installing Slackware over the network從這篇文章,可以知道要做到 PXE BOOT,需要設定一台 PXE Server 包含這些 BOOTP/DHCP/TFTP/NFS services、需要client端的網卡具有 pxe 的功能。

其中架設 dhcp 及 tftp server 可以透過 dnsmasq 這隻程式就能做到:

dnsmasq --enable-tftp --tftp-root=/tftpboot \
--dhcp-boot=/slackware-12.1/pxelinux.0,"192.168.0.1",192.168.0.1


tftp-root: ftp 端提供開機所需的 LINUX KERNEL      
pxelinux.0: 從 network boot 所需的 boot loader

而 NFS (network file system) 的架設 同時可以用其他的 HTTP SERVER 來代替,而這個SERVER 端所需的檔案為 OS 安裝所需的檔案。

以上的那些複雜的設定,其實已經不需要自己手動的一個個設定了,在 SLACKWARE 13.37版的 RELEASE,已經提供了一個簡單的文字介面,來做快速設定,可參考這篇文章:  Out of the box PXE install server in Slackware 13.37.

SLAX 也提供了 PXE 這樣的功能,只需要將一台電腦跑起來成為 SLAX PXE SERVER,再來從同一個網段的 CLIENT端,只需要透過網卡做開機,就可以執行一台具有 SLAX 的電腦。
(PORTEUS 另一個 OS 選擇也具有 PXE 這樣的功能)
有興趣的人可以研究一下 SLAX底下的 /sbin/pxe 這個script檔,底下為這個script裡的片段程式碼。其實很簡單的就可以跑起一個 pxe server (不過要搞清楚這些設定,其實也是需要相當的底子 Orz 像我就花了不少時間來研究):

底下附上,網路端開機的幾張照片:


講了這麼多,RESCUE DISK透過一些修改也是可以做到從 NETWORK BOOT  XD

2013年2月6日 星期三

Linux Boot Logo

打從 SLAX7 從去年12月底RELEASE之後,就注意到了一個很特別的"四葉草LOGO"在開機畫面上。(以往的LINUX則是一隻小企鵝)
然後前陣子在 RESPBERRY PI的開機畫面一樣看到了一個樹梅的LOGO。

SLAX Boot Logo

最近在好奇心的驅使下,剛好SLAX又是一個OPEN SOURCE PROJECT。
決定把 SLAX 的 BUILD SCRIPT 拿來研究了一下:kernel.SlackBuild
( http://ftp.slax.org/Slax-7.x-development/sources/Slax-7.0-sources/kernel/ )

運氣不錯的,發現底下這段程式碼:
# rebrand
cp $SRC/../logo_linux_clut224.ppm drivers/video/logo/
顯然已經找到 LOGO修改的地方了。
Raspberry PI Boot Logo
再來的話,就是想辦法去客製化一個LOGO了,需要一個 PPM 格式的圖 (需要製作成 ASCII的PLANT TEXT格式及色彩不能大於224階...),一開始沒注意到圖片的格式,害我重新多編譯了幾次Linux Kernel ...相當的花時間阿,加上機器是跑在VM上已經不快了 ~"~

再來只要將編譯好的 vmlinuz 代換掉原先的開機執行檔就行了。(拿RESCUE DISK的 LOGO來試用)

雖說改改這種東西、稍微客製化一下事還蠻有趣的。不過還是只能改一些很TOY的東西 QQ



New Boot Logo

2013年1月20日 星期日

Linux Live Kit

Linux Live Kit  (http://www.linux-live.org/)
一個有趣的工具,自己準備好一個 LINUX的作業系統平台,透過 LINUX LIVE KIT就能幫你從原先的LINUX作業系統,製作出一個複製版的LINUX,讓你可以將自己的LINUX跑在 CD/DVD上、又或者一隻USB硬碟。

不過還是有些前置條件: LINUX KERNEL 要有支援 AUFS。 (Build aufs kernel module and squashfs kernel module (native support in kernel)


樹莓派 (Raspberry Pi)

跟同事 合購的Pi:
身為一個"工程師",還好有很多材料是現有的 XD

PI: $35 US
Micro USB (power) 接線: HTC 手機的電線
SD card (hd): 數位相機 8 GB SD CARD
USB key board + mouse
HDMI 接線: $299 NT
數位電視支援 HDMI: 現有
讀卡機: 燒錄SD CARD: 現有 



















不過買了其實還不確定要拿來做什麼 ORZ