當前位置:首頁 » 編程軟體 » linuxhttp編譯

linuxhttp編譯

發布時間: 2022-05-06 09:38:36

『壹』 linux 編譯內核幾個常見問題解決方法

第一次把自己編譯的驅動模塊載入進開發板,就出現問題,還好沒花費多長時間,下面列舉出現的問題及解決方案
1:出現insmod: error inserting 'hello.ko': -1 Invalid mole format
法一(網上的):是因為內核模塊生成的環境與運行的環境不一致,用linux-2.6.27內核源代碼生成的模塊,可能就不能在linux-2.6.32.2內核的linux環境下載入,需要在linux-2.6.27內核的linux環境下載入。
a.執行 uname -r //查看內核版本
b.一般出錯信息被記錄在文件/var/log/messages中,執行下面命令看錯誤信息
# cat /var/log/messages |tail
若出現類似下面:
Jun 4 22:07:54 localhost kernel:hello: version magic '2.6.35.6-45.fc14.i686.PAE
' should be '2.6.35.13-92.fc14.i686.PAE'
則把 Makefile里的KDIR :=/lib/moles/2.6.35.6-45.fc14.i686.PAE/build1 改為
KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1 //改成自己內核源碼路徑
(這里的build1是一個文件鏈接,鏈接到/usr/src/kernels/2.6.35.6-45.fc14.i686.PAE和13-92的)
然並卵,我的fedora 14 /usr/src/kernels下並沒有2.6.35.13-92.fc14.i686.PAE,只有2.6.35.13-92.fc14.i686,雖然不知道兩者有什麼區別,但改成2.6.35.13-92.fc14.i686還是不行,照樣這個問題,還好後來在看教學視頻的到啟發
法二:改的還是那個位置
KDIR :=/opt/FriendlyARM/linux-2.6.32.2 //把這里改成你編譯生成kernel的那個路徑
all:
$ (MAKE) -C $ (KDIR) M = $ (PWD) moles ARCH=arm CROSS_COMPILE=arm-linux- //加這句
2. [70685.298483] hello: mole license 'unspecified' taints kernel.
[70685.298673] Disabling lock debugging e to kernel taint
方法:在模塊程序中加入: MODULE_LICENSE("GPL");
3. rmmod: chdir(2.6.32.2-FriendlyARM): No such file or directory 錯誤解決
方法:lsmod 可查看模塊信息
即無法刪除對應的模塊。
就是必須在/lib/moles下建立錯誤提示的對應的目錄((2.6.32.2)即可。
必須創建/lib/moles/2.6.32.2這樣一個空目錄,否則不能卸載ko模塊.
# rmmod nls_cp936
rmmod: chdir(/lib/moles): No such file or directory
但是這樣倒是可以卸載nls_cp936,不過會一直有這樣一個提示:
rmmod: mole 'nls_cp936' not found
初步發現,原來這是編譯kernel時使用make moles_install生成的一個目錄,
但是經測試得知,rmmod: mole 'nls_cp936' not found來自於busybox,並不是來自kernel
1).創建/lib/moles/2.6.32.2空目錄
2).使用如下源碼生成rmmod命令,就可以沒有任何提示的卸載ko模塊了[luther.gliethttp]
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <errno.h>
int main(int argc, char *argv[])
{
const char *modname = argv[1];
int ret = -1;
int maxtry = 10;
while (maxtry-- > 0) {
ret = delete_mole(modname, O_NONBLOCK | O_EXCL);//系統調用sys_delete_mole
if (ret < 0 && errno == EAGAIN)
usleep(500000);
else
break;
}
if (ret != 0)
printf("Unable to unload driver mole \"%s\": %s\n",
modname, strerror(errno));
}
3).把生成的命令復制到文件系統
# arm-linux-gcc -static -o rmmod rmmod.c
# arm-linux-strip -s rmmod
# cp rmmod /nfs/
cp /nfs/rmmod /sbin
代碼如下:
proc.c
[html] view plain
<span style="font-size:18px;">#include <linux/mole.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/proc_fs.h> /* Necessary because we use the proc fs */
#define procfs_name "proctest"

MODULE_LICENSE("GPL");
struct proc_dir_entry *Our_Proc_File;
int procfile_read(char *buffer,char **buffer_location,off_t offset, int buffer_length, int *eof, void *data)
{ int ret;
ret = sprintf(buffer, "HelloWorld!\n");
return ret;
}

int proc_init()
{ Our_Proc_File = create_proc_entry(procfs_name, 0644, NULL);
if (Our_Proc_File == NULL) {
remove_proc_entry(procfs_name, NULL);
printk(KERN_ALERT "Error: Could not initialize /proc/%s\n",procfs_name);
return -ENOMEM; }
Our_Proc_File->read_proc = procfile_read;//
// Our_Proc_File->owner = THIS_MODULE;
Our_Proc_File->mode = S_IFREG | S_IRUGO;
Our_Proc_File->uid = 0;
Our_Proc_File->gid = 0;
Our_Proc_File->size = 37;
printk("/proc/%s created\n", procfs_name);
return 0;
}
void proc_exit()
{ remove_proc_entry(procfs_name, NULL);
printk(KERN_INFO "/proc/%s removed\n", procfs_name);
}
mole_init(proc_init);
mole_exit(proc_exit);</span></span></span></span></span>
[html] view plain
<span style="font-size:18px;">

ifneq ($(KERNELRELEASE),)
obj-m :=proc.o
else
KDIR :=/opt/FriendlyARM/linux-2.6.32.2
#KDIR :=/lib/moles/2.6.35.13-92.fc14.i686.PAE/build1
PWD :=$(shell pwd)
all:
$(MAKE) -C $(KDIR) M=$(PWD) moles ARCH=arm CROSS_COMPILE=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif</span></span></span></span></span>
make後生成proc.ko,再在開發板上insmod proc.ko即可
執行 dmesg 就可以看到 產生的內核信息啦

『貳』 linux下http的底層函數都包括那些在哪個庫中定義

底層用的就是socket,編譯的時候不需要特別指定鏈接具體的庫。
常用到的頭文件如下
sys/types.h:數據類型定義
sys/socket.h:提供socket函數及數據結構
netinet/in.h:定義數據結構sockaddr_in
arpa/inet.h:提供IP地址轉換函數
netdb.h:提供設置及獲取域名的函數
sys/ioctl.h:提供對I/O控制的函數
sys/poll.h:提供socket等待測試機制的函數

其他在網路程序中常見的頭文件
unistd.h:提供通用的文件、目錄、程序及進程操作的函數
errno.h:提供錯誤號errno的定義,用於錯誤處理
fcntl.h:提供對文件控制的函數
time.h:提供有關時間的函數
crypt.h:提供使用DES加密演算法的加密函數
pwd.h:提供對/etc/passwd文件訪問的函數
shadow.h:提供對/etc/shadow文件訪問的函數
pthread.h:提供多線程操作的函數
signal.h:提供對信號操作的函數
sys/wait.h、sys/ipc.h、sys/shm.h:提供進程等待、進程間通訊(IPC)及共享內存的函數

『叄』 如何在linux編譯和使用ACE

一:下載源碼
http://download.dre.vanderbilt.e/
目前最新版本6.1.2。如果只使用ACE,可以選擇選擇ACE only (tar+gzip format)。

二:編譯
2.1 設置環境變數
在當前用戶目錄下,找到.bash_profile(centos版本)文件或.profile(ubuntu版本)文件,在該文件末尾增加內容:
export PATH
export ACE_ROOT=/home/yleesun/3rd/ACE_wrappers
export LD_LIBRARY_PATH=$ACE_ROOT/ace:$ACE_ROOT/lib:$LD_LIBRARY_PATH
具體ACE_ROOT的路徑,根據實際情況修改。

2.2 執行編譯命令
在$ACE_ROOT/ace目錄下運行命令:
ln -s config-linux.h config.h

在$ACE_ROOT/include/makeinclude目錄下執行命令:
ln -s platform_linux.GNU platform_macros.GNU

回到目錄$ACE_ROOT下,執行命令:make
大概20分鍾左右編譯完成。

三:使用ACE編程
ACE庫編譯完成,下面寫個程序試試。
#include <ace/Log_Msg.h>
#include <ace/OS_main.h>
using namespace std;
int ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
ACE_DEBUG((LM_DEBUG, ACE_TEXT(「Hello World!」)));
return 0;
}
該文件命名為acetest.cpp
執行下面命令進行編譯:
g++ -I$ACE_ROOT -lACE -L$ACE_ROOT/lib -o acetest acetest.cpp

編譯成功,運行:
./acetest
列印出:Hello World!

注意:g++ 命令後面到參數
-I$ACE_ROOT // 指定包含到頭文件路徑,此處是大寫的 I ,include 的第一個字母到大寫。
-lACE // 指定包含到庫名稱,此處是小寫的 l,library 的第一個字母到小寫。
-L$ACE_ROOT/lib // 指定依賴庫到路徑,此處是大寫到L,library 的第一個字母到大寫。

『肆』 怎麼在linux上編譯java web

解壓後會有兩個文件夾:nexus-2.11.4-01和sonatype-work,前者包含了運行環境和應用程序,後者是配置和數據。
注意要以管理員方式打開命令提示符:
進入目錄:\nexus-2.11.4-01\bin\jsw\windows-x86-64
運行:
install-nexus.bat11

然後運行:
start-nexus.bat11

結果如下所示:
wrapper | Starting the nexus service...
wrapper | Waiting to start...
wrapper | Waiting to start...
wrapper | nexus started.

『伍』 如何升級/編譯Linux內核

下載內核
如果您只是想編譯一個您已安裝內核的新版本(例如,實現 SMP 支持),那不需要下載任何代碼 -- 跳過此部分繼續下一屏。
您可以在 http://www.kernel.org/pub/linux/kernel 上找到內核代碼。當您進入到那後,您將發現內核的源代碼按內核版本(v2.2、v2.3 等),被組織到多個不同的目錄中。在每個目錄中,您將發現文件被冠以"linux-x.y.z.tar.gz"和"linux-x.y.z.tar.bz2"。這些就是 Linux 內核的源代碼。您也將看到冠以 "patch-x.y.z.gz" 和 "patch-x.y.z.bz2" 的文件。這些是用來更新前面完整的內核源代碼的補丁包。如果您希望編譯一個新的內核版本,您將需要下載這些"linux"文件其中之一。
內核解包
如果您已從 kernel.org 下載一個新的內核,現在是要將其解包時候了。首先,cd /usr/src。如果這里有一個存在的"linux"目錄,將其改名為"linux.old" ("mv linux linux.old",以 root 許可權)。
現在,可以解開新的內核包了。仍然在 /usr/src 目錄下,輸入 tar xzvf /path/to/my/kernel-x.y.z.tar.gz 或者 cat /path/to/my/kernel-x.y.z.tar.bz2 | bzip2 -d | tar xvf -,根據您下載的源代碼是用 gzip 或 bzip2 壓縮的。在輸入完此命令後,您下載的內核源代碼會被釋放到一個新的"linux"目錄下。注意 -- 全套內核源代碼通常將在硬碟上佔用超過 50 兆空間!
討論配置問題
在您編譯內核前,您需要配置它,配置是您精確控制在新內核中啟用(禁止)哪些內核功能的機會。您也將控制哪些會被編譯到內核的二進制映像(在啟動時被載入)而哪些被編譯到需要時載入的內核模塊文件。
老式配置內核的方法是極為痛苦的過程,並涉及到進入 /usr/src/linux 目錄並輸入 make config 命令。請放棄這種配置內核的方式 -- 除非您想在命令行上回答幾百個(對!幾百個)「yes/no」的問題。
配置的新途徑
我們是現代人類,我們不在輸入 make config,而是輸入 make menuconfig 或者 make xconfig。如果您想要配置您的內核,使用上述選擇之一。如果您輸入 make menuconfig,您將使用一個漂亮的基於文本的彩色菜單系統來配置內核。如果您輸入 make xconfig,您將使用一個更漂亮的基於 X-Window 的 GUI 界面來配置內核的各種選項。這里有一個使用 "make menuconfig" 的屏幕截圖:

當使用 "make menuconfig" 時,在左面出現一個 "< >" 的選項能被編譯成為一個模塊。當選項被選中,按下空格鍵來循環選擇選項是被選中或未選中, ("<*>")表示將被編譯成內核映像而("<M>")表示將被編譯成模塊。
配置技巧
在這里有極其多的內核選項,而且我們無法在此一一解釋 -- 所以請利用內核內置的幫助功能。基本上每個選項都至少有一些描述,而且每個通常都有一行"如果您不知道這個選項的含義,輸入 Y。(或者 N)"。這些提示在您不知道一個特定選項的含義時能幫助您。要使用幫助,選中您有疑問的選項然後按 "?" 鍵。
編譯和安裝內核
make dep; make clean
一旦您的內核配置完畢,就可開始編譯它了。在我們能編譯它前,我們需要生成依賴(dependency)信息並清除任何老的"編譯結果"。這可以通過在 /usr/src/linux 下輸入 make dep; make clean 完成。
make bzImage
現在是編譯真正的二進制內核映像時候了。輸入 make bzImage。過幾分鍾後,編譯會結束而且您在 /usr/src/linux/arch/i386/boot(x86 PC 內核)目錄下找到 bzImage 文件。我們將待會告訴您如何安裝這個新內核,但是現在我們要看看模塊編譯了。
編譯模塊
現在我們有了 bzImage,下面要編譯模塊了。即使您在配置內核時沒有使用任何模塊,也不要跳過此步驟 -- 在編譯完 bzImage 後立刻編譯模塊是個好習慣。而且,如果您真的沒有模塊需要編譯,這個步驟也非常快就結束了。輸入 make moles; make moles_install。這將導致模塊被編譯而且被安裝到 /usr/lib/<內核版本號> 目錄下。
祝賀您!您的內核已經被編譯完成了,您的內核模塊也編譯完成並被安裝。現在是要重新配置 LILO,這樣您能使用新的內核。
啟動配置
LILO 入門
現在是最後來重新配置 LILO 的時候了,它將負責載入新的內核。LILO 是最流行的 Linux 引導工具,而且為所有的主流 Linux 發行商所採用。您要作的第一件事是察看您的 /etc/lilo.conf 文件。它將包含一行看似 "image=/vmlinuz" 的語句。該語句告訴 LILO 到何處找到內核。
啟動配置, 第二部分
要配置 LILO 來使用新的內核,您有兩種選擇。第一個是覆蓋您現有的內核 -- 除非您手頭上有一些緊急啟動措施如還有此內核的引導盤,這很危險的方法。
更為安全的選擇是配置 LILO 是得它能從新的或舊的內核引導。LILO 可配置成從新內核預設啟動,但仍提供一種方法讓您遇上問題時能選擇舊的內核來啟動。這是推薦的作法,也是我們將隨後介紹的方法。
啟動配置, 第三部分
您的 lilo.conf 文件有可能看起來如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only

image=/vmlinuz
label=linux
要在您的 lilo.conf 文件中增添新的項目,參見下列步驟。首先,拷貝 /usr/src/linux/arch/i386/boot/bzImage 到您的根(root)分區上的一個文件,例如 /vmlinuz2。一旦拷貝完畢,復制您 lilo.conf 文件的最後三行並將它們添加到該文件的最後... 我們即將結束整個步驟了...
啟動配置, 第四部分
現在,您的 lilo.conf 文件應該看起來如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only

image=/vmlinuz
label=linux

image=/vmlinuz
label=linux
首先,將第一個 "image=" 行改為 "image=/vmlinuz2"。其次,將第二個 "label=" 行改為 "label=oldlinux"。然後,確定在文件的開始有一行 "delay=20" -- 如果沒有,增添一行。如果它已經存在,將數字至少設為 20。
啟動配置, 第五部分
您最後的 lilo.conf 文件將看起來如下:
boot=/dev/hda
delay=20
vga=normal
root=/dev/hda1
read-only

image=/vmlinuz2
label=linux

image=/vmlinuz
label=oldlinux
作完這些修改後,您將需要以 root 身份運行 "lilo"。這非常重要!如果您不執行此步,啟動的過程無法繼續。運行 "lilo" 將給 lilo 一個機會來更新它的啟動映射。

『陸』 Linux內核源碼如何編譯

首先uname -r看一下你當前的linux內核版本

1、linux的源碼是在/usr/src這個目錄下,此目錄有你電腦上各個版本的linux內核源代碼,用uname -r命令可以查看你當前使用的是哪套內核,你把你下載的內核源碼也保存到這個目錄之下。
2、配置內核 make menuconfig,根據你的需要來進行選擇,設置完保存之後會在當前目錄下生成.config配置文件,以後的編譯會根據這個來有選擇的編譯。
3、編譯,依次執行make、make bzImage、make moles、make moles
4、安裝,make install
5、.創建系統啟動映像,到 /boot 目錄下,執行 mkinitramfs -o initrd.img-2.6.36 2.6.36
6、修改啟動項,因為你在啟動的時候會出現多個內核供你選擇,此事要選擇你剛編譯的那個版本,如果你的電腦沒有等待時間,就會進入默認的,默認的那個取決於 /boot/grub/grub.cfg 文件的設置,找到if [ "${linux_gfx_mode}" != "text" ]這行,他的第一個就是你默認啟動的那個內核,如果你剛編譯的內核是在下面,就把代表這個內核的幾行代碼移到第一位如:
menuentry 'Ubuntu, with Linux 3.2.0-35-generic' --class ubuntu --class gnu-linux --class gnu --class os {

recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod part_msdos
insmod ext2
set root='(hd0,msdos1)'
search --no-floppy --fs-uuid --set=root 9961c170-2566-41ac-8155-18f231c1bea5
linux/boot/vmlinuz-3.2.0-35-generic root=UUID=9961c170-2566-41ac-8155-18f231c1bea5 ro quiet splash $vt_handoff
initrd/boot/initrd.img-3.2.0-35-generic
}
當然你也可以修改 set default="0"來決定用哪個,看看你的內核在第幾位,default就填幾,不過我用過這種方法,貌似不好用。

重啟過後你編譯的內核源碼就成功地運行了,如果出現問題,比如滑鼠不能用,usb不識別等問題就好好查查你的make menuconfig這一步,改好後就萬事ok了。

最後再用uname -r看看你的linux內核版本。是不是你剛下的那個呢!有沒有成就感?
打字不易,如滿意,望採納。

『柒』 linux下怎麼編譯安裝驅動

linux 編譯安裝驅動有兩種,動態載入與靜態載入
動態載入
一,編譯,在指點內核樹下編譯,生成.o文件或.ko文件
二,將生成的.o或.ko文件拷到相應目錄,一般是/lib/mole/kernel下面
三,用insmod命令載入,用rmmod命令卸載
靜態載入
靜態載入主要就是編譯內核。就是將編寫好的驅動放進內核相應的目錄下面。然後編譯內核。然後運行編譯好的內核。

『捌』 Linux編譯配置問題

./configure確實是指當前路徑,./的意思沒有那麼復雜,就是當前路徑的意思。Linux不像DOS和Windows,如果不指定PATH,是不會去搜索當前路徑的。這是為了安全的考慮,當然如果你希望省事一些,也可以把./當成PATH的一部分添加進去,這樣以後就可以不用打./這個前綴。

至於firefox,那估計是因為make install的時候把可執行文件拷到系統路徑下去了,或者firefox本來就已經安裝過,你運行一下這個命令看看你執行的firefox在哪兒:
whereis firefox
或者which firefox

一般不出意外的話會在/usr/local/bin/firefox或者/usr/bin/firefox之類路徑下。

如果沒找到,那就到你可以運行firefox的目錄下,再運行上面的命令看看,如果這樣可以的話,估計你當前用戶的PATH下確實有./這個路徑。

『玖』 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

『拾』 如何編譯Linux內核

一、編譯環境

ubuntu 5.10,要編譯的內核源碼版本2.6.12 二、下載並解壓源代碼 首先從linux內核的官網www.kernel.org把源代碼下載下來。為了和後面實驗要求符合,我們要下載使用O(1)調度器的源碼。因此這里下載了2.6.12版本源碼。下載 下linux-2.6.12.tar.bz2,將下載源碼放入/usr/src/目錄下。如下圖所示: 解壓該源碼: 三、構建編譯環境 現在我們得到的只是源代碼,只是許許多多的文本文件,要想使這些文件成為可以運行的程序,需要使用編譯器進行編譯以及鏈接。編譯器有很多,但在里linux下一般都使用gnu的開源編譯器套件,這里包括gcc等,現在我們安裝基本的編譯器套件,如圖所示: 四、安裝ncurses庫 這里使用Ubuntu系統,因為系統自帶的ncurses庫在支持make menuconfig的時候會出錯,所以,依然要安裝ncurses庫,這里我們從源碼安裝。首先去ncurses官網http://ftp.gnu.org/pub/gnu/ncurses/ 上下載源碼。這里我們下載5.9版本,並通過簡單的安裝方式.configure 和make、make install方式安裝。如下圖所示: 五、配置內核 一切准備工作做完,現在我們就可以配置內核了,這里我們使用make menuconfig方式。如下圖: 在使用make menuconfig這個命令後,會出現如下的字元界面,我們就可以在這個界面上對內核進行配置。但是如果這不是你第一次配置這個內核,那麼請先運行:make mrproper來清除以前的配置,回到默認配置,然後再運行:make menuconfig.
在這里,我們以對cpu支持的配置為例,其餘的選項就不一一詳述,首先查看本機的cpu類型,如下圖:

在這里我們可以看到,我的電腦的cpu是AMD Athlon的,因此我們在cpu選項裡面選用AMD,如下圖所示:

在這里需要注意的是:
A、 cpu的設置在linux內核編譯過程中,不是必需的,即使保持默認的386選項(我們剛才把它改成了AMD),內核也能正常運行,只不過運行慢一些而已。
B、 一般容易出問題的地方在於Device Driver的設置。我在一開始就遇到了在內核編譯完,通過grub引導系統過程中報 「ALERT! /dev/sda1 does not exist . Dropping to a shell!」的錯誤。這是因為硬碟驅動沒有配置好而造成的。運行lspci命令,查看到下面這行:

由此確定,需要配置SCSI、PCI-X、Fusion-MPT驅動,需要在響應的驅動選項里將[M]設置為[*],因為硬碟驅動是在系統開機的時候載入,所以不能以模塊形式載入。

把這幾個驅動內部的選項全部改為[*]:

六、編譯內核

對內核的配置完成之後,現在就可以開始編譯內核了,只需要一個簡單的make命令即可,之後我們就只能慢慢等,直到編譯完成,在我的電腦上,大概用了25分鍾。下圖是運行make後的部分輸出。

七、安裝內核
編譯完成之後,我們需要安裝內核,主要分為如下幾步:
1)、安裝模塊

安裝模塊,對於內核來說,每一個內核版本有自己的模塊目錄,默認在/lib/moles/內核版本號這個目錄下,make moles_install會創建對應的目錄,並把對應的模塊文件拷貝過去。注意,這一步必須要在編譯過內核再做。

2)、拷貝bzImage文件

bzImage文件是內核映像文件,是啟動內核所必需的,我們應當把它拷貝到/boot目錄下。在這里,我為自己新建了一個目錄,我們把它拷貝過去,並且按照一般內核映像文件的命名方式為它改名為vmlinuz-2.6.12。

3)、製作initrd文件
initrd文件命名為initrd.img-2.6.12

4)、修改grub啟動項
要能引導起我們的新系統,需要更改grub配置,增加啟動選項。ubuntu 5.10的grub版本比較低,配置文件為/boot/grub/menu.lst,高版本的grub可能在/boot/grub/grub.cfg里。在原有啟動項基礎上,添加我們自己的啟動項,並把它設為默認啟動項,配置如下:

5)重啟
不出意外的話,我們的內核已經正常載入了,運行uname -a,會發現,內核版本已經是2.6.12了。

熱點內容
connectorpython 發布:2025-05-14 09:48:50 瀏覽:761
配置不好怎麼辦 發布:2025-05-14 09:46:40 瀏覽:621
數據流程圖中的數據存儲是指 發布:2025-05-14 09:46:39 瀏覽:444
我的世界伺服器id前綴mod 發布:2025-05-14 09:45:53 瀏覽:830
完整後台網站源碼 發布:2025-05-14 09:45:46 瀏覽:455
傳奇祝福腳本 發布:2025-05-14 09:34:12 瀏覽:571
電腦文件加密的軟體 發布:2025-05-14 09:29:20 瀏覽:354
擴展資料庫表空間 發布:2025-05-14 09:29:10 瀏覽:642
mongo存儲過程 發布:2025-05-14 09:27:54 瀏覽:715
伺服器的公網ip在哪看 發布:2025-05-14 09:18:30 瀏覽:253