国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux內核學習之二:編譯內核

2024-06-28 13:28:21
字體:
來源:轉載
供稿:網友
linux內核學習之二:編譯內核

在linux內核學習系列的第一課中講述了搭建學習環境的過程(http://www.CUOXin.com/xiongyuanxiong/p/3523306.html),環境搭好后,馬上就進入到下一環節--編譯內核。linux的內核是整個系統最核心的部分,內核的功能基本上決定了系統的能力。

linux的內核代碼使用的是GPL授權,允許自由下載,修改并重新發布內核,只要求發布修改后的內核的同時提供源代碼。各種各樣的內核版本眾多,幾乎所有的linux發行版都會對內核進行或多或少的修改,debian也不例外。這些內核都有個源頭,即Linus維護的官方內核,其他的內核幾乎都是建立在官方內核的基礎上的。我們的內核學習,也是以官方內核為準。

linux官方內核的網站是:www.kernel.org。從里面可以了解到內核開發的最新動態,現在就把該網址加入收藏夾吧。(另外有個網站:www.lwn.net里面有許多linux大牛發表的觀點,也值得收藏)。從linux內核3.0開始,內核版本命名采用的策略跟以前不一樣,命名格式為3.A.B,其中A為內核的版本,B為補丁的版本。即3.A.B與3.A.C的內核是相同的版本,具有相同的功能,如果C>B,只是說明3.A.C相比3.A.B修補了一些BUG而已。進入內核3.0時代后,內核的開發工作發展迅速,版本更新得很快,第一個3.0版本是在2011年7月,而現在,最新的穩定版已是3.12.8,而新的3.13版內核開發工作也已接近尾聲,即將發布穩定版了。("zh.wikipedia.org/wiki/linux"內核"介紹了部分版本的特性)。

1 選擇內核版本

首先我們需要從www.kernel.org選擇一個版本。實際上從2.6版本開始,內核的架構沒有特別大的變動,基本上是添加新的功能,添加新的驅動的支持,內核接口有一些變動。另外,除非不得已,不要再使用2.4及更低版本,因為2.6內核的整個架構經過全面重新設計,效率更高,功能更完善,也更安全。我覺得盡量選擇與發行版使用的內核版本差不多的話會比較好點,內核跟其他組件相對會配合得好些,不知是不是這樣。debian7.3使用的內核是3.2的,而現在該內核版本的最新版為3.2.54,使用相同內核版本的帶有最新補丁的內核重編譯并替換原來的內核,可以最大程度上減少與系統其他部分的兼容性問題,這樣我們可以將主要精力集中在內核的學習上。下載得到的內核名為linux-3.2.54.tar.xz。下面將描述在上一課中搭建的“windows7+vmware10.0.1+debian7.3”的系統中編譯內核linux-3.2.54的步驟,在真實機器上安裝的debian7.3系統上編譯的方法也是類似的。

2 安裝vmware-tools

內核文件下載好后,需復制到vmware客戶系統(即debian系統)。最好的方法是使用vmware提供的文件共享功能,這個功能由vmware-tools軟件包提供,需要先安裝該軟件包。首先設置共享目錄,在VMware菜單欄上點擊"虛擬機"-->"設置",打開設置頁面,點擊"選項"屬性頁,點擊"共享文件夾",在右端選擇"總是啟用",再點擊"添加",按提示設置主機中用于共享的目錄路徑和共享名稱(我用的是workspace)。啟動debian系統后,點擊菜單欄的"虛擬機"-->"安裝VMWare Tools"。稍等片刻后,虛擬機的CD光驅動應該已經有了vmware-tools的安裝盤。在debian系統按以下步驟進行:掛載光盤:sudo mount /dev/cdrom /media/cdrom復制安裝包: cp /media/cdrom/VM*.tar.gz ./解壓安裝包:tar -xvf ./VM*.tar.gzcd ./vmware-tools-distrib安裝:sudo ./vmware-install.pl(安裝過程中所有選項都使用默認即可)安裝完成了,檢查發現/mnt目錄下多了一項hgfs目錄,里面是主機共享目錄,即/mnt/hgfs/workspace。

3 準備新的內核源代碼

將下載的內核源代碼放在上一步中設置的主機共享目錄中,然后解壓到默認的內核源代碼目錄:sudo tar -xvf /mnt/hgfs/workspace/linux-*.tar.gz -C /usr/src/usr/src目錄下是專門存放內核源代碼的。放在其他目錄也可以編譯的,不過我們還是遵循通用的規則吧。我們的debian系統是64位版本(正式名稱是x86_64),為了避免出現問題,我們的內核也將編譯成x86_64版本,故修改下源代碼目錄名稱:sudo mv /usr/src/linux-3.2.54 /usr/src/linux-3.2.54.x86_64.同時把源代碼目錄下的Makefile文件內容也改一下:sudo vim /usr/src/linux-3.2.54.x86_64/Makefile搜索字符串"EXTRAVERSION =",在"="后面加上".x86_64"。這樣,編譯出來的內核鏡像,模塊目錄等都會自動加上".x86_64"后綴。

4 配置內核

配置內核就是告訴編譯器,源代碼中的哪些功能要編譯進內核,哪些編譯成模塊,哪些不需要編譯。源碼中包含了幾千個選擇,因此配置內核是個很復雜很吃力的工作,為了簡化這個工作,內核開發者為各個平臺編寫了默認的簡單配置文件。以x86平臺為例,配置文件放在"arch/x86/configs"目錄下,可將這些配置文件作為配置工作的起點,選擇其中一個文件復制到源碼目錄下,并命令名為".config"(注意前面有個".",它是隱藏文件),這是內核編譯時使用的配置文件,也是內核配置工具啟動時加載的文件,當然內核配置修改后的配置信息也保存在這個文件里。由于VMWare的硬件與普通的硬件不同,用內核開發者提供的配置文件編譯出來的內核無法引導系統,我們先暫時忽略有關內核配置的復雜細節,走條捷徑,以debian系統安裝時產生的配置文件作為我們配置內核的起點。既然debian能引導,用它編譯出來的內核應該不會有什么大問題,復制debian的配置文件到源代碼目錄,并配置:sudo cp /boot/config-3.2.0-4-amd64 /usr/src/linux-3.2.54.x86_64/.configcd /usr/src/linux-3.2.54.x86_64/sudo make menuconfig 即使不修改內核的配置還是需要執行sudo make menuconfig,因為發行版的內核可能經過修改,使用的.config也可能會有差異,執行一下sudo make menuconfig,它會重新分析.config文件,設置文件中描述的配置信息,退出后再保存成新內核適用的.config文件(退出時,配置工具會詢問你是否保存修改,需要選擇"yes")。

5 編譯,安裝新內核

內核配置完成了,可以編譯內核了,分別執行以下命令,進行編譯并安裝內核:sudo makesudo make modules_installsudo make install make命令根據配置信息進行編譯,包括模塊。debian系統默認加入了許多驅動模塊,整個編譯過程比較耗時,估計長達1.5~2個小時,在編譯時可能出現各種問題,需要根據錯誤提示進行修改。本次編譯模塊時就提示“drivers/staging/rts5139”這個模塊編譯出錯,這是一個USB讀卡器的驅動,不是什么必需的驅動,直接在內核配置中去掉該模塊吧。因此,重新執行sudo make menuconfig,找到該模塊:“Device Drivers”-->"Staging drivers"-->"Realtek RTS5139 USB card reader support"。去掉該模塊支持,退出保存,重新執行sudo make。 make modules_install命令用于安裝可裝載模塊,這些模塊會自動安裝到/lib/modules/3.2.54.x86_64下。 make install命令執行三個操作:復制內核鏡像到/boot目錄下;生成initrd-img;更新grub。命令成功執行成功后,新的內核已可以使用,并且列在引導菜單中。

6 重啟系統

重啟系統,grub引導選項中多了我們新編譯的內核選擇,選擇新內核引導。進入系統后執行命令uname -r 查看當前的內核版本,顯示為“3.2.54.x86_64”,確實是我們新編譯的內核。不過,在VMWare中重編譯內核后,vmware-tools的文件共享功能不起作用了,這是因為vmware-tools中包含了內核模塊,重編譯后,這些模塊不能再正常加載了。只需執行命令:sudo vmware-config-tools.pl(全部使用默認選項),重新配置vmware-tools即可讓共享功能正常使用。

任務完成,可以收工!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 仪征市| 锦州市| 新河县| 海原县| 开阳县| 濮阳市| 焦作市| 永平县| 六枝特区| 宜都市| 娄底市| 广东省| 余干县| 辽中县| 教育| 团风县| 元谋县| 社会| 布尔津县| 清河县| 霍城县| 灌阳县| 清流县| 恭城| 保靖县| 宜良县| 靖远县| 龙里县| 台南市| 平顺县| 巢湖市| 双峰县| 竹山县| 富源县| 增城市| 安义县| 建德市| 伊春市| 太仆寺旗| 三江| 靖边县|