完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
最近这段时间在玩beaglebone-black,参照《LINUX设备驱动程序》想用来练习Linux下的驱动程序编写,于是把我最近这一个多月的学习做下笔记。我也是新手,本文仅贡交流之用,有写的不好的地方,还望各位高手指正,不吝赐教!
本文参照了: 《Linux下AM335X的GPIO控制》 《Linux下ti omap芯片 MUX 配置分析(以AM335X芯片为例)》 《BeagleBone Black Linux驱动程序开发入门(1): LED驱动程序》 《Linux下bb-black的GPIO驱动程序》 还有其他的一些博文,对我的帮助也很大,在这就不在这一一列举了! 本文利用embest的交叉编译工具(ARM-none-linux-gnueabi-2010.09-50)、3.8内核源码以及镜像images_svn2541(BBB-eMMC-flasher-2013.09.04)进行介绍 相关下载地址:进入 强烈建议下载说明文档:下载 环境搭建: 1、下载交叉编译工具 arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 2、安装交叉编译工具 (P.S.强烈建议使用root权限进行下列操作,$ sudo -s 切换到root权限下) ①解压源文件 先进入arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2所在的目录,默认是安装在/usr/local目录下的,所以解压源文件到/usr/local目录下。
执行以上命令后,arm-none-linux-gnueabi-gcc安装包会被解压到/usr/local目录下的一个arm-2010.09目录中。arm-2010.09目录是在解压时自动创建的。 ②设置环境变量 解压完成后,可以进入arm-2010.09目录下查看一下目录结构。其中,在/usr/local/arm-2010.09/bin/目录下存放的是交叉编译工具的各命令。为了使系统能够找到交叉编译工具的各命令,可以将/usr/local/arm-2010.09/bin/目录增加到PATH变量中。步骤如下: 打开/etc/bash.bashrc脚本
在文件的末尾最后添加一行,来增加一个环境变量。
保存退出。 尽管增加了交叉编译工具的路径,并且保存了/etc/bash.bashrc脚本,但是,由于修改后,没有执行,因此修改后的PATH变量没有起作用,必须手动执行一次/etc/bash.bashrc脚本。
当然,也可以重启系统,因为,系统启动时,会自动执行该脚本。 验证,打开一个新终端执行:
如果有”/usr/local/arm-2010.09/bin/”则说明添加成功。 注:64位操作系统需要执行以下命令来安装所需的库文件以运行32位交叉编译工具链: $ sudo apt-get install ia32-libs ③验证 在终端中执行:
如果显示出来交叉编译器的版本号出来则安装成功 3、更新Beaglebone Black的版本 (P.S.强烈建议按照《BeagleBone Black用户手册》操作进行更新) ①准备:映像文件(BBB-eMMC-flasher-2013.09.04.img.xz)、7z压缩工具、SD卡烧写工具、4G以上的SD卡。 ②使用7-zip压缩工具解压刚才下载的映像文件; ③用一个MicroSD卡套或者USB读卡器将一张MicroSD卡连接到PC; ④使用刚才安装的Win32 Disk ImagerDisk Imager工具将解压后映像文件写入MicroSD卡; ⑤将MicroSD卡插入BeagleBone Black的卡槽中,然后按住uSD BOOT按钮并使用USB线缆接通电源; ⑥当4个User LED同时持续亮起,表示已成功完系统更新(需耗45分钟左右)。请断开电源并取出MicroSD卡,然后再次接通电源即可。 4、编译内核 (P.S.强烈建议按照《BeagleBone Black用户手册》操作进行更新) 准备:Linux3.8内核源码bb-black-kernel-3.8.tar.bz2 先自行解压,之后执行以下命令来编译内核;
注意:如果编译内核过程中出现/bin/sh: lzop:command not found的错误,在Ubuntu系统下,使用命令$ sudo apt-get install lzop 安装lzop包。 驱动编译: 1、内核空间 驱动程序gpioCtl.c:
我的驱动程序文件名是gpioCtl.c,如果各位想直接使用这一驱动的话,请使用这个文件名,不要修改。还有就是其中对于GPIO操作的一些函数,例如”gpio_requset()”,”gpio_free()”,”gpio_set_value()”,如果有不理解的可以参照:http://blog.csdn.net/beyondioi/article/details/6984406,这篇博文详细讲解了omap系列产品用于操作GPIO的函数,其实看看源码应该能够明白这写函数的意思。 Makefile:
如果各位使用的交叉编译器和我的不一样的话,请修改CROSS_COMPILE(一样的话就免了),然后修改KERNELDIR成为自己内核的存储路径,至此所有有关驱动的程序就写完了,将上面的两短代码放在同一文件目录下,make(编译驱动之前,请先编译好内核),就会生成相应的驱动gpioCtl.ko 2、用户空间 应用程序app.c:
执行”$ make app”交叉编译应用程序。此程序能实现user:led3闪烁效果以及读取gpio2-1的电平! gpioCtl.sh:
我在上面的驱动程序编号申请采用动态分配方式,但是每次分配的主设备号都是241,所以shell中的设备号采用了241,如果各位动态分配的结果不是241,可能需要修改shell,cat /proc/devices 可以察看到分配到的设备号。 3、运行测试 现在将所有文件拷贝到板子上 可以用SSH拷贝,利用”$ scp 源文件 root@192.168.7.2:目标目录”命令进行拷贝 在beaglebone black终端上运行以下命令进行测试:
如果没有问题的话,现在就能看到 led 闪烁了! |
|
相关推荐
2 个讨论
|
|
只有小组成员才能发言,加入小组>>
164个成员聚集在这个小组
加入小组BBB通过sd卡启动ubuntu16.04后不能升级下载联网的问题
4385 浏览 2 评论
3155 浏览 0 评论
7448 浏览 5 评论
313浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:09 , Processed in 0.986060 second(s), Total 44, Slave 37 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号