编译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内核中遇见的错误的更多相关文章

  1. linux设备模型与内核中的面向对象思想

    linux内核用C语言实现了C++面向对象的大部分特性:封装,继承,多态.在看内核的过程中,开始追寻其中的设计思想,封装.继承.多态.恰好今天又在看Linux设备模型,找了很多资料.总结如下: 1.l ...

  2. 微信退款流程,以及在过程中遇见的错误和解决方式(php 语言)

    官方下载demo 1:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=11_1 开发步骤  :    https://pay.weix ...

  3. 编译Linux内核

    下面的实验以 debian7.5 64bit 为例. 获取源码 获取 debian7.5 本身的源码非常简单: sudo apt-get install linux-source https://ww ...

  4. Ubuntu:编译Linux内核源代码和内核模块

    1. 目的 内核模块需要运行在Linux 3.8.13内核中,因此需要为此内核重新编译内核模块源代码. 2. 步骤 1.在Ubuntu 14.04 64位(内核3.13.0-24-generic)上, ...

  5. 《Linux内核精髓:精通Linux内核必会的75个绝技》一HACK #2 如何编译Linux内核

    HACK #2 如何编译Linux内核 本节介绍编译Linux内核的方法.当发现bug而修改源代码或者添加新功能时,就需要对内核进行重新编译,生成二进制映像文件.另外,如果想要使用发布版内核中无效的功 ...

  6. Linux内核中的IS_ERR()实现

    1.前言 对于任何一个指针来说,必然有三种情况:一种是有效指针,一种是NULL,也就是空指针,一种是错误指针,也就是无效指针,在Linux内核中,所谓的错误指针就是指其已经到达了内核空间的最后一个pa ...

  7. 编译linux kernel及制作initrd ( by quqi99 )

    编译linux kernel及制作initrd ( by quqi99 ) 作者:张华  发表于:2013-01-27    ( http://blog.csdn.net/quqi99 ) 运行一个l ...

  8. 如何修复 WordPress 中的 HTTP 错误

    如何修复我们会向你介绍,如何在 Linux VPS 上修复 WordPress 中的 HTTP 错误. 下面列出了 WordPress 用户遇到的最常见的 HTTP 错误,我们的建议侧重于如何发现错误 ...

  9. 35、在编译Linux内核中增加程序需要完成以下3项工作

    在编译Linux内核中增加程序需要完成以下3项工作: 将编写的源代码拷入Linux内核源代码的相应目录. 在目录的Kconfig文件中增加关于新源代码对应项目的编译配置选项 在目录的Makefile文 ...

随机推荐

  1. 一键部署YApi

    编写docker-compose.yml version: '2.1' services: yapi: image: mrjin/yapi:latest # build: ./ container_n ...

  2. chrome浏览器canvas画图不显示

    问题产生在学习cabvas给画布画图像的时候发现使用IE edge浏览器可以正常显示图像,而chrome则不行,经百度后知道是因为chrome浏览器会先加载javascript代码,之后才加载图片,这 ...

  3. valueOf()对象返回值

    valueOf()对象返回值 Array数组的元素被转换为字符串,这些字符串由逗号分隔,连接在一起.其操作与 Array.toString 和 Array.join 方法相同. Boolean为Boo ...

  4. 二、小程序内嵌Html基础格式说明

    1.index.js文件更改 var WxParse = require('../../wxParse/wxParse.js'); Page({ data: { }, onLoad: function ...

  5. MySQL--16 MHA修复

    目录 一.恢复MHA 二.MHA切换 三.配置VIP漂移 一.恢复MHA #1.修复旧主库 [root@db01 ~]# /etc/init.d/mysqld start #2.在mha日志中找到ch ...

  6. 【Leetcode周赛】从contest-51开始。(一般是10个contest写一篇文章)

    Contest 51 (2018年11月22日,周四早上)(题号681-684) 链接:https://leetcode.com/contest/leetcode-weekly-contest-51 ...

  7. bzoj1190 [HNOI2007]梦幻岛宝珠 背包

    题目 https://lydsy.com/JudgeOnline/problem.php?id=1190 题解 好神仙的一道题啊. 既然 \(w_i = a_i\cdot 2^{b_i}\),那么不妨 ...

  8. join()、split()

    join()用于把数组转化为字符串 var arr=['hello','world','kugou']; document.write(arr.join(''));//helloworldkugou ...

  9. mybatis框架之装饰模式

    学习开源框架源码,除了储备点知识以便于与面试官互相忽略之外,我想最重要的还是去学习大神如何写代码,如何做到职责单一,如何做到可扩展等... 本篇,试着总结一下mybatis在缓存模块使用到的装饰模式. ...

  10. Java Web学习总结(5)HttpServletRequest

    一,HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象 ...