参照官方资料 写beaglebone black 第一个驱动 hello world

一直在研究TI官方的关于Beaglebone Black的文章,进行到 驱动开发的步骤

http://processors.wiki.ti.com/index.php

/Processor_SDK_Linux_Training:_Introduction_to_Device_Driver_Development

,简单记录一下自己的新的。

跟随官方的说明, 总的说来还是很顺畅,资料中有何自己实际操作不用的地方,也都一步步解决了。官方资料是针对最新的SDK,自己使用的是SDK8.0。所以提前就知道学习过程中会有异常,所以并不奇怪。

在进行到从TI官方的git上面clone源码的时候出现了问题,连接git,一直都是time out,在网上查了好久,怎么使用gitorious,什么添加ssh密钥,公钥,都不行,最后实在无能为力,直接下载了一个压缩包,本地解压后,继续下面的操作。

      在编译内核的时候运行   make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage    出错,观察提示,应该是没有使用sudo运行。增加sudo发现还是不行,提示找不到 交叉编译工具链工具。可是刚才明明添加了,于是推测,刚才添加地址的时候 没有使用root登陆,不会使用sudo后就找不到地址把,于是切换到root登陆,在export 查看,果然没有  编译器目录。添加地址添加到 export ,然后执行make,ok了!

 

 

 

进行到Write a Hello World Module 的步骤,心情非常激动,因为原来一直对驱动这部分敬而远之,不太了解。看资料里一直在说什么Module,module,一开始不了解这个模块具体是什么。就想着按步骤操作就好了,可是到这步,直接来了一句“You will need create init_module() and cleanup_module functions...”弄蒙了。那会写这些。不了解啊。

于是想,这东西肯定是驱动里面很基础的东西,不然不会直接一带而过。先打开上面直接从网上下载下来的Module_tranining源码一看,果然后hello 文件夹,进去,还有hello_version.c和 Makefile。窃喜,这里已经写好了代码了。可是gedit hello_version.c后里面只有三行注释。就去网上搜索,hello worl的源码,后来用了这个复制进去:

 

//Add include statements here

/* Add your code here */

//Add macro statements here

#include <linux/kernel.h>
#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");  
}  
init_module(hello_init);  
cleanup_module(hello_exit); 


然后按照要求修改了Makefile。运行make,发现有很多错误。

 发现错误都出在最后两行,在网上反复搜索,有的人说,这两个函数,有不同的形式,init_module() 和module_init()类似。exit_module()和cleanup_module().类似。后来看到这个 http://blog.csdn.net/reille/article/details/6310750

尝试着把最后两行的函数修改为 module_init()和exit_module()。可还是不行,不过此时报错少了,最后发现exit_module() 改为module_exit()可解决问题。

果然生产了.ko文件,接下来又是按照说明操作就可以看到挂载module的情况了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值