天嵌 ARM开发社区

 找回密码
 注册
查看: 4548|回复: 17

有驱动开发经验的蝈蝈帮忙看看错误

[复制链接]
eddy_liu 发表于 2010-11-10 10:11:29 | 显示全部楼层 |阅读模式
用的是TQ2440的板子。
打算按照“天嵌科技出品-Linux移植之Step By Step_V4.2_20100125”文档中“编写第一个驱动程序”
内核2.6.30.4,ARM 2440.
在Makefiel中修改了ARCH=arm和CROSS_COMPILE=arm-linux-,
然后修改平台输入时钟,
再然后就是make menuconfig,做了一些简单的配置。
保存配置后make zImage了一下,没有错误。
然后在/drivers/char下写了个简单的打印hello-linux驱动程序。
再然后就是make SUBDIR=dirvers/char modules,
然后就出现了下面的报错

<...以上省略....>
LD[M]    sound/usb/snd-usb-audio.ko
CC    sound/usb/snd-usb-lib.mod.o
LD[M]    sound/usb/snd-usb-lib.ko
HOSTCC    firmware/ihex2fw
make[1]:***No rule to make target '|',need by 'firmware/dabusb/firmware.fw'
stop
make:***[modules] Error2

这个错误没怎么看懂但应该是声卡驱动部分的。
我没有做Nandflash驱动的移植,也没移植yaffs文件系统,更没构建文件系统,也没有做声卡驱动移植。
这个错误是不是因为我没做声卡驱动移植造成的呢?怎么解决呢?

顺便再追加个问题:
在编写这个简单的驱动时,例程里有

#include<asm/irq.h>
#include<asm/arch/regs-gpio.h>
#include<asm/hardware.h>

我在include里找到了asm是对asm-arm的链接,但问题是:
asm-arm里只有asm-offsets.h和mach-types.h并没有irq.h和hardware.h更没有arch/regs/regs-gpio.h,这是为什么呢?

求高手给个方向
鬼鬼一哈 发表于 2010-11-10 10:40:47 | 显示全部楼层
arch/regs/regs-gpio.h应该是路径不对,看你自己的路径
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-10 13:06:59 | 显示全部楼层
arch/regs/regs-gpio.h应该是路径不对,看你自己的路径
鬼鬼一哈 发表于 2010-11-10 10:40

能说的详细些吗?从网上下载的2.6.30.4内核只是解压了下,没做别的操作呀
回复

使用道具 举报

鬼鬼一哈 发表于 2010-11-10 15:02:08 | 显示全部楼层
#include <mach/regs-gpio.h>
回复

使用道具 举报

天嵌_support1 发表于 2010-11-10 15:25:38 | 显示全部楼层
1# eddy_liu


第一个问题,你make clean 一下在 做看看
第二个问题,#include<asm/arch/regs-gpio.h> 这个东西你能make 通过?
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-10 23:11:03 | 显示全部楼层
4# 鬼鬼一哈


这个mach文件夹又在哪儿呢?
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-10 23:13:13 | 显示全部楼层
1# eddy_liu


第一个问题,你make clean 一下在 做看看
第二个问题,#include 这个东西你能make 通过?
embedsky_lxt 发表于 2010-11-10 15:25

1,我下载的新的内核,应该不用make clean吧
2,我知道那个肯定不能编译通过,所以把那些找不到的头文件屏蔽了,因为反正打印驱动里也没用上。但没想到,最终还是出问题了
回复

使用道具 举报

天嵌_support1 发表于 2010-11-11 11:38:03 | 显示全部楼层
7# eddy_liu


我还是觉得你的配置问题,你对比一下天嵌的吧。
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-11 22:04:33 | 显示全部楼层
7# eddy_liu


我还是觉得你的配置问题,你对比一下天嵌的吧。
embedsky_lxt 发表于 2010-11-11 11:38

哎,就是对比了天嵌的说明,才觉得恼火。开发光盘给了2.6.25.8和2.6.30.4两个配置编译过的内核压缩包。

在2.6.25.8里面的include目录下根本就没有asm,在include目录下ls -a也还是找不到。在asm-arm里倒是找到了irq.h和hardware.h但找不到目录arch,更没有arch/regs-gpio.h。

在2.6.30.4下面也没有asm目录,同样是ls -a也都找不到。在asm-arm里是plat-s3c24xx目录,在里面是regs-iis.h和regs-s3c2412-iis.h两个文件。
根本就是对应不上。我都很纳闷,使用说明书里的例程是怎么编译通过的
回复

使用道具 举报

天嵌_support1 发表于 2010-11-12 14:24:42 | 显示全部楼层
9# eddy_liu


你在做什么呢?自己开发驱动啊?
光盘里的内核,用光盘里的编译器, 我这里不知道弄了多少回,
怎么你会通不过?可以的话我QQ看你操作一下吧。
1526107786
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-13 21:42:17 | 显示全部楼层
9# eddy_liu


你在做什么呢?自己开发驱动啊?
光盘里的内核,用光盘里的编译器, 我这里不知道弄了多少回,
怎么你会通不过?可以的话我QQ看你操作一下吧。
1526107786
embedsky_lxt 发表于 2010-11-12 14:24

感谢版主的支持,第一个问题我已经解决了。上面的问题我在网上也找了找,发现时编译时的宿主系统可能缺少某些文件造成的,我从红帽换成ubuntu就没错了。但第二个问题还是没有解决。用QQ的话可能也不是很好说清楚。我把问题整理了一下,用word以附件的形式传上来,希望版主给看看,谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-15 20:51:14 | 显示全部楼层
感谢版主的支持,第一个问题我已经解决了。上面的问题我在网上也找了找,发现时编译时的宿主系统可能缺少某些文件造成的,我从红帽换成ubuntu就没错了。但第二个问题还是没有解决。用QQ的话可能也不是很好说清楚。 ...
eddy_liu 发表于 2010-11-13 21:42

楼主帮忙看看嘛
回复

使用道具 举报

天嵌_support1 发表于 2010-11-16 16:02:54 | 显示全部楼层
12# eddy_liu


drivers/char/EmbedSky_hello.c:13:31: error: asm/arch/regs-gpio.h: No such file or directory
drivers/char/EmbedSky_hello.c:14:25: error: asm/hardware.h: No such file or directory
drivers/char/EmbedSky_hello.c:16: error: expected declaration specifiers or '...' before string constant

asm/arch/regs-gpio.h 说了没有这个文件。 而且你的hello 模块只是做个测试。你完全不需要这个文件。
asm/hardware.h 这个也不需要的。
只需要

#include <linux/module.h>
#include <linux/kernel.h>
上面这俩就可以。
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-16 19:58:15 | 显示全部楼层
本帖最后由 eddy_liu 于 2010-11-16 19:59 编辑

13# embedsky_lxt


恩,版主说的很对。第一就是找不到头文件造成的问题。第二,这个打印字符的驱动并不需要asm/下的和硬件相关的头文件。但我想知道为什么像asm/arch/regs-gpio.h asm/hardware.h 这样的头文件找不到呢?首先,我是完全按天嵌的手册来操作的,按理说是不应该出现问题的呀。其次,如果我下一步打算写一个控制led闪烁的驱动,那么就肯定会需要这些和硬件相关的头文件了,到那时候,还是会出现现在相同的问题。我在网上也找了下,结果答案是:
“这种情况一般是由于不同的内核的版本,头文件的路径有时候有一些变动,具体头文件变动到那去了,建议把找不到的头文件搜索一下,看存在的路径是代码中写的路径”
我用find命令找了下,结果果然是找到了相关的文件
eddy@eddy-desktop:~/SharedFoler/linux-2.6.30.4$ find -name hardware.h
./drivers/char/pcmcia/ipwireless/hardware.h
./drivers/isdn/sc/hardware.h
./arch/arm/mach-versatile/include/mach/hardware.h
./arch/arm/mach-mv78xx0/include/mach/hardware.h
./arch/arm/mach-ep93xx/include/mach/hardware.h
./arch/arm/mach-mmp/include/mach/hardware.h
./arch/arm/mach-h720x/include/mach/hardware.h
./arch/arm/mach-w90x900/include/mach/hardware.h
./arch/arm/mach-aaec2000/include/mach/hardware.h
./arch/arm/mach-s3c2410/include/mach/hardware.h
./arch/arm/mach-loki/include/mach/hardware.h
./arch/arm/mach-ebsa110/include/mach/hardware.h
./arch/arm/mach-davinci/include/mach/hardware.h
./arch/arm/mach-ixp4xx/include/mach/hardware.h
./arch/arm/mach-kirkwood/include/mach/hardware.h
./arch/arm/mach-gemini/include/mach/hardware.h
./arch/arm/mach-orion5x/include/mach/hardware.h
./arch/arm/mach-ns9xxx/include/mach/hardware.h
./arch/arm/mach-pxa/include/mach/hardware.h
./arch/arm/mach-ixp2000/include/mach/hardware.h
./arch/arm/mach-realview/include/mach/hardware.h
./arch/arm/plat-omap/include/mach/hardware.h
./arch/arm/mach-msm/include/mach/hardware.h
./arch/arm/mach-iop32x/include/mach/hardware.h
./arch/arm/mach-pnx4008/include/mach/hardware.h
./arch/arm/mach-integrator/include/mach/hardware.h
./arch/arm/plat-mxc/include/mach/hardware.h
./arch/arm/mach-rpc/include/mach/hardware.h
./arch/arm/mach-ks8695/include/mach/hardware.h
./arch/arm/mach-s3c6400/include/mach/hardware.h
./arch/arm/mach-clps711x/include/mach/hardware.h
./arch/arm/mach-shark/include/mach/hardware.h
./arch/arm/mach-at91/include/mach/hardware.h
./arch/arm/mach-iop33x/include/mach/hardware.h
./arch/arm/mach-iop13xx/include/mach/hardware.h
./arch/arm/mach-lh7a40x/include/mach/hardware.h
./arch/arm/mach-netx/include/mach/hardware.h
./arch/arm/mach-sa1100/include/mach/hardware.h
./arch/arm/mach-l7200/include/mach/hardware.h
./arch/arm/mach-footbridge/include/mach/hardware.h
./arch/arm/mach-ixp23xx/include/mach/hardware.h
./arch/arm/mach-imx/include/mach/hardware.h
./arch/xtensa/platforms/xt2000/include/platform/hardware.h
./arch/xtensa/platforms/s6105/include/platform/hardware.h
./arch/xtensa/platforms/iss/include/platform/hardware.h
./arch/xtensa/variants/s6000/include/variant/hardware.h
./arch/parisc/include/asm/hardware.h
eddy@eddy-desktop:~/SharedFoler/linux-2.6.30.4$
hardware.h是找到了,但问题是,如果我想用这个头文件,那么我就要修改Makefile吗?因为这个头文件显然是没在include/asm下,而makefile的寻找路径则是include/asm
回复

使用道具 举报

 楼主| eddy_liu 发表于 2010-11-16 20:08:30 | 显示全部楼层
我在想,既然在写驱动前,已通过make menuconfig 进行了处理器级选型,板级选型,以及相关外设的配置。那么系统就应该把相关的硬件信息集中起来呀,而不是重新跑到分散的文件夹里去找。
当然这也只是个人看法罢了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2025-5-3 11:47 , Processed in 2.041958 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表