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

來源:互聯網
上載者:User
# 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 < unknown@unconfigured.in.etc.kernel-pkg.conf>/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 < unknown@unconfigured.in.etc.kernel-pkg.conf>/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

gdsdj@gdsdj-laptop:~/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 $@
      cmd_syscall = $(CC) -m elf_i386 -nostdlib $(SYSCFLAGS_$(@F)) \
                          -Wl,-T,$(filter-out FORCE,$^) -o $@

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
gdsdj@gdsdj-laptop:~/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,重新編譯

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.