主题 : 编译驱动模块出现问题 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 89451
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
综合积分: 62 分
注册时间: 2013-03-28
最后登录: 2016-05-12
楼主  发表于: 2013-03-28 16:47

 编译驱动模块出现问题

第一步:加压安装交叉编译器
Tar xzvf  arm-linux-gcc-4.4.3 –C
加入环境变量
Vi /root/.bashrc
加入export PATH=$PATH: /opt/FriendlyARM/toolschain/4.4.3/bin
最后生效

第二步:解压内核压缩包并编译内核
Tar xzvf  linux-2.6.32.2.tar.gz
Cd  linux-2.6.32.2
Make distclean
Cp config_mini2440_x35  .config
Make menuconfig
保留原有配置项 、保存退出
Make  zImage
编译完成后最后一行: kernel: arch/arm/boot/zImage is ready
这应该编译成功了吧

第三步 :进入驱动程序里面
修改makefile里面的内核路径
KERNELDIR ?=/ home/mini2440/linux-2.6.32.2
然后保存
Make
出现错误提示:
[root@localhost driver]# make
make -C /home/mini2440/kernel/linux-2.6.32.2 M=/home/mini2440/work/dirver/beep/driver modules
make[1]: Entering directory `/home/mini2440/kernel/linux-2.6.32.2'
  CC [M]  /home/mini2440/work/dirver/beep/driver/beep_drv.o
/home/mini2440/work/dirver/beep/driver/beep_drv.c:27:29: mach/regs-clock.h: No such file or directory
/home/mini2440/work/dirver/beep/driver/beep_drv.c:28:29: plat/regs-timer.h: No such file or directory
/home/mini2440/work/dirver/beep/driver/beep_drv.c:30:28: mach/regs-gpio.h: No such file or directory
/home/mini2440/work/dirver/beep/driver/beep_drv.c: In function `beep_stop':
/home/mini2440/work/dirver/beep/driver/beep_drv.c:65: error: implicit declaration of function `s3c2410_gpio_cfgpin'
/home/mini2440/work/dirver/beep/driver/beep_drv.c:65: error: implicit declaration of function `S3C2410_GPB'
/home/mini2440/work/dirver/beep/driver/beep_drv.c:65: error: `S3C2410_GPIO_OUTPUT' undeclared (first use in this function)
/home/mini2440/work/dirver/beep/driver/beep_drv.c:65: error: (Each undeclared identifier is reported only once
/home/mini2440/work/dirver/beep/driver/beep_drv.c:65: error: for each function it appears in.)
/home/mini2440/work/dirver/beep/driver/beep_drv.c:66: error: implicit declaration of function `s3c2410_gpio_setpin'
/home/mini2440/work/dirver/beep/driver/beep_drv.c: In function `beep_start':
/home/mini2440/work/dirver/beep/driver/beep_drv.c:74: error: implicit declaration of function `s3c2410_gpio_pullup'
/home/mini2440/work/dirver/beep/driver/beep_drv.c:75: error: `S3C2410_GPIO_OUTPUT' undeclared (first use in this function)
make[2]: *** [/home/mini2440/work/dirver/beep/driver/beep_drv.o] 错误? 1
make[1]: *** [_module_/home/mini2440/work/dirver/beep/driver] 错误? 2
make[1]: Leaving directory `/home/mini2440/kernel/linux-2.6.32.2'
make: *** [modules] 错误? 2

自己看了下,应该是这三行出现问题
/home/mini2440/work/dirver/beep/driver/beep_drv.c:27:29: mach/regs-clock.h: No such file or directory
/home/mini2440/work/dirver/beep/driver/beep_drv.c:28:29: plat/regs-timer.h: No such file or directory
/home/mini2440/work/dirver/beep/driver/beep_drv.c:30:28: mach/regs-gpio.h: No such file or directory

是找不见头文件 很奇怪的问题的。帮忙看看,谢谢了
还有就是我的宿主机的内核版本是:2.6.33.3 也是fedora的

头文件没有改
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/slab.h>
#include <linux/input.h>
#include <linux/init.h>
#include <linux/serio.h>
#include <linux/delay.h>
#include <linux/clk.h>
#include <linux/miscdevice.h>
#include <linux/gpio.h>

#include <asm/io.h>
#include <asm/irq.h>
#include <asm/uaccess.h>
#include <mach/regs-clock.h>
#include <plat/regs-timer.h>
#include <mach/regs-gpio.h>
#include <linux/cdev.h>
级别: 新手上路
UID: 89451
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
综合积分: 62 分
注册时间: 2013-03-28
最后登录: 2016-05-12
1楼  发表于: 2013-03-28 16:54
宿主机是fedora 13
级别: 新手上路
UID: 89451
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
综合积分: 62 分
注册时间: 2013-03-28
最后登录: 2016-05-12
2楼  发表于: 2013-03-28 22:39
求大侠帮看看 是什么问题呢 没人支持吗
^很多问题的背后都是简单的原因......
级别: 荣誉会员
UID: 34780
精华: 0
发帖: 1219
金钱: 6230 两
威望: 1246 点
综合积分: 2438 分
注册时间: 2010-12-21
最后登录: 2017-09-18
3楼  发表于: 2013-03-29 11:12
1) 你可以试一下
  make V=1 -C /home/mini2440/kernel/linux-2.6.32.2 M=/home/mini2440/work/dirver/beep/driver modules
    如果可以运行,检查一下完整的编译命令是否存在问题

2) 如果你的驱动是一个文件,你可以直接复制 beep_drv.c 到 /home/mini2440/kernel/linux-2.6.32.2/drivers/char/,替换掉 mini2440_hello_module.c ,然后直接在
  /home/mini2440/kernel/linux-2.6.32.2 目录下 make 看看这个替换过的 mini2440_hello_module.c 的编译是否正常
级别: 新手上路
UID: 89451
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
综合积分: 62 分
注册时间: 2013-03-28
最后登录: 2016-05-12
4楼  发表于: 2013-03-29 18:43

 回 3楼(911gt3) 的帖子

首先感谢您帮忙
1)按照第一步做,还是出现同样的错误信息
2)按照第二步做,出现如下错误信息:
drivers/char/mini2440_hello_module.c: In function 'beep_stop':
drivers/char/mini2440_hello_module.c:65: error: implicit declaration of function 'S3C2440_GPB'
drivers/char/mini2440_hello_module.c:65: error: 'S3C2440_GPIO_OUTPUT' undeclared (first use in this function)
drivers/char/mini2440_hello_module.c:65: error: (Each undeclared identifier is reported only once
drivers/char/mini2440_hello_module.c:65: error: for each function it appears in.)
make[2]: *** [drivers/char/mini2440_hello_module.o]错误? 1
make[1]: *** [drivers/char] 错误? 2
make: *** [drivers] 错误  2

请问这到底是什么回事呢
级别: 新手上路
UID: 89451
精华: 0
发帖: 31
金钱: 160 两
威望: 32 点
综合积分: 62 分
注册时间: 2013-03-28
最后登录: 2016-05-12
5楼  发表于: 2013-03-29 21:12
呵呵。。经过自己从头做一遍问题解决了,是用Friedly那张光盘里面的内核的,之前是用了实验光盘3那套,可视频讲就是这一套,不知道是不是这个原因,可害苦了我,两天两夜都在想这问题了,终于问题解决了。感谢3楼的帮助