1. 程式人生 > >Ubuntu 11 編譯 linux-2.6核心 出錯,給出部分編譯問題解決

Ubuntu 11 編譯 linux-2.6核心 出錯,給出部分編譯問題解決

# configuration written to .config
#
make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make EXTRAVERSION=dell1400   ARCH=i386 prepare
make[2]: 正在進入目錄 `/home/gdsdj/src/linux-2.6.19'
scripts/kconfig/conf -s arch/i386/Kconfig
make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make[2]: 正在進入目錄 `/home/gdsdj/src/linux-2.6.19'
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
echo done > debian/stamp/conf/kernel-conf
make[1]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make -f debian/rules debian/stamp/conf/full-changelog
make[1]: 正在進入目錄 `/home/gdsdj/src/linux-2.6.19'
====== making target debian/stamp/conf/full-changelog [new prereqs: ]======
for file in ChangeLog  Control  Control.bin86 config templates.in rules; do                \
         cp -f  /usr/share/kernel-package/$file ./debian/;            \
    done
for dir  in Config docs examples ruleset scripts pkg po;    do                \
       cp -af /usr/share/kernel-package/$dir  ./debian/;                \
    done
install -p -m 755 /usr/share/kernel-package/rules debian/rules
sed         -e 's/=V/2.6.19dell1400/g'  \
                -e 's/=D/2.6.19dell1400-10.00.Custom/g'         -e 's/=A/i386/g'  \
        -e 's/=SA//g'  \
        -e 's/=I//g'                    \
        -e 's/=CV/2.6/g'                \
        -e 's/=M/Unknown Kernel Package Maintainer <
[email protected]
>/g'                \
        -e 's/=ST/linux/g'      -e 's/=B/i386/g'    \
                  /usr/share/kernel-package/Control > debian/control
sed -e 's/=V/2.6.19dell1400/g' -e 's/=D/2.6.19dell1400-10.00.Custom/g'          \
        -e 's/=A/i386/g' -e 's/=M/Unknown Kernel Package Maintainer <[email protected]
>/g' \
        -e 's/=ST/linux/g'     -e 's/=B/i386/g'          \
        /usr/share/kernel-package/changelog > debian/changelog
chmod 0644 debian/control debian/changelog
make -f debian/rules debian/stamp/conf/kernel-conf
make[2]: 正在進入目錄 `/home/gdsdj/src/linux-2.6.19'
make[2]: “debian/stamp/conf/kernel-conf”是最新的。
make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make[1]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
echo done > debian/stamp/conf/minimal_debian
exec debian/rules  APPEND_TO_VERSION=dell1400  INITRD=YES  kernel_image kernel-headers
====== making target debian/stamp/conf/vars [new prereqs: ]======

====== making target debian/stamp/build/kernel [new prereqs: vars]======
This is kernel package version 12.036+nmu1.
restore_upstream_debianization
test ! -f scripts/package/builddeb.kpkg-dist ||    mv -f scripts/package/builddeb.kpkg-dist scripts/package/builddeb
test ! -f scripts/package/Makefile.kpkg-dist ||    mv -f scripts/package/Makefile.kpkg-dist scripts/package/Makefile
/usr/bin/make  EXTRAVERSION=dell1400  ARCH=i386 \
                 bzImage
make[1]: 正在進入目錄 `/home/gdsdj/src/linux-2.6.19'
  CHK     include/linux/version.h
  CHK     include/linux/utsrelease.h
  HOSTCC  scripts/mod/sumversion.o
下面為錯誤提示,加不上紅字,加了就亂序了,註釋一下把 :

scripts/mod/sumversion.c: 在函式‘get_src_version’中:
scripts/mod/sumversion.c:384:16: 錯誤: ‘PATH_MAX’未宣告(在此函式內第一次使用)
scripts/mod/sumversion.c:384:16: 附註: 每個未宣告的識別符號在其出現的函式內只報告一次
scripts/mod/sumversion.c:384:7: 警告: 未使用的變數‘filelist’ [-Wunused-variable]
make[3]: *** [scripts/mod/sumversion.o] 錯誤 1
make[2]: *** [scripts/mod] 錯誤 2
make[1]: *** [scripts] 錯誤 2
make[1]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make: *** [debian/stamp/build/kernel] 錯誤 2

[email protected]:~/src/linux-2.6.19$

#include <netinet/in.h>
#ifdef __sun__
#include <inttypes.h>
#else
#include <stdint.h>
#endif
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include "modpost.h"
#include <limits.h>

執行sudo gedit scripts/mod/sumversion.c
加入#include <limits.h>後問題解決了 ,又出現了 新的 問題

  CC      arch/i386/kernel/cpu/rise.o
  CC      arch/i386/kernel/cpu/nexgen.o
  CC      arch/i386/kernel/cpu/umc.o
  LD      arch/i386/kernel/cpu/built-in.o
  CC      arch/i386/kernel/reboot.o
  CC      arch/i386/kernel/reboot_fixups.o
  CC      arch/i386/kernel/module.o
  CC      arch/i386/kernel/sysenter.o
arch/i386/kernel/sysenter.c: 在函式‘arch_setup_additional_pages’中:
arch/i386/kernel/sysenter.c:158:17: 警告: 取一個型別為‘void’的表示式的地址 [預設啟用]
  LDS     arch/i386/kernel/vsyscall.lds
  AS      arch/i386/kernel/vsyscall-int80.o
  AS      arch/i386/kernel/vsyscall-note.o
  SYSCALL arch/i386/kernel/vsyscall-int80.so
gcc: 錯誤: elf_i386:沒有那個檔案或目錄
make[2]: *** [arch/i386/kernel/vsyscall-int80.so] 錯誤 1
make[1]: *** [arch/i386/kernel] 錯誤 2
make[1]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make: *** [debian/stamp/build/kernel] 錯誤 2

執行命令
sudo gedit arch/i386/kernel/Makefile


# The DSO images are built using a special linker script.
quiet_cmd_syscall = SYSCALL [email protected]
      cmd_syscall = $(CC) -m elf_i386 -nostdlib $(SYSCFLAGS_$(@F)) \
                          -Wl,-T,$(filter-out FORCE,$^) -o [email protected]

export CPPFLAGS_vsyscall.lds += -P -C -U$(ARCH)

改紅字部分為-m32問題解決,新的隨之又出現


  AR      arch/i386/lib/lib.a
  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
kernel/built-in.o: In function `mutex_lock':
/home/gdsdj/src/linux-2.6.19/kernel/mutex.c:91: undefined reference to `__mutex_lock_slowpath'
kernel/built-in.o: In function `mutex_unlock':
/home/gdsdj/src/linux-2.6.19/kernel/mutex.c:116: undefined reference to `__mutex_unlock_slowpath'
make[1]: *** [.tmp_vmlinux1] 錯誤 1
make[1]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19'
make: *** [debian/stamp/build/kernel] 錯誤 2
[email protected]:~/src/linux-2.6.19$

這個問題現在還沒解決

* This function is similar to (but not equivalent to) down().
*/
void inline fastcall __sched mutex_lock(struct mutex *lock)
{
    might_sleep();
    /*
     * The locking fastpath is the 1->0 transition from
     * 'unlocked' into 'locked' state.
     */
    __mutex_fastpath_lock(&lock->count, __mutex_lock_slowpath);
}

EXPORT_SYMBOL(mutex_lock);

static void fastcall noinline __sched
__mutex_unlock_slowpath(atomic_t *lock_count);

/***

~/linux-2.6.19/kernel/mutex.c:91: undefined reference to `__mutex_lock_slowpath'
kernel/built-in.o: In function `mutex_unlock':
~/linux-2.6.19/kernel/mutex.c:116: undefined reference to `__mutex_unlock_slowpath'
make[1]: *** [.tmp_vmlinux1] 錯誤 1
以下是解決辦法:
原文網址:http://blog.csdn.net/lidisha/article/details/7933201
在.config中搜索,發現CONFIG_DEBUG_MUTEXES巨集果然沒有定義。將其改成y,重新編譯

相關推薦

Ubuntu 11 編譯 linux-2.6核心 出錯部分編譯問題解決方暗新問題求解決

# configuration written to .config # make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19' make EXTRAVERSION=dell1400   ARCH=i386 prepare make[2]

Ubuntu 11 編譯 linux-2.6核心 出錯部分編譯問題解決

# configuration written to .config # make[2]:正在離開目錄 `/home/gdsdj/src/linux-2.6.19' make EXTRAVERSION=dell1400   ARCH=i386 prepare make[2]

初次編譯Linux2.6.34核心

       一、編譯環境:在ubuntu12.04下編譯純核心Linux-2.6.34 二、下載並解壓原始碼 三、構建編譯環境     現在我們得到的只是原始碼,只是許許多多的文字檔案,要想使這些檔案成為可以執行的程式,需要使用編譯器進行編譯以及連結。編譯器有很多,

Linux 2.6核心中新的鎖機制--RCU

一、 引言 眾所周知,為了保護共享資料,需要一些同步機制,如自旋鎖(spinlock),讀寫鎖(rwlock),它們使用起來非常簡單,而且是一種很有效的同步機制,在UNIX系統和Linux系統中得到了廣泛的使用。但是隨著計算機硬體的快速發展,獲得這種鎖的開銷相對於CPU

linux-2.6核心模組引用計數的實現

一、模組使用計數的背景知識 模組是一種可以在核心執行過程中動態載入、解除安裝的核心功能元件。2.6核心中模組的命名方式為*.ko。模組在被使用時,是不允許被解除安裝的。程式設計時需要用“使用計數”來描述模組是否在被使用。 二、2.4核心使用計數的實現方法 2.4核心中

Linux 2.6核心Makefile淺析

從Linux核心2.6開始,Linux核心的編譯採用Kbuild系統,這同過去的編譯系統有很大的不同, 尤其對於Linux核心模組的編譯。在新的系統下,Linux編譯系統會兩次掃描Linux的Makefile:首先編譯系統會讀取Linux核心頂層的 Makefile,然後根據讀到的內容第二次讀取Kbuild

linux 2.6核心的四種IO排程演算法

 轉自:http://jackyrong.iteye.com/blog/898938 http://blog.csdn.net/theorytree/article/details/6259104 IO排程器的總體目標是希望讓磁頭能夠總是往一個方向移動,移動到底了再往反方

inotify -- Linux 2.6 核心中的檔案系統變化通知機制

一、 引言 眾所周知,Linux 桌面系統與 MAC 或 Windows 相比有許多不如人意的地方,為了改善這種狀況,開源社群提出使用者態需要核心提供一些機制,以便使用者態能夠及時地得知核心或底層硬體裝置發生了什麼,從而能夠更好地管理裝置,給使用者提供更好的服務,如 hotplug、udev 和 ino

嘗試在ubuntu 14.04上編譯並啟動linux-2.6.32內核

嘗試 編譯 generic gre 生成 sudo tail rect uil 在ubuntu 14.04上編譯並啟動linux-2.6.32內核 [環境]$ cat /etc/issueUbuntu 14.04.5 LTS \n \l $ uname -aLinux Ui

linux-2-6-11核心除錯環境搭建

linux核心除錯環境分為兩部分 1)用bochs除錯彙編 2)用qemu除錯從start_kernel開始的部分 環境說明: 核心版本: 2.6.11 ubuntu: 6.10 qemu: qemu-stable-0.13 busybox: 1.10.4 安裝ubuntu

交叉編譯環境的搭建(Linux-2.6.32核心

1、建立安裝目錄 #mkdir /usr/local/arm 如果您的PC 端linux 系統已經有這個資料夾,這步就跳過 2、將交叉編譯工具解壓到安裝目錄(注意C是大寫) #tar -xjvf arm-linux-gcc-4.3.2.tar.

linux 2.6編譯核心啟用iptables及netfilter

      最近在配置snat試,開啟iptables總是不成功,原來netfilter的功能在核心編譯時沒有選,所以需要載入netfilter模組,可我是菜鳥根本不會載入模組,只有重新編譯了核心。找了幾篇文章總結如下: 編譯核心時,您可以選擇使用make config、make menuconfig或ma

Linux核心2.6.34.14新增系統呼叫及編譯方法(CentOS-6.4-x86_64)

<?xml version="1.0" encoding="UTF-8"?> //我新增系統呼叫步驟,僅供參考,尤其是系統呼叫的實現部分,建議大家自己寫,除了我這種好像還可以用sys_open系列來寫 #define 核心版本 linux-2.6.34.14

mini2440 官方linux-2.6內核文件zImage編譯

clas pdf rdp slb 重新編譯 int ron 最新 active 官方linux-2.6內核文件zImage編譯 by HYH | 2018 年 1 月 1 日 下午 5:34 一.說明 1.編譯linux內核需要make和arm的交叉編譯工具鏈(gcc),

ubuntu編譯 wpa_supplicant-2.6

wifi wlan 1.1 libnl-3.4.0./configure --prefix=/home/fnie/wpa/out/libnl --disable-static makemake checkmake install// to install the API documentation:m

Apache spark2.1.0編譯hadoop-2.6-cdh5.11.2的對應版本

Apache spark2.1.0 編譯 hadoop-2.6-cdh5.11.2 的對應版本 搞了兩天,終於把spark編譯成功了,把編譯過程記錄一下 編譯失敗的坑:   1)linux記憶體不足,maven編譯過程中記憶體溢位   2)找不到cloudera倉庫   3)報各種錯誤 考慮到ma

linux 2.6.24.4在S3C2410上的移植(核心配置)(基於GEC2410)

移植完u-boot後,接下來就是linux核心了.以下記錄我移植的步驟,如有問題,歡迎指正.1.下載linux kernel原始碼到http://www.kernel.org/下載linux核心原始碼,這裡我們使用2.6.24.4的核心.解壓linux-2.6.24.4.ta

基於linux-2.6.38.8核心的wifi驅動分析

//參考給一些前輩們的文章 1、sdio介面層解析 SDIO匯流排      SDIO匯流排和USB匯流排類似,SDIO也有兩端,其中一端是HOST端,另一端是device端。所有的通訊都是由HOST端傳送命令開始的,Device端只要能解析命令,就可以相互通訊

linux-2.6.21核心中建立jffs2檔案系統(mtd分割槽的使用)

本文主要介紹如何在AT91SAM9261EK板子上製作和使用jffs2檔案系統,使用的是linux-2.6.21核心。 首先配置MTD $ make menuconfig 進入 Memory Technology Devices (MTD)

交叉編譯基於ARM架構的linux-3.6核心遇到的問題及解決方法

編譯linux-3.6核心: 安裝交叉編譯工具:arm-linux-gnueabi-gcc 下載並解壓linux-3.6原始碼 清楚原始碼中的無用的編譯檔案:makeclean清除除了config之外的所有編譯出來的文件,makemrproper將配置的config也一併清