Tangaoo an embedded software engineer

LDD3 读书笔记

2021-08-12
tangoo

这是《Linux Device Drivers, Third Edition》的读书笔记。

2.7 初始化与关停

  • __init 告诉内核该函数只在初始化时用,用完即丢弃。同理还有 __initdata,代码如下:
static int __init initialization_function(void) {
/* Initialization code here */ 
}

module_init(initialization_function);
  • goto 在内核中作为错误处理的惯用用法,示例如下:
int __init my_init_function(void) 
{
    int err;
    /* registration takes a pointer and a name */ 
    err = register_this(ptr1, "skull");
    if (err)
        goto fail_this;
    err = register_that(ptr2, "skull"); 
    if (err)
        goto fail_that;
    err = register_those(ptr3, "skull"); 
    if (err)
        goto fail_those; 
    return 0; /* success */

fail_those:
    unregister_that(ptr2, "skull");
fail_that:
    unregister_this(ptr1, "skull");
fail_this:
    return err; /* propagate the error */
} 
  • 内核错误码

    内核错误码用负数表示,在 linux/errno.h 中,模块代码需要用适当的已定义的错误码。这样用户层代码可用类似 perror 显示其意思。

  • 模块参数

3.4 几个重要的结构体

  • struct file_operate
  • struct file
  • struct inode
  • struct cdev

Similar Posts

Comments