流水灯Linux驱动步骤
第一步:编写字符设备驱动
第二步:加载
第三步:编写应用程序测试设备驱动
第一步:编写流水灯Linux驱动
下面新建一个sep4020_flowled.c
内容如下:
#define KEY_MAJOR 249
#define LED_ON 1
#define LED_OFF 2
struct led_dev
{
struct cdev cdev;
unsigned char value;
};
struct led_dev *leddev;
打开和关闭操作
open和release函数会在设备打开和关闭时被调用,open的时候对设备进行初始化
static int sep4020_flowled _open(struct inode * inode, struct file
* filp)
{
}
static int sep4020_flowled _release(struct inode * inode, struct
file * filp)
{
}
写入和读出操作
static int sep4020_flowled _write(struct file *file, const char * buffer,size_t count, loff_t *ppos)
{
}
static int sep4020_flowled _read(struct file *file, const char *
buffer,size_t count, loff_t * ppos)
{
}
设备操作
int sep4020_flowled_ioctl(struct inode *inode, struct file
*filp, unsigned int cmd, unsigned long arg)
{
}
设备初始化
static int __init sep4020_flowled _init(void)
{
//申请设备号
}
设备注销
static void __exit sep4020_flowled_exit(void)
{
//删除设备文件
}
module_init(sep4020_flowled _init); //向Linux系统记录设备初始化的函数名称
module_exit(sep4020_flowled_exit); //向Linux系统记录设备退出的函数名称
修改Kconfig和Makefile
在相应的字符型驱动的目录顶部的Kconfig中添加如下语句:
config SEP4020_FLOWLED
tristate "sep4020 flowed led"
在相同目录底下的Makefile中添加如下语句:
obj-$(CONFIG_SEP4020_FLOWLED) += sep4020_flowled.o
第二步:驱动程序的加载
Linux内核有2种加载驱动程序的方法:
静态:
动态:
方法1:驱动程序以驱动模块加载
打开终端,进入Linux根目录,输入命令make
menuconfig
进入device drivers->character
device->sep4020 char devices->sep4020
key driver
使用空格键将sep4020_flowed选择成M
运行make 命令,编译通过后当前目录下就生成名为sep4020_flowled.ko的驱动程序
#insmod
sep4020_flowled.ko
#cat
/proc/devices
#rmmod
sep4020_flowled.ko
(1)将开发板上电,并将sep4020_flowled.ko拷贝到网络文件系统/demo/目录下面
(2)在/dev/目录下创建一个设备节点flowled
(3)驱动程序模块插入内核
(4)#cat /proc/devices
查看是否载入,如果载入成功会显示你的设备名称sep4020_flowled
方法2:静态编译进内核
打开终端,进入Linux根目录,输入命令make menuconfig
进入device drivers->character
device->sep4020 char devices->sep4020
key driver
使用空格键将sep4020_flowed选择成*
运行make 命令,编译通过后就将流水灯驱动编译进内核了
执行mkimage指令重新生成新的能被uboot引导的内核
静态编译开发板端的操作:
(1)将重新编译好的内核重新拷贝至tftp目录下,重新开发板上电
(2)在/dev/目录下创建一个设备节点flowled
# mknod /dev/flowled c 249 0
第三步:编译应用程序
#include
<stdio.h>
#define OPEN 1
#define CLOSE 2
int main(int argc,char **argv)
{
利用arm-linux-gcc将其编译为可执行的二进制文件:
指令如下:arm-linux-gcc–o flowledflowled.c
将编译好的flowled文件拷贝至nfs文件夹下
本文介绍了一种在Linux环境下开发流水灯驱动的方法,包括字符设备驱动编写、驱动加载及应用程序测试等步骤。提供了详细的代码示例及加载流程。
1183

被折叠的 条评论
为什么被折叠?



