LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2174|回复: 6

如何编译驱动

[复制链接]
发表于 2008-7-22 09:18:31 | 显示全部楼层 |阅读模式
我编了个针对arm的linux2.6下的小驱动程序,我是在RED HAD 9下编制的。
我输入了:arm-linux-gcc -D__KERNEL__-DMODULE -I $(INCLUDE) -Wall -c 2.6driver -o 2.6driver.o
编译也成功了,可是下载到板子里去,用insmod命令更本不行。
不知道怎么会事,那位给指点下,谢谢。
如果写makefile怎么写呢。
发表于 2008-7-24 14:46:42 | 显示全部楼层
obj-m := testDriver.o

KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
        $(MAKE) -C $(KDIR) M=$(PWD) modules
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-24 20:38:38 | 显示全部楼层
谢谢
指点,能够编译了,可是有点不明白的,问个问题,就是我要用的是arm-linux-gcc编译它,可是makefile中没提到这个。
这个交叉编译器在那里体现呢。
回复 支持 反对

使用道具 举报

发表于 2008-7-24 21:57:10 | 显示全部楼层
Post by bsdhnit;1878217
谢谢
指点,能够编译了,可是有点不明白的,问个问题,就是我要用的是arm-linux-gcc编译它,可是makefile中没提到这个。
这个交叉编译器在那里体现呢。


你有没有用 file 命令来查看你编译的生成的文件?
你可以打开/lib/modules /2.6 .xx-xxxx/build/Makefile
你会发现 CROSS_COMPILE ?=  没有赋值, 按理说应该是要 修改成  :
CROSS_COMPILE ?= arm-linux-  或  CROSS_COMPILE ? = arm-elf-  
但是 /lib/modules 下的内核是发行版本自带的。 所以你要自己下载个 linux 2.6
然后修改相关行。 比较抱歉的是我也没有试过。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-24 22:17:54 | 显示全部楼层
谢谢,的确是arm架构的。我file查看了,忘了可以用这个命令了。
我的CROSS_COMPILE修改为了交叉编译器的路径了。
2.6的真是很神奇,只要做好了内核原码树,makefile就是通用的。
非常感谢。
回复 支持 反对

使用道具 举报

发表于 2008-7-25 10:22:46 | 显示全部楼层
可以问下,具体是怎么做的? 怎么修改的? 因为我昨天测试,但没有成功。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-25 22:33:44 | 显示全部楼层
下载一个内核根据你自己情况选择,这通常就是我们所说的内核原码树,要修改Makefile文件。具体怎么修改不用我说了吧。ARCH    CROSS_COMPILE。
make menuconfig 修改你板子的型号
make zImage



ifneq ($(KERNELRELEASE),)
# call from kernel build system

obj-m        := 2.6driver.o

else

KERNELDIR ?= /home/src/linux-2.6.14.1
PWD       := $(shell pwd)

default:
        $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

endif
KERNELDIR ?= /home/src/linux-2.6.14.1这个就是你原码树所在的目录。
你最好看看makefile的含义。就行了
自己动手实验是最好的解决问题方法。
回复 支持 反对

使用道具 举报

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

本版积分规则

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