7/30/2009

BT porting(3) - background

在porting的幾天裡 有很多background實在吃不消

只能見招 然後查docment或google 真的不行就只好問人(hychen又要靠北別interrupt我...)

然後昨天又被yvonne大姐唸說去把整個process去好好了解一下..

結果今天快下班前...yvonne大姐BT porting for WinCE竟然好了 !!!

shit ~~ 一整個就是悶到極點

還特地跑過來叫我過去看 這就算了 還一邊說:看到沒,BT一直掃呀掃的

很想把血吐到她臉上.....................

恩..這不重要 還是先說明目前的situation

昨天一直沒辦法利用TI的BTS(bluetooth scirpt)把chip初始化並set up device

但撇開BTS不談,就算chip沒辦法initialzation,可是至少要能找到MAC

因為MAC是燒進chip裡面的,而且我也找的到chip,照理說應該要能configure到

可竟然沒有!!!所以我把重心放在make kernel上....結果又是我自己耍白痴...

花了幾個小時,終於知道為什麼沒辦法使用Bluez tools了...因為根本沒載入module...

我一直以為把bluetooth protocol相關東西用build-in到kernel去就好...根本沒管module

所以我把modules加進filesystem去並insmod,果然就好了= =

剩下BTS的問題了...但查到8點半一直查不出原因 只好放棄先回家K文件寫心得了...(慘)

===========================================================================

接下來開始說明bluez UART BTS等相關backgorund...因為是硬啃下去的...

所以若有說明不解或資料不齊...未來會慢慢補上.

===========================================================================

Bluez是官方 Linux Bluetooth stack,由主機控制介面(Host Control Interface ,HCI)層、Bluetooth 協定核心、邏輯鏈路控制和適配協定(Logical Link Control and Adaptation Protocol,L2CAP)、SCO 音訊層、其他 Bluetooth 服務、使用者空間後臺預設程式以及設定工具組成.

而bluez裡面,有一個源始碼叫hci_core.c ,它是HCI的核心所在,而H4 procotol跟BCSP procotol全都依賴這個HCI core,而H4跟BCSP的源始碼也放在bluez裡叫hci_h4.c和hci_bcsp.c,想更深入了解的人可以先去翻閱.

那H4跟BCSP又是什麼呢?BCSP全名叫BlueCore serial Protocol,而H4是UART的規範,如果是RS232呢?那就是H3 procotol,所以這次的HCI protcol將會用到H4跟BCSP,所以在設置核心時,記得要打勾!!

己經知道BT會用到的protocol之後,再來就是要來了解是誰負責傳/收資料,誰又是負責處理資料.

負責傳/收當然就由UART負責跟硬體層溝通,接著會到serial core,這個serial core會把UART接收到的信號轉成數位,而且handle所有的資料跟接口(ports),並且對該device向tty I/O註冊,而tty I/O會再把它轉換成device並通知核心註冊一個character device,讓你能夠經由terminal對serial port下command.

而處理資料是經過一個叫HCIline discipline,Line disicpline是在同一種serial driver上使用不同科技的一種方法,它是位於serial core的上層,如果說serial是負責控制硬體傳/收資料,那line disicpline就是負責處理這些資料的方法,而且是在user space及kernel space做傳輸.

它會執行封包切割 配置並且產生相對對應的網路資料結構,然後把對應的資料傳送到對應的協定層...沒錯,它將會傳送到H4及BCSP的協定層.

而這顆chip是屬於內置CSR bluetooth並使用UART連接.因為CSR是設計為HCI資料分組,所以必為要用hciattach來通知bluez來鏈結驅動程式.

至於BTS...因為怕會牽扯到資料洩密的問題,所以我也不便多說....只能它說是TI額外設置chip的東西.

當然也不是每一顆bluetooth的晶片都會如此這樣做,像我google了一些別人的platform...有些人porting的chip都要自己額外去設置....那個才叫慘..

大致上整個process應該如我上面所述(噴了幾個晚上的眼淚查閱到的...)

若有半點遺漏或錯誤的地方 請更正我!!!

7/27/2009

BT porting (2) - cross complie

終於今天在下班前把bluez的 dependent都安裝好了 原因出在於....我自己白爛= =

因為我沒瞭解到configure設置的重要性 導致一堆lib連結出錯....一直以為是toolchain的問題..

好在hychen(之前名字打錯...被他靠北了一下) 最後出手救了我

當他說:「好好檢查你安裝lib的位置」,我才知道,我套件幾乎都安裝路徑都錯了

原因出在於 configure設置,所以今天要來好好瞭解configure 及 make設置。

其實cross compile並不難,好好檢查一下config.log的訊息,很容易找出原因

最不好找的就是路徑及連結lib,因為這種就是google也很難救的了你

你必須要知道自己設置了哪些environment、compile哪些檔、會安裝到哪裡等等

這些都知道,如果是少檔或是要改source code,看一下及google一下很簡單就解決了(當然也不是絕對,只是依我目前遇到的狀況...)

cross compile(交叉編譯)的意思是指,在host(本機)用目標(target)的toolchain(工具鍵)把所有的source code都compile,並且安裝到target的root file system裡面。

所以,在configure設置時,最常見到就是:

#CC=arm-linux-gcc ./configure --prefix=/usr --host=arm-linux

CC是configure用於指定C編譯器的變量,linux source code(包括kernel source)幾乎都是用C撰寫,所以大多數隻要指定CC就好。

prefix是預設安裝目錄。因為現在的package幾乎都是用autoconf,會自動生成Makefile,所以configure設置變的很重要,會影響到Makefile,也就影響到你編譯出來的程式是不是正確的,假設今天我的工作目錄是在/home/dickyjob,當我把 --prefix=/usr,這時它不會安裝到/home/dickyjob/usr底下喔,它會跑到/usr,所以我通常(在TI文件學的)在make完之後,要安裝時都會加:

make install DESTDIR=/home/dickyjob

加上prefix的設置,它是才如我遇期的裝到/home/dickyjob/usr底下。(當然也有人直接把prefix的路徑設好,這樣就可以直接打make install,但我覺得我這種方法比較直覺...見人見智囉^_^)

host、build、target這都是指軟件運行的系統平台,只是略有不同:

--host:是你編譯好之後要運行的平台
--build:是你目前正在使用的機台(也就是local)
--target:是你編譯的程序可以處理的平台,這個比較好不理解,實際上我用到的機會也不多,但稍微翻了一下文件,所以我先說自己理解的部份:

大部份我們都是編譯程序,而不是工具,也就是說,arm-linux-gcc就是工具,我們一般用到的機會不多,因為廠商都會準備好,不太可能還讓你自己編譯工具(除非他不想賣了.....找死?),幾乎都是把「工具」拿來編譯我們要的程序.....

OK,如果還不太瞭解,大家都知道如果要打造一個toolchain,跑不掉下面這些套件:

binutils : toolchain的二進制檔
gcc : toolchain的gcc工具
glibc : toolchain的C lib庫
glibc add on : toolcahin的額外lib庫

在製作工具時,--target就很重要了,如果想自己做一個toolchain或想更瞭解交叉編譯,可以到這

ARM cross-compile HOW TO


./configure的設置有很多,但大部份都很直覺,只是最主要的設置不要出錯就好,喔,還有,當要重新configure時,最好把config.cache先殺掉,因為先前的設置會儲存在裡面,安全一點先殺點會比較好。

更多configure設置


下面是我自行寫的script,想配置configure輕鬆一點...

#!/bin/sh
#環境
export PATH=/home/arm/2007q1/bin:$PATH
export PREFIX=/home/dickyjob
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export HOST=arm-linux
export BUILD=i686-linux
CROSS_COMPILE=arm-linux
export CC=$CROSS_COMPILE-gcc
export CXX=$CROSS_COMPILE-g++
export AR=$CROSS_COMPILE-ar
export RANLIB=$CROSS_COMPILE-ranlib
export NM=$CROSS_COMPILE-nm
export AS=$CROSS_COMPILE-as
export LD=$CROSS_COMPILE-ld
export STRIP=$CROSS_COMPILE-strip
export READELF=$CROSS_COMPILE-readelf
export STRINGS=$CROSS_COMPILE-strings
export SIZE=$CROSS_COMPILE-size
export ADDR2LINE=$CROSS_COMPILE-addr2line

7/26/2009

BT porting(1)

接下來整理在 porting BT 時的心得 雖然目前在交叉編譯的地方卡住= =

但爭取一天寫一次心得 務必盡快上手

local:

Linux distribution: Ferdora 11

kernel version: 2.6.29

gcc version:4.4.0

Target :

board : TI OMAP2430

chip : TI WL1271

kernel version : 2.6.14

BSP version : 18.12

----------------------------

對這個platform的硬體沒啥概念 只知道這顆chip能夠support WiFi+BT+Android

看的出來我會跟這系列的chip常打交道了 所以有空要補上

(documents看不完呀呀~~~~)

----------------------------

目前拿到所有kernel&BT的packge 但我還沒有看到編譯給target用的工具

所以我連上公司遠端直接做cross compile 用的是arm-none-linux-gnueab

可是我很懷疑這cross compile是不是對的= =

hyson說他的WiFi是用這個compile 沒道理我這不是...唉 鬱悶呀~

先總結一下目前我所認知BT :

藍牙協議堆疊依照其功能可分四層:

* 核心協議層(HCI、LMP、L2CAP、SDP)
* 線纜替換協定層(RFCOMM)
* 電話控制協定層(TCS-BIN)
* 選用協議層(PPP、TCP、IP、UDP、OBEX、IrMC、WAP、WAE)

藍牙規範(Profile)是指藍牙通訊在那一種用途下應該使用的通訊協定和相關的規範。藍牙1.1定義的profile有13個。SIG 認為藍牙裝置有4個最基本的 Profile:

* General Access Profile(GAP)
* Service Discovery Application Profile(SDAP)
* Serial Port Profile(SPP)
* General Object Exchange Profile(GOEP)

我所關心的是核心協議層,其中

LMP(Link Management Protocol):它主要是負責base band與之間控制訊息的交換

HCI(Host Controller Interface):這個介面是用來處理Host與BT device之間的通訊,透過HCI,無論這個BT device是以USB介面還是serial port介面連接到Host,Host都可以存取BT device,聽起來很像是驅動程式,但它卻不會像驅動程式一樣去存取記憶體等資源,它的作法是HCI透過發送命令或是資料封包到BT device,這時BT device也會回覆資訊,所以簡單講,HCI提供了一個uniform的介面來存取BT device

L2CAP(Logic Link Control and Apapation Protocol):L2CAP是負責多工,從上層送來的封包過大時,它是切成適當的大小往下層送,好讓下層可以處理,反之亦然.

SDP(service discovery protocol):簡單的話,這協議定議了如何發現哪個可用的BT deivce,並且在找不到BT device時,同時也有探測的功能.

Bluez它是標準的Linux Bluetooth module,幾乎支援各個BT device

整個BT architecture中,除了硬體的RF module , base band , Link Manager之外

還需要軟體部份的L2CAP,RFcomm module,SDP,TCS 而Bluez就是負責這部份

在Bluez的軟件中,又有Bluez-LibsBluez-Utils,其中Bluez-Utils就比較麻煩

它需要依賴dbus,expat(xml)等函式庫

所以在TI給我的BT package就有:

expat-2.0.1:提供XML library

dbus-1.2.1

bluez-libs-3.36

bluez-utils-3.36

openobex-1.3

但目前在cross compile dbus時 查了config.log 出現下列錯誤:

configure:26090: arm-none-linux-gnueabi-gcc -o conftest -ffunction-sections -fdata-sections -I/home/work/rootfs/usr/include -Wall -Wchar-subscripts -Wmissing-declarations -Wmissing-prototypes -Wnested-externs -Wpointer-arith -Wcast-align -Wsign-compare -Wdeclaration-after-statement -fno-common -I/home/work/rootfs/usr/include -L/home/work/rootfs/usr/lib conftest.c -lexpat >&5
/tmp/ccENhlU7.o: In function `main':
conftest.c:(.text.main+0x8): undefined reference to `XML_ParserCreate_MM'
collect2: ld returned 1 exit status
configure:26114: result: no
configure:26270: error: Explicitly requested expat but expat not found

這原因讓我非常納悶...在公司跟在家裡遇到的錯誤竟然不一樣!!

configure是這樣設置:

CFLAGS=-I/home/work/rootfs/usr/include CPPFLAGS=-I/home/work/rootfs/usr/include LDFLAGS=-L/home/work/rootfs/usr/lib CC=arm-none-linux-gnueabi-gcc ./configure -C --prefix=/home/work/rootfs/usr --without-x --host=arm-linux --with-xml=expat --sysconfdir=/etc --localstatedir=/var

----

(轉載) embedded linux 啟動過程中問題的積累

恩 在網上發現了一個好文章 所以很無恥的就轉載過來了 !!!

-------------------------------------------------------------------

1.Bad Magic Number

## Booting image at 33000000 ...

Bad Magic Number

OMAP5912 OSK # (tftp下載好kernel的uImage後就停止在這,不能啟動kernel)

問題原因:啟動參數設置錯誤,0x30000000處不可以執行。

有 的開發板sdram不是在0x33000000,所以不能把kernel uImage下載到0x33000000中運行。如我之前的bootcmd參數為:setenv bootcmd tftpboot 33000000 uImage\; bootm 33000000。但板子Omap5912的sdram地址在0x100000000,將參數改為setenv bootcmd tftpboot 10000000 uImage\; bootm 10000000後便可以啟動kernel了。

-------------------------------------------------------------------


2.啟動停止在"Starting kernel ..."

TFTP from server 192.168.167.170; our IP address is 192.168.167.15

Filename 'uImage'

Load address: 0x10000000

Loading: #################################################################

#################################################################

done

Bytes transferred = 2025908 (1ee9b4 hex)

## Booting image at 10000000 ...

Image Name: Linux-2.6.18-mh8_pro500-versatil

Image Type: ARM Linux Kernel Image (uncompressed)

Data Size: 2025844 Bytes = 1.9 MB

Load Address: 30008000

Entry Point: 30008000

Verifying Checksum ... OK

OK

Starting kernel ... (卡在這裡)

問題原因:多半是kernel沒編譯成功。

確認configure參數是否配置正確,是否選擇了正確的目標編譯平台,如smdk2410等。

-------------------------------------------------------------------


3.不能啟動kernel

Starting kernel ...

Uncompressing Linux.........................................................

.................... done, booting the kernel.

問題原因:可能是Bootargs參數設置錯誤,確認bootargs設置是否正確。

-------------------------------------------------------------------


4.不能掛載nfs

eth0: link up

IP-Config: Complete:

device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,

host=192.168.167.15, domain=, nis-domain=(none),

bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=

Looking up port of RPC 100003/2 on 192.168.167.170

Root-NFS: Unable to get nfsd port number from server, using default

Looking up port of RPC 100005/1 on 192.168.167.170

Root-NFS: Unable to get mountd port number from server, using default

mount: server 192.168.167.170 not responding, timed out

Root-NFS: Server returned error -5 while mounting /work/nfs/rootfs_bluetooth_omap

VFS: Unable to mount root fs via NFS, trying floppy.

VFS: Cannot open root device "nfs" or unknown-block(2,0)

Please append a correct "root=" boot option

Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

問題原因:這種情況通常是nfs配置問題。

確 認uboot的bootargs參數里和nfs相關的ip地址信息設置是否正確,以及Host機/etc/exports配置無誤,重起nfs服務,重新 嘗試連接。另外還需要注意bootargs內console和mem兩個參數的設置。kernel2.6後console最好設置為 ttySAC0,mem也要根據開發板實際情況設置正確。

-------------------------------------------------------------------


5.文件系統不能啟動問題

eth0: link up

IP-Config: Complete:

device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,

host=192.168.167.15, domain=, nis-domain=(none),

bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=

Looking up port of RPC 100003/2 on 192.168.167.170

Looking up port of RPC 100005/1 on 192.168.167.170

VFS: Mounted root (nfs filesystem).

Freeing init memory: 128K

/sbin/initKernel panic - not syncing: Attempted to kill init!

問題原因:製作的文件系統缺少運行busybox所需的libcrypt.so庫,新版本會有缺庫提示,老版本(1.60)沒有。

註:運行一個busybox文件系統至少需要如下幾個庫:

ld-linux.so.x

libc.so.6

libcrypt.so.x

較新版本的busybox可能還需要

libm.so.6

libgcc_s.so.x

(x為版本號)


-------------------------------------------------------------------

6.文件系統不能啟動問題2

eth0: link up

IP-Config: Complete:

device=eth0, addr=192.168.167.15, mask=255.255.255.0, gw=192.168.167.254,

host=192.168.167.15, domain=, nis-domain=(none),

bootserver=192.168.167.170, rootserver=192.168.167.170, rootpath=

Looking up port of RPC 100003/2 on 192.168.167.170

Looking up port of RPC 100005/1 on 192.168.167.170

VFS: Mounted root (nfs filesystem).

Freeing init memory: 128K

Kernel panic - not syncing: No init found. Try passing init= option to kernel.

問題原因:對比一個可用的文件系統後發現,缺少了ld-linux.so.x庫,文件系統裡只有ld-linux.so.x的連接文件,少拷了庫文件。

-------------------------------------------------------------------


7.不能獲得帳戶UID信息

Could not get password database information for UID of current process: User "???" unknown or no memory to allocate password entry

Unknown username "root" in message bus configuration file

Could not get password database information for UID of current process: User "???" unknown or no memory to allocate password entry

Failed to start message bus: Could not get UID and GID for username "root"

問題原因:

情況一:系統帳戶驗證出現問題.懷疑是調用getuid、getguid時並沒有返回正確值,可能是缺少帳戶驗證相關庫,實際排查後發現,缺少libnss_files庫。拷貝交叉編譯器的libnss_files庫到文件系統後,啟動文件系統成功。

情況二:系統沒有root帳號。可以由whoami命令看出。

手動創建帳號。

#vi /etc/passwd

root:x:0:0:root:/root:/bin/sh

kyo:x:500:500:kyo:/home/kyo:/bin/bash

添加組

#vi group

root:x:0:root

-------------------------------------------------------------------


8.

Freeing init memory: 128K

init started: BusyBox v1.6.1 (2007-08-27 14:33:15 CST) multi-call binary

starting pid 834, tty '': '/etc/init.d/rcS'

Cannot run '/etc/init.d/rcS': No such file or directory

Please press Enter to activate this console.

發現沒有/etc/init.d/rcS文件系統一樣能正常啟動。看來rcS只是用來設置一些隨機啟動的參數,對文件能否正常運行關係不大。

註:這個不是錯誤,是偶然發現! :)

Embedded for Linux 簡單概念

(以下是小弟個人見解....僅供參考)

為什麼會有embedded system這東西出現?

說實話這問題讓我干擾很久,嘸歹嘸誌搗鼓出這玩意兒來殘害幼苗嗎?

有句說常聽過:「有需求就會有創新、有創新就會有市場」

你沒需求何苦去創新一個沒人要欣賞的東西呢?

embedded會出現,是因為有人要求希望能做一個體積小到靠北、又要五臟俱全的系統

說白一點,embedde就是拿來做為一個特定用途的一個系統,前提是,要在有限的資源來完成你所需求的功能!

embedded system,撇開硬體不講,作為一個能夠跟CPU、硬體及週邊設備、存取記憶體、暫存器、記憶體管理等等.......而這些東東,被叫做一個作業系統的玩意來跟它們「溝通」。

而驅使作業系統運作,稱之為「核心」,也就是kernel;要取得這kernel非常簡單,但前提是,你要如何把這kernel塞到embedded system裡去呢?

一般kernel的容量是不可能塞到裡面去的,所以必須把一些不要或者沒那個需求的功能都剔除掉,保留住所要的功能就好,但被剔除掉的功能就沒辦法在用了嗎?如果真是這樣的話,那這個embedde也就廢掉了。

再強調一次,視你所要的需求做出你要的embedded system,如果你要做出符合全部人的需求,理論上是可以,但要想,依目前的市場競爭及成本、時間,幾乎是沒辦法實視。(因為某些事,讓我非常重視這句話........)

在linux kernel porting的功能,分為兩大類:

1.Microprocessor architecture level

2.Board support package (BSP) level


第一類稱之為微處理器,也就是CPU,在原本的kernel包含了許多家廠商的CPU support(像是ARM、PPC、MIPS等等),而這些微處理器的架構分為兩種:MMU和MMU-less。

一般來講,MMU架構的話,用一般linux kernel porting即可,而MMU-less要用uClinux去porting了,這也是為什麼會有uClinux(當然也是用linux kernel)的出現。

還好這一階層的embedded porting己經由提供platform的廠商幫你處理好了,也就是說,廠商會提供一個適合這個platform的核心給你,你只需要清楚你用的CPU是啥就好。

BSP是介於硬體和作業系統(kernel)的一層,只是更遍向於kernel。

簡單來說,BSP就是support board hardware 的特殊軟件,也可以理解成,BSP是為了讓kernel能夠更好運行硬體主板,所以不同的kernel,就會有不同的定義形式BSP....

如果還不太瞭解,我舉一個列子,大家都有用過vmware吧?大家也知道vmware跟你真實上所運行的CPU一定是同一顆吧?可是vmware對CPU的接口定義跟你PC運行OS對CPU的接口定義卻是完完全全不同,也可以說,它們倆BSP是不可能一樣的,儘管它們連接的是同一個硬體。

那BSP include哪一些東西呢?

a. Bootloader support (開機啟動初始化)
b. Memory map support (記憶體管理)
c. System timers (恩...這我未清楚是啥= =")
d. Interrupt controller support (中斷控制管理)
e. Real-Time Clock (RTC) (小弟並不清楚RTC是啥,只知道涉及核心架構,未來再來詳細解讀...)
f. Serial support (debug and console) (串列通訊,也就是UART)
g. Bus support (PCI/ISA)
h. DMA support ( 直接記憶體存取 direct memory access)
i. Power management (電源管理)

Root file system也在其中(沒root file system怎麼support上面的東西勒...),這些能夠讓核心能夠更好運行硬體主板的support,都統稱為board support package (BSP)。

以上這些是把Embedded放大來看,自行整理出來的一個觀念。

P.S shit....BT的東西還未整理出來,而且還卡住!!!!! 天呀~~~

7/25/2009

MBR毀損之救援MS

剛才在我姐那台電腦灌linux 結果發現竟然灌不上去 !!!

嘗試幾遍幾後 也只好宣告先暫時放棄

可是當我重開機 突然發現 出現了下列訊息:

NTLDR missing .......

非常好 看來之前灌linux時 GRUB也放在MBR區 加上linux沒有灌完全

想當然而 沒有GRUB 也就沒有東西可以引導MBR去指向MS開機

所以這時我拿出SPFdisk

憑藉這支赫赫有名的分割軟體來幫MBR建立一個開機選單想必很EZ才是.....

結果......

幹 還是不行

腦海中突然浮現出"河東獅吼"四個字 嚇的我一身冷汗 全身顫抖不己....

不行!! 得趁某人未發現前 快點修復好MBR 讓萬惡的MS出來

不得己只好出絕招 .... 參拜估狗大神

果然 有很多人遇過這問題 這邊我自己再整理歸納一下 客倌請看 :

1. 請準備好MS的光碟 不管是低級XP 還是超級XP 能灌XP就是好XP

2. 放入光碟後 請選擇 "R"進入修復主控台

3. 在等待進入期間 請不要亂按ENTER 一直到它詢問你 要進入哪個系統 ?

如果你的系統很多,會叫你按 1、2等等來讓你選系統 請不要選錯

4. 選完之後 它會要你輸入 Administrator 的密碼 如果你灌XP時沒有設的話 就直接按ENTER

5. 然後會進入大家很熟悉MS-DOS命令列 不過這跟MS-DOS不一樣喔 這裡的指令全是大寫,有興趣知道主控台的命令可以上MS的官方查

6. 在 C:\Windows> 下鍵入 Fixboot如果是linux系統移除不乾淨,不然就是沒灌完全讓GRUB殘留在MBR,縱使是用SPFdisk蓋掉MBR,但此時MBR早就己經指向你之前灌linux的分割區,若是發現這種事,請鍵Fixboot (device) ,這device就是你要引導開機的磁區先修復MS的開機磁區。

7. 接著再鍵入 COPY X:\I386\NTLDR C:\ (複製光碟的NTLDR檔案到C槽)

X: 是光碟機的代號, 不知光碟機代號可以在C:\打"map"就會出現所有的分割槽及光碟機代號了

8. 鍵入 COPY X:\I386\NTDETECT.COM C:\ (複製光碟的NTDETECT.COM檔案到C槽)

9. 鍵入 ATTRIB -H-S-R C:\NTLDR (重設C槽NTLDR檔案的屬性)

10. 鍵入 ATTRIB -H-S-R C:\NTDETECT.COM (重設C槽NTDETECT.COM檔案的屬性)

OK !! 到這一步就可以打 exit,重新開機之後就可以看到萬惡的MS了!!! 歡呼吧!!!!


P.S 結果,最後發現.............我姐另一顆硬碟.........竟然是壞軌,難怪灌不上去.........

壞軌就扔了呀!!! 放在那是讓人誤會就對了.......

你母親勒.........搞好幾個小時....欲哭無涙呀呀~~~~


讓Fedora11可以解rar 看電影 聽mp3 !!!!

前陣子隨著Fedora 11發怖final版 我也迫不急待安裝下去

果然 開機速度真的超快 應該不到15秒吧

跟之前的Fedora 10真的有差!!

滿推薦想玩Linux的人可以試著去裝看看

當然Ubuntu 9.04也很不錯 hyson算是Ubuntu的死忠派吧....

可以去義守載 下載速度有1M喔 超快!!!

不囉嗦 今天先來介紹一下如何把Linux變成跟Windows一樣

當然 除了遊戲以外...Linux要玩Win平台的話 要裝Wine的套件

等有機會再來用Wine看看吧....不過網路上很多教學 google一下就有了

---------------------------------------------

那要如何在Fedora 11下面解RAR ?

因為Linux並不支援RAR文檔格式 通常都是要靠opensource

請先來這下載

別載錯了喔!!是要for Linux的

版本多少是沒差啦...我是載RAR3.80 for Linux 下載完後 輸入下面指令

#gunzip rarlinux-3.8.0.tar.gz
#tar -xvf rarlinux-3.8.0.tar
#cd rar
#make

執行完make之後 就可以正式使用rar囉~~~!!!

解rar指令

#unrar x <解壓檔名>

壓縮rar

#rar a <壓縮檔名> <要壓縮的檔案>

其它指令直接打rar就可以看到了 功能跟windows版的rar一模一樣(不打指令也可以直接點右鍵.....)

-----------------------------------

接著介紹要如何聽mp3及看電影勒?

相信這點是至關重要呀!!!!

套件名稱叫mplayer 它可以看電影又能聽音樂 只是我是用另一個套件播放mp3

mplayer放mp3感覺頓頓的= =

整個重點就在於code 要看電影 要聽音樂 都要有相對應的code去解碼

所以接下來會下載滿多東西的....

install the Fusion repository and mplayer

1.Install fusion repository
#su -c 'rpm -Uvh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm'
2.Install mplayer-gui
#yum install -f mplayer-gui
3.Install xine player
#yum install -f xine
4.Install xine extra codes
#yum -y install xine-lib-extras-nonfree
5.Install vlc player
#yum -y install vlc
6.Install Dvd-Playback
#yum -y install libdvdread
7.Install windows codes
#wget http://www1.mplayerhq.hu/MPlayer/releases/codecs/all-20071007.tar.bz2 #tar -jxvf all-20071007.tar.bz2
#su -c 'mkdir -p /usr/local/lib/codecs'
#su -c 'cp all-20071007/* /usr/local/lib/codecs'
#su -c 'ln -sf /usr/local/lib/codecs /usr/lib/codecs && ln -sf \ /usr/local/lib/codecs /usr/local/lib/win32 && ln -sf /usr/local/lib/codecs '
8.Install mp3-playback
#su -c 'yum -y install gstreamer-plugins-ugly libmad libid3tag id3v2'

要是播放沒有聲音,檢查一下sound

----------------------------------------

解決mplayer字幕亂碼

在Mplayer的Preferences的Subtitle&OSD選項中
在Subtitle的選項內,把Encoding:選Big5 (是字幕檔的編碼)
下方的選項中,請把 Unicode subtitle 給打勾

接著來到Font的選項中,有人是可以選別的Font 不過我是把Font填空

接著把Encoding的選項選到Unicode即可。

親切的中文出現囉!!!!!

--------------------------------

這是avi格式


這是rmvb


這是mp3

解決X-window崩潰或crash的問題

雖然這禮拜才剛上班 但也很快就被賦予任務

hyson也很開心的拚命操我(幹在心中口難開呀...)

我負責BT(bluetooth)的porting

所以下篇開始就要寫BT的血淚史...請期待

現在這篇是在今天早上正在弄cross compile environment時...

因為筆電有點舊 在執行process突然變的很慢 而且SELinux沒關

所以我先把selinux關掉 (/etc/selinux/config)

接著重開機.....結果

X windows 竟然crash了!!!!!

出現以下訊息:

The greeter application appears to be cashing....

這讓我感覺很意外 因為這台筆電是帶出去在客戶那demo用的 所以有滿多東西在裡面

所以我只好先叫hyson幫忙一下

只見他劈利啪拉的打了一堆指令 只知道他在查process的樣子....

最後他打了df 查看系統空間 結果發現/root使用率己經100%了...

換而言之 就是整個系統己經沒空間了

所以他猜測可能是空間的問題 這時我也把這錯誤訊息google了一下

結果還真的是對的...

不過這讓我想到之前在客戶那也碰到類似的問題

也是X windoes崩潰 ... 錯誤訊息好像/tmp什麼空間不夠 要強制關掉x server

所以啦...如果各位有發生這類的問題時

一般都是系統空間不足 不然就是配置文件設定錯誤

先用df查下你的系統空間 或者是針對訊息去查該檔案的空間是否己超出等等

如果還不能解決 那就用第二個方案:改配置文件

有兩個相關的文件要去改

/etc/sysconfig/desktop

/etc/X11/prefdm

Linux的桌面管理程序有GNOME和KED 所以你自己要先弄清楚屬於哪個管理程序:

1. 修改/etc/sysconfig/desktop

這文件可能會在系統升級之後丟失,所以在啟動時系統可能會找不到桌面管理程序而「拒絕登錄」。如果發現自己的系統裡沒有此文件,需要手工創建它,然後加上一行

  DISPLAYMANAGER=gdm

  或者

  DISPLAYMANAGER=kdm


2. 直接修改/etc/X11/prefdm 系統啟動完畢後會讀取此文件,然後啟動相應的桌面管理程序。

去查看它的源始碼,可以發現它是讀取/etc/sysconfig/desktop來決定要使用管理程序

所以這時請把/etc/X11/prefdm的內容都先mark掉

把 preferred= 這行留著就好, 接著你可以改成

preferred=/usr/sbin/gdm

or

preferred=/usr/sbin/kdm

其中那xdm...我猜測是支援mac的桌面管理...不然就是虛擬桌面管間,所以如果是用這個,就指定它吧

然後存檔重開機,無意外的話應該就能正常登入X window

7/23/2009

創意的ydict

說實話 我玩linux那麼久(雖然才1年多...)

但近來己經被hysion給刺激的差點心臟病

雖然是我的高中同學 雖然他為人機歪又牽拖 雖然他現在是我的同事兼學長

但他的linux真不是蓋的 全是自學來的(幹...我也是呀...怎麼就差那麼多!!)

每次我為了繼承孔子的遺訓 發揮不恥下問的精神時

他總是會回我一句:you are smart more

好吧 我不確定有沒有聽錯

我知道我英文差 但我還是會秉持著"被上個幾次總有一次會高潮"的精神努力下去!!

好 言歸正傳 總之

我被打擊到了

但好在也從他那偷到一個名叫 ydict 超棒線上查英的perl

其實也沒多棒 只是連到yahoo而己

可是這還是非常棒的創意呀呀!!!!!

身為台灣人的我感到非常驕傲

據hysion本人說 寫這個perl的人 是他的相好

有興趣的人 可以聯絡他

不囉嗦 先貼用ydict來查詢英文的樣子 :







貼心的小提示:

記得要先把ydict的權限改成可執行

然後放到/usr/bin底下就ok了!!


#chmod a+x ydict

#cp ydict /usr/bin