(带网址)实现HelloWorld驱动实验碰到的问题.doc_第1页
(带网址)实现HelloWorld驱动实验碰到的问题.doc_第2页
(带网址)实现HelloWorld驱动实验碰到的问题.doc_第3页
(带网址)实现HelloWorld驱动实验碰到的问题.doc_第4页
(带网址)实现HelloWorld驱动实验碰到的问题.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

最简单的HelloWorld驱动实验碰到的问题和经验分享今天实验了第一个设备驱动Hello,world!模块,期间碰到了几个问题,在此分享下经验,希望以后的朋友碰到了类似问题能少走弯路.实验环境:主机:Ubuntu10.04,emacs,minicom等.板子:mini2440(128M的nandflash)交叉编译:arm-linux-gcc-4.3.2(友善提供的)内核:linux-hello.c文件的代码如下:复制代码 1. #include 2. #include 3. MODULE_LICENSE(Dual BSD/GPL); 4.5. static int hello_init(void) 6. 7. printk(KERN_ALERT Hello,yuzexi001!n); 8. return 0; 9. 10.11. static void hello_exit(void) 12. 13. printk(KERN_ALERT Goodbye,yuzexi001n); 14. 15.16. module_init(hello_init); 17. module_exit(hello_exit);将hello.c保存在自己的工作目录下.并编写一个Makefile文件(自己还不会,基本参考了tekkaman的),内容如下:复制代码 1. KERNELDIR = /home/yuzexi/Working/mini2440/linux- 2. PWD := $(shell pwd) 3. INSTALLDIR = /home/yuzexi/Working/rootfs/lib/modules 4.5. CROSS_COMPILE = /usr/local/arm/4.3.2/bin/arm-none-linux-gnueabi- 6. CC= $(CROSS_COMPILE)gcc 7.8. obj-m := hello.o 9.10. modules: 11. $(MAKE) -C $(KERNELDIR) M=$(PWD) modules 12.13. modules_install: 14. cphello.ko $(INSTALLDIR) 15.16. clean: 17. rm -rf *.o * core .depend .*.cmd *.ko *.mod.c .tmp_versions 18.19. .PHONY:modules modules_install clean/*几点说明:*1,在编译该模块之前,请确保你的内核源码树已经搭建好,也就是给驱动开发的环境是否搭建好了.这个可以参考我们arm9之家论坛里的资料-文件名是Mini2440 Linux移植开发实战指南.pdf具体的链接下载地址自己也忘了.*2,Makefile中的KERNELDIR就是内核源码树的位置,根据自己的实际情况来定.*3,网上有个搭建设备驱动程序开发环境的帖子:/s/blog_66e7d9b70100i26v.html,可以试试看.*/最后,在工作目录下执行#make modules#make modules_install执行的结果如下所示:rootUbuntu10-04:/home/yuzexi/Working/myproject/drivers/HelloWorld# make modulesmake -C /home/yuzexi/Working/mini2440/linux- M=/home/yuzexi/Working/myproject/drivers/HelloWorld modulesmake1: 正在进入目录 /home/yuzexi/Working/mini2440/linux-CC M/home/yuzexi/Working/myproject/drivers/HelloWorld/hello.oBuilding modules, stage 2.MODPOST 1 modulesCC/home/yuzexi/Working/myproject/drivers/HelloWorld/hello.mod.oLD M/home/yuzexi/Working/myproject/drivers/HelloWorld/hello.komake1:正在离开目录 /home/yuzexi/Working/mini2440/linux-rootUbuntu10-04:/home/yuzexi/Working/myproject/drivers/HelloWorld# make modules_installcphello.ko /home/yuzexi/Working/rootfs/lib/modulesrootUbuntu10-04:/home/yuzexi/Working/myproject/drivers/HelloWorld# lshello.c hello.mod.chello.o modules.orderhello.kohello.mod.oMakefileModule.symversrootUbuntu10-04:/home/yuzexi/Working/myproject/drivers/HelloWorld# 到此,就生成了hello.ko文件,可以通过FTP或者网络或者U盘将hello.ko文件拷贝到开发板(mini2440)中,注意:这里需要拷贝到开发板的/lib/modules/-FriendlyARM目录下面(参考mini2440用户手册7.3.3,第374页). 好了,现在假设你已经登录了开发板,并且hello.ko文件已经拷贝到了/lib/modules/-FriendlyARM/目录下面.下面是执行过程:#cd /lib/modules/-FriendlyARMrootFriendlyARM -FriendlyARM# lshello.korootFriendlyARM -FriendlyARM# insmod hello.ko Hello,yuzexi001!rootFriendlyARM -FriendlyARM# lsmod hello 656 0 - Live 0xbf000000rootFriendlyARM -FriendlyARM# rmmod hellormmod: chdir(): No such file or directory到这里,问题就出现了,rmmod: chdir(): No such file or directory注意这里的问题提示目录为:chdir(),根据置顶帖驱动的加载与卸载中常见问题:rmmod chdir no such file or directory 的最终解决办法11楼wbweb的提示,于是我大胆的将开发板的/lib/modules/-FriendlyARM/目录 修改为 /lib/modules// 后,重新测试后,成功.测试如下:rootFriendlyARM # pwd/lib/modules/rootFriendlyARM # lshello.korootFriendlyARM # insmod hello.ko Hello,yuzexi001!rootFriendlyARM # lsmod hello 656 0 - Live 0xbf006000rootFriendlyARM # rmmod helloGoodbye,yuzexi001rootFriendlyARM # lsmod rootFriendlyARM # OK,到此为止,第一个HelloWorld驱动模块测试结束 希望更多学驱动的朋友越来越顺利附一:Mini2440 Linux移植开发实战指南.pdf链接地址找到了,如下:/download/mini2440-linux-guide.zip或者:/read.php?tid-5682.html完全参考这个pdf文档,中途会遇到几个小问题,其解决方法可以参考这里:/read.php?tid-5964.html这里写下自己遇到的问题:1,理解Mini2440 Linux移植开发实战指南战指南.pdf文档中的这样一句:将smdk_machine_init()函数调用注释代掉,因为后面会编写自己的初始化函数,不需要调用smdk2440原来的. 这里在后面本应该添加的初始化文档中却没有添加,这里我参考了官方已经移植好的内核来修改的,将s3c_device_nand.dev.platform_data=&mini2440_nand_info添加到/arch/arm/mach-s3c2440/mach-mini2440.c的_init mini2440_machine_init(void)函数中2,另外,还需要添加这些头文件:#include #include #include #include #include #include 按照上面的pdf文档修改,并按照上面的两条修改后,才能从启动信息中查看到你想要的分区表!3,在移植UDA1341音频驱动时,#make menuconfigDevice Drivers-Sound card suppport-*preclaim Oss device numbers-Advanced Linux Sound Architecture-ALSL for SoC audio support-Soc I2S Audio support UDA134x wired to a S3C24xx这里的配置直接参考上面的pdf文档即可,不需要将其他的音频驱动也编译到内核,否则在测试时失败! !默认的内核配置中,这里已经包含了sequencer support 和Dynamic device file minior numbers和support old ALSA API, 将这三项去掉后,重新编译内核,音频驱动测试成功! 配置菜单的时候并不是越多越好,不知道这句话对不对?呵呵附二:解决卸载模块后的小bug:rmmod: module hellop not found今天上午修改了hello.c,模块参数的修改这一点.测试如下,但是当卸载hellop后,最后有个小小的问题.rootFriendlyARM # insmod hellop.ko howmany=10 whom=beyond(0):Hello,beyond!(1):Hello,beyond!(2):Hello,beyond!(3):Hello,beyond!(4):Hello,beyond!(5):Hello,beyond!(6):Hello,beyond!(7):Hello,beyond!(8):Hello,beyond!(9):Hello,beyond!rootFriendlyARM # lsmod hellop 792 0 - Live 0xbf006000rootFriendlyARM # rmmod hellopGoodbye,Ubuntu10.04 I love you so much!rmmod: module hellop not foundrootFriendlyARM # lsmod rootFriendlyARM # 为什么会提示rmmod: module hellop not found呢,请参考帖子:/u1/38994/showart_2034575.html看完这个帖子后,可能找到了原因,但是不大理解,还请高人帮忙解释下,为什么当/lib/modules//目录下有多个*.ko文件时,会有这个小bug呢,该怎样理解呢,谢谢情况是这样的,在/lib/modules//目录下面,有多个*.ko文件,这里是hello.ko和hellop.ko,于是我将hello.ko和另外一个modules.dep.bb删除后,只剩下hellop.ko文件,接着重新测试后,不再提示rmmod: module hellop not found今天在进行字符设备scull驱动实验的时候,也同样出现了这个问题,其实这里只需要将/lib/modules//目录下面的modules.dep.bb删除即可搞定!实验如下:rootFriendlyARM # lshello.kohellop.ko modules.dep.bbrootFriendlyARM # rm modules.dep.bb rootFriendlyARM # lshello.ko hellop.korootFriendlyARM # rm hello.ko rootFriendlyARM # lshellop.korootFriendlyARM # lsmod rootFriendlyARM # insmod hellop.ko howmany=6 whom=yuzexi(0):Hello,yuzexi!(1):Hello,yuzexi!(2):Hello,yuzexi!(3):Hello,yuzexi!(4):Hello,yuzexi!(5):Hello,yuzexi!rootFriendlyARM # lsmodhellop 792 0 - Live 0xbf00c000rootFriendlyARM # rmmod hellopGoodbye,Ubuntu10.04 I l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论