導航:首頁 > 源碼編譯 > 內核編譯的問題

內核編譯的問題

發布時間:2022-06-15 17:51:23

linux編譯內核 和 編譯 應用程序的問題

⑵ 關於ubuntu內核編譯的問題

解決辦法 修改 menu.lst 將 root=/UUIDxxxxxxx 這個改為 root=/dev/sdax
另外 從Filesystem type is ntfs.partition type 0x07 這一行我大概可看出,你是wubi安裝的, 這種情況 我建議你重新編譯內核並生成initrd, 因為內核不支持uuid的,initrd才支持,如果把filesystem編譯進內核了,啟動不用initrd.img的話,就只能用root=/dev/sdax的參數作為內核引導參數…

所以關鍵在於 一定要打開initrd支持並生成initrd

至於具體在那裡,我這邊環境所限無法告知, 麻煩你自己在make menuconfig裡面仔細看看或者google一下

/dev/sdxx 是你的硬碟的/的設備名稱 可以用正常啟動的內核引導後 輸入sudo df -h或者 sudo fdisk -l

目前的機器來講 編譯20分鍾很正常, 我的內核優化的很小 大概十分鍾左右就編譯完了 .

另外 內核源碼解開後會佔用接近200M的空間, 而gcc編譯內核和大型軟體時候產生的臨時文件佔用好幾百M乃至上G是很常見的的, 可以進入源代碼文件夾運行 make clean && make mrproper 來清理一下

⑶ LINUX內核編譯的問題

基本上就是安裝開發工具包 gcc,make 等等,然後解壓內核源代碼 運行
make mrproper
make menuconfig
make
make install
make mole_install
即可
windows下編譯linux內核十分麻煩 而且也不容易成功
首先需要安裝cygwin以便你可以使用GNU工具 gcc,make ,然後安裝配置交叉編譯器,在cygwin中生成linux下的ELF格式的2進制文件,然後將編譯得到的內核(bzImage)以及initrd文件 取出待用,windows下編譯必須把選擇的驅動編譯到內核中,不能編譯為模塊

編譯好的內核名字叫做bzImage, 需要手動拷貝出來在引導管理器中載入,同時還有initrd映像 ,也需要進行以上操作.

光有內核不能構成一個可用的linux系統, 安裝到u盤上更是白日作夢, linux系統必須存在一個交戶結面,最起碼得有個shell來負責這個過程...

根據你的提問, 你可能對這個東西完全不了解, 事實上內核不是你想的那樣字,如果想深入了解linux的組成和內核的作用, 建議你安裝一次LFS (Linux From Scratch) , 就會明白linux是怎麼組成的了

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

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

、若編譯內核時總是出現同一個錯誤,如下:
在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<文件> 使用指定的符號表文件。

⑹ ubuntu內核編譯問題

title 隨便寫
root (hd0,4)/ubuntu/disks
kernel /boot/vmlinuz-2.6.27-2-generic root=UUID=40586D90586D860E loop=/ubuntu/disks/root.disk ro quiet splash
initrd /boot/initrd.img-2.6.27-2-generic

注意:兩個內核文件都可以在/boot目錄下看到,我猜是:
/boot/vmlinuz-2.6.27-2-generic和
/boot/initrd.img-2.6.27-2-generic

如果不是,改成正確的名字。錯了也沒關系啊,一個內核進不去,重啟之後從另一個內核進去不就行了。

⑺ Linux內核編譯的具體操作過程及注意問題

你好,樓主:
1、配置.config文件,將你要編譯的配置XXX_config准備好,使用make XXX_config來進行配置;
2、這時你就可以在內核根目錄下進行make menuconfig來使用圖形界面配置內核選項,配置後保存即可;
3、最後只需要使用make或者make uImage生成相應的鏡像即可。
注意問題多在config這里,如果配置時報錯,可嘗試make clobber來清除原來的依賴關系。

⑻ linux內核編譯遇到的問題求助

你再仔細查看一下相關的環境變數設置的是否正確?以及編譯選項是否正確?因為關於 gcc 編譯器的使用,有時候雖然你的源程序是正確的,但是由於環境變數的設置不正確(例如: INCLUDE、LIB等)、或者是雖然環境變數設置正確、但是編譯選項的不正確(例如:-Imy_include_file、-Lmy_lib_file等),都有可能導致程序無法正確編譯通過。所以必須要仔細檢查所有的細節問題。另外,你還必須保證 makefile 文件的語法必須是正確的,即:所需要編譯的源文件、以及中間代碼文件(*.o)等,它們之間的順序也是很重要的,如果這些順序不正確的話,那麼也會產生出錯信息。

⑼ linux內核編譯問題

根據你的警告是提示,找不到這些驅動模塊,應該是沒有編譯驅動模塊或者沒有安裝驅動模塊造成的。
1、要確保你的內核包是完整的,而且是centos配套版本(因為各大發行版都會針對自己的情況對內核進行配置和改動,直接用kernel.org的原版內核可能會有些故障)
2、編譯前要 先make clean一下,把以前編譯剩下的東西清掉,重頭再來。

3、編譯時順序執行如下命令
make bzImage 生成內核映像
make moles 生成驅動模塊
make moles_install 安裝驅動模塊
make install 安裝內核

⑽ 內核編譯出現問題,求解答

depmod: WARNING: could not open /lib/moles/2.6.32.65/moles.builtin: No such file or directory
root@ubuntu:/usr/src/linux-2.6.32.65# make install
sh /usr/src/linux-2.6.32.65/arch/x86/boot/install.sh 2.6.32.65 arch/x86/boot/bzImage \
System.map "/boot"
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 2.6.32.65 /boot/vmlinuz-2.6.32.65
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.32.65 /boot/vmlinuz-2.6.32.65
update-initramfs: Generating /boot/initrd.img-2.6.32.65
depmod: WARNING: could not open /tmp/mkinitramfs_aJ9f5K/lib/moles/2.6.32.65/moles.builtin: No such file or directory

閱讀全文

與內核編譯的問題相關的資料

熱點內容
知網程序員 瀏覽:702
怎麼把電子版投標報價加密 瀏覽:29
電腦安全編譯器 瀏覽:364
在伺服器里如何調創造 瀏覽:835
知雲登錄為什麼找不到伺服器 瀏覽:815
python切片位置 瀏覽:375
平板加密視頻怎麼播放 瀏覽:377
程序員上下班不帶電腦 瀏覽:835
androidrsa文件 瀏覽:64
linuxlvds 瀏覽:103
程序員選擇職場 瀏覽:345
累加C語言演算法 瀏覽:948
足浴店用什麼app招人 瀏覽:191
php調用thrift 瀏覽:191
java精度丟失 瀏覽:903
地梁承台相交處箍筋加密 瀏覽:95
程序員繪本 瀏覽:647
php線程安全版 瀏覽:407
lilolinux 瀏覽:111
proteus51編譯工具 瀏覽:309