Linux沿袭Unix的风格,将所有设备认成是一个文件。
关于一些特殊设备,我曾经总结过一些:
/dev/null和/dev/zero:>int main(int argc,charargv){ INFO("reading config file\n"); parse_config_file("/initrc"); / pull the kernel commandline and ramdisk properties file in / qemu_init(); import_kernel_cmdline(0); get_hardware_name(); snprintf(tmp,sizeof(tmp),"/init%src", hardware); parse_config_file(tmp);// 需要在on early-init加入device// 这样下面的device_init();创建节点动作// 才会根据这里的对device设备的描述创建出相应权限的节点[luthergliet>
在Android中,由于没有mdev和udev,所以它没有办法动态的生成设备节点,那么它是如何做的呢?
我们可以在system/core/init/下的initc和devicesc中找到答案:
initc中
我们看看get_device_perm如下实现:
在Android中,没有独立的类似于udev或者mdev的用户程序,这个功能集成到了init中做了。代码见:system/core/init/initc文件,如下:
if (ufds[0]revents == POLLIN)
handle_device_fd(device_fd);
其中handle_device_fd(device_fd)函数在system/core/init/devicesc中实现,参数device_fd 由函数device_init()->open_uevent_socket()->socket(PF_NETLINK, SOCK_DGRAM, NETLINK_KOBJECT_UEVENT)函数调用返回。
函数handle_device_fd(device_fd)中,根据传进来的device_fd参数,调用recv(fd, msg, UEVENT_MSG_LEN, 0)函数,将内核探测到的设备并通过NETLINK机制传过来的socket描述符转化成消息。接着调用parse_event(msg, &uevent);函数将消息翻译成uevent事件,并将改事件传递给handle_device_event(&uevent)函数。
handle_device_event(&uevent)函数中,依据参数uevent->subsystem类型创建dev下的相应目录,如:/dev/graphics。紧接着根据uevent->action是"add"还是"remove"来实现设备节点的创建与删除。如果uevent->action是"add",则调用make_device(devpath, block, uevent->major, uevent->minor)函数生成设备节点。如果uevent->action是"remove",则调用unlink(devpath)对设备节点进行删除。
我们一般用Visual Studio创建Windows窗体应用,那么如何用Dev C++创建窗体应用呢?下面我给大家分享一下。
工具/材料Dev C++
01首先打开Dev C++软件,点击顶部的文件菜单,选择新建下面的项目选项,如下图所示
02接下来在d出的新建项目界面选择Windows Application选项,然后勾选C++选项,如下图所示
03然后会d出另存为界面,我们给项目起一个名字,选择类型为dev,如下图所示
04接着我们就会在Dev C++中看到如下图所示的目录,这个代表Windows窗体应用基本结构已经创建好,如下图所示
05然后我们打开maincpp文件,如下图所示,在44行的位置修改窗体的名称
06接下来点击顶部的运行菜单,然后在下拉菜单中选择编译选项,如下图所示
07编译完毕以后,再次点击运行菜单,接着选择下拉菜单中的运行选项,如下图所示
08最后我们就可以看到一个Windows窗体d出来了,如下图所示,如果还想往窗体中添加其他内容则继续在maincpp文件中添加即可
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)