Linux--字符设备驱动开发框架(一)

字符设备开发具有一定的框架
在这里插入图片描述
1、模块驱动的加载与卸载
使用的函数:
module_init(xxx_init);//加载xxx_init函数,在串口终端输入modprobe命令时便会调用该函数,此函数为入口函数。
static int __init xxx_init(void)
module_exit(xxx_exit);//卸载调用xxx_exit函数,在串口终端输入rmmod命令时,xxx_exit函数会被调用。此函数为出口函数
static void __exit xxx_exit(void)
2、在入口和出口函数里注册和注销设备
在加载的xxx_init函数里会调用注册函数:
static inline int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
{
return __register_chrdev(major, 0, 256, name, fops);
}
其中形参:major为主设备号;name为驱动名;fops为file_operations结构体指针(后面会说)
该函数返回值为0的时候表示注册成功;返回EINVAL的时候表示主设备号非法(一般是主设备号超限了);返回EBUSY表示主设备号正被别的驱动设备使用;注册成功的话在串口终端可通过“cat /proc/devices”发现已经申请的设备号
同理在卸载函数xxx_exit里会调用注销函数:
static inline void unregister_chrdev(unsigned int major, const char *name)
{
__unregister_chrdev(major, 0, 256, name);
}
形参为major主设备号;name为驱动名
3、操作集合 file_operations结构体
这就说到了前面注册设备函数里的形参了,它是一个结构体如下图:
在这里插入图片描述
它里面包含了很多操作函数,比如我们一般常用的open、read、write、release(close)等函数。在编写设备驱动的时候,都会先定义一下该结构体,把要用到的函数包含进去。如下图:
在这里插入图片描述
要注意的是结构体中的结束符用逗号,不是分号。
然后依次具体实现每一个函数的功能。
加载函数(xxx_init)便会通过注册函数(register_chrdev)调用结构体里的函数进行具体的操作。
4、应用程序编写
在应用程序中要对应驱动程序里的操作集合里的函数进行编写。
5、头文件添加
有些函数可以在Ubuntu终端输入man命令来查看相关信息
man 分1、2、3……分别为commands(普通命令)、system calls(系统调用)、library calls(库函数)…比如open函数属于系统调用,查看它的相关用法则为:man 2 ope,当然,当不知道属于哪个的时候直接man 要查询的即可。比如man open; 使用q退出
在这里插入图片描述
可以看出需要加以上三个头文件。
6、编译和测试

//1)编译.ko文件 命令行:
make
//2)编译.dtb文件 命令行:
make dtbs / make 某个具体的.dts文件
//3)将.ko文件cp到内核的lib/modules/4.1.15中 命令行
sudo cp xxx.ko /home/sjx/linux/nfs/rootfs/lib/modules/4.1.15/ -f
//4)将xxx.dtb文件加载到tftpboot中 命令行
sudo cp arch/arm/boot/dts/imx6ull-alientek-emmc.dtb /home/sjx/linux/tftpboot/ -f

在串口终端中 测试常用命令

//先cd lib/modules/4.1.15
depmod//第一次加载驱动的时候需要,会自动生成 modules.alias、modules.symbols 和 modules.dep 这三个文件
modprobe xxx.ko//加载驱动
rmmod xxx.ko //卸载驱动
lsmod //查看驱动是否加载成功
cat /proc/devices //查看设备号
ls /proc/device-tree //查看设备树节点
./xxxapp /dev/设备名 命令号 //运行APP
//注此处的设备名,如下图所示:

在这里插入图片描述

根据学习后面在添加更新。
该博客只用于学习记录。
有错误恳请指出,感激不尽

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值