linux系统中misc子系统

misc子系统


转载请注明出处:http://blog.youkuaiyun.com/wang_zheng_kai

光源器件与系统研究所

个人学习总结

1、在linux系统中什么是misc?

         在研究摄像头驱动的时候,发现摄像头驱动的路径为:/driver/misc/jz_cim/文件目录下,经过查找结果如下:

         杂项设备(misc device)

         杂项设备也是嵌入式系统中用得比较多的一种设备驱动。在 Linux 内核的include/linux目录下有miscdevice.h文件,要把自己定义的misc device从设备定义在这里。其实是因为这些字符设备不符合预先确定的字符设备范畴,所有这些设备采用主编号10 ,一起归于misc device,其实misc_register就是用主标号10调用register_chrdev()的,只不过misc是将一些字符设备存放在misc类中。换句话说,misc设备其实也就是特殊的字符设备。

        

2、linux内核杂项设备驱动源码分析

       在Linux驱动中把无法归类的五花八门的设备定义为混杂设备(用miscdevice结构体表述)。miscdevice共享一个主设备号MISC_MAJOR(即10),但次设备号不同。所有的miscdevice设备形成了一个链表,对设备访问时内核根据次设备号查找对应的miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。在内核中用struct miscdevice表示miscdevice设备,然后调用其file_operations结构中注册的文件操作接口进行操作。miscdevice的API实现在drivers/char/misc.c中,misc设备的初始化,注册,注销都在这个文件中。在内核中,misc杂项设备驱动接口是对一些字符设备的简单封装,他们共享一个主设备号,有不同的次设备号,共享一个open调用,其他的操作函数在打开后运用linux驱动程序的方法重载进行装载。

 

我们首先先来看misc设备的结构体的描述:

         代码位于:android-4.1/kernel/include/linux/miscdevice.h,该文件中还有所有misc设备的次设备号的宏定义。

struct miscdevice {     
    intminor;             //次设备号  
    const char*name;              //设备的名称     
    const structfile_operations *fops;     //文件操作   
    structlist_head list;          //misc_list的链表头 
    struct device*parent;           //父设备(Linux设备模型中的东东了,哈哈)     
    struct device*this_device;        //当前设备,是device_create的返回值,下边会看到 
         constchar *nodename;
         mode_tmode;
}; 

         这个结构体是misc设备基本的结构体,在注册misc设备的时候必须要声明并初始化一个这样的结构体,但其中一般只需填充name minor fops字段就可以了。下面就是led驱动程序中初始化miscdevice的代码:


                
### 在 Rocky Linux 9.4 WSL 中安装和配置桌面环境 #### 安装必要的依赖包 为了使图形界面能够在 Windows Subsystem for Linux (WSL) 上正常工作,需要先安装一些基础工具和服务。由于 WSL 默认不支持完整的 X Window System, 所以要借助外部的X服务器软件来实现显示功能。 ```bash sudo dnf groupinstall "Xfce Desktop Environment" sudo dnf install xorg-x11-fonts-Type1 xorg-x11-fonts-misc xorg-x11-utils ``` 以上命令会安装XFCE这一轻量级桌面环境及其所需字体文件[^1]。 #### 启用并设置 VcXsrv 或其他 X Server 在本地计算机上运行VcXsrv或其他兼容的X服务程序,并按照提示完成基本设定。确保允许来自网络连接的应用访问该X server实例。接着,在启动任何GUI应用程序之前,需告知Linux子系统所使用的DISPLAY变量指向何处: ```bash export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0 ``` 这条指令将把当前系统的默认DNS解析器作为目标主机地址传递给DISPLAY环境变量[^2]。 #### 测试图形化应用 现在可以尝试打开一个简单的图形窗口测试是否成功设置了远程渲染路径。比如通过下面的方式启动终端模拟器: ```bash xfce4-terminal & ``` 如果一切顺利的话,则应该可以看到一个新的终端窗口弹出来自于Rocky Linux中的进程管理之下[^3]。 需要注意的是,尽管可以在WSL里边搭建起较为完善的GNOME/KDE/XFCE等传统意义上的全功能型桌面操作系统体验,但由于架构上的差异以及性能损耗等因素考虑,通常建议仅用于学习目的而非生产环境中实际操作复杂业务逻辑的任务处理场景下使用这种方式构建虚拟机或者双系统更为合适些[^4]。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值