查看: 5310|回复: 3

BeagleBone Black Linux3.8内核驱动程序开发笔记——LED驱动程序

[复制链接]
  • TA的每日心情
    慵懒
    2015-8-5 08:38
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    发表于 2014-7-23 11:24:09 | 显示全部楼层 |阅读模式
    分享到:
    本帖最后由 xinxincaijq 于 2014-8-11 21:10 编辑

    最近这段时间在玩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目录下。
    1. $ tar -vxjf arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2 -C /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脚本
    1. $ gedit /etc/bash.bashrc
    复制代码
    在文件的末尾最后添加一行,来增加一个环境变量。
    1. export PATH=$PATH:/usr/local/arm-2010.09/bin/
    复制代码
    保存退出。
    尽管增加了交叉编译工具的路径,并且保存了/etc/bash.bashrc脚本,但是,由于修改后,没有执行,因此修改后的PATH变量没有起作用,必须手动执行一次/etc/bash.bashrc脚本。
    1. $ source /etc/bash.bashrc
    复制代码
    当然,也可以重启系统,因为,系统启动时,会自动执行该脚本。
    验证,打开一个新终端执行:
    1. $ echo $PATH
    复制代码
    如果有”/usr/local/arm-2010.09/bin/”则说明添加成功。
    注:64位操作系统需要执行以下命令来安装所需的库文件以运行32位交叉编译工具链:
    $ sudo apt-get install ia32-libs
    ③验证
    在终端中执行:
    1. $ arm-none-linux-gnueabi-gcc --version
    复制代码
    如果显示出来交叉编译器的版本号出来则安装成功
    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
    先自行解压,之后执行以下命令来编译内核;
    1. $ cd ~/kernel/kernel
    复制代码
    注意:如果编译内核过程中出现/bin/sh: lzop:command not found的错误,在Ubuntu系统下,使用命令$ sudo apt-get install lzop 安装lzop包。
    驱动编译:
    1、内核空间
    驱动程序gpioCtl.c:
    1. #include <linux/module.h>
    复制代码
    我的驱动程序文件名是gpioCtl.c,如果各位想直接使用这一驱动的话,请使用这个文件名,不要修改。还有就是其中对于GPIO操作的一些函数,例如”gpio_requset()”,”gpio_free()”,”gpio_set_value()”,如果有不理解的可以参照:http://blog.csdn.net/beyondioi/article/details/6984406,这篇博文详细讲解了omap系列产品用于操作GPIO的函数,其实看看源码应该能够明白这写函数的意思。
    Makefile:
    1. #Makefile for gpioCtl.c
    复制代码
    如果各位使用的交叉编译器和我的不一样的话,请修改CROSS_COMPILE(一样的话就免了),然后修改KERNELDIR成为自己内核的存储路径,至此所有有关驱动的程序就写完了,将上面的两短代码放在同一文件目录下,make(编译驱动之前,请先编译好内核),就会生成相应的驱动gpioCtl.ko
    2、用户空间
    应用程序app.c:
    1. #include <stdio.h>
    复制代码
    执行”$ make app”交叉编译应用程序。此程序能实现user:led3闪烁效果以及读取gpio2-1的电平!
    gpioCtl.sh:
    1. #!/bin/sh
    复制代码
    我在上面的驱动程序编号申请采用动态分配方式,但是每次分配的主设备号都是241,所以shell中的设备号采用了241,如果各位动态分配的结果不是241,可能需要修改shell,cat /proc/devices 可以察看到分配到的设备号。
    3、运行测试
    现在将所有文件拷贝到板子上
    可以用SSH拷贝,利用”$ scp 源文件 root@192.168.7.2:目标目录”命令进行拷贝
    在beaglebone black终端上运行以下命令进行测试:
    1. #为脚本增加执行权
    复制代码
    如果没有问题的话,现在就能看到 led 闪烁了!

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2014-9-23 05:09
  • 签到天数: 113 天

    连续签到: 1 天

    [LV.6]常住居民II

    发表于 2014-7-23 14:29:49 | 显示全部楼层
    程序代码粘乱了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2015-10-8 09:49
  • 签到天数: 430 天

    连续签到: 1 天

    [LV.9]以坛为家II

    发表于 2014-7-23 21:01:14 | 显示全部楼层
    格式太乱了,建议重新整理下
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2014-8-6 22:14
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2014-8-6 22:32:01 | 显示全部楼层
    这个看不懂啊
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /5 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-12-22 18:56 , Processed in 0.132713 second(s), 21 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.