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 磁碟 印表機等 進行互動,是作業系統留給應用程式的乙個介面。由作業系統實現 執行時,需要從使用者態切換到核心態 使用者態 當乙個程序在執行使用者自己的 時處於使用者執行態 使用者態 此時...