#include <linux/debugfs.h>
#include <linux/delay.h>
#include <linux/errno.h>
#include <linux/fs.h>
#include <linux/kernel.h>
#include <linux/list.h>
#include <linux/module.h>
#include <linux/mutex.h>
#include <linux/sched.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/types.h>
#include <linux/uaccess.h>
#include <linux/wait.h>
#include <mach/debug_mm.h>
#include <mach/msm_smd.h>
#define MAX_LEN 64
#ifdef CONFIG_DEBUG_FS
static struct dentry *test_dentry;
#endif
static char l_buf[MAX_LEN];
static unsigned int test_enable;
static ssize_t test_debug_open(struct inode *inode, struct file *file)
{
file->private_data = inode->i_private;
printk("test debugfs opened\n");
return 0;
}
static ssize_t test_debug_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos)
{
int len;
if (count < 0)
return 0;
len = count > (MAX_LEN - 1) ? (MAX_LEN - 1) : count;
if (copy_from_user(l_buf, buf, len)) {
printk("Unable to copy data from user space\n");
return -EFAULT;
}
l_buf[len] = 0;
if (l_buf[len - 1] == '\n') {
l_buf[len - 1] = 0;
len--;
}
if (!strncmp(l_buf, "boom", MAX_LEN)) {
printk("boom called -------------\n");
} else if (!strncmp(l_buf, "enable", MAX_LEN)) {
test_enable = 1;
printk("test enabled ------------- : %d\n", test_enable);
} else if (!strncmp(l_buf, "disable", MAX_LEN)) {
test_enable = 0;
printk("test disabled ---------------: %d\n", test_enable);
} else
printk("Unknown Command\n");
return count;
}
static const struct file_operations test_debug_fops = {
.write = test_debug_write,
.open = test_debug_open,
};
static int __init test_debug_init(void)
{
#ifdef CONFIG_DEBUG_FS
test_dentry = debugfs_create_file("test_debug", S_IFREG | S_IRUGO,
NULL, (void *) NULL, &test_debug_fops);
#endif /* CONFIG_DEBUG_FS */
return 0;
}
device_initcall(test_debug_init);
build;
adb shell
mount -t debugfs none /mnt
或者:
#mkdir /data/debug
#mount -t debugfs debugfs /data/debug
#cd /data/debug
echo boom > /mnt/test_debug
dmesg:
<4>[ 881.573233] test debugfs opened
<4>[ 881.576895] boom called -------------
echo disable > /mnt/test_debug
dmesg:
<4>[ 1224.983946] test debugfs opened
<4>[ 1224.986296] test disabled ---------------: 0
echo enable > /mnt/test_debug
dmesg:
<4>[ 926.626735] test debugfs opened
<4>[ 926.632046] test enabled ------------- : 1
UML用例图包含六个元素,分别是:角色(Actor)、用例UseCase)、关联关系(Association)、包含关系(Include)、扩展关系(Extend)以及泛化关系(Generalization)。
角色(Actor)是与系统中的用例交互的一些实体,在实际情况中,角色可以是人,也可以是其他系统或者硬件设备。
用例(UseCase)指的是系统的功能,它是系统某个功能的所有执行动作的集合。
关联(Assocation)是角色与用例的连接,表达此角色可以初始化此用例。
泛化(generalization)即继承关系。
包含关系(Include):是指用例中的包含关系,通常发生在多个用例中,有可以提取出来的公共部分以便基用例复用.当两个或多个用例中共用一组相同的动作,这时可以将这组相同的动作抽出来作为一个独立的子用例,供多个基用例所共享。因为子用例被抽出,基用例并非一个完整的用例,所以include关系中的基用例必须和子用例一起使用才够完整,子用例也必然被执行。include关系在用例图中使用带箭头的虚线表示(在线上标注<<include>>),箭头从基用例指向子用例。
例如:
注册卡和删除卡之前都必须检验卡是否存在,注册卡和删除卡着两个用例并不完整,必须和查询卡是否存在这个子用例一起才能完成它的功能。
扩展关系(Extend):extend关系是对基用例的扩展,基用例是一个完整的用例,即使没有子用例的参与,也可以完成一个完整的功能。extend的基用例中将存在一个扩展点,只有当扩展点被激活时,子用例才会被执行。 extend关系在用例图中使用带箭头的虚线表示(在线上标注<<extend>>),箭头从子用例指向基用例。
例如:
查询学生信息可以独立完成,不需要子用例的参与。只有点击导出为excel按钮或打印按钮时才会执行相应的动作。