请大侠们指条ubuntu下开发linux设备驱动程序的明路啊
之前按照Etual热心人提供的在ubuntu下搭建linux设备驱动开发环境,他的步骤是:$ su root
# apt-get install linux-source-2.6.32
# cd /usr/src
# tar xjf linux-source-2.6.32.tar.bz2
# cd linux-source-2.6.32
# cp ../linux-headers-2.6.32-38-generic/.config .
# make menuconfig
# make -j2
完全是一步步来的,只是内核版本号不同,我下载的版本是2.6.35,下面是/usr/src/目录下的文件:
root@ubuntu:/usr/src# ls
linux-headers-2.6.35-22 linux-source-2.6.35
linux-headers-2.6.35-22-genericlinux-source-2.6.35.tar.bz2
编写的是一个简单的helloworld程序,程序如下:
#include</linux/init.h>
#include<linux/module.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye,cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
Makefile如下:
obj-m := hello.o
KERNELDIR ?= /usr/src/linux-source-2.6.35
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
首先,编译能正常通过,就是不能用insmod命令加载,总是出现这个错误:
insmod: error inserting 'hello.ko': -1 Invalid module format
求热心人能帮忙解决下这出了什么问题,不胜感激 难道要石沉大海了?{:cry:} 一般开发驱动都是基于某个厂家的芯片,这样可以从厂家获取BSP级包。
再根据BSP包的情况,下载Kernel,在根据你的实际应用修改或完善驱动。 你的UBUNTU是64位的吧?需要把源代码定向到64位,先预处理一下 uname -r
确认linux内核版本和源码一致 本帖最后由 lusson 于 2012-4-1 17:17 编辑
同楼上。
你应该是把模块下到开发板上再执行insmod的吧
编绎驱动的时候需要内核的源码树
你开发板的内核编绎时的版本应该和编绎驱动时的源码树版本不一样。 已经解决了,是Makefile的问题,谢谢各位热心人 已经解决了,是Makefile的问题,谢谢各位热心人 longfeix86 发表于 2012-4-1 19:29 static/image/common/back.gif
已经解决了,是Makefile的问题,谢谢各位热心人
makefile什么问题啊?讲一下啊 wzh314 发表于 2012-4-5 13:24 static/image/common/back.gif
makefile什么问题啊?讲一下啊
没办法,网速太纠结了,下面所Makefile
ifneq($(KERNELRELEASE),)
obj-m : hello.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD :=(shell pwd)
default:
$(MAKE) -C $ (KERNELDIR) M=$ (PWD) modules
endif longfeix86 发表于 2012-4-5 23:04 static/image/common/back.gif
没办法,网速太纠结了,下面所Makefile
ifneq($(KERNELRELEASE),)
obj-m : hello.o
语法问题吗? wzh314 发表于 2012-4-5 23:48 static/image/common/back.gif
语法问题吗?
语法没有问题,是我的内核版本有问题 longfeix86 发表于 2012-4-6 08:58 static/image/common/back.gif
语法没有问题,是我的内核版本有问题
呵呵,知道了,谢谢!
页:
[1]