请教在开发板上运行驱动程序

[复制链接]
2906|5
 楼主| songbw 发表于 2008-7-14 16:58 | 显示全部楼层 |阅读模式
很简单的字符驱动<br />hello.c<br />#define&nbsp;__KERNEL__<br />#include&nbsp;&ltlinux/module.h&gt<br />#include&nbsp;&ltlinux/kernel.h&gt<br /><br />int&nbsp;init_module(void)<br />{<br />&nbsp;&nbsp;printk(KERN_DEBUG&nbsp;&quot;hello&nbsp;world!\n&quot;);<br />&nbsp;&nbsp;return&nbsp;0;<br />&nbsp;}<br /><br />void&nbsp;cleanup_module(void)<br />&nbsp;&nbsp;{&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printk(KERN_DEBUG&nbsp;&quot;goodbye&nbsp;cruel&nbsp;world&nbsp;!\n&quot;);<br />&nbsp;&nbsp;&nbsp;}<br /><br />Makefile如下:<br /><br />CROSS&nbsp;=/tools/3.4.1/bin/arm-linux-gcc<br />INCPATH&nbsp;=/tools/2.6.8.1/include<br />all:hello<br />hello&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;$(CROSS)&nbsp;-I$(INCPATH)&nbsp;-c&nbsp;hello.c&nbsp;-o&nbsp;hello.o<br />clean&nbsp;:<br />&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;-rf&nbsp;hello&nbsp;*.o<br /><br />我的内核版本是2.6.8.1,gcc版本是3.4.1,安装路径是tools/3.4.1<br />执行make后只生成hello.o文件,没有生成hello.ko文件,<br />最后下载到开发板的内核中产生如下错误:<br />No&nbsp;module&nbsp;found&nbsp;in&nbsp;object<br />insmod:&nbsp;cannot&nbsp;insert&nbsp;'hello.o':Invalid&nbsp;module&nbsp;format&nbsp;(-1):Exec&nbsp;format&nbsp;error<br /><br />上网查了好多也没个结果。<br />请高手指教了。
 楼主| songbw 发表于 2008-7-15 08:45 | 显示全部楼层

高手指教

  
 楼主| songbw 发表于 2008-7-15 09:43 | 显示全部楼层

很奇怪,我问的这个问题很难吗?为什么没人回答呢?

  
阿南 发表于 2008-7-15 21:26 | 显示全部楼层

用这种方法试试

11.1&nbsp;模块编程实验<br />1.源程序<br />模块程序清单:<br />#define&nbsp;MODULE<br />#include&nbsp;&ltlinux/module.h&gt<br />int&nbsp;init_module(void){<br />&nbsp;&nbsp;&nbsp;&nbsp;printk&nbsp;(“&lt1&gtHello,world!\n”);<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;0;<br />}<br />void&nbsp;cleanup_module(void){<br />&nbsp;&nbsp;&nbsp;&nbsp;printk(“&lt1&gtGoodbye&nbsp;cruel&nbsp;world!\n”);<br />}<br />我们在基于PC机的Linux驱动学习时,已经完成过该实验,现在再次用这个最简单的实验来学习嵌入式Linux驱动的开发过程,和验证它与PC机Linux驱动的相同性。<br />2.PC机上编译运行<br />#gcc&nbsp;–c&nbsp;hello.c<br />#insmod&nbsp;./hello.o<br />hello,world!<br />#rmmod&nbsp;hello&nbsp;<br />Goodbye&nbsp;cruel&nbsp;world!<br />#<br />3.为目标板编译和运行<br />Makefile脚本清单:<br />CROSS=/opt/host/armv4l/bin/armv4l-unknown-linux-<br />INCPATH=/linuette/target/box/kernel/include<br />all:&nbsp;hello&nbsp;<br />hello:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(CROSS)c&nbsp;–I$(INCPATH)&nbsp;hello.c<br />clean:<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;–rf&nbsp;*.o<br />写好脚本后,输入make编译<br />#make<br />/opt/host/armv4l/bin/armv4l-unknown-linux-gcc&nbsp;–I/linuette/target/box/kernel/include&nbsp;hello.c<br />将生成的目标文件下载到目标板的/tmp目录下,动态装载和卸载时将在终端打印相应的字符串,如下:<br />#insmod&nbsp;./hello.o<br />Hello,world!<br />#rmmod&nbsp;hello<br />Goodbye&nbsp;cruel&nbsp;world!<br />当装载后,可以查看&nbsp;/proc/modules的内容,是否装载成功。<br />#cat&nbsp;/proc/modules<br />
边锋软件 发表于 2008-7-15 23:12 | 显示全部楼层

打错了,留个脚印吧

  
yzaries 发表于 2008-7-15 23:50 | 显示全部楼层

看书

看看书吧<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

86

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部