内核编译不能找到standby.code错误解决办法

一 说明

使用全志(Allwinner )A20处理器,为其单独编译内核时,首次编译有时会遇到以下错误:

arch/arm/mach-sun7i/pm/standby.S:3: Error: file not found: arch/arm/mach-sun7i/pm/standby/standby.code

如下图所示:
这里写图片描述
其实不仅仅是该问题,还有以下几个错误:

arch/arm/mach-sun7i/pm/mem.S:3: Error: file not found: arch/arm/mach-sun7i/pm/standby/super/suspend/suspend.code

arch/arm/mach-sun7i/pm/mem.S:9: Error: file not found: arch/arm/mach-sun7i/pm/standby/super/resume/resume0.code

这两个问题其实和第一个问题是一个问题,第一个问题解决了这两个问题也会同时解决。

二 错误造成原因

该问题是在linux内核3.3版本中遇到的,并且是在全志官方提供的SDK(A20_SDK_20130319.tar.gz)中遇到的,用SDK中的脚本编译时有该问题,单独编译其中的内核(不使用SDK中的脚本,直接使用make编译内核源码)时也会遇到该问题,该问题只在第一次编译时出现,之后编译不会有该问题,如果distclean后编译可能会再遇到(未测试),遇到后的处理方法是一样的。
造成该问题的原因是arch/arm/mach-sun7i/pm/standby目录下的文件没有编译,至于为什么没有编译和之前怎么没有该问题等,在此处不讨论(关键是本人没有深入研究,也不知道原因),此处只说明遇到该问题后的解决办法。

三 解决办法

解决办法很简单,就是手动编译standby就好了。
此处需要注意的是,如果编译内核时的输出文件并非内核目录而是其他目录(make时使用了O参数,如make uImage O=/tmp/build),需要多做一些处理,这种情况在后边介绍。
打开standby目录下的Makefile,发现有两个变量KDIR和CROSS_COMPILE,由于该模块是单独手动编译,所以它不能从上层模块继承该变量,需要make时传进去。

#makefile for standby.bin

INCLUDE   = -I. \
        -I$(KDIR)/include \
        -I$(KDIR)/arch/arm/mach-sun7i/include \
... ...
CC = $(CROSS_COMPILE)gcc

知道需要的参数后就开始编译该模块:

#进入内核目录
$cd /home/linux/ex/linux-3.3/
#进入standby模块目录
$cd arch/arm/mach-sun7i/pm/standby
#编译模块
$make KDIR=/home/linux/ex/linux-3.3 CROSS_COMPILE=arm-linux-gnueabi-

此时就开始编译,编译过程中会有恨到打印信息,其中会出现以下4个信息:
这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

到此,模块编译完成,可以继续编译内核了。

上边提到编译内核时的输出文件并非内核目录而是其他目录,此时需要多两个操作:

  1. 修改该模块的Makefile
  2. 拷贝生成的.code文件到输出文件的对应目录

1)该模块编译时依赖内核配置时产生的include/generated下的头文件,所以需要将输出文件下的include路径添加到Makefile的INCLUDE变量中,添加后的Makefile如下:

#makefile for standby.bin

INCLUDE   = -I. \
        -I$(KDIR)/include \
        -I$(KDIR)/arch/arm/mach-sun7i/include \
        -I/tmp/build/include \

在Makefile中添加了-I/tmp/build/include \,其中/tmp/build是编译内核时的文件输出路径(make时的参数O的值)。
2)编译后要将生成的standby.code、suspend.code、resume0.code及resume1.code分别拷贝到编译目录(如/tmp/build)下的对应位置:

/tmp/build/arch/arm/mach-sun7i/pm/standby/
/tmp/build/arch/arm/mach-sun7i/pm/standby/suspend/
/tmp/build/arch/arm/mach-sun7i/pm/standby/resume/

到此,该问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值