ubuntu內核編譯
① Ubuntu18.04編譯內核4.18.10make出錯
提示的很清楚,沒有scripts_basic這個目錄,應該是需要這個目錄底下的一些腳本來做一些初始化檢查的工作,只有這些檢查工作做完了,才能進行下一步的編譯步驟。根據目前這個情況來看,我的建議是,
首先確定一下目錄底下是否存在這個目錄,如果存在,查看一下目錄許可權,以及這個目錄底下是否存在需要的腳本文件。
其次,如果不存在的話,檢查是不是位於其他子目錄,如果在,那麼就拷貝過來,如果沒有,那麼看一下編譯相關的文檔,看是不是需要在其他位置下載。
不知道我說清楚了沒有,希望可以幫助到你。
② 如何在Ubuntu上安裝內核對應的源碼來編譯驅動
1、不同的版本而已,其實是更加的細分架構。2、當然沒有,因為你沒裝,這兩個是當前內核的開發 C Header 。因為某些驅動、程序的原因,他們會固定的到這里找對應內核版本的開發頭文件,所以這些個 Header 就放在了這里。一般來說,你不需要管他們的用處,這是發行版的設計,你只需要使用這個系統就行了。*-header-* 就是頭文件,驅動和某些和內核功能關聯的東西都要調用當前內核版本的對應頭文件才能正確的編譯出來而且可以使用。所以有些發行版就製作了專用的 header 包來讓需要的程序調用。這種包只有 header 文件,沒有其他無關開發的內容。linux-* 一般才是真正的內核源代碼,不過也不絕對的。
③ ubuntu下怎麼編譯linux內核
Ubuntu 系統
1. 准備工作
切換為管理員許可權,sudo –i 輸入用戶密碼 進入root 許可權
apt-get install build-essential kernel-package libncurses5-dev libqt3-headers
build-essential (基本的編程庫(gcc, make 等)
kernel-package (Debian 系統里生成 kernel-image 的一些配置文件和工具)
libncurses5-dev (meke menuconfig 要調用的)
libqt3-headers (make xconfig 要調用的)
2. 下載特定版本的內核源代碼
3. 復制源碼linux-3.2.12.tar.bz2 到/usr/src 目錄,解壓縮
命令.假設源碼存放在/home 目錄下
cp /home/linux-3.2.12.tar.bz2 /usr/src
cd /usr/src
tar xvjf linux-3.2.12.tar.bz2
解壓後生成 linux-3.2.12 目錄
4. cd linux-3.2.12
接下來配置內核選項
make menuconfig 這一步比較復雜,內核選項很多,可以使用當前內核的配置選項,
但編譯內核的時間會比較長,因為裝系統的時候使用的配置是適應大多數系統的,非定
制選項。關於內核配置選項怎麼定製,網上很多。
5. 把正在使用系統中的內核配置文件/usr/src/linux-headers-2.6.38-13-generic/.config 拷到
/usr/src/linux-3.2.12 目錄下
cp /usr/src/ linux-headers-2.6.38-13-generic/.config /usr/src/ linux-3.2.12
執行:
cd /usr/src/ linux-3.2.12
make menuconfig
終端會彈出一個配置界面
注意主菜單最後有兩項:
load a kernel configuration…
save a kernel configuration…
先選第一項load ….,意思是,利用當前的內核配置詳單來設置將要編譯的內核,然後選save 這一項保存,最後退出配置界面
6. 開如編譯安裝新內核
執行:make mrproper (清除以前曾經編譯過的舊文件,如果是第一次編譯,可不執行)
執行:make (編譯,加-j4,必須加,雙核並行編譯,速度快很多,不過使用原先配置
選項)
然後:make install
再:make moles (編譯模塊)
再:make moles_install (安裝模塊)
最後創建initrd 文件:
mkinitramfs -o /boot/initrd.img-linux-3.2.12
7. make install 以後,系統自動更新了啟動項,可以cat /boot/grub/grub.cfg 看下.之前的啟動項不能刪除,如果編譯內核不成功,之前的啟動項又不見了,系統也就跪了
8. reboot
④ 求助大神,ubuntu16.04下編譯內核2.6出錯
1.配置編譯工具#apt-getinstalllibncurses5-devbuild-essentialkernel-package112.下載內核代碼因為kernel.org的代碼和ubuntu內核的代碼並不完全一致,所以直接從kernel.org下載下來的代碼無法確保編譯後可以成功運行於老的ubuntu平台,所以應該使用ubuntu的最新的內核代碼下載ubuntu最新的內核代碼#sudoapt-cachesearchlinux-source11結果如下Linux-source--source-4.4.0-Linuxkernelsourceforversion4.4.0withUbuntupatcheslinux-source-4.8.0-Linuxkernelsourceforversion4.8.0withUbuntupatches選擇比較新的4.8的版本#sudoapt-getinstalllinux-source-4.8.0
⑤ ubuntu新內核編譯不能啟動
你可能是make menuconfig出的問題。你可以先make localmodconfig(我不大確信拼寫是否正確,如果報錯,make help一下,在這之前把能用到的電腦功能都用一次,使內核裝入相關內核模塊與驅動)然後再make menuconfig去檢查驅動是否完全。
如果覺得編譯速度有些慢,可以在編譯時給make增加-j4(這個數字應當與cpu個數*2相等為好,請自行更改)參數。
本人在ubuntu10.04上成功編譯3.0.4內核。相信您也一定能成功。
⑥ ubuntu內核編譯需要多長時間
編譯自己的Ubuntu內核一般需要30-60分鍾
很多時候我們在使用Ubuntu的時候,想修改一下內核配置,然後編譯,安裝到Ubuntu中。這也是進行Ubuntu內核開發的前提。
⑦ ubuntu系統下怎麼編譯內核文件
一、下載源代碼和編譯軟體的准備
安裝有關編譯程序。安裝make ,gcc, make-kpkg,運行menuconfig等等和編譯內核相關的工具。安裝不了,請檢查/etc/apt/sources.list 文件。有關命令:代碼:$sudo apt-get install build-essential kernel-package libncurses5-dev
二、解壓源代碼注意,網上很多教程上說應該解壓到 /usr/src,純屬以訛傳訛,linux掌門人linus說解壓到任何目錄上都可以。當然,linus的說法是正確的。我放在自己的主目錄下的src目錄。如果你下載源代碼是放到自己的主目錄下或者運行上面的wget下載的,那麼運行下列命令:代碼:$ cd ~$ mkdir src && tar jfx linux-2.6.25.10.tar.bz2 -C src/現在,源代碼就在 ~/src/linux-2.6.25.10進入源代碼的目錄,准備下一步的工作。後面都在這個目錄裡面進行。代碼:$ cd ~/src/linux-2.6.25.10
三、開始編譯前的准備工作。首先,清理以前編譯時留下的臨時文件。如果是剛剛解開的包,不需要執行這步。如果是第二次或者是第n次編譯,那麼一定要執行。相關命令如下:代碼:$ sudo make mrproper網上很多教程上說把現在使用的內核的config拷貝過來參考,據實驗,是不需要的,ubuntu還有debian會自動做這步。不過這條命令倒是可以學習一下。當然你可以將以前的配置拷貝過來。命令:代碼:cp /boot/config-`uname -r` ./.config
四、開始配置內核選項。相關命令:代碼:$sudo make menuconfig配置用到的鍵只有幾個,esc退出菜單;空格改變選項狀態;游標鍵上下左右移動,回車選定。選項意義:M是編譯成可以隨時加入的模塊,*是編譯進入內核,空就是不要。配置選項非常多,具體配置可以參考金步國先生翻譯的資料:Linux 2.6.19.x 內核編譯配置選項。 請大家遵循一個原則,如果你自己使用的內核已經選用了某個選項,如果你沒用充分的理由,不要隨便改動。這樣雖然內核不那麼精簡,但是不容易出現問題。我們可以精簡的部分是硬體模塊部分,對於自己沒有的硬體要毫不猶豫的清除。如果你很執著,或者你有潔癖,你也可以一項項對過去,按照金步國先生的資料描述去選擇基本上沒有問題。
五、必須強調的幾個選項:1、
在「General setup」裡面的「Prompt for development and/or incomplete
code/drivers」金步國認為是不需要。但是如果你的硬體比較新,那幾乎是必須選的,這樣,我們才可以找到4965無線網卡,alsa聲音驅動等
等。Kernel log buffer size 我選15,雙核。如果你用ia64,要選16。Control Group support 集群支持?可以不要Choose SLAB allocator (SLUB (Unqueued Allocator)) 內存管理模式slab和slub選擇slub。
2、在「Block layer」里,假如沒有2TB的硬碟,就去掉:Support for Large Block Devices 。Support for Large Single Files 也不需要,誰有2TB的文件?
3、Processor type and features中是關於cpu的,要認真選。Symmetric multi-processing support是打開多核的開關,我的cpu是雙核的,選中。Processor family (Core 2/newer Xeon) 我的是Core 2/newer Xeon。找到自己的cpu後,把Generic x86 support選項取消。Subarchitecture Type 選(PC-compatible)Maximum number of CPUs 輸入自己的核心數目,我輸入2。SMT (Hyperthreading) scheler support說的是超線程技術,P4有支持的,我的t8100不支持,目前大部分市場上的家用cpu都不支持。High Memory Support (4GB) 1G以下選1G;我是3G,選4G;4G以上的選16G在「 Timer frequency 」里,默認是250Hz,較新的cpu都可以選擇了1000Hz,性能更好。
4、Power management options中把APM (Advanced Power Management) BIOS support關閉。現在的電腦都用acpi了。CPU Frequency scaling 是筆記本cpu節電技術Default CPUFreq governor (conservative) cpu節電模式有四個,筆記本默認選conservative比較好。ACPI Processor P-States driver 必須選,不然CPU Frequency就不能用。後面的可選自己硬體相關的,我選的是Intel Enhanced SpeedStep和 Intel Speedstep on ICH-M chipsets,其他的統統消滅。
5、Bus options的選擇:Bus options (PCI, PCMCIA, EISA, MCA, ISA)PCI support PCI Express support 現在新買的機器基本上都是PCI Express了ISA support 較新的新機器沒有ISA設備,可以去掉MCA support 去掉NatSemi SCx200 support 去掉PCI Hotplug Support Support for PCI Hotplug (EXPERIMENTAL) 如果沒有PCI熱插拔設備,去掉這里的選項可以考慮全部編譯進內核,而不是以模塊形式存在。
6、Device Drivers是重點,由於linux不但面向個人工作站,更多的是面向伺服器的應用,所以可以把自己機器上沒有的硬體全部去掉,而不用面面俱到。但是通用型的選項要慎重。比如在網卡的部分,除了我的千兆網卡 Broadcom Tigon3 support和4965無線網卡Intel Wireless WiFi 4965AGN,其餘的硬體支持統統去掉。再比如音效卡部分,我的是hd音效卡,我只是在PCI devices中,選intel hd 音效卡,再選Build IDT/Sigmatel HD-audio codec support,除此之外的硬體支持全部去掉。
音效卡還有一個細節,在ubuntu7.10裡面, 需要在/etc/modprobe.d/alsa-base後面添加options
snd-hda-intel probe_mask=1
model=3stack,這樣我的筆記本喇叭才可以發聲,不然只有外接耳機或者音箱。這次編譯以後,這個動作就不必了,但是兩個耳機插口只有一個可以用
了。再比如我的電腦中沒有agp,就可以直接把agp相關的選項全部取消。要注意的:ATA/ATAPI/MFM/RLL support Include IDE/ATA-2 DISK support 如果你的/boot是放在IDE硬碟上,那麼這里一定要選*,選M都不行。否則啟動時會出現「waiting for root file system」的提示而停滯不前。 SCSI emulation support 要用刻錄機,必須選。SCSI device support 現在都是SATA硬碟,一定要選* SCSI disk support 如果你的/boot放在SATA硬碟上,一定要選*。
SCSI CDROM support 雖然康寶刻錄機是ide介面的,但是必須把它當成scsi介面的,這是老問題了。用刻錄機,必須選。
Graphics supportSupport for frame buffer devices 選中,進入選擇 VESA VGA graphics support 選上,不然字元界面啟動會有問題,後面的顯卡選擇:由於我的顯卡是nvidia 8400gs,要自己安裝nvidia公司的驅動,所以一個都沒有選。這樣導致ubuntu開機動畫會出問題,我索性在grub中的splash字元全部刪除,把開機動畫關閉。字元界面很正常。 Console display driver support 有人開機後字元控制台錯誤,就是這部分選項沒有選,出問題了。 Framebuffer Console support 需要打開。
Bootup logo 開機圖標,會在自檢的畫面上加上個性圖標。需要在grub上添加「vga=」的選項 簡稱fuse。是必選的,如果你要用windows分區。
CD-ROM/DVD Filesystems ISO 9660 CDROM file system support 一般選*DOS/FAT/NT Filesystems VFAT (Windows-95) fs support 有FAT32分區就選*吧 NTFS file system support 有NTFS分區就選*吧 NTFS write support 如果想對 NTFS分區進行寫操作,選*必須將啟動盤的文件系統編譯進內核,默認是編譯成模塊,這樣無法啟動系統。ubuntu採用的文件系統是ext3,請把ext2,ext3相關的必要選項都編譯進入內核。
8、Virtualization這個大類是我多花幾百元買t8100的主要原因,因為t8100支持intel vt技術使linux上的虛擬機的性能大幅度提高。這里的選項我除了amd的,其他都編譯成模塊。
9、全部設置完成,最後一項是保存設置。按照我的習慣,先在上一層目錄保存一個備份,文件名類似 ../config20080630然後再保存到當起目錄,文件名 .config退出設置程序。
六、開始編譯內核。ubuntu的工具是make-kpkg,和其他的發行版相比,步驟相對簡單。相關命令:代碼:$sudo make-kpkg clean 這條命令好像不要超級許可權,很多資料上說要,不過這不是原則問題。
$ sudo make-kpkg -initrd --initrd --append-to-version=dell1400 kernel_image kernel-headers上述命令中的dell1400可以用自己喜歡的字元代替,最後的字元一定是數字.輸完上述命令回車之前,建議大家把瀏覽器還有別的運用程序都關掉,機器開始的工作比較艱苦。
我的機器大概十幾分鍾。
七、安裝內核編譯完成就是安裝工作。編譯好的內核在上一層目錄。包括linux-headers-...-_i386.deb和linux-image-...-i386.deb兩個文件,如果你不搞開發的話,只要安裝內核就可以,頭文件以後要用的時候再說。安裝相關命令:
代碼:$ cd ..$ sudo dpkg -i linux-image-(按tab鍵)文件名很長,如果不用tab自動補足是不可能的,tab鍵萬歲。安裝完成後和老內核比較一下大小代碼:
$ ls -l /boot/
八、重新啟動驗證新內核。代碼:$ sudo reboot
九、顯卡驅動如果你的顯卡和我一樣是nvidia顯卡,啟動之後往往無法正常進入x-window。即使能看到gdm登錄界面,效果也是很差的。那麼就要安裝nvidia驅動。用ctrl+alt+f1 進入字元命令行,輸入用戶名,密碼登錄。 #ps ax看看和gdm相關的進程,把這些進程全部關閉;用sudo /etc/init.d/gdm stop有可能有一個進程沒有關閉:#kill 進程號然後安裝nvidia顯卡驅動,當然驅動要先下好,到nvidia驅動所在的目錄里,運行:# sh ./NVIDIA-Linux-x86-173.14.12-pkg1.run重新啟動以後就ok。要用nvidia的驅動,每次升級內核都要這么做。
十、無線網卡相關的內核選項是Networking --->Wireless --->Generic IEEE 802.11 Networking Stack (mac80211)還有4965的驅動。4965
無線網卡驅動雖然已經編入內核,但沒有firmware無法使用。需要把原來內核的firmware拷貝到新內核對應的目錄,名字和內核一致,我的內核是
linux-image-2.6.25.10dell1400,那建的目錄名就是2.6.25.10dell1400。代碼:具體命令:$ cd /lib/firmware/$ sudo mkdir 2.6.25.10dell1400把你的老內核中的4965的firmware拷貝過來。$ sudo cp 2.6.24-16-generic/* 2.6.25.10dell1400/上面的命令和下面的命令是等價的:$ cd /lib/firmware/$ sudo cp -R 2.6.24-16-generic/ 2.6.25.10dell1400/
重新啟動系統,無線網卡就正常了。
附編譯使用的機器配置:dell vostro 1400,t8100,nvidia 8400cs顯卡,內置SigmaTel STAC9228晶元的音效卡,4965無線網卡,BCM5906M千兆網卡,3G內存,160G硬碟,combo刻錄。
編譯系統版本:ubuntu 8.04桌面版.
⑧ 在Ubuntu上做內核編程,要安裝哪個包怎麼做
1、gcc (C編譯器)
安裝 apt-get install gcc
2、make (源代碼維護工具,它能自動檢測出需要重新編譯的源文件並根據你設定的編譯規則去重新編譯程序)
安裝 apt-get install make
3.kernel-source (內核源碼包。你可以apt-cache search kernel-source搜索到內核源代碼包,並用uname -r命令查看到當前系統內核版本,然後用apt-get install kernel-source-xxxx來安裝和你內核版本一致的內核源代碼包)
如果你不想重新編譯內核,內核源代碼包kernel-source是完全可以不下載的。
4.kernel-headers(內核源代碼頭文件包,不管你是要進行內核模塊開發還是進行驅動程序開發,這個包都是必須 要安裝的。因為作為一個內核模塊編寫者,通常會調用內核里的一些東西,比如內核頭文件,內核數據結構申明等。它裡麵包含了一些關鍵的內核頭文件)
安裝 apt-cache search kernel-headers
uname -r
apt-get instakk kernel-headers-xxxx
5.kernel-kbuild(用來編譯內核模塊的,下載安裝這個包後會發現在/usr/src目錄下多了一個kernel-kbuild-xxxx開頭的目錄,下面只有scripts一個目錄,這是用來編譯內核模塊的一些腳本程序)
安裝 apt-cache search kernel-kbuild
uname -r
apt-get install kernel-kbuild-xxxx
6.build-essential(包含一個在建立deb包過程中起關鍵作用的包的信息列表,如果你不想建立deb包你就不需要安裝此表)
安裝 apt-get install build-essential
7.kernel-package(如果你想把內核鏡像做成一個deb包來用,那麼必須用安裝這個包了)
安裝 apt-get install kernel-package
8.initrd-tools(如果你想製作啟動過程的initrd鏡像,則這個包是必不可少的)
安裝 apt-get instakk initrd-tools
假設你編寫了一個內核模塊程序,源代碼如下:
/* hello.c */
#include <linux/init.h>
#include <linux/mole.h>
#include <linux/kernel.h>
static int hello_init(void)
{
printk(KERN_ALERT "Hello, linux kernel mole
");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, I've created a linux kernel mole sucessfully
");
}
mole_init(hello_init);
mole_exit(hello_exit);
MODULE_LICENSE("GPL");
你需要這此源程序編寫一個makefile,內容如下:
#Makefile for hello.c file
#
KERNEL_DIR:=/usr/src/linux
obj-m:=hello.o
default:
$(MAKE) -C $(KERNEL_DIR) SUBDIRS=$(PWD) moles
clean:
$(RM) .*.cmd *.mod.c *.o *.ko -r .tmp
注意:這里的KERNEL_DIR是指內核源代碼頭文件所在目錄的上一級目錄,通常就是指內核源代碼目錄。該目錄一般包括有arch,drivers,fs,include,init,ipc,kernel,lib,mm,net,scripts,usr,sound,security等目錄。
在本示例中,/usr/src/linux是一個鏈接,指向了/usr/src/kernel-headers-2.6.8-3目錄。
編寫好makefile後就可以輸入make命令生成hello.ko內核模塊了,然後你可以用:
insmode hello.ko
命令來加入內核模塊,然後用:
rmmod hello
來刪除內核模塊。
⑨ Ubuntu虛擬機里怎麼編譯內核
方法/步驟
」Ctrl+Alt+T」進入終端,使用命令 sudo passwd root 啟動root賬號,重啟,使用 su 命令獲得root許可權;
安裝編譯內核所需軟體包
# apt-get update
# apt-get install build-essential kernel-package libncurses5-dev fakeroot 選擇Y
下載3.19.3源碼包並解壓
# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.3.tar.xz
# tar -Jxvf linux-3.19.3.tar.xz
配置內核
# cd linux-3.19.3 (cd命令進入源碼目錄)
# make mrproper (得到源代碼後,將其凈化)
# make menuconfig (對內核選項進行配置,不需要配置,直接enter)
# cp /boot/config-'uname -r'-generic ./.config ('uname -r'-generic指現版本內核)
# make clean (刪除配置時留下的一些不用的文件)
編譯內核(需要很長時間,我用了有兩小時,請耐心等待)
# make bzImage
# make moles (編譯模塊)
安裝新內核
# make moles_install (安裝模塊)
# make install
製作啟動盤
# sudo mkinitramfs 3.19.3 -o /boot/initrd.img-3.19.3
更新grub2
# sudo update-grub2
重啟,使用新內核(不是注銷哦,是重啟)
使用命令# uname -r 查看內核版本