導航:首頁 > 源碼編譯 > 內核編譯卡住了怎麼辦

內核編譯卡住了怎麼辦

發布時間:2022-10-02 17:35:55

A. linux編譯內核出錯,求助

Linux起來以後,Linux內核存在於內存和硬碟中。Linux內核編譯是重新編譯一個硬碟映像,不影響你現在的使用。重啟以後,你可以選擇這個新的映像,新內核就生效了。原來的內核可以保存在硬碟中,在硬碟中是可以有多個內核映像的,但是內存中只有一個,Linux內核一直在運行,是Linux系統的總管家。ARM開發板重新編譯內核是因為嵌入式上資源有限,要去掉一些不必要的選項,編一個小一點的內核。還有ARM的匯編指令是針對ARM類型CPU的,PC上的匯編指令是針對x86類型CPU的,所以必須用針對ARM處理器的編譯工具鏈去編譯內核,在x86機器上(就是你的電腦)編譯ARM內核,在一種CPU機器上編譯另外一種CPU的代碼,就叫做交叉編譯。

B. linux內核編譯一直出這個問題

沒有用過kbuild這個命令
1. 你可以用 make試試,但不知道能不能適用你的系統。
清空已經編譯臨時文件

make clean
配置

make menuconfig

編譯

make
安裝編譯好的模塊

make moles_install
安裝編譯好的內核(根據你編譯的版本而定)

cp ...
2. 或者你可以用genkernel這個工具編譯,不過要先安裝(不知道ubuntu的版本下是否能用,我是在gentoo下用過).

C. 重新編譯內核後無法啟動,該怎麼處理

以前的內核還在嗎,可能不是內核的問題,你能進入到grub選擇系統的菜單嗎,如果不能進入,那是引導的問題,如果能進去,嘗試進入命令行模式引導你以前的舊內核
一般,我遇到這種情況都是顯卡驅動的問題,安裝了linux image後,還要安裝相應的linux headers,系統啟動後,按Crtl+Alt+Fn(n=2,3,4,5,6)如果能進入tty,那就是顯示驅動沒裝上,故不能進入圖形界面。但系統已經啟動了。

D. 我編譯的Linux內核為什麼會在啟動時卡住不動

如果,你的CPU支持內核虛擬化那就直接用linux自帶的xen就可以做虛擬機了不必裝vmware!

E. 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 就可以看到 產生的內核信息啦

F. linux 在虛擬機中編譯完內核後無法啟動了怎麼辦~~~

不想修改grub的話可以先光碟啟動,然後把光碟中/boot裡面的內核文件和/lib/moles/**下的文件拷入硬碟對應的文件夾,替換你自己編譯的內核~

G. ubuntu內核編譯到一半退出

ubuntu內核編譯到一半退出原因如下
主要是因為沒有在內核源碼目錄下進行。例如,要編譯或升級的內核解壓後的目錄為/usr/src/linux-2.4.24,一定要進入到該目錄後使用make menuconfig命令,這樣就不會提示錯誤了。
2、Unable to find the ncurses libraries
更新或編譯Ubuntu的內核時,執行make menuconfig可能看如這樣的錯誤:*** required header files.
*** 『make menuconfig』 requires the ncurses libraries.
*** Install ncurses (ncurses-devel) and try again.
這是因為缺少庫文件,使用apt-get install ncurses-dev在線安裝即可。
3、Your display is too small to run Menuconfig這是因為屏幕太小的緣故,窗口調大即可。

H. 菜鳥求助,編譯完內核進不了系統了

一種是在grub作內核引導時添加idle參數,這一種是國內網常見的一種說法;
第二個方法是注意一下bios中顯示的CPU或者內存條的溫度;
第三種是重新作initrd,即mkinitrd;
第四種是在grub中啟動memtest86來測試內存。

I. 我編譯的Linux內核為什麼會在啟動時卡住不動

如果,你的CPU支持內核虛擬化
那就直接用linux自帶的xen就可以做虛擬機了
不必裝vmware!

J. 我的Linux內核 編譯一直過不去

這個....問題可能是多方面的 有可能是程度依賴問題 或者可能是你編譯的方式不對

閱讀全文

與內核編譯卡住了怎麼辦相關的資料

熱點內容
噴油螺桿製冷壓縮機 瀏覽:577
python員工信息登記表 瀏覽:375
高中美術pdf 瀏覽:159
java實現排列 瀏覽:511
javavector的用法 瀏覽:980
osi實現加密的三層 瀏覽:230
大眾寶來原廠中控如何安裝app 瀏覽:912
linux內核根文件系統 瀏覽:241
3d的命令面板不見了 瀏覽:524
武漢理工大學伺服器ip地址 瀏覽:147
亞馬遜雲伺服器登錄 瀏覽:523
安卓手機如何進行文件處理 瀏覽:70
mysql執行系統命令 瀏覽:929
php支持curlhttps 瀏覽:142
新預演算法責任 瀏覽:443
伺服器如何處理5萬人同時在線 瀏覽:249
哈夫曼編碼數據壓縮 瀏覽:424
鎖定伺服器是什麼意思 瀏覽:383
場景檢測演算法 瀏覽:616
解壓手機軟體觸屏 瀏覽:348