Ⅰ linux內核編譯的幾點疑惑
(1)編譯內核於升級內核沒有直接關聯。如果編譯的內核的版本比現在系統使用的版本新,那麼使用編譯後的內核可以看成是內核升級。但是有時候是因為需要而編譯內核,比如某些模塊需要重新編譯,打開某些原來內核沒打開的選項,這時候可以是同版本內核重新編譯,這就不能說是升級內核。
(2)新內核編譯好後,還需要安裝。也就是make install(把bzimage移動到boot,重命名為vmlinuz) ,make moles install(把模塊全部放到/lib/moles/(內核名)文件夾內);然後depmod,在/lib/moles/(內核名)建好新的***.dep文件,這樣啟動時系統就能通過讀取***.dep文件信息來載入模塊。還要在boot下新建一個於內核名一樣的.img文件,如vmlinuz,那麼就是vmlinuz.img,至於系統使用哪個內核,那是在grub.cfg裡面寫的配置文件決定的。指定哪個就從哪個啟動,寫兩個entry就可以選擇啟動到哪一個。老內核當然還可以繼續使用。
(3)新內核主要是一些新的特性,驅動更改什麼的,我不是很清楚,比如2.6.34以上的內核就支持通過echo OFF>/sys/kernel/debug/vgaswitchroo/switch關閉某個顯卡,也就是雙顯卡切換支持,又比如2.6.38中加入了所謂的autogroup在某些情況下提升桌面性能的特性,還有一些對系統某些情況的處理方式的變化等。但是從用戶層來說一般感覺不到明顯變化。對於程序什麼的使用不影響(絕大多數)。
Ⅱ 如何更方便的查看Linux內核代碼的更新記錄
在官方http://git.kernel.org/網站可以找到linux的各種git更新記錄,比如virt/kvm/kvm.git,通過這個鏈接,可以看到kvm的各種更新。
看我們重點關注的Linux 2.6內核的更新情況,我們知道Linux 2.6內核是由linus本人維護的,所以對應的git鏈接為:linux/kernel/git/torvalds/linux-2.6.git,從顯示來看,這個和另外一個鏈接linux/kernel/git/torvalds/linux.git已經沒有什麼差別,估計是因為linux 3.x版本的引入以及版本倉庫管理做了改進與優化,不過沒關系,不影響我們繼續了解這個官方web git庫。
首先,查找我們關注的對應版本,這在linux/kernel/git/torvalds/linux-2.6.git頁面上點擊tags鏈接即可進入到所有版本列表,http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=tags,打開界面如下:
在這個頁面就能找到對應的版本,以2.6.38.8為例,對應的條目即為Linux 2.6.38-rc8:
這里有好幾個鏈接,不過點幾下會發現都鏈到同一處,所以我們直接看最快的路徑,shortlog和log,這兩個鏈接點開後顯示的都是修改日誌,只是shortlog顯示得比較緊湊而已。點開shortlog:
點擊第一個條目:
2011-03-08 Linus Torvalds Linux 2.6.38-rc8 v2.6.38-rc8 commit | commitdiff | tree | snapsho
的tree鏈接,在這里可以看到2.6.38.8的所有最終代碼,也就是和從http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.38.8.tar.bz2下載的代碼一致。
下面我們舉個示例,查看一下nmi到2.6.38.8這個版本為止都大致有什麼更新?
跟著「[linux/kernel/git/torvalds/linux-2.6.git] / arch / x86 / include / asm /」一路鏈接點一下來,到這里:
找到nmi.h文件(這個文件跟NMI相關)條目,點擊後面的history鏈接:
可以看到,從2008-10-23到當前版本的所有變動都有了。比如第一個條目2011-01-07有對nmi做修改提交,後面的commitdiff就是提交的更新內容,diff to current當然就不要了,因為自然是commitdiff一致,而其他條目則需要diff to current,因為它們的commitdiff是與後面一個版本的不同,而diff to current是針對Linux 2.6.38-rc8的不同;如果要看從2008-10-23到Linux 2.6.38-rc8的所有更新,只需點擊2008-10-23這個條目的diff to current鏈接即可。
上面示例比較簡單,我也說得比較粗糙,主要是由於裡面的鏈接非常的多,一個個描述起來比較麻煩,貼圖太多也只是浪費我個人網站的伺服器空間而已,最好的辦法是自己動手去點下鏈接,查看一下內容,幾個回合肯定就能摸索清楚個一二了。
Ⅲ Linux 為什麼還要堅持使用宏內核
深入探討:Linux為何堅守宏內核設計
在System研究領域,Linux的宏內核設計一直是討論的焦點。盡管Monolithic Kernel與Micro Kernel的爭論已久,但Linux為何選擇前者,背後的原因更深層次。讓我們一起來看看這個決定背後的邏輯和考量因素。
Linux的起源可以追溯到Linus Torvalds的個人項目,他選擇Monolithic Kernel是出於實現上的便利性。相比Micro Kernel需要處理復雜的通信機制,Monolithic Kernel在初期更為簡潔,便於快速構建和擴展。更重要的是,Linux的目標是提供易用性,而非追求極致的效率,這一點與Minix追求全面兼容性但犧牲效率形成了對比。
Linux的成功在於其聚焦於核心功能的統一API,允許底層硬體驅動的靈活擴展。在初始階段,Linux專為當時用戶最多的i386架構優化,但在關鍵領域如內存管理和網路上表現出色,吸引了大量用戶,從而奠定了其在操作系統領域的地位。而Monolithic Kernel在這些場景下表現穩定,證明了其在特定應用場景下的效能和實用性。
盡管學術界曾認為Micro Kernel在效率上具有優勢,但Linux的設計理念更強調易用性和兼容性。實際上,LinuxKernel的成功案例也表明,設計上的優秀並不總是決定成敗的唯一因素。正如Worse is Better理論所指出,有時候,簡單實用的設計可能更勝過復雜的理想方案。Nokia的Symbian系統就是一個例子,它憑借簡潔的架構,在一段時間內贏得了市場。
回到Linux的宏內核選擇,它並非是固定不變的決定,而是適應了Linux項目的需求和發展。正如@王垠 所言,內存管理等核心功能置於內核態,是宏內核(Monolithic)而非宏觀(Macro)的含義所在。操作系統設計的核心目標是保護用戶態程序,隔離內存,確保安全,而非語言限制。C語言的指針操作只是內存管理的一種工具,而非設計障礙。
總結來說,Linux堅持使用宏內核,是基於其特定的歷史背景、易用性原則和市場需求。雖然Micro Kernel在某些方面有其優點,但Linux在宏內核的道路上取得了巨大的成功,這使得它在實踐中選擇了最適合自己的道路。因此,我們可以說,Linux的設計選擇與其獨特的歷史和哲學緊密相連,而非單純的技術優劣之爭。
Ⅳ linux雙顯卡怎麼切換到獨立顯卡
如有驅動問題請咨詢關注驅動人生
Thinkpad r400 t400等等機器都有著具有雙顯卡的型號,一般是ati3470和intel4500
利用
lspci | grep VGA
這個命令就可以看到目前可以使用的顯卡是哪些
linux在默認情況下是兩個顯卡都開啟,且電源管理極差,導致電腦溫度超高,如果在BIOS裡面強行切換為一個顯卡,當然也可以解決這個問題,但是在雙系統的情況下,就極為不便。如果需要切換顯卡還要重啟電腦,那實在是太落後了。
linux kernel 2.6.38以上的內核開始支持雙顯卡的切換。
在linux3.06下切換顯卡的模塊仍然處於debug狀態,首先就要載入這些模塊
Step1:
mount -t debugfs debugfs /sys/kernel/debug
註:需要在root許可權下執行
Step2:
>cat /sys/kernel/debug/vgaswitcheroo/switch
查看是否可以進行顯卡切換,正常的輸出類似於:
0:DIS: : Pwr:0000:01:00.0
1:IGD:+:Pwr:0000:00:02.0
如果沒有任何輸出,那就很抱歉,這種方法不管用了,可能是linux內核過舊
Step3:
echo DDIS > /sys/kernel/debug/vgaswitcheroo/switch
用來切換到獨立顯卡
echo DIGD > /sys/kernel/debug/vgaswitcheroo/switch
用來切換到集成顯卡
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
這個命令是用來關閉不用的顯卡電源
echo ON > /sys/kernel/debug/vgaswitcheroo/switch
這個是用來重新開啟關閉的顯卡電源
一般情況下,我們就執行第三條命令
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
可以再看一下/sys/kernel/debug/vgaswitcheroo/switch這個文件的狀態
cat /sys/kernel/debug/vgaswitcheroo/switch
如果輸出結果是
0:DIS: :Off:0000:01:00.0
1:IGD:+:Pwr:0000:00:02.0
那就表明成功了。
這里Off表示電源已經關閉,Pwr表示正在運轉。
至此大功告成,可以在rc.local裡面加上
mount -t debugfs debugfs /sys/kernel/debug
echo OFF > /sys/kernel/debug/vgaswitcheroo/switch
這兩句話,這樣每次開機就自動將不用的顯卡關閉電源了,不用再忍受燒烤溫度的電腦。