2008年12月24日 星期三

FC6 Build Kernel elfutils problem

一. 建立 Linux(FC6)/Window 並存環境
1. 下載 VirtualBox
x86: http://download.virtualbox.org/virtualbox/2.1.0/VirtualBox-2.1.0-41146-Win_x86.msi
amd64(Only on windows x64): http://download.virtualbox.org/virtualbox/2.1.0/VirtualBox-2.1.0-41146-Win_amd64.msi

2. 執行 VirtualBox 並安裝 Fedora Core 6
執行 VirtualBox 後, 選"新增"後出現"新增虛擬機器精靈", 點選Next.
欄位"名稱"就自訂吧! "作業系統類型"的"Operating System"選擇"Linux", 然後Next.



3. 記憶體大小建議在512MB以上. Next
4. 虛擬硬碟的部分主要是在window裡頭建立一個VirtualBox映像檔. 裡頭包含的就是最後安裝好的Linux, 就當作是虛擬機器唯一的一顆硬碟吧! 大小其實按建議值8192MB就夠了. 除非電腦之前有使用過VirtualBox, 不然應該是還沒有映像檔, 所以點選"新增", 出現"建立新的虛擬磁碟精靈", "下一步"後兩個選項都可以點選, Dynamically expanding storage是映像檔的大小會依實際用到的容量而改變, 但最大不超過之前設定的大小, Fixed-size storage是映像檔的大小在建好之後就是當初設定的大小(比如說8192MB). Next
5. Location 的地方是選擇映像檔存放的位置. Size則是剛提到的虛擬硬碟最大的容量. Next
6. 點選 Finish 即開始建立映像檔. 然後回到之前"虛擬硬碟"頁面. 就Next吧!
7. 至此初步的設定完成. 點選Finish結束精靈.




二. Compile FC6 Kernel Source
3. 參考 http://menkou.homelinux.net/serendipity/index.php?/archives/19-Fedora-Core-6-kernel-compile.html
的步驟, 結果在 yum install rpmdevtools yum-utils 就出了問題.
解決方式:
1. yum install yum-utils
2. yum upgrade elfutils-libelf
3. 再次 yum install rpmdevtools

問題的原因還不清楚, 也沒空看了. 繼續照參考的網頁做下去.

2008年10月3日 星期五

安裝Windows Embedded CE 6.0(含更新)

這邊紀錄一下安裝 Windows Embedded CE 6.0 的流程:

目前最新的更新之月份: 2008/8 (需要是 CE 6.0 R2 才能更新)

1.以光碟片安裝 Visual Studio 2005, CE 6.0 與 VS2005 是緊密連結的

2.透過 Windows Update 將 VS2005 Update 到 SP1

http://windowsupdate.microsoft.com/

3.以光碟片安裝 CE 6.0

4.安裝 Windows Embedded CE 6.0 SP1 (required if PB 6.0 Tools have been installed)

檔名: Windows Embedded CE 6.0 Platform Builder Service Pack 1.msi

http://www.microsoft.com/downloads/details.aspx?FamilyID=bf0dc0e3-8575-4860-a8e3-290adf242678&DisplayLang=en

5.安裝 Windows Embedded CE 6.0 R2

檔名: CE60_R2_setup.exe

http://www.microsoft.com/downloads/details.aspx?FamilyID=F41FC7C1-F0F4-4FD6-9366-B61E0AB59565&displaylang=en

6."依序"安裝更新

檔名:
WinCEPB60-071231-Product-Update-Rollup-Armv4I.msi
WinCEPB60-080131-2008M01-Armv4I.msi
WinCEPB60-080229-2008M02-Armv4I.msi
WinCEPB60-080331-2008M03-Armv4I.msi
WinCEPB60-080430-2008M04-Armv4I.msi
WinCEPB60-080531-2008M05-Armv4I.msi
WinCEPB60-080630-2008M06-Armv4I.msi
WinCEPB60-080731-2008M07-Armv4I.msi
WinCEPB60-080831-2008M08-Armv4I.msi

http://msdn.microsoft.com/en-us/embedded/aa731256.aspx

2008年7月17日 星期四

vim 常用的指令與設定

記在這裡以免忘記
1. 改變顏色配置
colorscheme xxx (就是使用在 /usr/share/vim/vim71/color/xxx.vim 的檔案裡頭的配置)

2. 對程式碼內容的顏色設定
syn match cAAA display "aaa" --> 指定符合的字串. cAAA 表示符合的字串集合名稱

hi cAAA guifg=#3EFFE2 ctermfg=blue --> guifg是圖形化vim的前景顏色
ctermfg是終端機型態vim的前景顏色
guibg, ctermbg --> 背景顏色

2008年7月2日 星期三

linux kernel 裡的 container_of()

這個巨集能 根據某 member 指標 來找其所屬的 structure的指標.

定義在 include/linux/kernel.h , 裡面的註解如下:

/**
* container_of - cast a member of a structure out to the containing structure
*
* @ptr: the pointer to the member.
* @type: the type of the container struct this is embedded in.
* @member: the name of the member within the struct.
*
*/
#define container_of(ptr, type, member)
(
{
const typeof( ( (type *)0)->member ) *__mptr = (ptr);
(type *)( (char *)__mptr - offsetof(type,member) );
}
)

看來是利用 member 的位置直接減去其與 type 的 offset 來找出包含其 member 的結構的指標.
(個人的解讀, 有錯誤請高手指導)

可以參考高手 jserv 的blog:
http://blog.linux.org.tw/~jserv/archives/001399.html

2008年6月25日 星期三

andLinux的設定

前一陣子將工作平台改安裝Linux. 順便將原來在Windows上使用的andLinux安裝檔放上來.

mem=768
root=/dev/cobd0
initrd=initrd.gz
kernel=vmlinux
cobd0=Drives\base.drv
cobd1=Drives\swap.drv
# cobd2 \Device\Harddisk1\Partition1 --> /
#cobd2=\Device\Harddisk1\Partition1
#cobd3=\Device\Harddisk1\Partition2 swap
# cobd3 \Device\Harddisk1\Partition3 --> /home
#cobd3=\Device\Harddisk1\Partition3
#eth0=slirp
cobd4=g:\work.img

# For coLinux development purpose
eth0=pcap-bridge,"local",00:0F:3A:01:C2:27
eth1=tuntap,"TAP-Colinux",00:27:29:33:44:56

我的 .vimrc

這邊將我目前的 .vimrc 記錄下來.
裡頭參考了很多網頁. 感謝先進們~

if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
set cscopetag
set cscopequickfix=s-,g-,c-,d-,t-,e-,f-,i-
endif

" 不自動存檔
set nobackup

" 自動縮排
set autoindent
set cindent

" 顯示行列位置
set ruler

" 自動找對應括號
set showmatch

" tab 設置
set shiftwidth=4
set tabstop=4

" 語法高亮度
syntax on

"顯示行號"
set number

"支援滑鼠"
set mouse=a

" 把 tab 展開成空白.
set et
" 相反地設定
set noet

"設定高亮度搜索
set hlsearch

"輸入字串就顯示匹配點
set incsearch

let Tlist_Use_Right_Window=1
let Tlist_File_Fold_Auto_Close=1

" 垂直分割視窗, 且在左邊開啟檔案管理員介面
map :vs:Explore
" 遞迴搜尋游標所在字元
map :call Search_Word()
" 不存檔離開
map :q!
" 前一個 buffer 檔案
map :bp
" 下一個 buffer 檔案
map :bn
" 全能補全
inoremap
" 切換顯示行號
map :set nu!
map :set nu!
" 呼叫TagList
map :TlistToggle

"當設為1的話, 當呼叫出TagList的分割時, 會將TagList的分割視窗OnFocus.
"let Tlist_GainFocus_On_ToggleOpen = 1

2008年6月22日 星期日

Fedora Core 9 筆記 -- smbmount

最近安裝了 Fedora Core 9 當作工作平台.
在連接 別台電腦的分享資料夾的時候發現

怎麼沒有 smbmount 的指令呢?

先看一下 smbclient 的版本
smbclient --version

嗯!Fedora Core 9 使用的版本是 3.2.0rc1-14.fc9

看一下 smbclient 的說明是否有什麼特別的地方.
man smbclient

馬上看到一行說明:
smbclient - ftp-like client to access SMB/CIFS resources on servers

smbclient 是一種類 ftp 的 client 端, 能存取網路上伺服器提供的 SMB/CIFS 資源.

CIFS 這個名詞我還沒有聽過. 沒關係, 再看看關於 smbd 的說明好了.
smbd 是一個 daemon, 能建立 samba server 讓自己的電腦能分享資料夾給別人.

man smbd 後果然也看到一下的說明:
smbd - server to provide SMB/CIFS services to clients

看來 SMB/CIFS 是同樣的東西囉!?

在 man 的畫面下鍵入 /cifs 來搜尋 man 裡頭的 cifs 字串.
終於發現一段話:
CIFS(formerly SMB). 哈! 證明了剛剛的猜測試對的.

不過問題還是沒解決. 到底要如何達到 smbmount 的功能呢?
繼續找線索.

man cifs 看看, 沒有關於 cifs 的說明.
不過 cifs 既然然有 fs 這兩個單字, 通常是 file system 的縮寫.
那有可能使用 mount 來掛載嗎?

所以 man 一下 mount: man mount
同樣搜尋一下 cifs : /cifs

發現一段說明:
For a few types however (like nfs, nfs4, cifs, smbfs, ncpfs) ad hoc code is necessary. The nfs, nfs4, cifs, smbfs, and ncpfs have a separate mount program.

大概的意思是 mount 能支援包含 cifs 等檔案系統, 而且對每一種檔案系統, 是不同的 mount 程式在負責的.

所以結果已經很明顯了. 使用 mount 應該就能取代 smbmount.
繼續搜尋 mount 的說明, 有一段說明:
Mount options for cifs
See the options section of the mount.cifs(8) man page
(cifs-mount package must be installed).

看來要支援 cifs , 系統需要安裝 cifs-mount 這個套件.

來確認一下系統是否安裝了 cifs-mount 的套件.

sudo yum search cifs-mount

結果並沒有找到這個套件. 這樣就有點奇怪. 不死心. 再找一次:

sudo yum search cifs

總算有結果了:
gvfs.i386 : Backends for the gio framework in GLib
nautilus-share.i386 : Easy sharing folder via Samba (CIFS protocol)
samba.i386 : The Samba Suite of programs
samba-client.i386 : Samba client programs
smb4k.i386 : The SMB/CIFS Share Browser for KDE

看起來最有機會的是 nautilus-share.i386 這個套件了.

猜測系統應該是支援 cifs 的.

所以就以 mount 來掛載網路上分享的資料夾:

sudo mount -t cifs //192.168.x.x/public /mnt/test -o username=abc

稍微說明一下上一行 mount 指令使用的參數:
-t 指定掛載目標的檔案系統
-o 表示使用 option. 在此例中 username 就是要使用的 option
因為掛載資料夾其所屬的系統可能要輸入帳號與密碼.

按下 後, 終於成功啦!!!


花了一番功夫後終於成功, 可以發現看指令說明的習慣非常地有幫助. 雖然都是英文的. 不過可以拿來當作練習英文的機會.

FC9 安裝後要建立的功能還很多. 有新的發現會繼續放在 部落格 上頭.