當前位置:首頁 » 編程軟體 » 編譯freebsd源碼

編譯freebsd源碼

發布時間: 2023-07-30 04:48:21

㈠ FreeBSD和linux到底有什麼不同

1. 要說區別freebsd和linux實在是貌合神離,看起來類似,其實是從設計思想上的不同。
linux也有成功的應用案例,只不過沒有freebsd多就是了
最有名的就是google,全部是linux,實在讓大家佩服的不得了
2. FreeBSD是操作系統,Linux只是一個內核而已
3. FreeBSD直接由Unix發展而來,Linux是仿Unix而寫的。
4. Freebsd是由幾個人瘋狂做出來的.
Linux是由一個人瘋狂做出來的.
5. 這個問題的N種回答:
高深的:
FreeBSD,從unix移植到x86版的一群expert hacker
Linux,從x86從零開始編寫一個unix的一大群hacker
架構的:
FreeBSD是一個完整的系統架構
Linux擁有內核和各種五花八門的發行版
歷史的:
FreeBSD曾經碰到過一些法律問題,阻礙了FreeBSD的順利發展,正如Linux目前正在經歷的一樣
防禦的:
FreeBSD在承受網路攻擊方面,似乎比Linux更強壯
潔癖的:
FreeBSD的體系單一,比Linux的發行版機制更簡單
學習的:
FreeBSD的體系更適合研究技術,而Linux則向所有的領域進發,甚至跑到mac/pda/汽車控制/宇航/電影等等。
許可的:
FreeBSD的BSD許可,你可以做任何事情,只需要事先大喊一聲:「偶用了BSD技術」。而Linux的GPL需要你告訴別人你怎麼做的。
軟體的:
Linux在支持更多的軟體特性上面具有優勢(例如線程什麼的),FreeBSD緩慢一些
硬體平台的:
NetBSD做的不錯,Linux更加瘋狂,甚至跑在ps2上
外設的:
Linux支持的外部設備更多
安全的:
OpenBSD是霸主,Linux追趕,不過大家似乎公認安全在人
水平的:
FreeBSD開發組成員平均教育水平更高,這與Linux質量好壞有關嗎?
傳統的:
FreeBSD在系統穩定性上比Linux更好,也許早就過時了。
功績的:
FreeBSD最早實現了TCP/IP協議,在IPv4網路上優勢無以倫比。
未來的:
FreeBSD:把Solaris/AIX/HP UNIX等優勢都弄到x86上
Linux: 進入上述平台的領域
實用的:
FreeBSD在終端上具有傳統的優勢
Linux則在X體系以上獲得了不少分數,足夠沖擊windows

㈡ 有誰知道如何安裝配置安全的freeBSD還有php.ini怎麼配置

我的FreeBSD5.3配置筆記(相同於5.4\6.0)

接觸FreeBSD時間不長,我發現配置FreeBSD對於象我這樣的新手還是很有些困難,經過幾天的研究取得了一點進展,現在我的配置方法寫出來希望新手能少走一些彎路。
1.安裝完成配置xorg,命令如下:
#Xorg -configure
這時,當前目錄下就多了一個xorg.conf.new的文件,把它cp到/etc/X11/下:
#cp xorg.conf.new /etc/X11/xorg.conf
然後,編輯xorgcfg -textmode,修改一下屏幕的解析度.

2.啟動gnome
在用戶主目錄下創建.xinitrc文件,加入以下內容:
exec gnome-session
#startx 即進入gnome

3.啟動KDE
方法1:
在用戶主目錄下創建.xinitrc文件,加入以下內容:
exec startkde

方法2:
修改一下/usr/X11R6/1ib/X11/xinit/xinitrc文件
拉到文件最後...看到..twm了嗎...從這里起..後最後前面都加#吧..
然後加上一句:
startkde

方法3:
直接輸入
# echo "/usr/local/bin/startkde" >> ~/.xinitrc 就行了

4.打開聲音
修改/boot/defaults/loader.conf
將下面兩項的NO改為YES
sound_load="NO"
snd_driver_load="NO"

5.漢化圖形界面
1.安裝kde-i18n-zh_CN:
#cd /usr/ports/chinese/kde3-i18n-zh_CN
#make install clean
2.安裝字體
在/usr/X11R6/lib/X11/fonts/下建立TrueType目錄
將windows下的SIMSUN.TTC復制到TrueType目錄
雙擊SIMSUN.TTC,字體就安裝好了
3.更改語言環境為中國,簡體中文
4.在KDE的控制中心》外觀和主題》字體 中修改字體為SIMSUN

6.安裝fcitx輸入法
1.通過ports安裝fcitx
#cd /usr/ports/chinese/fcitx
#make install
2.修改~/.xinitrc,添加:
export LANG=zh_CN.eucCN
export LC_CTYPE=zh_CN.eucCN
export XMODIFIERS='@im=fcitx'
fcitx&
exec startkde
6.#qtconfig
然後選擇-->Interface--->XIM Input Style 選Over the Spot(上面的復選框也選上)-->File--Save

7.掛載windows分區並支持中文文件名
1.建立掛載點,在/mnt/下建立文件夾C,D,E,F
2.修改/etc/fstab文件,加入windows分區,並把分區掛載到剛才建好的目錄上,設置許可權為讀寫,語言為中文並自動掛載
/dev/ad0s1 /mnt/C msdos rw,-L=zh_CN.eucCN,auto 0 0
/dev/ad0s5 /mnt/D msdos rw,-L=zh_CN.eucCN,auto 0 0
/dev/ad0s6 /mnt/E msdos rw,-L=zh_CN.eucCN,auto 0 0
/dev/ad0s7 /mnt/F msdos rw,-L=zh_CN.eucCN,auto 0 0

8.激活滑鼠滾輪
修改/etc/xorg.conf
在"Mouse"中加入
Option "ZAxisMapping" "4 5"
保存推出,重啟X。

9.調整屏幕偏移
開個終端窗口運行xvidtune,調整好之後現不要退出,點一下那個「Show」按鈕,終端窗口中會顯示幾行類似於這樣的信息:

hsync range 0: 31.50 - 48.50
vsync range 0: 40.00 - 70.00
"1024x768" 65.00 1024 1048 1184 1344 768 771 777 806 -hsync -vsync

打開/etc/X11/XF86Config或者xorg.conf文件,找到Section "Monitor"段,在EndSection前面加入一行:
# 這里填入上面顯示的第3行信息,前面加上ModeLine
ModeLine "1024x768" 65.00 1024 1048 1184 1344 768 771 777 806 -hsync -vsync

保存退出,重啟X。

FreeBSD配置:

更新FreeBSD

完成了安裝、配置,FreeBSD基本上就算裝完了。不過,目前為止沒有哪個通用操作系統能夠保證「bug-free」,FreeBSD也一樣。在重新啟動之後,我們需要做一些調整;並且,通過重新配置內核,我們可以得到一個更小、更快的操作系統。

第一步要做的是同步源代碼。FreeBSD是一套開放源代碼的操作系統,它的全部源代碼都可以通過cvsup與中央cvsup伺服器,或它的某個鏡像同步。

cvsup是一個可選的package,同樣的,它也可以從ports裡面安裝(/usr/ports/devel/cvsup和 /usr/ports/devel/cvsup-nogui)。考慮到許多應用程序都依賴X的庫文件,在前面安裝的部分我安裝了它,並且直接安裝了 cvsup的package。不過,如果你有足夠的耐心去一個一個地make需要的ports,那麼先安裝ports collection,然後make cvsup-nogui也是一個不錯的主意,盡管這需要比較長的時間。

創建一個用於cvsup(1)的supfile,命名為stable-supfile:

(default host中選定的cvsup伺服器——ftp.bjpu.e.cn對訪問的IP進行了限制,筆者只在北京工業大學校內使用過,因此如果您無法連接這個伺服器,請嘗試www.cn.freebsd.org,或cvsup.freebsd.org)

*default host=ftp.bjpu.e.cn
*default base=/usr
*default prefix=/usr
*default release=cvs tag=RELENG_4
*default delete use-rel-suffix
src-all
ports-all tag=.

隨後執行

cvsup -g -L 2 stable-supfile

這里需要稍微解釋一下FreeBSD的幾種版本。

FreeBSD包括3類分支:-RELEASE,-STABLE和-CURRENT。FreeBSD 3.x、4.x和5.0是目前受到維護的版本,如果你期待穩定運行,那麼,可以選擇的最新版本將是FreeBSD 4.6-STABLE(如果你是在4.6.2-RELEASE發行之後更新的,那麼它實際上比4.6.2-RELEASE新,並且,它正式的CVS tag是RELENG_4,即FreeBSD 4-STABLE)。

那麼,三類分支有什麼區別呢?

FreeBSD的開發是非常活躍的。系統中可能會隨時引入一些新的特性。最新的代碼是在-CURRENT分支中引入的。-CURRENT的修改非常頻繁,每天都可能有數百處修改。使用-CURRENT分支的FreeBSD需要耐心和勇氣,因為你的系統隨時可能崩潰(隨著FreeBSD 5.0開發尾聲的接近,這種現象已經越來越少),make world也可能空手而歸(沒有人保證-CURRENT分支能夠正常編譯),此外,這個分支的性能也不好(因為調試的原因,這個分支引入了大量的調試選項,這意味著運行速度不會太快)。當然,正像它的名字那樣,-CURRENT分支的版本也是最新的5.0,而且,一切FreeBSD的錯誤和漏洞的修正都是首先在-CURRENT分支引入的。目前,-CURRENT分支碩果僅存的只有FreeBSD 5-CURRENT(指定cvs tag時寫「.」),這個分支包括了FreeBSD 5.0開發的最新進展。

FreeBSD 5中將引入大量的新特性,包括核心級線程(目前FreeBSD中的線程支持僅限於用戶級線程,這在多處理器的環境下性能不夠好,當然,目前使用fork ()來支持的多進程線程模擬能夠提供類似核心級線程的功能,但並不是所有的程序員都知道如何使用fork)、完整的Soft Updates(這一變化將提供更好的文件系統性能,同時提供更好的穩定性),等等。如果你有快速的Internet連接,一台或一些空餘的機器(當然,不是生產用的伺服器),並且希望為FreeBSD的開發作貢獻,或者你關心操作系統的最新發展,那麼,-CURRENT分支是最好的選擇。此外,

由於-CURRENT分支性能不好、穩定性不夠等這些缺點,對於生產的伺服器來說,通常運行的應該是FreeBSD-STABLE。如同它的名字那樣, FreeBSD-STABLE的目的是「穩定地運行」。-CURRENT分支中的代碼,在經過一段時間(通常是7到90天,但安全更新屬於特例,通常會在幾個小時)的驗證之後,符合版本條件(有些新特性只能用於FreeBSD 5.0)的代碼會被FreeBSD-STABLE吸收,這個操作稱作MFC(Merge From -CURRENT,不是Microsoft Foundation Classes:P)。

由於FreeBSD 5.0的第一個RELEASE至今仍然沒有發布,因此,目前還沒有5.0-STABLE。目前,FreeBSD-STABLE有兩個版本,FreeBSD 3-STABLE和FreeBSD 4-STABLE,分別對應3.x和4.x的最新穩定版代碼(對應的cvs tag分別是RELENG_3和RELENG_4)。由於版本的更新換代,其中3.x的-STABLE正在逐漸消亡。FreeBSD-STABLE每天平均會修改10個左右的文件。

每隔一段時間,FreeBSD的發行工程組(Release Engineering Team)會對FreeBSD-STABLE的源代碼樹進行鎖定。這段時間(目前的規定是30天,之前還有30天准備)內,所有的MFC操作都需要發行工程組的批准,因此,FreeBSD-STABLE在這個階段基本不會引入任何新的特性。經過這段時間之後,發行工程組會在最後鎖定ports樹,並 build一份所有的package,之後,這份鎖定的-STABLE,可能經過若干RC(Release Candidate),被命名為RELEASE,並製作光碟發行。

顧名思義,-RELEASE的設計目標是「發行」。一個版本一旦RELEASE,那麼他的功能就不會再增加了。此後的所有維護的目標都只有一個,那就是絕對穩定。如果你和-RELEASE分支同步,那麼絕不會出現make無法通過的情況,而且,通常這也可以保證你的系統「絕對」穩定,因為它不會引入任何新功能(例如,4.6就是4.6,如果你想要4.6.2的功能,必須明確地指定4.6.2)。

目前,FreeBSD有很多RELEASE版本,它們的cvs tag如下。我個人建議使用最新的4.6.2-RELEASE。

對於多數人來說,-RELEASE是一個比較極端的選擇。無論何時出現版本升級,如果你想跟進,那都必須修改supfile,如果你選擇不跟進,那麼就可能造成ports工作異常。如果經常更新,-RELEASE可以保證操作系統本身的安全性,但同其他分支一樣,如果ports出了問題,那麼也得一塊 make,而既然這樣,還不如使用-STABLE。

如果你符合下面的條件,那麼RELEASE分支可能比-STABLE分支更適合你

* 你使用的軟體對於操作系統的變化非常敏感,比如,它只能FreeBSD 4.5,而無法在4.6上運行;同時,你不打算採用它的更新版本,或者它的作者拒絕更新
* 操作系統的更新對於你來說沒有任何意義,比如,你打算把FreeBSD當作一個相對固定的嵌入式操作系統來使用,例如,作為防火牆的一部分
* 更新會對你造成困擾,操作系統的絕大多數新特性對於你來說除了增加煩惱之外,不能帶來任何其他東西。

-並且,符合以下的全部條件-

* 你每天察看FreeBSD,以及使用的全部軟體的安全公告
* 你的Internet連接比較通暢

目前我本人維護的所有主機,除了作為防火牆的那台之外,使用的都是FreeBSD-STABLE。

一旦同步完源代碼,就應該對整個系統進行更新。如果你沒有每天察看安全公告的習慣,那就應該關心一下cvsup到底更新了哪些代碼。nectar是目前 FreeBSD的Security Officer。如果你發現他一下子更新了許多代碼,那麼對你來說立即make world和kernel很可能是必需的。

為了更新整個系統,在/usr/src中執行

make world

以及

make kernel KERNCONF=內核配置文件名

當然,也可以連起來執行:

make world kernel KERNCONF=內核配置文件名

如果你的計算機運行速度較慢,那麼,對於基本系統的更新(相當於不包括庫的一次world),可以用

make most

替代make world,但make world是一個不錯的主意,因為它能夠保證對C運行環境的改變應用到所有的程序中,如果修正的不是動態連接的C函數庫,那麼make world可以保證代碼的一致性。

make kernel是一個需要重新啟動的操作。如果你的make world修改了系統的關鍵服務,那麼最好也重新啟動一下。我很少有耐心看完make world和kernel的執行,根據系統的運行速度不同,這需要一個小時到一天的時間,而且,不是所有的SSH客戶端都能夠長時間正確的執行,例如, SecureCRT的多個版本都有內存泄漏問題。

為了解決這個問題,我用下面的命令來完成更新:

make world kernel KERNCONF=內核配置文件名 clean > /var/log/world,out && reboot &

這個命令能夠記錄更新的全過程,如果在什麼地方編譯失敗,你可以很快地找到原因。對於多數人來說,由於後面的&&,只需要察看uptime就能知道便以是否成功。

需要說明的是,FreeBSD的make world並不總能成功。有時需要修改一些環境變數才能成功完成make。為了保證make成功,在/usr/src中執行任何make操作之前,建議你看一眼UPDATING中是否有特殊的要求(這種要求並不是在FreeBSD Release的時候才會出現,很多時候他會在某個CURRENT中引入,然後隨著MFC進入-STABLE分支),並且,在進行大的版本升級之前(跨 RELEASE,甚至主版本號),首先執行下面的命令

mergemaster -p

並在make world之後執行

mergemaster -i

運行mergemaster腳本需要一定的Unix配置知識,不過,由於配置文件中包含很多幫助信息,因此,只要master.passwd、group 這樣的文件不出大問題(如果cvsup更新了master.passwd,那麼就需要留神,因為master.passwd標准配置是root口令為空,這時需要用m來合並,而不是使用i安裝),mergemaster並不會引入什麼新的問題。

前一條命令是更新make的配置(/etc/defaults/make.conf和/etc/make.conf)。對於多數人來說,除非進行跨版本升級,否則一般情況下是不需要這樣做的。後一條命令是同步全部配置,並安裝以前不存在的配置文件,而不進行提示。

筆者曾經遇到過FreeBSD因為系統日期不正確而無法make的情況,因此,再次特別提醒大家,如果你的系統日期不正確,最好是用date命令修改一下,或者乾脆用ntpdate或ntpd來同步時間。關於如何使用ntp,將在以後說明。

以後我們將講解FreeBSD內核的配置,以及如何配置make.conf來優化FreeBSD的編譯結果。

「簡單的東西不容易出問題。」

至理名言!事實上,削減操作系統中那些對你沒用的功能是一件非常重要的事情。這不僅僅意味著一個更小的操作系統,佔用更少的磁碟空間(現在的硬碟少說也有幾十GB,幾兆的空間根本就是九牛一毛),而且意味著你被攻擊的可能性也更低——簡而言之,你不需要擔心操作系統中沒有安裝的模塊存在問題會對你造成影響。

這篇文章中,我們將一起對FreeBSD-i386的內核進行優化配置。這篇文章是針對FreeBSD4.7-STABLE寫的,並且,FreeBSD 4.x的配置不會和這篇文章有太大出入。如果你要優化FreeBSD 5或FreeBSD 2/3的內核的話,則需要仔細參考它們的LINT文件了(後面將會提到)。

[注意:FreeBSD 5.0預定將於2002年11月20日發布。FreeBSD的開發組非常重視發行版本的質量,並認為這比發行版本的計劃還重要,但由於同樣的原因,我們往往會發現FreeBSD實際發行的版本比預定計劃晚一些,通常在半個月之內。FreeBSD 5.0作為FreeBSD近期最為重要的發行版本,很可能也會延後發表,但筆者個人認為無論如何我們在今年年底之前肯定是可以看到最終的發行版本的。 FreeBSD 5.0對系統進行了大量的修改,這一系列的文章將在FreeBSD 5.0發布當天發表針對5.0的修訂版本,而現有版本將保留,但進入維護階段,不再引入新的內容。]

FreeBSD的源代碼可以直接從中央cvsup伺服器同步,也可以作為系統的一部分在安裝的時候一兵裝上。前面已經說過如何同步源代碼,在此不再贅述。 FreeBSD的源代碼(通常在/usr/src)包含建造基本系統的全部代碼,而在/usr/src/sys中則有若干個目錄,對應不同的計算機體系結構(4.x只支持i386和alpha)。i386是一個泛指的名字,包含了與Intel 80386兼容的所有機器,並不是特指80386。

簡單介紹一下FreeBSD的內核文件。在4.x系統中,/kernel這個文件是默認的內核,通常正常啟動使用的就是它。 /kernel.GENERIC這個文件是兼容性較強的內核,如果/kernel無法引導系統,就得靠這個文件來引導。/kernel.old是本次make kernel之前的內核,通常如果你的kernel壞掉,也可以考慮使用/kernel.old來引導系統。

/moles/是內核的模塊,而/moles.old/是對應/kernel.old的模塊。這些文件在每次替換kernel的時候都會同時替換。

在5.0中,內核以及內核的模塊都被保存在/boot/kernel中。

在/usr/src/sys/i386/conf中有兩個配置文件,GENERIC和LINT。其中GENERIC是make kernel的默認配置文件,直接make kernel生成的是GENERIC內核,但安裝時命名為/kernel。系統在安裝時會安裝一個kernel.GENERIC,以後,這個文件不會跟隨系統的make kernel更新,因此,如果你認為這個文件有必要更新的話,需要手工make kernel,並把/kernel改名為kernel.GENERIC。當然,通常並不需要這樣做。

LINT是包括幾乎所有內核編譯配置詳細信息的文件。這個配置並不是用來真正建立kernel的,他的主要用途是向用戶展示可用的內核編譯配置。在修改內核編譯配置時,最好先參考這個文件。

為了配置自己的內核,應將GENERIC復制為一個另外的文件。習慣上這個文件和主機名相同。例如,我把自己的這台Web機器命名為apache.intranet.frontfree.net,就把配置文件命名為APACHE:

cd /usr/src/sys/i386/conf
cp GENERIC APACHE

隨後,用ee APACHE編輯它。我們拿一個實際的GENERIC文件來說明。

為了節省篇幅,這個文件頭上的注釋被刪掉了一部分。
machine i386 # 體系模型為i386
cpu I386_CPU # 支持80386
cpu I486_CPU # 支持80486
cpu I586_CPU # 支持Pentium
cpu I686_CPU # 支持Pentium Pro以及更高
ident GENERIC # 內核文件的名字
maxusers 0 # 自動檢測同時允許的最大用戶數

#makeoptions DEBUG=-g # 包含調試符號。通常只有current版本打開
options MATH_EMULATE #支持協處理器模擬
options INET #支持互聯網
options INET6 #IPv6通訊協議
options FFS #伯克利快速文件系統
options FFS_ROOT #FFS作為根設備[必須保留]
options SOFTUPDATES #打開FFS soft updates支持
options UFS_DIRHASH #提高大型目錄的支持
options MFS #內存文件系統
options MD_ROOT #MD作為根設備
options NFS #Network Filesystem
options NFS_ROOT #NFS作為根設備(需要NFS)
options MSDOSFS #MSDOS文件系統
options CD9660 #ISO 9660文件系統(光碟)
options CD9660_ROOT #CD-ROM作為根設備(需要CD9660)
options PROCFS #進程文件系統
options COMPAT_43 #兼容4.3BSD[必須保留]
options SCSI_DELAY=15000 #檢測SCSI設備前的延時(ms)
options UCONSOLE #用戶可以奪取控制台
options USERCONFIG #boot -c編輯器 editor
options VISUAL_USERCONFIG #菜單式boot -c編輯器
options KTRACE #ktrace(1)支持
options SYSVSHM #SYSV-風格的共享內存
options SYSVMSG #SYSV-風格的消息隊列
options SYSVSEM #SYSV-風格的信號量(semaphores)
options P1003_1B #Posix P1003_1B實時擴展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #對惡意ICMP請求進行限制
options KBD_INSTALL_CDEV # 在/dev安裝一個CDEV設備

# 下面兩項在製作對稱多處理器(SMP)內核時需要
#options SMP #對稱多處理器內核
#options APIC_IO #對稱(APIC) I/O

device isa
device eisa
device pci

# 軟碟機
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用東芝Libretto以及他的Y-E Y-E Data PCMCIA軟碟機
# 不要使用上面的fdc0,而應使用
#device fdc0

# ATA以及ATAPI設備
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁碟驅動器(IDE硬碟)
device atapicd # ATAPI 光碟機
device atapifd # ATAPI 軟碟機
device atapist # ATAPI 磁帶機
options ATA_STATIC_ID #靜態設備編號

# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板載AIC7xxx設備
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (較新的晶元組)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情況下掛接舊的NCR設備

device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?

device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50

# SCSI 外設
device scbus # SCSI 匯流排(如果使用SCSI設備,必須有)
device da # Direct Access (硬碟)
device sa # Sequential Access (磁帶,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 訪問)

# 通過SCSI子系統介面的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series

# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade

# atkbdc0 控制鍵盤和PS/2滑鼠
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12

device vga0 at isa?

# 啟動畫面和屏幕保護程序
pseudo-device splash

# syscons 是默認的控制台驅動,類似SCO控制台
device sc0 at isa? flags 0x100

# 對於pcvt vt220控制台,啟用這個和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X伺服器
#options FAT_CURSOR # 使用大游標
# 如果你是用ThinkPad,將下面的一行和其他PCVT相關設備的注釋去掉
#options PCVT_SCANSET=2 # IBM使用非標准鍵盤

# 浮點運算支持 - 請勿禁用
device npx0 at nexus? port IO_NPX irq 13

# 電源管理支持
device apm0 at nexus? disable flags 0x20 # Advanced Power Management

# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable

# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9

# 並口
device ppc0 at isa? irq 7
device ppbus # 並口匯流排 (所有並口設備都需要)
device lpt # 列印機
device plip # 並口TCP/IP
device ppi # 並口介面設備
#device vpo # 需要scbus和da

# PCI 乙太網適配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')

# 使用公共的MII匯流排控制器代碼的PCI乙太網適配器
# 注意:一定要保留'device miibus'以確保可用
device miibus # MII匯流排支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')

# ISA乙太網適配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10

# 偽設備 - 數字表示分配多少個
pseudo-device loop # 環回網路
pseudo-de

㈢ 世界上第一個操作系統是如何編寫的

人家就問第一個操作系統是怎麼做出來的,樓下一堆人都沒說到點子上。
這個問題就像是沒有生產機器,那第一台機器是怎麼生產出來的。
第一台計算機,或者稱之為打孔計算機,破譯機。它的作用就是讀0和1的不同排列組合,通過這些組合來解譯不同的意思。比如 0010代表什麼意思,1101代表什麼意思。這些是一開始就設定好了的,就像是中國古代的算盤一樣,上面的運算元代表5,下面的運算元代表1是一個道理。
好了,開始就設定好這個解碼功能後,這台破譯機就可以讀信息了,它通過什麼讀呢?那時候沒有數據,沒有數字信號,只有模擬信號,它們就讀打孔紙。就是在紙上寫,然後打出一個一個孔,像卡紙一樣。設備就讀這個孔的排列,根據不同的排列去找這個排列代表了什麼,然後給出答案。這就是最初的計算機原理,非常簡單,它就是一個密碼解釋器,或者說是簡單的編譯器。
那時候就是用來算加減法等一些計算,它就是一個大型的計算器。
後來發展的復雜一些了,也就是增加了更多的0和1的組合來豐富機器的解釋庫,來計算更復雜的公式。
這時候你要問了,這些0和1的解釋庫是存在哪裡的?這就是為什麼以前的計算機房間那麼大個。它們是通過電子管的開和關來代表了0和1,通過電路給電子管通電,比如說那張紙打的孔,有一個像探頭一樣的東西,探測到那裡有一個孔,或者沒有孔,就給出電信號來控制不同的電子管組合的通路和斷路,最後給出結果。
比如我用紙戳一個1+1=?,我就戳一個(0000 0000 0000 0001)代表1(00001 001000 ....)代表+ (0000 0000 0000 0001)代表1,然後給機器讀,機器讀出來後,就會根據電子管的通斷組合,最後將結果反饋回來。一開始是用亮了多少盞燈來表示計算結果,有了顯示器後,才把它變成了顯示畫面。

顯示畫面其實也是有一個庫的,比如0001,你就給我顯示1,00010,你就給我顯示2,它會找對應的庫,這個庫一開始就用不同的電路
搭建做好,無非就是不同的電路通斷,電壓,電流等各種奇怪的組合來完成 。它自身有一套神奇的檢測機制,這個就不說了,我也說不清楚。
那麼回到最開始的問題,世界上第一個操作系統是怎麼出現的?就是用手在紙上寫出來的。
一開始不能算是系統,比如我要算一個公式,a /b +1+a+5*b,舉個例子,這個公式我要經常用,我不可能每次都要去戳很多紙,所以我只需要先做一個模板,然後留出一個空白,需要的時候,把a和b戳出來就可以了,這樣就很方便了。
後來這些公式越來越復雜,甚至是出現了不同的計算,比如說, 如果a<100,那麼就執行xxxx,如果a>100,就執行xxxx。然後這個模板就越做越大,需要戳的紙也越來越長。
好傢伙,後來實在戳不過來了,十個手指都戳破了,甚至計算機也運行不過來了,更復雜的運算根本做不了。不行,不能這樣下去了。
後來就開始有人研究了,電子技術的發展越來越高科技,電子管也做得越來越小,最後用集成電路來控制開關,但是其實原理都是一樣的。可以運算的公式和能力也越來越強。其實還是不同的電子管組合成不同的開關,你以為這個組合就是幾個電子組的組合嗎?不,已經達到上億,上千億個電子管的組合了,這也是集成電路的優勢。

一開始是用紙來保存信息,但是前面說了,紙已經不夠用了,就開始出現了軟盤,光碟。光碟上的凹凸點,代表了0和1,其實就是存儲的介質發生了變化,後面發明了磁碟,發明了光碟,甚至是軟盤、機械硬碟,SSD等不同的儲存介質,這些其實就是保存的方式不同而已,其實它們保存的數據還是和打孔紙一樣,就是0和1的數據,只是相比紙而言,保存得更多,更方便,也更容易被機器讀取。
這時候保存的介質發生了變化 ,那麼讀取這些數據的那個探頭也發生了變化,變成了像軟盤的磁頭,光碟的激光頭等。

當這種保存的介質從紙變成了硬碟後,就會出現一個問題,一開始寫這些孔的時候,是用筆和給紙戳一個窟窿來讓機器識別,現在要怎麼把0和1這種數據寫到磁碟里呢?這里就發明了鍵盤了,最初的鍵盤當然和現在不一樣,但是原理是一樣的。還是按一個鍵,給一個電信號,磁頭收到了電信號,會判斷是0還是1,如果是0,就是反磁,如果是1就是正磁。一開始的鍵盤,就是只有幾個鍵,1鍵和0鍵。
後來有人覺得整天打0和1太麻煩了,如果我要打a這個符號,我就要按(0000000000000000),按這么多下,我的手都要變成一指禪了,於是就發明更復雜的鍵盤,比如我要打a,b,c,d,我就一開始就設定好,我打a,就直接發送一串機器碼(0000000000000000),我要打b就發送一串機器碼(0000000000000001),類似這樣的。其實也是給鍵盤做好一個約定,我一開始就把一些特定的,經常使用到的符號或其他有代表性的字母、數字,把它們對應的0和1組合的機器碼先做成一個表格,存到鍵盤的識別庫里,我按哪一個字元,你就給我發送哪一個字元對應的機器碼就可以了,這樣我就不用從早到晚按0和1這兩個鍵,按個沒完。這么一設定,我就不用記太多的機器碼組合了,一開始就把這些組合給分門別類。
這樣發展到這里,鍵盤的雛形就出來了,也為匯編的發展埋下了伏筆。匯編其實就是最接近或者它就是機器碼的一種組合語言,機器是可以直接識別出來。
前面說了,為了執行不同的公式和復雜的計算,就出現了這同的模板,只需要修改模板上的參數,就可以重復執行這些模板。
現在這些板從紙上存到了軟盤上,現在就更方便了。以前用紙的時候,用過一次,紙就沒用了,現在軟盤上的數據一直在,我只需要用磁頭把原來填的數據擦掉,重新寫個新的參數就可以了。你可以理解成當時在紙上我用鉛筆寫參數,用過一次,用橡皮擦給擦掉重復寫。但是紙是需要打孔的,打了孔,橡破擦也沒用,已經是一個孔了,你也補不上,所以那紙就廢掉了。
但是軟盤不一樣,軟盤是可以重復寫的。可以把磁消掉重新在那個位置寫一個新的參數,這樣就可以重復利用了。
後來這些模板越做越復雜,最後慢慢的發展成了一個小型的,有自己一些獨立功能的計算系統,這可以理解為,它有了系統的一些特性,但是還不算系統。
後來這些模板更強大了,有人覺得,因為需要更加強大的功能,一般的模板已經沒辦法滿足了,而且通過這種最原始的abcd來拼湊這些公式、模板,太累了。於是就有人開始寫中間解釋器。
怎麼理解呢?前面說了,一開始大家都是寫1和0組合,覺得太累了,於是把1和0的不同組合做成了一個庫,我只需要輸入1+1,abcd這種鍵盤上約定好的字母,鍵盤就發送對應的1和0組合給機器,機器就可以直接識別了。
現在需求越來越復雜,發現光打這些abcd,需要打越來越多的代碼,發現和之前打1和0一樣累了,怎麼辦呢?於是就有人打算再創一個中間庫,把這些abcd,1,2,3等組合做成一個庫,不同的組合代碼不同的意思,這就是從機器向交互語言的發展了初期了。
這個庫一開始還是用abcd等最初的那個鍵盤庫打上去的,當然做的也很累,但是只要這個庫完善好了,後面要繼續發展更高級的交互語言就簡單多了,以後所有交互語言寫出來的東西,都通過這個庫翻譯成機器語言庫,機器語言庫就可以識別了。
於是有了交互語言庫,大家就不用打太多的字元來拼湊成不同的模板了,因為交互語言庫有了不同的單片語合成更加有意義符號,人一看就懂,不需要那些零零散散的字母,沒有任何意義在裡面,還需要死記硬背。

這就有點像是古代的文言文,你一聽不知道他在說什麼,然後去查一下文言文字典,這樣你才能知道他在說什麼。
現在你可以用白話言語來交流了,這樣就更輕鬆了,你可以直接和他對話。
至於機器聽不聽的懂你說的意思,這個不要緊,有解釋庫,你把解釋庫做好了,你說的每一句話會自動翻譯成機器語言,就可以了。
隨著語言的越來越強大,現在就可以寫出更加復雜的模板了,後來顯示器的發展越來越強大,讓這些模板出現了更豐富的畫面,其實它顯示什麼東西,也還是會有一個庫的,只要約定好,我返回的這串代碼代表了什麼東西,你就顯示什麼東西就可以了。甚至後來有了圖片。

其實圖片的顯示也有自己的一個約定,就是我返回什麼代碼,你就解析成什麼顏色點,然後不同的代碼組合,就會現出一大串的顏色點組合在一起,就變成了有顏色的圖片和畫面。其實文字也是圖片的一種,就是一種圖信號。
回到模板上來,後來慢慢的,這些模板越來越強大,甚至有人開始動起心思,開始給這些模板加皮膚,加各種好看或者神奇的功能,讓它更加好用,於是最初始的系統就這么慢慢的發展起來了。
其實系統它不是突然就有的,是在整個機器的發展的過程中,慢慢的累積到一定程度後,順應發展而來的。

這些模板也是從最簡單的公式模板慢慢發展成了現在有了自己的界面,有了自己的獨立運算功能和各種娛樂功能等強大的系統。
最初的系統,也就是這些模板的誕生,其實是很辛苦的,它們需要有一定的積累,一些基礎的識別庫的完善,這些都是需要最初的那代人,一開始就約定好,然後慢慢地完善起來,然後高級的語言和系統才能通過這些庫來和機器交流。

㈣ FreeBSD做伺服器的好處是什麼比較WIN和LINUX的區別.

穩定、安全、性能的綜合選擇,如果你認為伺服器的最重要指標不只是速度快,那麼FreeBSD一定會讓你充滿驚喜,FBI的伺服器就用FreeBSD。下面是的壓力測試(下載大圖查看)

測試環境:均在虛擬機環境下,不和真機對比測試。其它沒說明的信息均代表一致,軟體的安裝均使用包管理方式,沒使用源代碼安裝,系統沒做任何調優。3個虛擬伺服器同時打開,每測試一個伺服器均測試兩次,以最好的結果為准。(測試結果順序:FreeBSD、Ubuntu、Win2019)。注意:nginx伺服器版本沒統一,會稍微影響結果的公平性,但在合理范圍之內。

ab重要指標:Requests per second(越大越好)、Time per request(越小越好)、Transfer rate(越大越好,大流量下的吞吐量)

結論:FreeBSD在大壓力情況下的性能要比ubuntu略好,穩定性、安全性、健壯性也要比Linux好。當然如果要是用於深度學習而不是web,我可能會選Linux。

另外,安全都是相對的,雖然默認情況下*BSD比Linux安全,但並不代表你維護起來就安全,賬號密碼、ssh安全,許可權,web程序的安全,都會影響系統安全性(web站點還是推薦使用wordpress最新版,安全插件使用:WP Cerber Security,比All In One WP Security略好,但即使剛入門,也比windows經常打補丁放心的多。只是FreeBSD調試wordpress還需要提高更多的技術,不是簡單的pkginstall就完了,需要對nginx、php、mysql有足夠的掌握,這些看起來復雜,但會了又覺得其樂無窮,而且絕對會培養起傳統黑客的精神和體會到簡潔的強大。

㈤ 如何在freebsd下交叉編譯arm-linux

1. 下載源文件、補丁和建立編譯的目錄 2. 建立內核頭文件 3. 建立二進制工具(binutils) 4. 建立初始編譯器(bootstrap gcc) 5. 建立c庫(glibc) 6. 建立全套編譯器(full gcc)

㈥ 如何編譯armlinux的go

Golang也就是Go語言,現在已經發行到1.4.1版本了,語言特性優越性和背後Google強大靠山什麼的就不多說了。Golang的官方提供了多個平台上的二進制安裝包,遺憾的是並非沒有發布ARM平台的二進制安裝包。ARM平台沒辦法直接從官網下載二進制安裝包來安裝,好在Golang是支持多平台並且開源的語言,因此可以通過直接在ARM平台上編譯源代碼來安裝。整個過程主要包括編譯工具配置、獲取Golang源代碼、設置Golang編譯環境變數、編譯、配置Golang行環境變數等步驟。

註:本文選用樹莓派做測試,因為樹莓派是基於ARM平台的。

1、編譯工具配置

據說下個版本的golang編譯工具要使用golang自己來寫,但目前還是使用C編譯工具的。因此,首先要配置好C編譯工具:

1.1在Ubuntu或Debian平台上可以使用sudoapt-getinstallgcclibc6-dev命令安裝,樹莓派的RaspBian系統是基於Debian修改的,所以可以使用這種方法安裝。

1.2在RedHat或CentOS6平台上可以使用sudoyuminstallgcclibc-devel命令安裝。

安裝完成後可以輸入gcc--version命令驗證是否成功安裝。

2、獲取golang源代碼

2.1直接從官網下載源代碼壓縮包。

golang官網提供golang的源代碼壓縮包,可以直接下載,最新的1.4.1版本源代碼鏈接:/golang/go1.4.1.src.tar.gz

2.2使用git工具獲取。

golang使用git版本管理工具,也可以使用git獲取golang源代碼。推薦使用這個方法,因為以後可以隨時獲取最新的golang源代碼。

2.2.1首先確認ARM平台上已經安裝了git工具,可以使用git--version命令確認。一般linux平台都安裝了git,沒有的話可以自行安裝,不同平台的安裝方法可以參考:download/linux

2.2.2克隆遠程golang的git倉庫到本地

在終端cd到你想要安裝golang的目錄,確保該目錄下沒有名為go的目錄。然後以下命令獲取代碼倉庫:

gitclone/go

大陸地區可能會獲取失敗,在不翻牆的情況下我試了幾次都沒成功,原因大家都懂的。好在google已經將golang也託管到github上面,所以也可以通過下面命令獲取:

gitclone/golang/go.git

視網路情況,下載可能需要不少時間。我2M的帶寬花了將近兩個小時才下載完,雖然整個項目不過幾十兆==

下載完成後,可以看到目錄下多了一個go目錄,裡面即為golang的源代碼,在終端上執行cdgo命令進入該目錄。

執行下面命令檢出go1.4.1版本的源代碼,因為現在汪敏指已經有新的代碼提交上去了,最新的代碼可能不是最穩定的:

gitcheckoutgo1.4.1

至此,最新1.4.1發行版的源代碼獲取完畢

3、設置golang的編譯環境變數

主要有GOROOT、GOOS、GOARCH、GOARM四個環境變數需要設置,先解釋四個環境變數的意義。

3.1GOROOT

主要代表golang樹結構目錄的路徑,也就是上面git檢出的go目錄。一般可以不用設置這個環境變數,因為編譯的時候默認會以go目錄下src子目錄中的all.bash腳本困配運行時的父目錄作為GOROOT的值。為了保險起見,可以直接設拿芹置為go目錄的路徑。

3.2GOOS和GOARCH

分別代表編譯的目標系統和平台,可選值如下:

GOOSGOARCH

darwin386

darwinamd64

dragonfly386

dragonflyamd64

freebsd386

freebsdamd64

freebsdarm

linux386

linuxamd64

linuxarm

netbsd386

netbsdamd64

netbsdarm

openbsd386

openbsdamd64

plan9386

plan9amd64

solarisamd64

windows386

windowsamd64

需要注意的是這兩個值代表的是目標系統和平台,而不是編譯源代碼的系統和平台。樹莓派的RaspBian是linux系統,所以這些GOOS設置為linux,GOARCH設置為arm。

3.3GOARM

表示使用的浮點運算協處理器版本號,只對arm平台有用,可選值有5,6,7。如果是在目標平台上編譯源代碼,這個值可以不設置,它會自動判斷需要使用哪一個版本。

總結下來,在樹莓派上設置golang的編譯環境變數,可編輯$HOME/.bashrc文件,在末尾添加下面內容:

exportGOROOT=你的go目錄路徑

exportGOOS=linux

exportGOARCH=arm

編輯完後保存,執行source~/.bashrc命令讓修改生效。

4、編譯源代碼

環境變數配置完成自後就可以開始編譯源代碼。在go目錄下的src子目錄中,主要有all.bash和make.bash兩個腳本(另外還有兩個all.bat和make.bat腳本適用於window平台)。編譯實際上就是執行其中一個腳本,兩者的區別在於all.bash在編譯完成後還會執行一些測試套件。如果希望只編譯不測試,可以運行make.bash腳本。使用cd命令進入go下src目錄,執行./all.bash或者./make.bash命令即可開始編譯。由於硬體情況不同,編譯耗費的時間不同。在我的B型樹莓派編譯過程花費了將近半個小時,編譯完成後執行的測試套件又花費了差不多一個小時,總共花費了一個半小時左右。

5、配置golang運行環境變數

編譯完成後,go目錄下會生成bin目錄,裡面就是go的運行腳本。為了以後使用方法,可以將這個bin路徑添加到PATH環境變數中。同樣編輯~/.bashrc文件,因為前面設置過GOROOT環境變數指向go目錄了,所以只需要在末尾加上

exportPATH=$PATH:$GOROOT/bin

保存後同樣執行source~/.bashrc命令讓環境變數生效。

至此,golang源代碼編譯安裝成功。執行goversion應該就能看到當前golang的版本信息,表示編譯安裝成功。


熱點內容
python3graphics 發布:2025-02-05 21:36:57 瀏覽:511
為什麼英雄聯盟一個伺服器進不去 發布:2025-02-05 21:36:12 瀏覽:182
伺服器搭建網站開發教材 發布:2025-02-05 21:31:57 瀏覽:567
pythonrose 發布:2025-02-05 21:31:46 瀏覽:923
php數組從小到大排序 發布:2025-02-05 21:26:01 瀏覽:324
單片機存儲器擴展 發布:2025-02-05 21:17:35 瀏覽:966
sqler圖 發布:2025-02-05 21:10:58 瀏覽:630
網路編程android 發布:2025-02-05 21:05:49 瀏覽:346
python時間毫秒數 發布:2025-02-05 20:51:32 瀏覽:331
clash安卓如何切換節點 發布:2025-02-05 20:48:20 瀏覽:890