當前位置:首頁 » 編程軟體 » 編譯內核安裝模塊出錯

編譯內核安裝模塊出錯

發布時間: 2022-09-08 14:00:18

1. 編譯linux內核,安裝模塊的過程中死機,重啟後是要直接安裝模塊呢,還是重新編譯內核(已make成功)

我覺得安裝模塊過程中死機,不會影響到已經編譯好的模塊。模塊還是編譯過的,直接install就可以了。

2. 編譯內核時出現這種問題是什麼情況

、若編譯內核時總是出現同一個錯誤,如下:
在make moles_install時最後幾行彈出錯誤:
if [ -r System.map -a -x /sbin/depmod ]; then /sbin/depmod -ae -F System.map 2.6.12.2; fi
/bin/sh: line 1: 3357 已殺死 /sbin/depmod -ae -F System.map 2.6 .12.2
make: *** [_modinst_post] 錯誤 137
如果繼續make install,重啟,是進不去剛剛編譯安裝的那個內核的,顯示內核錯誤。
分析:如果 System.map可讀 並且 /sbin/depmod可執行;那麼就執行/sbin/depmod -ae -F System.map 2.6.20;結束
depmod(depend mole)
功能說明:分析可載入模塊的相依性。
語 法:depmod [-adeisvV][-m <文件>][--help][模塊名稱]
補充說明:depmod可檢測模塊的相依性,供modprobe在安裝模塊時使用。
參 數:
-a或--all 分析所有可用的模塊。
-d或debug 執行排錯模式。
-e 輸出無法參照的符號。
-i 不檢查符號表的版本。
-m<文件>或system-map<文件> 使用指定的符號表文件。

3. linux內核模塊安裝出錯!!

2.4,好老的內核,一定要用2.4嗎?你自己修改過內核源代碼?一般那麼老的內核只有做嵌入式自己修改內核才會用到,以適應開發板附帶的文件系統,如果沒要求建議你換2.6內核吧,最新的內核make,make install直接搞定,自己去kernel.org下
補充回答:
其實內核大小與版本沒關系,需要看你自己訂製得如何,自己用make menuconfig進去調整,不要的驅動都別編譯,恢復盤也就只要啟動基本系統就好,什麼音效卡顯卡等高級驅動都不要的,我們做嵌入式開發的時候2.6內核裁減過之後編譯出來也就幾百K
另外,團IDC網上有許多產品團購,便宜有口碑

4. 編譯內核模塊錯誤(linux)

在這些高版本的RedHat Linux上,我們如果需要定製內核的話,沒有直接的源代碼rpm可以安裝,只能通過kernel.org下載的tar.gz的包手工安裝,或者通過kernel-*.src.rpm編譯出kernel-source包再來安裝。後面一種方法可以享受到RedHat針對內核的某些參數和代碼的優化,因此對使用RedHat發行版特別是企業版本的,是有一定好處的。
但是目前很多人至今分不清內核,內核開發,內核源代碼一些包之間的關系,因此在編譯內核的時候經常走彎路,同時RedHat官方對於如果得到kernel-source也沒有明確的指示,導致很多人不得要領。

首先認清楚各rpm包的內容和用途
kernel-*.rpm ------------- 內核二進制包,沒有的話系統都起不來
kernel-sourcecode-*.rpm------------------- 內核源代碼包,安裝到/usr/src/linux-*下面的,包含內核源代碼,編譯內核必須(當然是不考慮用kernel.tar.gz編譯的情況),但高版本RedHat Linux不再提供此rpm,原因參見官方Release Note,這篇文章的最終目的就是要我們自己把這個包搞出來。
kernel-devel-*.rpm----------------內核開發包,安裝到/usr/src/kernels,用於內核模塊開發,組織形式跟內核源代碼包類似,包含了部分內核源代碼。注意很多人誤認為這個就是內核源代碼包,直接拿它來編譯內核,當然不可能成功。這個包只是用於內核模塊一級開發,例如驅動程序等,雖然也可以make menuconfig make dep等,但make bzImage是不可能成功的,因為缺失了核心源代碼。
kernel-*.src.rpm---------------RedHat提供的用於建立rpm的源代碼包,安裝到/usr/src/redhat中,使用rpmbuild可以從這個包中build出上面所說的所有包。

現在就來從src.rpm編譯出上面的所有的包,除了sourcecode這個包其他的包都可以在不用修改任何地方的情況下直接rpmbuild出來,唯有sourcecode這個比較麻煩,一定要按照下面的步驟來做,我以RedHat AS4 所帶的版本為例,其他版本相同。

#首先安裝src.rpm
rpm -ivh kernel-2.6.9-5.EL.src.rpm
#進入相應目錄,要修改spec文件
cd /usr/src/redhat/SPECS
vi kernel-2.6.spec
#主要修改如下地方:
1,define buildsource 0------------我的這個在第8行,改為1,這就是為什麼沒有源代碼包的原因,因為默認不生成源代碼包
2, Requires: qt-devel, gtk2-devel readline-devel ncurses-devel-------我的在572行,如果沒用用X的話,把這句注釋掉,這樣編譯出來的包就不依賴於X-window的某些包,因為內核配置是可以make xconfig的,所以默認依賴X-window,我沒裝X-window,因此這個就去掉了。
#保存退出
touch /etc/beehive-root
#這句命令非必須,如果不做的話,最後編譯出來的包都會變成kernel-*.*-root.rpm,多了個root,據說是為了標示包的編譯人的,如果touch了這個文件,就沒有這個問題了,命名和官方rpm一樣。
rpmbuild -ba --target=i686 ./kernel-2.6.spec
#編譯i686平台的所有包,這樣上面介紹的所有包都會生成,或者換成rpmbuild -bb --target=i686 ./kernel-2.6.spec只編譯非src.rpm。
#所有包就會生成到/usr/src/redhat/RPMS/i686下面

#如果只需要sourcecode而並非所有rpm包,那在修改spec文件時還要修改如下行:

48 %ifarch noarch
49 %define builddoc 1
50 %define buildsource 0----------------這里0修改為1
在編譯的時候使用rpmbuild -ba --target=noarch ./kernel-2.6.spec,這樣僅僅編譯soucecode和doc包,會節省很多時間。

注意,此篇文章所講所有內容僅適用於使用2.6內核的新版本RedHat Linux,2.4版本內核代碼組織方式不同,不適用此文章。

以上這篇文章取自互聯網,我忘了出處,尊敬作者.

5. 為什麼內核編譯老出錯

主要問題在於每個人每台電腦的環境都不相同, 編譯時常需要大量庫文件, 不同版本也會有差異性; 再加上還有使用者環境設定的差異, 產生許可權或路徑等差異情況. 因此, 出錯是正常的, 找出相對應的問題並逐步解決, 即可完成編譯

6. linux編譯內核時,到安裝內核模塊:#make moles_install 時,過程中提示設備上沒有空間

建議裁剪內核,內核中很多驅動模塊,子系統等一般用戶都用不上,我在我自己的電腦上裁剪後編譯的內核源碼樹大小隻有700多M~

7. 編譯內核模塊常見有關問題怎麼解決

第一次把自己編譯的驅動模塊載入進開發板,就出現問題,還好沒花費多長時間,下面列舉出現的問題及解決方案
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 就可以看到 產生的內核信息啦

8. ubuntu下安裝virtualbox-3.2_3.2.6-63112_Ubuntu_lucid_amd64.deb,提示內核模塊編譯失敗

出現這種問題是因為內核頭文件包沒有安裝,用apt-get在線安裝這個包就可以了,在錯誤提示信息裡面有說明(log文件裡面的說明會更詳細)。這個包的名字是以linux-headers開頭的,先查詢包的完整名字(因為完整名字不同的內核版本都不一樣),再用apt-get install來安裝。

9. linux內核編譯出錯

/dev 的問題我要沒記錯是需要編譯 devfs 這個東西。另外可能還需要 tmpfs 。
/dev/console 如果不存在,那 linux 連啟動都會有問題。啟動一個控制台必須要一個 console ,以及幾個 /dev/ttyXXXXX 的設備。這個必須在內核正式掛載系統後馬上存在,不然任何程序都不能繼續運行(系統啟動時必須有一個程序通過這個設備連接內核進行控制)。也就是說,這個文件必須早就在硬碟上,除非你的使用 initrd ,在 initrd 這個預先設計好的內存檔上面存在也可以的。

你這個已經存在的錯誤就是因為前面的 mount /dev 失敗導致的。

用 2.4 說穩定的那幫其實都是用 windows 的。

你現在最大的問題就是內核配置完全的有問題,none 和內核無關,這是 mount 的一個參數,如果是 tmpfs 、devfs 、sysfs、usbfs 這種內存中存在的特殊文件系統,那麼這個 none 的部分就不是必須的,所以有個 none 就是替代品,如果是整一個 ext3、fat 什麼的實際的文件系統硬體,那麼這個 none 必須是這個文件系統的設備文件。

你現在的錯誤和 i2c 一點關系都沒有。錯誤信息和正常提示信息的區分能力必須有。
我真不明白你連錯誤信息都看不懂的時候,為什麼去編譯內核?
那個騙子讓你這么乾的?

10. 今天用16.04ubuntu編譯內核4.7.4 安裝模塊時出現問題,求助

我剛剛安裝了,你照我的說法去做。先輸入su切換到root用戶,然後輸入你的root密碼然後再安裝就可以。直接安裝v im就行。

熱點內容
歐皇源碼 發布:2025-03-24 06:26:18 瀏覽:858
為什麼id密碼在異地登錄 發布:2025-03-24 06:17:13 瀏覽:45
google地圖連接伺服器地址 發布:2025-03-24 06:12:43 瀏覽:359
安卓怎麼樣恢復手機刪除的視頻 發布:2025-03-24 06:07:03 瀏覽:132
格式化手機usb存儲器 發布:2025-03-24 05:52:33 瀏覽:237
留學網源碼 發布:2025-03-24 05:37:09 瀏覽:874
如何讓瀏覽器用戶名密碼不過期 發布:2025-03-24 05:29:18 瀏覽:928
c語言字元串轉函數 發布:2025-03-24 05:17:03 瀏覽:477
androidstudio啟動模擬器 發布:2025-03-24 05:12:07 瀏覽:770
vs2008資料庫 發布:2025-03-24 05:12:01 瀏覽:445