编译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经验证是不可行的
arch/i386/boot/boot.h: Assembler messages: arch/i386/boot/boot.h:: Error: bad register name `%dil'[/size] make[]: *** [arch/i386/boot/video.o] 错误 make: *** [bzImage] 错误
其实这个问题的出现,是因为我的系统里面有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中间挑一个, 改完搞定, 重新编译通过.
branches@ubuntu:/usr/src/linux-2.6.$ sudo make menuconfig
Makefile:: *** mixed implicit and normal rules: deprecated syntax
Makefile:: *** mixed implicit and normal rules: deprecated syntax
make: *** No rule to make target 'menuconfig'。 停止。
branches@ubuntu:/usr/src/linux-2.6.$
今天在编译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
编译Linux-2.6.23内核中遇见的错误的更多相关文章
- linux设备模型与内核中的面向对象思想
linux内核用C语言实现了C++面向对象的大部分特性:封装,继承,多态.在看内核的过程中,开始追寻其中的设计思想,封装.继承.多态.恰好今天又在看Linux设备模型,找了很多资料.总结如下: 1.l ...
- 微信退款流程,以及在过程中遇见的错误和解决方式(php 语言)
官方下载demo 1:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 开发步骤 : https://pay.weix ...
- 编译Linux内核
下面的实验以 debian7.5 64bit 为例. 获取源码 获取 debian7.5 本身的源码非常简单: sudo apt-get install linux-source https://ww ...
- Ubuntu:编译Linux内核源代码和内核模块
1. 目的 内核模块需要运行在Linux 3.8.13内核中,因此需要为此内核重新编译内核模块源代码. 2. 步骤 1.在Ubuntu 14.04 64位(内核3.13.0-24-generic)上, ...
- 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核
HACK #2 如何编译Linux内核 本节介绍编译Linux内核的方法.当发现bug而修改源代码或者添加新功能时,就需要对内核进行重新编译,生成二进制映像文件.另外,如果想要使用发布版内核中无效的功 ...
- Linux内核中的IS_ERR()实现
1.前言 对于任何一个指针来说,必然有三种情况:一种是有效指针,一种是NULL,也就是空指针,一种是错误指针,也就是无效指针,在Linux内核中,所谓的错误指针就是指其已经到达了内核空间的最后一个pa ...
- 编译linux kernel及制作initrd ( by quqi99 )
编译linux kernel及制作initrd ( by quqi99 ) 作者:张华 发表于:2013-01-27 ( http://blog.csdn.net/quqi99 ) 运行一个l ...
- 如何修复 WordPress 中的 HTTP 错误
如何修复我们会向你介绍,如何在 Linux VPS 上修复 WordPress 中的 HTTP 错误. 下面列出了 WordPress 用户遇到的最常见的 HTTP 错误,我们的建议侧重于如何发现错误 ...
- 35、在编译Linux内核中增加程序需要完成以下3项工作
在编译Linux内核中增加程序需要完成以下3项工作: 将编写的源代码拷入Linux内核源代码的相应目录. 在目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项 在目录的Makefile文 ...
随机推荐
- 二、RabbitMQ操作
1.RabbitMQ发送与接收. 2.RabbitMQ发送与接收. 3.RabbitMQ发送与接收.
- 初学Java 求最大公约数
import java.util.Scanner; public class GreatesCommonDivisor { public static void main(String[] args) ...
- linux--mysql的安装与配置
linux centos下,mysql安装有三种方式:二进制tar包安装,rpm安装,yum安装(最简单) 查看有没有安装过: yum list installed mysql* rpm -qa | ...
- Flutter-showBottomSheet底部彈出框
onPressed: () { showModalBottomSheet( context: context, builder: (BuildContext context) { return new ...
- 谷歌开发人员在现代Web浏览器中发现严重跨域漏洞
Google谷歌研究人员在现代网络浏览器中发现了一个严重漏洞,该漏洞可能允许您访问的网站从您登录同一浏览器的其他网站窃取您的在线帐户的敏感内容. 由Google谷歌Chrome的开发者支持者Jake发 ...
- Java NIO学习(Path接口、Paths和Files工具类的使用)
NIO学习:Paths和Files工具类的使用 JDK1.7引入了新的IO操作类.在java.nio.file包下,Java NIO Path接口和Files类. Path接口:Path表示的是一个目 ...
- CentOS7 安装xen(在虚拟机上成功,实体机测试死机!)
此文章只做操作记录,其中有些地方可能漏了!!我只贴出自己的操作过程!其它有差别的地方请自己网上查找参考! 只有在全虚拟化下才能安装Windows,这就需要有硬件支持,并在BIOS中开启Virtuali ...
- 零基础python教程-Python解释器是什么?
当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件. 由于整个Python语言从规范到解释器都是开源的 ...
- iptables防火墙相关命令详解
前提基础: 当主机收到一个数据包后,数据包先在内核空间中处理,若发现目的地址是自身,则传到用户空间中交给对应的应用程序处理,若发现目的不是自身,则会将包丢弃或进行转发. iptables实现防火墙功能 ...
- Original blog
其实也没几篇... I am still too young. http://blog.csdn.net/greyqz 没什么东西,就别去翻了... 还是博客园好用,发博客不用审核,CSDN审核不好玩