zoukankan      html  css  js  c++  java
  • 编译Linux-2.6.23内核中遇见的错误

    编译linux-2.6.23


    错误[1]: elf_x86_64: 没有那个文件或目录

    原因是 gcc 4.6 不再支持 linker-style 架构。在 arch/x86/vdso/Makefile 中,
    将以 VDSO_LDFLAGS_vdso.lds 开头所在行的 “-m elf_x86_64” 替换为 “-m64”。
    将以 VDSO_LDFLAGS_vdso32.lds 开头所在行的 “-m elf_x86” 替换为 “-m32”。


    错误[2]: .size expression for copy_user_generic_c does not evaluate to a constant

    找到arch / x86 / lib / copy_user_64.S,在文件中将END(copy_user_generic_c)更改为END(copy_user_generic_string),以在ENTRY(copy_user_generic_string)中保留相同的变量。


    编译出现 undefined reference to __mutex_unlock_slowpath

    在这句话里面,那你可以发现,你的函数mutex_lock很有可能在kernel某个函数文件里面,我们现在试着进去kernel/去找找看有没有

    关于mutex_lock的函数文件

    branches@ubuntu:/usr/src/linux-2.6.23$ ls kernel/mutex*
    kernel/mutex.ckernel/mutex-debug.h  kernel/mutex.o
    kernel/mutex-debug.c  kernel/mutex.h
    

    你会看到在kernel目下确实有几个关于muxtex的文件,这个时候我们只需要打开一个相关的文件分别查看一下,就知道了

    很显然我们会打开mutex.c,用Vim打开,你会看到有关的编译错误出现的函数

    你在编译出错时,当你打开此文件时,是没有这个__used的,在这个文件里面,一共有三处地方要改动,那就你自己去改吧,当你看到 __mutex_unlock_slowpath();这个函数是,同样也要在这个函数前面加上__used

    注意!网上有另一个解法是在 .config文件里加宏定义CONFIG_DEBUG_MUTEXES=y经验证是不可行的


    1 arch/i386/boot/boot.h: Assembler messages:
    2 
    3 arch/i386/boot/boot.h:110: Error: bad register name `%dil'[/size]
    4 
    5 make[1]: *** [arch/i386/boot/video.o] 错误 1
    6 
    7 make: *** [bzImage] 错误 2

    其实这个问题的出现,是因为我的系统里面有gcc 和gcc 4.4,前者版本为4.1,后来我修改了把gcc 4.4重命名为默认的gcc了,才会出这个问题,修改回去就好了。

    如果一定要使用gcc 4.4也可以参考网上的修改方式:

    arch/i386/boot/boot.h下,asm volatile(“movw %%fs:%1,%0” : “=r” (v) : “m” ((u16 )addr));这句;

    这里没有寄存器dil… 准确来说这里是没有显式使用寄存器dil, 但是, 根据http://www.delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html的介绍, 这里的r表示从esi和edi中动态选择, 这里的dil就是从这里来的了. 解决方案, edi不好使, 咱就换一组, 换q就是了, q是在eax, ebx, ecx, edx中间挑一个, 改完搞定, 重新编译通过.


    1 branches@ubuntu:/usr/src/linux-2.6.23$ sudo make menuconfig
    2 Makefile:416: *** mixed implicit and normal rules: deprecated syntax
    3 Makefile:1466: *** mixed implicit and normal rules: deprecated syntax
    4 make: *** No rule to make target 'menuconfig'。 停止。
    5 branches@ubuntu:/usr/src/linux-2.6.23$ 

    今天在编译uImage的时候,执行make命令,报错,错误信息:416 “mixed implicit and normal rules”,翻译为中文:混合的和隐含普通规则。起初以为是内核包的问题,从官网上下载了低版本,报同样的错误,google后发 现,是由于我的系统的make工具太新,make的旧版规则已经无法兼容新版。按照以下方式,问题得到解决:
    1在makefile中将416行代码

    config %config: scripts_basic outputmakefile FORCE

    改为

    config: scripts_basic outputmakefile FORCE
  • 相关阅读:
    [USACO 2012 Feb B]Moo
    [Atcoder ARC124] XOR Matching 2-小思维 | 暴力
    loj数列分块入门
    2019牛客暑期多校2-Partition problem深搜
    Codeforces 1554C
    [USACO 2012 Feb G]Cow Coupons----贪心&带悔(看完稳AC)
    Codeforces 220B-Little Elephant and Array-扫描线 & 树状数组
    [AtCoder ARC098] Donation| 建图 | 树型dp
    关于幂等性以及怎么实现幂等性
    【OOM】解决思路
  • 原文地址:https://www.cnblogs.com/fallenmoon/p/6744100.html
Copyright © 2011-2022 走看看