当前位置:首页 > 公众号精选 > IOT物联网小镇
[导读]作 者:道哥,10年嵌入式开发老兵,专注于:C/C、嵌入式、Linux。关注下方公众号,回复【书籍】,获取Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章(PDF格式)。目录API函数编写驱动程序编写应用程序卸载驱动模块小结别人的经验,我们的阶梯!大家好,我是道哥...

作  者:道哥,10 年嵌入式开发老兵,专注于:C/C 、嵌入式、Linux


关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。


目录


别人的经验,我们的阶梯!


大家好,我是道哥,今天我们继续讨论: Linux 中字符设备的驱动程序


在上一篇文章中Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?我们说过:字符设备的驱动程序,有两套不同的API函数,并且在文中详细演示了利用旧的API函数来编写驱动程序。


这篇文章,我们继续这个话题,实际演示一下字符设备驱动程序的另一套API函数的使用方法。


API 函数

这里主要关注下面这 3 个函数:


// 静态注册设备
int register_chrdev_region(dev_t from, unsigned count, const char *name);

// 动态注册设备
int alloc_chrdev_region(dev_t *dev, unsigned baseminor, unsigned count,const char *name);

// 卸载设备
void unregister_chrdev_region(dev_t from, unsigned count);
关于静态和动态注册,主要的区别就在于:主设备号由谁来主导分配!


静态注册:由我们的驱动程序来指定主设备号,即参数1:from;


动态注册:由操作系统来分配,驱动程序提供一个变量来接收该设备号,即参数1: dev 指针;


另外,在Linux 2.6后期的内核版本中,引入了 cdev 结构来描述一个字符设备,它的结构体成员是:


struct cdev {
struct kobject kobj; // 内嵌的kobject对象
struct module *owner; // 所属模块
const struct file_operations *ops;//文件操作结构体
struct list_head list; // 链表句柄
dev_t dev; // 设备号
unsigned int count;
};
与这个结构体相关的处理函数有:


void cdev_init(struct cdev *,struct file_operations *);


初始化 cdev 的成员,主要是设置 file_operations。


strcut cdev *cdev_alloc(void);


动态申请 cdev 内存。


void cdev_put(strcut cdev *p);


与 count 计数相关的操作。


int cdev_add(struct cdev *,dev_t ,unsigned );


向系统中添加一个 cdev,注册字符设备,需要在驱动被加载的时候调用。


void cdev_del(struct cdev *);


从系统中删除一个 cdev,注销字符设备,需要在驱动被卸载的时候调用。


后面在代码演示的时候,可以看到cdev结构是如何被使用的。


编写驱动

按照惯例,我们仍然按照步骤,来讨论如何利用上述的APIs,来手写一个字符设备的驱动程序。


以下所有操作的工作目录,都是与上一篇文章相同的,即:~/tmp/linux-4.15/drivers/。


创建驱动目录和驱动程序

$ cd linux-4.15/drivers/
$ mkdir my_driver2
$ cd my_driver2
$ touch driver2.c
driver2.c文件的内容如下(不需要手敲,文末有代码下载链接):


#include

  • #include

  • #include

  • #include

  • #include


  • static struct cdev my_cdev;
    static dev_t dev_no;

    int driver2_open(struct inode *inode, struct file *file)
    {
    printk("driver2_open is called. \n");
    return 0;
    }

    ssize_t driver2_read(struct file *file, char __user *buf, size_t size, loff_t *ppos)
    {
    printk("driver2_read is called. \n");
    return 0;
    }

    ssize_t driver2_write (struct file *file, const char __user *buf, size_t size, loff_t *ppos)
    {
    printk("driver2_write is called. \n");
    return 0;
    }

    static const struct file_operations driver2_ops={
    .owner = THIS_MODULE,
    .open = driver2_open,
    .read = driver2_read,
    .write = driver2_write,
    };

    static int __init driver2_init(void)
    {
    printk("driver2_init is called. \n");

    // 初始化cdev结构
    cdev_init(
  • 本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
    换一批
    延伸阅读

    上海2022年9月6日 /美通社/ -- 9月3日上午,《"东数西算"战略下绿色智算中心产业发展研究报告》重磅发布。该报告由国家信息中心与燧原科技深度合作,联合庆阳市人民政府、之江实验室、中国能建共同...

    关键字: 数字经济 安防 模型 编写

    (全球TMT2022年8月31日讯)8月25日,"2022算网融合产业发展峰会"在北京举行,会上中国信息通信研究院发布《"边缘计算+"技术白皮书》,该白皮书由信通院发起,浪潮信息等业界多家领袖企业参与编写,为边缘计算在...

    关键字: 边缘计算 人工智能 机器人 编写

    北京2022年8月31日 /美通社/ -- 8月25日,"2022算网融合产业发展峰会"在北京举行,大会汇聚工业和信息化部、中国通信标准化协会、运营商、阿里巴巴、国家电网、浪潮信息等政府及企...

    关键字: 编写 边缘计算 AI ECOM

    "为加快推进深圳团体标准建设,提升社会团体的编写能力" 深圳2022年8月29日 /美通社/ -- 为加快推进深圳团体标准建设,满足深圳市社会团体对团体标准化能力提升的迫切需求,提升社会团体的标准编...

    关键字: 编写 新能源汽车 汽车产业 电动汽车

    上海2022年8月10日 /美通社/ -- 工业一直在我国国民经济中占有主导地位,在"十四五"规划的重要发展阶段,区块链等新一代信息技术与产业的融合创新将会催生新产业新业态新模式,壮大经济发展新引擎。...

    关键字: 编写 区块链 应用发展 中国电子

    北京2022年7月8日 /美通社/ -- 近日,由荷兰皇家菲仕兰联合中国妇女发展基金会发起的“爱育未来”项目11个项目点的志愿者代表和发起方代表齐聚线上项目总结交流会,对社区和家庭早教的阶段性探索成果和经验进行交流和讨论...

    关键字: 可持续发展 编写

    广州2022年7月1日 /美通社/ -- 近日,SGS携手中标院为广州奥太信科技有限公司旗下品牌UEK的一款儿童减负书包颁发了独立慧鉴产品认证证书。结合UEK该款认证书包的客观测试与主观评价结果,其各项性能、指标符合SG...

    关键字: BSP 供应链 编写 防护

    北京2022年5月6日 /美通社/ -- 近日,由中电金信作为核心编写单位参编的全球首个AI模型开发管理标准 -- 《人工智能研发运营一体化(Model/MLOps)能力成熟...

    关键字: AI模型 人工智能 机器学习 编写

    (全球TMT2022年5月6日讯)近日,由中电金信作为核心编写单位参编的全球首个AI模型开发管理标准 -- 《人工智能研发运营一体化(Model/MLOps)能力成熟度模型第一部分:开发管理》正式对外发布。该标准的发布...

    关键字: AI模型 编写 人工智能 机器学习

    南京2022年4月20日 /美通社/ -- 能源与流程工业制造是国民经济的支柱产业,伴随着过去几十年工业制造的高速发展,我国工业生产面临的能耗高、资源消耗高、产品附加值低、环境污染等问题越来越突出,亟需通过最新...

    关键字: 编写 工业控制

    IOT物联网小镇

    42 篇文章

    关注

    发布文章

    编辑精选

    技术子站

    关闭