当前位置: 技术问答>linux和unix
unix 设备文件疑问
来源: 互联网 发布时间:2016-05-25
本文导语: 很多资料都会如下这样说: unix 将设备看作一个文件, 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的. 例如, read(STDIN, ..) 从键盘读, write(STDOUT,..) 输出到屏幕.. ..... 感觉很抽象啊,我想知道到底...
很多资料都会如下这样说: unix 将设备看作一个文件, 输入输出到外部设备的方式和输入输出到一个文件的方式是相同的. 例如, read(STDIN, ..) 从键盘读,
write(STDOUT,..) 输出到屏幕.. .....
感觉很抽象啊,我想知道到底是如何与设备通信使设备正常工作的? 例如 STDIN 与 STDOUT , 执行read 与 write的时候, unix 底层都做了些什么呢?
write(STDOUT,..) 输出到屏幕.. .....
感觉很抽象啊,我想知道到底是如何与设备通信使设备正常工作的? 例如 STDIN 与 STDOUT , 执行read 与 write的时候, unix 底层都做了些什么呢?
|
1、通常設備是插在固定的插槽上的,比如主板上,串口,并口上,這樣就完成了物理上的連接
2、物理上的連接以後,設備只是和電腦有關聯了,但是還不能執行特定的操作。這個時候,系統會加載硬件的驅
動程序。因為設備有無數種,系統爲了方便,就定義了一些常用的接口,比如open()是打開設備,read()是讀取
設備的內容,write()是向設備內寫入數據等。這樣,OS內核就為所有的設備提供了一個統一的接口了,主意,這
裡只有接口,沒有行為,也就是說,這些函數的實現是留給硬件的廠商自己來實現的。
3、設備的廠商根據自己的產品來編寫針對自己設備的驅動。比如顯卡的驅動,比如聲卡的驅動。這些驅動會自己
定義open()還是具體要執行啥,read()具體執行啥,write()具體執行啥,這樣系統內核就調用這些函數就行了,
就可以操作聲卡,顯卡了。
4、根據3的方法就能發現,實際上系統內核是不用關心外部的硬件設備是什麽的!它只要提供一系列的接口函數,
然後讓設備的驅動自己去實現,然後由內核調用,就能正常使用設備了。這樣就有了一個優勢了,學名叫“設備
無關性”,接口函數對於所有的設備都是適用的。而open(),write(),read()這樣的操作,就跟傳統的C語言讀
取文件似的,所以在UNIX/LINUX看來,一切的外設都是文件,都可以打開,讀寫等
5、不得不補充一下,上面的只是一個大概的印象而已,其實把設備當成文件還有N多的優勢,比如統一尋址,比
如配置方便等等,這個就要樓主自己深入研究了,設計的知識面比較廣了
2、物理上的連接以後,設備只是和電腦有關聯了,但是還不能執行特定的操作。這個時候,系統會加載硬件的驅
動程序。因為設備有無數種,系統爲了方便,就定義了一些常用的接口,比如open()是打開設備,read()是讀取
設備的內容,write()是向設備內寫入數據等。這樣,OS內核就為所有的設備提供了一個統一的接口了,主意,這
裡只有接口,沒有行為,也就是說,這些函數的實現是留給硬件的廠商自己來實現的。
3、設備的廠商根據自己的產品來編寫針對自己設備的驅動。比如顯卡的驅動,比如聲卡的驅動。這些驅動會自己
定義open()還是具體要執行啥,read()具體執行啥,write()具體執行啥,這樣系統內核就調用這些函數就行了,
就可以操作聲卡,顯卡了。
4、根據3的方法就能發現,實際上系統內核是不用關心外部的硬件設備是什麽的!它只要提供一系列的接口函數,
然後讓設備的驅動自己去實現,然後由內核調用,就能正常使用設備了。這樣就有了一個優勢了,學名叫“設備
無關性”,接口函數對於所有的設備都是適用的。而open(),write(),read()這樣的操作,就跟傳統的C語言讀
取文件似的,所以在UNIX/LINUX看來,一切的外設都是文件,都可以打開,讀寫等
5、不得不補充一下,上面的只是一個大概的印象而已,其實把設備當成文件還有N多的優勢,比如統一尋址,比
如配置方便等等,這個就要樓主自己深入研究了,設計的知識面比較廣了
|
在Unit底层操作硬件设备时,大部分时候都是操作相关的芯片,比如使用write和read系统调用,需要传递的三个参数代表应用程序需要读写那个设备,要读多少数据出来,操作系统内核接到这个用户请求之后,就使用CPU去操作相关的设备,把相应设备里的数据通过相关的通道(比如系统总线,I2C,I2S之类的传输途径)把相应的数据读到内存里,然后在处理这些数据,处理完之后再通过同样的通道方式,将数据传到相关的芯片上去,芯片将根据数据操作具体硬件.比如键盘,鼠标,显示器等东西.你要完全理解这些东西,需要计算机组成原理和操作系统原理的相关知识.
|
第一个问题:系统启动后,如果设备正常会自动在/dev/下建立设备文件,不正常就不会建立设备文件就不能读,
如果有些字符设备文件是可以强行的建立的,如果没有硬件支持,读出来的也是空的
第二个问题:stdin和stdout这两个是标准输入输出文件,分别对应0,和1好文件,还有2号,stderr都是定死了的
我们知道很多输出输入设备种类很多,而我我们上层只要对这3个文件操作,具体那个设备我们交个给输入输出子系统去划分
|
具体就不清楚了。
反正stdin,stdout,stderr跟其他文件都认为差不多,只是作为0,1,2号文件描述符。
文件调用后,里面的操作,驱动什么的应该是交给内核处理。
反正stdin,stdout,stderr跟其他文件都认为差不多,只是作为0,1,2号文件描述符。
文件调用后,里面的操作,驱动什么的应该是交给内核处理。
|
看看ULK