工作要應付客戶千奇百怪的問題,所以複製相同的環境變成很重要的一個課題。
之前就有遇到一個問題,客戶端使用Fedora 14,告知我們kernel version是2.6.35。
我去kernel.org抓下kernel 2.6.35的版本來修改,但是客戶那邊卻回覆我們與他們使用的kernel不同(比較後得知)。怕有些地方會出問題,所以請我們跟他們要用相同的檔案!
原因是因為每一個發行版本都會去將使用的kernel version做自己的一些patch,像著名的RHEL(CentOS)就是patch到跟2.6.18的kernel差非常多XD
那如何取得發行版本所使用的真正kernel source呢!?
Debian系列很簡單,只要透過 apt-get source 套件名稱 即可。
Redhat系列就相對麻煩,因為必須要透過RPMS來取得source code(有錯請告知^^)。
所以進入主題了,如何透過RPMS來取得source code呢!?
1. 取得RPMS的spec
~$ rpm -ivh kernel-2.6.35.6-45.fc14.src.rpm
這時候就會有kernel source以及相當多的patch被放在 ~/rpmbuild/BUILD下面
以及被放在~/rpmbuild/SPECS下面的kernel.spec
2. 透過spec,讓rpmbuild做到將kernel patch完畢然後停止,不然等rpmbuild做完,他也會順道將BUILD底下的東西砍光...
~$ rpmbuild -bp ~/rpmbuild/SPECS/kernel.spec
-bp : Executes the "%prep" stage from the spec file. Normally this involves unpacking the sources and applying any patches.
所以就作到這邊就好! patch好的kernel source就會被放在 ~/rpmbuild/BUILD下面^^
雖然rpm -ivh *.src.rpm會將source and patch放置到BUILD下面,但是避免手動patch出錯,這樣的方式是比較快而且正確的。不然以前都傻傻的rpmbuild到make時強制中斷XD
2010年11月17日 星期三
2010年10月5日 星期二
RALINK RT3070
最近很常用到這個模組,紀錄一下安裝方式。
~$ tar jxf DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.tar.bz2
~$ cd DPO_RT3070_LinuxSTA_V2.3.0.2_20100412
由於make後insmod時會產生很多Unknown symbol,所以修改以下檔案
~$ vi os/linux/rt_linux.c
35 #endif // OS_ABL_SUPPORT //
36 #endif //RTMP_MAC_USB //
37 MODULE_LICENSE("GPL") << 加入這個
~$ make
~$ make install (雖然會產生不少錯誤訊息,但是還是讓他做一些事情 XD)
由於 rt3070sta這隻驅動在載入時會去讀 /etc/Wireless/RT2870STA/RT2870STA.dat (由 kernel message得知)
~$ mkdir -p /etc/Wireless/RT2870STA/
~$ cp RT2870STA.dat /etc/Wireless/RT2870STA/
原先kernel會載入不對得module - rt2800usb,所以必須將他disable。
將以下這幾個加入blacklist
~$ vi /etc/modprobe.d/blacklist.conf
blacklist rt2800usb
blacklist rt2x00usb
blacklist rt2x00lib
blacklist crc_ccitt
再將新的module搬到對的位置就結束了!
~$ cp os/linux/rt3070sta.ko /lib/modules/`uname -r`/kernel/net/wireless/
~$ depmod -a
重開機~結束!
~$ tar jxf DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.tar.bz2
~$ cd DPO_RT3070_LinuxSTA_V2.3.0.2_20100412
由於make後insmod時會產生很多Unknown symbol,所以修改以下檔案
~$ vi os/linux/rt_linux.c
35 #endif // OS_ABL_SUPPORT //
36 #endif //RTMP_MAC_USB //
37 MODULE_LICENSE("GPL") << 加入這個
~$ make
~$ make install (雖然會產生不少錯誤訊息,但是還是讓他做一些事情 XD)
由於 rt3070sta這隻驅動在載入時會去讀 /etc/Wireless/RT2870STA/RT2870STA.dat (由 kernel message得知)
~$ mkdir -p /etc/Wireless/RT2870STA/
~$ cp RT2870STA.dat /etc/Wireless/RT2870STA/
原先kernel會載入不對得module - rt2800usb,所以必須將他disable。
將以下這幾個加入blacklist
~$ vi /etc/modprobe.d/blacklist.conf
blacklist rt2800usb
blacklist rt2x00usb
blacklist rt2x00lib
blacklist crc_ccitt
再將新的module搬到對的位置就結束了!
~$ cp os/linux/rt3070sta.ko /lib/modules/`uname -r`/kernel/net/wireless/
~$ depmod -a
重開機~結束!
linux/bounds.h No such file or directory
make clean後,會刪除一些檔案,除了.ko之外,也會刪除一些include檔
linux/bounds.h並不是一開始就在kernel source內,而是透過Kbuild產生
~$ make prepare
CHK include/linux/version.h
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-x86
CC kernel/bounds.s
GEN include/linux/bounds.h
CC arch/x86/kernel/asm-offsets.s
GEN include/asm/asm-offsets.h
CALL scripts/checksyscalls.h
linux/bounds.h就產生了。
linux/bounds.h並不是一開始就在kernel source內,而是透過Kbuild產生
~$ make prepare
CHK include/linux/version.h
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-x86
CC kernel/bounds.s
GEN include/linux/bounds.h
CC arch/x86/kernel/asm-offsets.s
GEN include/asm/asm-offsets.h
CALL scripts/checksyscalls.h
linux/bounds.h就產生了。
2010年9月28日 星期二
GL 測試
節錄於 Intel官網 一段回答
– 對於 Linux* 上的 GL,有什麼好的效能標竿測試?
常常有人建議使用 glxgears 檢查 GL 的運作,認為這是容易的方法。好處是,大多數 Linux 發行版都有附帶。可惜 glxgears 不會運用太多 GL,所以並不是很好的 GL 效能標竿。其 FPS 報告只是評量從繪圖緩衝區複製的情況。
若要嚴格測試圖形系統,反而應該使用「glblur -fps」或「sierpinski3d -fps」。這些程式附帶在 xscreensaver 套組中 (請參閱 http://www.jwz.org/xscreensaver,但請從您所用發行版的軟體庫或從 http://rpmfind.net/linux/rpm2html/search.php?query=xscreensaver 下載二進位檔案)
這裡的 -fps 選項會顯示 CPU 負載數字並附上 FPS 報告。Glblur 會使 CPU 負載保持在高而穩定的狀態。Sierpinski3d* 會透過使用的多邊形數量,使其負載發生變化。多邊形增加到 4,096 時,其負載上升到高於 glblur 的負載,而 sierpinski3d 的 FPS 就會下降。
ubuntu使用apt-get install xscreensaver-gl時,並不會安裝glblur以及sierpinski3d,所以重新取得source code並compile成可執行檔。
但是不太懂他的數據,之後再研究。
– 對於 Linux* 上的 GL,有什麼好的效能標竿測試?
常常有人建議使用 glxgears 檢查 GL 的運作,認為這是容易的方法。好處是,大多數 Linux 發行版都有附帶。可惜 glxgears 不會運用太多 GL,所以並不是很好的 GL 效能標竿。其 FPS 報告只是評量從繪圖緩衝區複製的情況。
若要嚴格測試圖形系統,反而應該使用「glblur -fps」或「sierpinski3d -fps」。這些程式附帶在 xscreensaver 套組中 (請參閱 http://www.jwz.org/xscreensaver,但請從您所用發行版的軟體庫或從 http://rpmfind.net/linux/rpm2html/search.php?query=xscreensaver 下載二進位檔案)
這裡的 -fps 選項會顯示 CPU 負載數字並附上 FPS 報告。Glblur 會使 CPU 負載保持在高而穩定的狀態。Sierpinski3d* 會透過使用的多邊形數量,使其負載發生變化。多邊形增加到 4,096 時,其負載上升到高於 glblur 的負載,而 sierpinski3d 的 FPS 就會下降。
ubuntu使用apt-get install xscreensaver-gl時,並不會安裝glblur以及sierpinski3d,所以重新取得source code並compile成可執行檔。
但是不太懂他的數據,之後再研究。
2010年9月10日 星期五
Use Broadcom crystalhd on Fedora12
945GSE因為播放高清影片會頓到不行,Linux上播HD也會稍微感覺到卡卡的,所以找了硬體加速卡想來增加影片品質。
最簡易的方式就是安裝XBMC這個Media Center,ubuntu10.04可以直接透過apt-cache search xbmc搜尋到,但是不確定是否是支援Crystalhd的版本。這次目標是Fedora12!
1. 準備會用到的環境
參考 這裡 來安裝XBMC所需的lib以及package。
~$ yum install automake libtool autoconf gstreamer-plugins-base-devel gstreamer-devel kernel-devel (這是CrystalHD會用到的packages)
2. 安裝Broadcom CrystalHD Driver
~$ cd driver/linux
~$ chmod +x bcm_70012_dev.sh
~$ chmod +x bcm_70012_run.sh
~$ autoconf
~$ ./configure
~$ make ; make install
~$ cd ../../linux_lib/libcrystalhd
~$ make ; make install
~$ cd ../../filters/gst/gst-plugin/
~$ ./autogen.sh
最簡易的方式就是安裝XBMC這個Media Center,ubuntu10.04可以直接透過apt-cache search xbmc搜尋到,但是不確定是否是支援Crystalhd的版本。這次目標是Fedora12!
1. 準備會用到的環境
參考 這裡 來安裝XBMC所需的lib以及package。
~$ yum install automake libtool autoconf gstreamer-plugins-base-devel gstreamer-devel kernel-devel (這是CrystalHD會用到的packages)
2. 安裝Broadcom CrystalHD Driver
~$ cd driver/linux
~$ chmod +x bcm_70012_dev.sh
~$ chmod +x bcm_70012_run.sh
~$ autoconf
~$ ./configure
modify crystalhd_lnx.h line 92
inline struct device *chddev(void);
~$ cd ../../linux_lib/libcrystalhd
~$ make ; make install
~$ cd ../../filters/gst/gst-plugin/
~$ ./autogen.sh
~$ make ;
make install
~$ cd ../../../firmware/fwbin/
~$ cp 70012/* 70015/* /lib/firmware/
3. 安裝 XBMC
~$ cd XBMC/
~$ sudo ln -s /usr/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
~$ ./bootstrap
~$ ./configure
~$ make
~$ make install
4. 假如selinux有開啟的話,執行下面指令來enable xbmc *.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/avutil-50-i486-linux.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/avcodec-52-i486-linux.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/avformat-52-i486-linux.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/swscale-0.6.1-i486-linux.so
這時候就可以開啟xbmc以及看到xbmc -> system -> video -> playback 下有 Allow hardware acceleration (CrystalHD)這個選項了。但是不幸的是,選了CrystalHD也沒作用...
原來是kernel本身有一個driver crystalhd在 drivers/staging/crystalhd下,而新的crystalhd.ko是安裝到drivers/video/broadcom/下。
而load modules的順序,會是staging/crystalhd/crystalhd.ko會先被load進去。所以只要將新的crystalhd.ko 蓋掉drivers/staging/crystalhd/crystalhd.ko即可。
~$ cd ../../../firmware/fwbin/
~$ cp 70012/* 70015/* /lib/firmware/
3. 安裝 XBMC
~$ cd XBMC/
~$ sudo ln -s /usr/lib/mysql/libmysqlclient.so.16.0.0 /usr/lib/libmysqlclient.so
~$ ./bootstrap
~$ ./configure
~$ make
~$ make install
4. 假如selinux有開啟的話,執行下面指令來enable xbmc *.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/avutil-50-i486-linux.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/avcodec-52-i486-linux.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/avformat-52-i486-linux.so
~$ chcon -t texrel_shlib_t /usr/local/lib/xbmc/system/players/dvdplayer/swscale-0.6.1-i486-linux.so
這時候就可以開啟xbmc以及看到xbmc -> system -> video -> playback 下有 Allow hardware acceleration (CrystalHD)這個選項了。但是不幸的是,選了CrystalHD也沒作用...
原來是kernel本身有一個driver crystalhd在 drivers/staging/crystalhd下,而新的crystalhd.ko是安裝到drivers/video/broadcom/下。
而load modules的順序,會是staging/crystalhd/crystalhd.ko會先被load進去。所以只要將新的crystalhd.ko 蓋掉drivers/staging/crystalhd/crystalhd.ko即可。
************************** XBMC on ubuntu 9.04 ***************************
也需要source code重新編譯,因為ubuntu與fedora filesystem安裝的東西相差蠻多的,所以在此記錄
1. 取得xbmc repository
~$ sudo vi /etc/apt/sources.list
add two lines
deb http://ppa.launchpad.net/team-xbmc/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/team-xbmc/ppa/ubuntu jaunty main
~$ sudo apt-get update (Get Key 91E7EE5E)
~$ sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 91E7EE5E
~$ sudo apt-get update (Get xbmc repository)
~$ cat README.ubuntu
~$ cat README.linux
2010年9月2日 星期四
EZUSB PC/SC smartcard reader on ubuntu 9.10
這個smartcard reader module是很汎用的一個組件。之前在很多板子以及Linux Dist.下都有做過測試,都沒出現無法使用的問題 (ex: Fedora12)。但是在ubuntu 9.10上就觸礁了,因此要尋找解決方式。
參考:這裡
最後解決的方式是︰rebuild pcscd (1.5.3)
一開始我去抓了最新的pcscd (1.6.4)的source code來編譯,一直都失敗,最後有成功,但是卻因為做了很多瑣事,不能確定如何成功的。為了正確的步驟,還原後卻再也無法成功...
後來抓了同版本的pcscd (1.5.3),enable libuusb、disable libhal後就可以讓裝置正常運作 (淚)
1. Get pcscd source code
~$ sudo apt-get source pcscd
2. Rebuild pcscd source code with special parameter
~$ mv pcsc-lite-1.5.3 /usr/local/
~$ mkdir /usr/local/pcsc-lite-1.5.3/drivers/
~$ cd /usr/local/pcsc-lite-1.5.3/
~$ sudo apt-get install libusb-dev
~$ sudo ./configure --disable-libhal --enable-libusb --enable-usbdropdir=/usr/local/pcsc-lite-1.5.3/drivers/
~$ sudo make
~$ sudo make install
3. Download Castles Tech EZUSB PC/SC driver from
http://www.casauto.com.tw/en/in-download.aspx
4. Install EZUSB PC/SC smartcard reader driver
~$ tar zxf EZUSB_Linux_x86_v1.4.9.tar.gz -C /usr/local
~$ cd /usr/local/EZUSB_Linux_x86_v1.4.9/driver_ezusb_v1.4.9
Modify install to change install path "/usr/local/pcsc/" to "/usr/local/pcsc-lite-1.5.3/"
~$ sudo ./install
5. Auto start pcscd when pc start
~$ vi /etc/rc.local
add "/usr/local/sbin/pcscd"
Finish.
後記︰在Fedora 12下,~$ pcscd -version,他預設也是enable libhal,但是卻可以運作一 一
驅動裡面的Readme有寫,不支援libhal,因此ubuntu才需要rebuild pcscd。Fedora 12這點讓我不解。
參考:這裡
最後解決的方式是︰rebuild pcscd (1.5.3)
一開始我去抓了最新的pcscd (1.6.4)的source code來編譯,一直都失敗,最後有成功,但是卻因為做了很多瑣事,不能確定如何成功的。為了正確的步驟,還原後卻再也無法成功...
後來抓了同版本的pcscd (1.5.3),enable libuusb、disable libhal後就可以讓裝置正常運作 (淚)
1. Get pcscd source code
~$ sudo apt-get source pcscd
2. Rebuild pcscd source code with special parameter
~$ mv pcsc-lite-1.5.3 /usr/local/
~$ mkdir /usr/local/pcsc-lite-1.5.3/drivers/
~$ cd /usr/local/pcsc-lite-1.5.3/
~$ sudo apt-get install libusb-dev
~$ sudo ./configure --disable-libhal --enable-libusb --enable-usbdropdir=/usr/local/pcsc-lite-1.5.3/drivers/
~$ sudo make
~$ sudo make install
3. Download Castles Tech EZUSB PC/SC driver from
http://www.casauto.com.tw/en/in-download.aspx
4. Install EZUSB PC/SC smartcard reader driver
~$ tar zxf EZUSB_Linux_x86_v1.4.9.tar.gz -C /usr/local
~$ cd /usr/local/EZUSB_Linux_x86_v1.4.9/driver_ezusb_v1.4.9
Modify install to change install path "/usr/local/pcsc/" to "/usr/local/pcsc-lite-1.5.3/"
~$ sudo ./install
5. Auto start pcscd when pc start
~$ vi /etc/rc.local
add "/usr/local/sbin/pcscd"
Finish.
後記︰在Fedora 12下,~$ pcscd -version,他預設也是enable libhal,但是卻可以運作一 一
驅動裡面的Readme有寫,不支援libhal,因此ubuntu才需要rebuild pcscd。Fedora 12這點讓我不解。
ALC883 on ubuntu 10.04, 9.10
測試intel pineview + alc 883,發現聲音出不來。但是驅動是有正常運作 (可以調音量、看裝置)。
參考 這裡
這邊有verb-tabe的介紹
kernel內也有祥細文件: kernel/Documentation/sound/alsa/HD-Audio.txt
ALC883跟ALC888相同,都是HD Audio Codec,所以是snd-hda-intel。
/usr/share/doc/alsa-base/driver/ALSA-Configuration.txt.gz內可以看到Module snd-hda-intel的相關敘述。
>> Module for Intel HD Audio (ICH6, ICH6M, ESB2, ICH7, ICH8, ICH9, ICH10, PCH, SCH),
>> Each codec may have a model table for different configurations.
>> If your machine isn't listed there, the default (usually minimal)
>> configuration is set up. You can pass "model=" option to
>> specify a certain model in such a case. There are different
>> models depending on the codec chip. The list of available models
>> is found in HD-Audio-Models.txt
所以接下來去參考kernel source下的Document/sound/alsa/HD-Audio.txt以及 HD-Audio_models.txt.
>> 3stack-6ch 3-jack 6-channel
裡面有相當多的model可以指定,但是並沒有太多時間去測試那些model的差異,選擇一個普通的3-jack 6-channel即可。
在/etc/modprobe.d/alsa-base.conf下指定他的model = 3stack-6ch即可
options snd-hda-intel model=3stack-6ch
重新開機! 聲音Get!
The HD-audio codec has usually "pin" widgets, and BIOS sets the default configuration of each pin, which indicates the location, the connection type, the jack color, etc.
在板子硬體設計完成時,會將線路交給廠商看。廠商會提供verb-table給bios工程師包進bios內,而verb-table會對codec下一連串命令,由於每個板子codec的ping widgets不盡相同,所以verb-table也不會相同。
The most common problem regarding the HD-audio driver is the unsupported codec features or the mismatched device configuration. Most of codec-specific code has several preset models, either to override the BIOS setup or to provide more comprehensive features.
因此,可能是bios有問題,這邊才需要修改alsa-base.conf來手動指定model。
http://www.alsa-project.org/alsa-info.sh
好用的shell script,會去audio相關檔案抓資料。
/sys/class/sound/hwCxDx有audio driver資料.
參考 這裡
這邊有verb-tabe的介紹
kernel內也有祥細文件: kernel/Documentation/sound/alsa/HD-Audio.txt
ALC883跟ALC888相同,都是HD Audio Codec,所以是snd-hda-intel。
/usr/share/doc/alsa-base/driver/ALSA-Configuration.txt.gz內可以看到Module snd-hda-intel的相關敘述。
>> Module for Intel HD Audio (ICH6, ICH6M, ESB2, ICH7, ICH8, ICH9, ICH10, PCH, SCH),
>> Each codec may have a model table for different configurations.
>> If your machine isn't listed there, the default (usually minimal)
>> configuration is set up. You can pass "model=
>> specify a certain model in such a case. There are different
>> models depending on the codec chip. The list of available models
>> is found in HD-Audio-Models.txt
所以接下來去參考kernel source下的Document/sound/alsa/HD-Audio.txt以及 HD-Audio_models.txt.
>> 3stack-6ch 3-jack 6-channel
裡面有相當多的model可以指定,但是並沒有太多時間去測試那些model的差異,選擇一個普通的3-jack 6-channel即可。
在/etc/modprobe.d/alsa-base.conf下指定他的model = 3stack-6ch即可
options snd-hda-intel model=3stack-6ch
重新開機! 聲音Get!
The HD-audio codec has usually "pin" widgets, and BIOS sets the default configuration of each pin, which indicates the location, the connection type, the jack color, etc.
在板子硬體設計完成時,會將線路交給廠商看。廠商會提供verb-table給bios工程師包進bios內,而verb-table會對codec下一連串命令,由於每個板子codec的ping widgets不盡相同,所以verb-table也不會相同。
The most common problem regarding the HD-audio driver is the unsupported codec features or the mismatched device configuration. Most of codec-specific code has several preset models, either to override the BIOS setup or to provide more comprehensive features.
因此,可能是bios有問題,這邊才需要修改alsa-base.conf來手動指定model。
http://www.alsa-project.org/alsa-info.sh
好用的shell script,會去audio相關檔案抓資料。
/sys/class/sound/hwCxDx有audio driver資料.