编译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文 ...
随机推荐
- antd desgin vue 报错 Warning: Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key.
警告:表的数据源中的每条记录都应该有一个唯一的“key”道具,或者将表的“rowKey”设置为一个唯一的主键, 只需要添加 :rowKey="record => record.id&q ...
- JS中去除字符串空白符
海纳百川,有容乃大 1.通过原型创建字符串的trim() //去除字符串两边的空白 String.prototype.trim=function(){ return this.replace(/(^\ ...
- jsp页面必填项如何加红星号*
1.加*号 并且设置*号大小 <span style="color:red; font-size: 20px">*</span>
- vue项目build打包后图片路径不对导致图片空白不显示问题解决方法
1.在上篇文章src配置及引入的基础上修改项目配置: 文章链接地址:https://www.cnblogs.com/hsl-shiliang/p/10333022.html. 2.具体配置过程如图: ...
- lodash throttle和debounce
https://lodash.com/docs#debounce throttle(又称节流)和debounce(又称防抖)其实都是函数调用频率的控制器 throttle:将一个函数的调用频率限制在一 ...
- 微信小程序(2)--下拉刷新和上拉加载更多
下拉刷新 1.首先在.json文件中配置(如果在app.json文件中配置,那么整个程序都可以下拉刷新.如果写在具体页面的.json文件中,那么就是对应的页面下拉刷新.) 具体页面的.json文件: ...
- Codeforces Round #393 (Div. 2) - C
题目链接:http://codeforces.com/contest/760/problem/C 题意:有n个烤串,并且每个烤串起初都放在一个火盆上并且烤串都正面朝上,现在定义p序列,p[i]表示在i ...
- Flutter-tabbar切換
頂部tabbar切換 import 'package:flutter/material.dart'; import 'index_attendance_record.dart'; import 'in ...
- docker:docker的基本了解
1.什么是docker 简单的理解:docker相当于vmvare,容器相当于多个虚拟机,vmvare上可以运行ubantu16.04的虚拟机,也可以运行centos虚拟机,还可以运行redhat虚拟 ...
- Python爬虫之抓取豆瓣影评数据
脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息 ...