免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3263 | 回复: 7
打印 上一主题 下一主题

简单模块编译问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-07 20:13 |只看该作者 |倒序浏览
向各位请教一个编译内核模块的问题:
我现在有一个交叉编译环境,powerpc-linux-gcc,试验过用它编译一个简单的程序放到ppc平台运行的linux中可以运行。我现在想编译一个最简单的模块文件加载到ppc linux内核中,源文件是很多网上都提过的hello.c,Makefile文件是这样的:
KERNELDIR = /home/davidwx/control-project/daq-module/kernel/linux-2.6.11.8
CROSS_COMPILE = powerpc-linux-
ARCH := ppc
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld
CFLAGS = -O2 -D__KERNEL__ -DLINUX -DMODULE -DEXPORT_SYMTAB -O3 -Wall -I$(KERNELDIR) -O
obj-m := hello.o
PWD := $(shell pwd)
all:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
编译总是报这样的错误:
make -C /home/davidwx/control-project/daq-module/kernel/linux-2.6.11.8 M=/home/davidwx/control-project/daq-module/tmp modules
make[1]: Entering directory `/home/davidwx/control-project/daq-module/kernel/linux-2.6.11.8'
  CC [M]  /home/davidwx/control-project/daq-module/tmp/hello.o
  Building modules, stage 2.
  MODPOST
  CC      /home/davidwx/control-project/daq-module/tmp/hello.mod.o
In file included from include/linux/wait.h:27,
                 from include/asm/semaphore.h:21,
                 from include/linux/sched.h:19,
                 from include/linux/module.h:10,
                 from /home/davidwx/control-project/daq-module/tmp/hello.mod.c:1:
include/asm/current.h:12: error: invalid register name for 'current'
{standard input}: Assembler messages:
{standard input}:3: Warning: setting incorrect section type for .plt
{standard input}:3: Error: alignment not a power of 2
{standard input}:4: Error: alignment not a power of 2
主要是说无效的寄存器名,我查了很多资料都不能解决,希望得到大家的帮助,不甚感激!

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2009-02-07 22:12 |只看该作者
可能是你当前的交叉编译器对这条代码:register struct task_struct *current asm ("r2");识别有问题

论坛徽章:
0
3 [报告]
发表于 2009-02-07 22:38 |只看该作者

回复 #2 dreamice 的帖子

不换编译器,怎么让他识别,能改好吗?

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
4 [报告]
发表于 2009-02-08 11:37 |只看该作者
解决了的话,共享一下经验,呵呵

论坛徽章:
5
5 [报告]
发表于 2009-02-08 19:02 |只看该作者
不换编译器,就改写代码吧

论坛徽章:
0
6 [报告]
发表于 2009-02-09 15:46 |只看该作者
问题解决了,跟大家分享下经验:
hello.c文件当然是没有问题的了,我的powerpc-linux-gcc编译成功了内核,应该也是没有问题的。
问题还是出在了Makefile 上。我以上的Makefile,基本是根据网络上多数人提到的写的,上次dreamice 看了就觉得有点问题,但是又说不出哪有问题。后来我又比较我同事的Makefile,照他的写了个就行了
KERNEL_SOURCE = /home/davidwx/control-project/daq-module/kernel/linux-2.6.11.8
INCLUDE = $(KERNEL_SOURCE)/include
MODPOST = $(KERNEL_SOURCE)/scripts/mod/modpost

TARGET := hello
CFLAGS = -O2 -Wall -D__KERNEL__ -DMODULE -DKBUILD_MODNAME=$(TARGET)
CFLAGS += -fno-common
$(TARGET).ko: $(TARGET).o $(TARGET).mod.o
        powerpc-linux-ld -r $(TARGET).o $(TARGET).mod.o -o $(TARGET).ko

$(TARGET).o:$(TARGET).c
        powerpc-linux-gcc -c  -I$(INCLUDE) $(CFLAGS) $(TARGET).c

$(TARGET).mod.o:$(TARGET).o
        $(MODPOST) $(TARGET).o
        powerpc-linux-gcc -c  -I$(INCLUDE) $(CFLAGS) $(TARGET).mod.c
我估计obj-m := hello.o,这种写法适合本地编译,而不适合做交叉编译,不知道我的理解对不对,希望大家能积极讨论

[ 本帖最后由 dreamice 于 2009-2-9 17:55 编辑 ]

评分

参与人数 2可用积分 +18 收起 理由
dreamice + 15 我很赞同,鼓励一下
yidou + 3 赞一个

查看全部评分

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
7 [报告]
发表于 2009-02-09 16:36 |只看该作者
MODPOST = $(KERNEL_SOURCE)/scripts/mod/modpost

$(TARGET).ko: $(TARGET).o $(TARGET).mod.o
        powerpc-linux-ld -r $(TARGET).o $(TARGET).mod.o -o $(TARGET).ko

$(TARGET).o(TARGET).c
        powerpc-linux-gcc -c  -I$(INCLUDE) $(CFLAGS) $(TARGET).c

$(TARGET).mod.o(TARGET).o
        $(MODPOST) $(TARGET).o
        powerpc-linux-gcc -c  -I$(INCLUDE) $(CFLAGS) $(TARGET).mod.c


最关键的应该是这几句

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
8 [报告]
发表于 2009-02-09 21:22 |只看该作者

回复 #6 davidwx 的帖子

先恭喜一下,同时感谢分享,呵呵。交叉编译和本地编译还是有差别的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP