Linux使用者態和核心態通訊

2021-07-30 08:27:10 字數 2359 閱讀 4370

linux環境下使用者態和核心態通訊機制主要有:ioctl、procfs和netlink,下面分別對各種實現進行簡要分析。

1、ioctl

在核心態建立裝置檔案,並提供read、write和ioctl等操作介面,

1)核心態部分

#define dev_name "usr"

static struct cdev usr_cdev;

static dev_t usr_dev_num;

static struct class *usr_class;

static struct device *usr_dev;

enum e_dev_cmd

;static int usr_dev_open(struct inode *node, struct file * fd)

static int usr_dev_close(struct inode *node, struct file * fd)

static long usr_dev_ioctl(struct file *fd, unsigned int cmd, unsigned long arg)

if (copy_from_user(&user_info, userspaceinfo, sizeof(usr_info_t)))

ret = usr_add(&user_info);

break;

} case del_user:

if (copy_from_user(&user_info, userspaceinfo, sizeof(usr_info_t)))

usr_del(&user_info);

break;

} default:

}return ret;

}static const struct file_operations usr_dev_fops =

;static int usr_dev_init(void)

ret = alloc_chrdev_region(&usr_dev_num, 0, 1, dev_name);

if (ret)

cdev_init(&usr_cdev, &usr_dev_fops);

ret = cdev_add(&usr_cdev, usr_dev_num, 1);

if (ret)

usr_dev = device_create(usr_class, null, usr_dev_num, null, "usr");

if(is_err(usr_dev))

return ret;

err:

class_destroy(usr_class);

return ret;

}

2)使用者態部分

fd = open(dev_name, o_rdonly | o_ndelay);

if (fd < 0)

ret = ioctl(fd, cmd, &input);

if(0 != ret)

close(fd);

2、procfs

1)核心態部分

#define procname "usr"

static int usr_show(struct seq_file *m, void *p)

static int special_open(struct inode *inode, struct file *file)

static ssize_t usr_write(struct file *file, const char *data, size_t len, loff_t *ppos)

sscanf(buf, "%d", &mark);

printk("the mark input is [%u]\n", mark);

kfree(buf);

buf = null;

return len;

}static struct file_operations usr_route_ops =

;static int __init usr_init(void)

}static void __exit usr_exit(void)

module_init(usr_init);

module_exit(usr_exit);

2)使用者態部分

可以直接讀寫proc對應的檔案,如:

read : cat /proc/usr

write: echo 1024 >/proc/usr

3、netlink

Linux使用者態和核心態

一 unix linux的體系架構 如上圖所示,從巨集觀上來看,linux作業系統的體系架構分為使用者態和核心態 或者使用者空間和核心 核心從本質上看是一種軟體 控制計算機的硬體資源,並提供上層應用程式執行的環境。使用者態即上層應用程式的活動空間,應用程式的執行必須依託於核心提供的資源,包括cpu資...

Linux 核心態和使用者態

1.核心態 當乙個任務 程序 執行系統呼叫而陷入核心 中執行時,我們就稱程序處於核心執行態 或簡稱為核心態 此時處理器處於特權級最高的 0級 核心 中執行。當程序處於核心態時,執行的核心 會使用當前程序的核心棧。每個程序都有自己的核心棧。2.使用者態 當程序在執行使用者自己的 時,則稱其處於使用者執...

Linux 使用者態和核心態

系統呼叫是通向作業系統本身的介面,是面向底層硬體的。通過系統呼叫,可以使得使用者態執行的程序與硬體裝置 如cpu 磁碟 印表機等 進行互動,是作業系統留給應用程式的乙個介面。由作業系統實現 執行時,需要從使用者態切換到核心態 使用者態 當乙個程序在執行使用者自己的 時處於使用者執行態 使用者態 此時...