Unix程式設計/應用問答中文版 ---14.一些小工具的使用 15.32-bit/64-bit相關問題(轉)

post0發表於2007-08-10
Unix程式設計/應用問答中文版 ---14.一些小工具的使用 15.32-bit/64-bit相關問題(轉)[@more@]

作者:不祥 [文章出自: ]

14. 一些小工具的使用

14.1

14.2

14.3 只在本地檔案系統上查詢

14.4

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

15. 32-bit/64-bit相關問題

15.1 Solaris下如何識別當前核心版本

15.2 如何啟動Solaris 32-bit/64-bit核心

15.3 gcc支援64-bit編譯嗎

15.4 Solaris啟動時核心檔案找不到了

15.5 64-bit驅動程式無法在8下關聯,但在7下工作正常

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

14.3 只在本地檔案系統上查詢

Q: 我不想在NFS AUTOFS CACHEFS這些檔案系統上查詢檔案

A: Sun Microsystems 2001-02-12

下面舉例演示如何不在NFS檔案系統上查詢檔案

# find / -name su -type f -print -o -fstype nfs -prune

下例表示不在PROC檔案系統中查詢檔案(參看/etc/vfstab檔案)

# find / -name su -type f -print -o -fstype proc -prune

15. 32-bit/64-bit相關問題

15.1 Solaris下如何識別當前核心版本

Q: 我編寫了一個核心模組,在Solaris 7/8下編譯透過,模組中如何識別當前正在運

行核心版本

A: Andrew Gabriel

參看adb使用的宏"utsname",32-bit的位於usr/lib/adb/utsname,此外可以參看

/usr/include/sys/utsname.h檔案,但是這些不是DDI/DKI相容的。

sysdef | more 看看

A: scz

非DDI/DKI相容意味著喪失良好的可移植性,未來版本的Solaris可能不再提供相應的

支援,但是就Kernel Hacking而言是可以一試的。

adb -P 'sun>' -k /dev/ksyms /dev/mem

sun>$

utsname:

utsname: sys SunOS

utsname+0x101: node sun27

utsname+0x202: release 5.7

utsname+0x303: version Generic_106541-08

utsname+0x404: machine sun4u

sun>$q

cat /usr/lib/adb/sparcv9/utsname

utsname+0="" +/"sys"8t257c +/"node"8t257c

+/"release"8t257c +/"version"8t257c

+/"machine"8t257c

more /usr/include/sys/utsname.h

#define _SYS_NMLN 257 /*

* 4.0 size of utsname elements

* Must be at least 257 to

* support Internet hostnames.

*/

#define SYS_NMLN _SYS_NMLN

struct utsname

{

char sysname[_SYS_NMLN];

char nodename[_SYS_NMLN];

char release[_SYS_NMLN];

char version[_SYS_NMLN];

char machine[_SYS_NMLN];

};

顯然adb下的命令是針對struct utsname結構來的。簡單地truss uname -a,可以看

到如下輸出

ioctl(1, TCGETA, 0xFFBEE5DC) = 0

sysinfo(SI_ARCHITECTURE, "sparc", 257) = 6

sysinfo(SI_PLATFORM, "SUNW,Ultra-5_10", 257) = 16

暫時沒有跟蹤這幾個系統呼叫在做什麼,想必類似/usr/lib/adb/sparcv9/utsname宏。

15.2 如何啟動Solaris 32-bit/64-bit核心

Q: Algos@Unix 水木清華 2001-12-04 18:12

對於UltraSPARC-I/Solaris 8,可以修改/platform/sun4u/boot.conf檔案,使操作

系統執行在64位或者32位,但對於其他機型呢,比如E420、E450、E4500之類伺服器

怎麼改?好像起來後就是64位的,怎麼才能改成32位的呢?

Q: 顯然有一些32-bit驅動程式以及一些應用軟體不能工作在64-bit核心下,比如gcc

編譯的32-bit IP Filter。我必須啟動到32-bit核心模式下,怎麼辦?

A: dkoleary@mediaone.net

32-bit : ok boot disk kernel/unix

64-bit : ok boot disk kernel/sparcv9/unix

為了設定成預設啟動核心模式

32-bit : ok setenv boot-file kernel/unix

64-bit : ok setenv boot-file kernel/sparcv9/unix

為了確定你所啟動的核心模式

isainfo -b

根據你所啟動的核心模式,該命令分別返回32、64

A: Will Wang 2001-06-09 02:17

一個辦法就是啟動時按Stop-A進入OK模式,輸入

ok> setenv boot-file kernel/unix

ok> boot

另一個辦法是已經在shell狀態下了,執行命令

# eeprom "boot-file=kernel/unix"

系統重啟之後將自動載入32-bit核心

15.3 gcc支援64-bit編譯嗎

Q: gcc -v顯示版本2.95.2,isainfo -kv顯示64-bit sparcv9 kernel modules,我

企圖透過指定"-mcpu=v9 -m64"獲得64-bit程式碼,提示m64未被支援,僅僅指定

mcpu=v9,在彙編階段報告""v8 can't generate v9 code",我使用的彙編器是

/usr/ccs/bin/as,隨Solaris 7/8提供的。

這是什麼問題,我需要一個64-bit彙編器嗎,從哪裡獲取呢?

A: Robert Banniza

我並不認為gcc 2.95.2已經開始支援64-bit編譯模式,或許你應該考慮採用

Sun WorkShop Compiler SPARC 5.0/6.0。

15.4 Solaris啟動時核心檔案找不到了

Q: 我的Solaris 7莫名其妙當機了,只好關電源,再開,發現錯誤

boot with command:boot now

cann't open now

enter filename[now]:

怎麼辦

A: dkoleary@mediaone.net

啟動時按Stop-A進入ok狀態,在這裡輸入

32-bit : ok boot disk kernel/unix

64-bit : ok boot disk kernel/sparcv9/unix

為了設定成預設啟動核心模式

32-bit : ok setenv boot-file kernel/unix

64-bit : ok setenv boot-file kernel/sparcv9/unix

A: liqun.bbs@bbs.gznet.edu.cn

試試這個,啟動時按Stop-A進入OK狀態

OK> setenv boot-file kernel/unix

OK> reset

15.5 64-bit驅動程式無法在8下關聯,但在7下工作正常

Q: 一個64-bit驅動程式在Solaris 7下載入、關聯(load & attach)成功,但在8下加

載(load)成功、關聯(attach)失敗。

A: Sun Microsystems 1998-06-13

從Solaris 8開始,64-bit驅動程式必須位於"sparcv9/"目錄中。而在Solaris 7中,

儘管不提倡,但即使64-bit驅動程式不在"sparcv9/"目錄中,也可以載入並關聯成功

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-940456/,如需轉載,請註明出處,否則將追究法律責任。

相關文章