搜索
bottom↓
回复: 12

请大侠们指条ubuntu下开发linux设备驱动程序的明路啊

[复制链接]

出0入0汤圆

发表于 2012-3-31 19:45:20 | 显示全部楼层 |阅读模式
之前按照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-generic  linux-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
求热心人能帮忙解决下这出了什么问题,不胜感激

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2012-4-1 07:59:40 | 显示全部楼层
难道要石沉大海了?

出0入0汤圆

发表于 2012-4-1 15:48:42 | 显示全部楼层
一般开发驱动都是基于某个厂家的芯片,这样可以从厂家获取BSP级包。
再根据BSP包的情况,下载Kernel,在根据你的实际应用修改或完善驱动。

出0入0汤圆

发表于 2012-4-1 15:58:52 | 显示全部楼层
你的UBUNTU是64位的吧?需要把源代码定向到64位,先预处理一下

出0入0汤圆

发表于 2012-4-1 16:06:23 | 显示全部楼层
uname -r
确认linux内核版本和源码一致

出0入54汤圆

发表于 2012-4-1 17:17:10 | 显示全部楼层
本帖最后由 lusson 于 2012-4-1 17:17 编辑

同楼上。
你应该是把模块下到开发板上再执行insmod的吧

编绎驱动的时候需要内核的源码树
你开发板的内核编绎时的版本应该和编绎驱动时的源码树版本不一样。

出0入0汤圆

 楼主| 发表于 2012-4-1 19:28:00 | 显示全部楼层
已经解决了,是Makefile的问题,谢谢各位热心人

出0入0汤圆

 楼主| 发表于 2012-4-1 19:29:07 | 显示全部楼层
已经解决了,是Makefile的问题,谢谢各位热心人

出0入0汤圆

发表于 2012-4-5 13:24:42 | 显示全部楼层
longfeix86 发表于 2012-4-1 19:29
已经解决了,是Makefile的问题,谢谢各位热心人

makefile什么问题啊?讲一下啊

出0入0汤圆

 楼主| 发表于 2012-4-5 23:04:28 | 显示全部楼层
wzh314 发表于 2012-4-5 13:24
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

出0入0汤圆

发表于 2012-4-5 23:48:56 | 显示全部楼层
longfeix86 发表于 2012-4-5 23:04
没办法,网速太纠结了,下面所Makefile
ifneq($(KERNELRELEASE),)
        obj-m : hello.o

语法问题吗?

出0入0汤圆

 楼主| 发表于 2012-4-6 08:58:51 | 显示全部楼层
wzh314 发表于 2012-4-5 23:48
语法问题吗?

语法没有问题,是我的内核版本有问题

出0入0汤圆

发表于 2012-4-6 23:03:59 | 显示全部楼层
longfeix86 发表于 2012-4-6 08:58
语法没有问题,是我的内核版本有问题

呵呵,知道了,谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 16:43

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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