`
haoningabc
  • 浏览: 1478024 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

编译linux2.6.24

阅读更多
真是每个linux的小版本编译的时候都有不同的问题啊,
最近在看《独辟蹊径品内核》《linux2.6内核标准教程》
用到linux2.6.24.编译的问题汇总到这里
环境
[root@centos140_11 boot]# gcc --version
gcc (GCC) 4.8.3 20140911 (Red Hat 4.8.3-9)
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

[root@centos140_11 boot]# cat /etc/redhat-release 
CentOS Linux release 7.1.1503 (Core) 
[root@centos140_11 boot]# 


https://www.kernel.org/pub/linux/kernel/v2.6/
下的2.6.24

解压后
设置menuconfig 选debug

make O=/home/haoning/rtclinux/websocket/web/jslinux/tmp/linux2.6.24.build/kernel/ menuconfig


开始编译:
time make O=/home/haoning/rtclinux/websocket/web/jslinux/tmp/linux2.6.24.build/kernel/ -j10

遇到问题:

错误1
参考
http://blog.sina.com.cn/s/blog_8f9cdbbd01014lxj.html

arch/x86/vdso/Makefile
 19 quiet_cmd_syscall = SYSCALL $@
 20       cmd_syscall = $(CC) -m elf_x86_64 -nostdlib $(SYSCFLAGS_$(@F)) \
 21                   -Wl,-T,$(filter-out FORCE,$^) -o $@


-m elf_x86_64 换成 -m64

-----------------------------------------------
错误2:
/tmp/cct0Bawg.s: Assembler messages:
/tmp/cct0Bawg.s: Error: .size expression for copy_user_generic_c does not evaluate to a constant
make[2]: *** [arch/x86/lib/copy_user_64.o] Error 1
make[1]: *** [arch/x86/lib] Error 2
make: *** [sub-make] Error 2


参考
http://stackoverflow.com/questions/23194840/linux-2-6-24-kernel-compilation-error-size-expression-for-copy-user-generic-c-d

arch/x86/lib/copy_user_64.S
347 END(copy_user_generic_c)
348 
349     .section __ex_table,"a"
350     .quad 1b,3b
351     .quad 2b,5b
换成
347 END(copy_user_generic_c)
348 
349     .section __ex_table,"a"
350     .quad 1b,3b
351     .quad 2b,5b


-----------------------------
错误3:

kernel/built-in.o: In function `mutex_lock':
/home/haoning/rtclinux/websocket/web/jslinux/tmp/linux-2.6.24/kernel/mutex.c:92: undefined reference to `__mutex_lock_slowpath'
kernel/built-in.o: In function `mutex_unlock':
/home/haoning/rtclinux/websocket/web/jslinux/tmp/linux-2.6.24/kernel/mutex.c:118: undefined reference to `__mutex_unlock_slowpath'
make[1]: *** [.tmp_vmlinux1] Error 1
make: *** [sub-make] Error 2


kernel/mutex.c
这个好使,其他的都是扯淡,什么该config参数,什么加__used都不行,需要把static去掉,加锁和解锁的
https://github.com/socketpair/jslinux_reversed/blob/master/contrib/patches/2.6.20_common_fixes.patch
__mutex_lock_slowpath的两个方法的static去掉
__mutex_unlock_slowpath的两个方法的static去掉

-----------------------------------------
错误4:
/scripts/unifdef.c:70:0:
/usr/include/stdio.h:678:20: note: previous declaration of ‘getline’ was here


解决:
scripts/unifdef.c
207 static int              findsym(const char *);
208 static void             flushline(bool);
209 //static Linetype         getline(void);
210 static Linetype         mygetline(void);
211 static Linetype         ifeval(const char **);
212 static void             ignoreoff(void);

511     Linetype lineval;
512 
513     for (;;) {
514         linenum++;
515         //lineval = getline();
516         lineval = mygetline();
517         trans_table[ifstate[depth]][lineval]();
518         debug("process %s -> %s depth %d",
519             linetype_name[lineval],
520             ifstate_name[ifstate[depth]], depth);
521     }
522 }
523 
524 /*
525  * Parse a line and determine its type. We keep the preprocessor line
526  * parser state between calls in the global variable linestate, with
527  * help from skipcomment().
528  */
529 static Linetype
530 //getline(void)
531 mygetline(void)
532 {   
533     const char *cp;
534     int cursym;
535     int kwlen;
分享到:
评论

相关推荐

    bootsplash源码&linux2.6.24内核补丁

    在本资料中,我们有两个关键文件:`bootsplash-3.1.tar.bz2`和`bootsplash-3.1.6-2.6.24.diff.gz`,分别对应Bootsplash源码和针对Linux 2.6.24内核的补丁。 `bootsplash-3.1.tar.bz2`是一个压缩文件,包含了...

    ME3760 Linux2.6.24适配方法.zip_ME3760模块驱动_me3760

    压缩包中的"Linux2.6.24内核中添加ME3760驱动.pdf"文档很可能详细描述了以上步骤,包括具体的代码示例和配置细节。阅读这份文档对于理解驱动的实现过程至关重要。 另外,"source"文件可能包含了ME3760驱动的源代码...

    Linux2.6.24内核中添加ME3760驱动.pdf

    文档标题提到的"Linux2.6.24内核中添加ME3760驱动",说明了一个具体的开发案例,即如何将ME3760设备的驱动集成到Linux 2.6.24版本内核中。ME3760可能是一个具体的硬件设备,比如某款手机、无线网卡或其他USB设备。ME...

    cs8900_linux_2.6.24.tar.gz.zip_cs8900 2410 2.6.24_gcc-3.3.6.tar

    本篇文章将围绕"cs8900"这个特定的硬件设备,探讨其在Linux 2.6.24内核中的驱动源代码实现,以及与之相关的编译环境——gcc-3.3.6。 "cs8900"是一款广泛应用的以太网控制器,它为嵌入式系统提供了高速网络连接能力...

    编译linux内核的方法.pdf

    ### 编译Linux内核的方法:详尽指南 #### 核心知识点概览: 1. **编译环境的搭建**:包括安装必要的编译工具、库文件和配置工具。 2. **内核源代码的获取**:通过Ubuntu的源安装或从`kernel.org`下载最新内核版本...

    完整的linux-2.6.24版eink的驱动

    Linux内核版本2.6.24中的E Ink驱动程序是一个关键组件,它使得Linux操作系统能够与电子墨水显示屏(E-Ink Display)进行通信,这类屏幕常用于电子阅读器和一些低功耗设备上。E-Ink技术以其独特的显示效果,如高对比...

    Linux2.6内核启动流程.doc

    首先,我们注意到一个关于`CONFIG_BLK_DEV_INITRD`的条件编译块,这部分代码检查初始化根文件系统(initrd)是否被覆盖。initrd是一个临时的文件系统,用于在主根文件系统可用之前提供必要的驱动程序和工具。如果...

    基于内核的Linux键盘记录器 2.6.24 x86

    在本文中,我们将深入探讨基于内核的Linux键盘记录器,特别是针对内核版本2.6.24和x86架构的设计与实现。 1. **内核模块**: 在Linux中,键盘记录器通常作为一个内核模块实现,这是因为内核直接处理键盘设备的输入...

    基于ARM 嵌入式Linux内核的编译与移植

    1. **下载内核源码及补丁**:从`ftp://ftp.arm.linux.org.uk/pub/linux/linux-2.6/`下载Linux2.6.24内核及其关于ARM平台的补丁(如`Patch-2.6.24.gz`)。 2. **打补丁**:使用命令`zcat ../patch-2.6.24.gz | patch ...

    CS8900_linux-2.6.24.4.rar_2410 cs8900_S3C2410 CS8900 _cs8900_cs8

    描述中提到的"linux2.6.24 S3C2410下的网卡CS8900驱动"确认了这个压缩包包含的是针对S3C2410平台的CS8900驱动代码。作者还提供了移植方法的博客链接,这通常涉及到如何将驱动程序与特定硬件平台的内核接口进行适配,...

    linux-ubuntu系统移植实例

    编译Linux内核是整个移植过程中最核心的步骤之一。本案例中使用的内核版本为`2.6.24`。 ##### 编译步骤: 1. **解压内核源码** 将`urbetter_linux-2.6.24.tar.gz`拷贝至工作目录`/home/fusq/test`,并解压源码:...

    ARM Linux 交叉编译环境制作--Crosstool.pdf

    在这个环境中,我们将使用特定版本的工具和库,如binutils 2.16.1,glibc 2.3.2,Linux内核2.6.24,gdb 6.5,以及GCC 4.1.1。这些工具的源代码需要从相应的GNU FTP服务器下载。 以下是构建过程的基本步骤: - 解...

    linux2.6.24.4到S3C2410的移植

    ### Linux2.6.24.4到S3C2410的移植知识点解析 #### 一、项目背景及目的 随着嵌入式技术的发展,Linux操作系统在嵌入式领域的应用越来越广泛。Linux内核的移植是实现特定硬件平台上运行稳定、高效Linux系统的...

    linux内核编译心得.pdf

    接下来,从官方网站下载最新版本的内核源码,例如`linux-2.6.24.tar.gz`,将其解压到`/usr/src`目录,并创建符号链接方便管理。然后进入源码目录,执行`make mrproper`以清除旧的配置信息,为新的编译做好准备。 ...

    utu2440_buttons.rar_2440 键盘驱动_buttons linux-2.6._utu2440_buttons

    描述中提到"2440 扫描键盘驱动,验证过,保证好用,适用2.6.24内核",意味着这个驱动已经经过了实际测试,确保在Linux 2.6.24内核上运行良好,能够有效地识别和响应S3C2440平台上物理按键的输入。在嵌入式系统中,...

    2.6.24内核移植及其系统安装7月11号.doc

    cp /linux-2.6.24/arch/arm/configs/s3c2410_defconfig /linux-2.6.24/.config ``` **4. 修改NAND Flash分区信息** 编辑NAND Flash分区信息以适应具体的硬件需求。具体操作如下: - 打开`/linux-2.6.24/arch/arm/...

    Linux内核移植-2008011136

    实验的主要目标是下载Linux 2.6.24内核源码,配置并编译出适合Super-ARM实验箱的内核镜像。以下是实验的详细过程和涉及的知识点: 首先,实验开始前需要检查交叉编译环境。在嵌入式开发中,由于目标硬件平台和开发...

    rtai移植的官方文档

    ### RTAI移植至Linux 2.6.24内核的技术报告 #### 引言 在控制项目中,实时Linux扩展是极其有用的工具,尤其是在通用计算机上应用时。操作系统的非确定性有时会使得在硬实时控制任务中难以管理。为解决这一问题,...

    adc.tar.gz_at9260 ad_linux AD驱动

    在本文中,我们将深入探讨与"ADC(模拟数字转换器)驱动"相关的技术知识,特别是针对AT9260处理器在Linux2.6.24内核环境下的实现。AT9260是一款高性能的微处理器,常用于嵌入式系统,而ADC驱动则是将模拟信号转换为...

Global site tag (gtag.js) - Google Analytics