标签归档:Linux

Ubuntu Linux 安装 .7z 解压和压缩文件

安装方法:

sudo apt-get install p7zip

解压文件:

7z x manager.7z -r -o /home/xx

解释如下:
x 代表解压缩文件,并且是按原始目录解压(还有个参数 e 也是解压缩文件,但其会将所有文件都解压到根下,而不是自己原有的文件夹下)manager.7z 是压缩文件,这里大家要换成自己的。如果不在当前目录下要带上完整的目录
-r 表示递归所有的子文件夹
-o 是指定解压到的目录,这里大家要注意-o后是没有空格的直接接目录

压缩文件:

7z a -t7z -r manager.7z /home/manager/*

解释如下:
a 代表添加文件/文件夹到压缩包
-t 是指定压缩类型 一般我们定为7z
-r 表示递归所有的子文件夹,manager.7z 是压缩好后的压缩包名,/home/manager/* 是要压缩的目录,*是表示该目录下所有的文件。

字符设备 class_create()/class_register()、class_destroy()/class_unregister()说明

1. class结构体介绍

内核中定义了struct class结构体,一个struct class 结构体类型变量对应一个类,内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建了这个类,再调用device_create()函数在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应device_create()函数,去/sysfs下寻找对应的类而创建设备节点。
struct class结构体(2.6.26.6内核版本)

struct class {
    const char *name;
    struct module *owner;
    struct class_attribute *class_attrs;
    struct device_attribute *dev_attrs;
    struct bin_attribute *dev_bin_attrs;
    struct kobject *dev_kobj;

    int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
    char *(*devnode)(struct device *dev, mode_t *mode);
    void (*class_release)(struct class *class);
    void (*dev_release)(struct device *dev);

    int (*suspend)(struct device *dev, pm_message_t state);
    int (*resume)(struct device *dev);

    const struct kobj_ns_type_operations *ns_type;
    const void *(*namespace)(struct device *dev);

    const struct dev_pm_ops *pm;
    struct subsys_private *p;
};

继续阅读

字符设备 cdev_alloc()/cdev_init()、cdev_add()、cdev_del()

1. 结构体

内核中每个字符设备都对应一个 cdev结构的变量,下面是它的定义:

linux-2.6.22/include/linux/cdev.h
struct cdev {
    struct kobject kobj;                // 每个 cdev都是一个 kobject
    struct module *owner;               //指向实现驱动的模块
    const struct file_operations *ops;  // 操纵这个字符设备文件的方法
    struct list_head list;              // 与 cdev对应的字符设备文件的inode->i_devices的链表头
    dev_t dev;                          // 起始设备编号
    unsigned int count;                 // 设备范围号大小
};

继续阅读

字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()

1. 字符设备结构体

内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下:

   static struct char_device_struct {
       struct char_device_struct *next;    // 指向散列冲突链表中的下一个元素的指针
       unsigned int major;                 // 主设备号
       unsigned int baseminor;             // 起始次设备号
       int minorct;                        // 设备编号的范围大小
       char name[64];                      // 处理该设备编号范围内的设备驱动的名称
       struct file_operations *fops;       // 没有使用
       struct cdev *cdev;                  // 指向字符设备驱动程序描述符的指针
   } *chrdevs[CHRDEV_MAJOR_HASH_SIZE];

继续阅读