ogl 解决 ide config not -m 使用 ren
错误 [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 的函数文件
- [email protected]:/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
- arch/i386/boot/boot.h: Assembler messages:
- arch/i386/boot/boot.h:110: Error: bad register name `%dil'[/size]
- make[1]: *** [arch/i386/boot/video.o] 错误 1
- 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 中间挑一个, 改完搞定, 重新编译通过.
- [email protected]:/usr/src/linux-2.6.23$ sudo make menuconfig
- Makefile:416: *** mixed implicit and normal rules: deprecated syntax
- Makefile:1466: *** mixed implicit and normal rules: deprecated syntax
- make: *** No rule to make target 'menuconfig'。 停止。[email protected]:/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
2 在 makefile 中将 1466 行代码
- / %/: prepare scripts FORCE
改为
- %/: prepare scripts FORCE
编译 Linux-2.6.23 内核中遇见的错误
来源: http://www.bubuko.com/infodetail-2033902.html