驅動認知

用戶態
App:cp指令,ftp的項目等等這就是App的開發。
App開發需要C的基礎和C庫,C庫講到文件,進程,進程間通信,線程,網絡,界面(GTk)。
C庫(是linux標準庫一定有):就是Clibary,提供了APP支配內核干活的接口,調用的open,read,write,fork,pthread,socket由此處封裝實現,由寫的應用程序調用,C庫中的各種API調用的是內核態,支配內核干活

內核態
進程,內存,線程,網絡,設備驅動不需要上層應用開發者關心,驅動在前面的學習是調用wringpi庫實現,接下來的學習就是要自己實現wringpi庫,因為wringpi庫由廠家提供,可能有可能沒有,這樣當我們拿到另一種類型的板子時,同樣也可以完成開發。

驅動鏈表:管理所有設備的驅動,添加或查找,添加是發生在我們編寫完驅動程序,加載到內核。查找發生在調用驅動程序,由應用層用戶空間去open。

驅動插入鏈表的順序由設備號檢索,就是說主設備號和次設備號除了除了能區分不同種類的設備和不同類型的設備,還能起到將驅動程序創到鏈表的某個位置。

硬件
linux經典的一句話一切皆文件:包括文件,設備(鼠標,鍵盤,LED,屏幕,flash,內存,網卡等),普通的IO口,串口等等。
在這里插入圖片描述
對于文件,學習到對文件的操作有open ,read,write這幾個API,對于這些API是如何區分操作對象是文件還是一些設備,這些設備需不需要有驅動,驅動又在哪個位置這都是我們需要了解的。驅動肯定是要有的。

假設:現在的硬件有pin4,pin5,pin6,這些引腳分別對應于4驅動,5驅動,6驅動,這些驅動需要由我們來開發。
open(“/dev/pin4”,權限)用來調用引腳4的驅動,那么如何找到相關的驅動,有兩個東西供我們查找,一是文件名,二是設備號(包含主設備號和次設備號)。
Linux的設備管理是和文件系統緊密結合的,各種設備都以文件的形式存放在/dev目錄下,稱為設備文件。應用程序可以打開、關閉和讀寫這些設備文件,完成對設備的操作,就像操作普通的數據文件一樣。為了管理這些設備,系統為設備編了號,每個設備號又分為主設備號和次設備號。主設備號用來區分不同種類的設備,而次設備號用來區分同一類型的多個設備。

ls -l  查看設備號

在這里插入圖片描述
驅動代碼的開發無非就是添加驅動和調用驅動。
例如:
用戶態調用引腳四open(“/de/pin4”,O_RDWR), 這個open會調用System call interface(這個函數是在內核中的),這個函數會根據設備名找到設備號,然后會調用VFS中的sys_open,sys_open會找到引腳4中的open函數,引腳4中的open函數是對寄存器的操作。用戶態進入內核態會發生一次軟中斷 ,中斷號是0x80。

以上是對下圖的解釋:
在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272402.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272402.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272402.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

TreeMap實現排序

TreeMap TreeMap實現SortMap接口,能夠把它保存的記錄根據鍵排序,默認是按鍵值的升序排序,也可以指定排序的比較器。當用Iterator遍歷TreeMap時,得到的記錄是排過序的。 TreeMap取出來的是排序后的鍵值對。但如果您要按自然順序或…

圖解分布式架構的演進過程!

一、什么是分布式架構分布式系統(distributed system) 是建立在網絡之上的軟件系統。內聚性:是指每一個數據庫分布節點高度自治,有本地的數據庫管理系統。透明性:是指每一個數據庫分布節點對用戶的應用來說都是透明的&…

CSS 布局實例系列(四)如何實現容器中每一行的子容器數量隨著瀏覽器寬度的變化而變化?...

Hello,小朋友們,還記得我是誰嗎?對了,我就是~超威~好啦,言歸正傳,今天的布局實例是: 實現一個浮動布局,紅色容器中每一行的藍色容器數量隨著瀏覽器寬度的變化而變化,就如…

基于框架編寫驅動代碼

操作驅動的上層代碼&#xff08;pin4test&#xff09; #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>void main() {int fd,data;fd open("/dev/pin4",O_RDWR);if(fd<0){printf("open fail…

nacos在windows下安裝

1:訪問https://github.com/alibaba/nacos/releases下載nacos 2:下載到本地解壓 3:點擊startup.cmd 啟動nacos 4:訪問 http://127.0.0.1:8848/nacos 輸入賬號和密碼&#xff0c;nacos/nacos

關于SQL優化這些你了解嗎?

背景在當今這個互聯網的時代無非要解決兩大難題&#xff0c;其一是信息安全&#xff0c;其二就是數據的存儲。而信息安全則是在數據存儲的基礎之上。一個公司從剛開始成立到發展成一個有上百人甚至上千人團隊的時候&#xff0c;公司的業務量是呈上升趨勢&#xff0c;客戶及用戶…

圖片安全保護(未啟動)

圖片安全保護&#xff08;未啟動&#xff09; 圖片安全保護&#xff08;未啟動&#xff09;posted on 2016-01-27 22:54 代碼35 閱讀(...) 評論(...) 編輯 收藏 轉載于:https://www.cnblogs.com/xinglizhenchu/p/5164847.html

微機總線地址,物理地址 ,虛擬地址

總線地址 地址總線 (Address Bus&#xff1b;又稱&#xff1a;位址總線) 屬于一種電腦總線 &#xff08;一部份&#xff09;&#xff0c;是由CPU 或有DMA 能力的單元&#xff0c;用來溝通這些單元想要存取&#xff08;讀取/寫入&#xff09;電腦內存元件/地方的實體位址。 自己…

Navicat遠程連接linux下mysql服務器1045錯誤解決辦法在這兒

1&#xff1a;首先通過xshell工具或者你熟悉的工具連接遠程linux下的服務器 mysql -uroot -p 然后輸入密碼 2.進行授權 如果想root用戶使用password從任何主機連接到mysql服務器的話。 GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY 你的mysql密碼 WITH GRANT O…

內存劃分

一、內存分配 一個由C/C編譯的程序占用的內存分為以下幾個部分 1、棧區&#xff08;stack&#xff09;&#xff1a; 由編譯器自動分配釋放 &#xff0c;存放函數的參數值&#xff0c;局部變量的值等。其操作方式類似于數據結構中的棧。 2、堆區&#xff08;heap&a…

樹莓派 博通BCM2835芯片手冊

手冊提取鏈接 鏈接&#xff1a;https://pan.baidu.com/s/1fdmIBNn1Pr1j3-ercNhKJg 提取碼&#xff1a;8y1b 驅動的兩大利器&#xff1a; 1、電路圖:通過電路圖找到寄存器 2、芯片手冊 樹莓派有54個通用IO口(0到53)&#xff0c;所有GPIO口至少有兩個可選功能&#xff08;輸入輸…

MVC實現實現文件流打包成壓縮包

MVC實現實現文件流打包成壓縮包1、使用壓縮類庫SharpZipLib SharpZipLib 是一款比較經典實用C#壓縮類庫SharpZipLib 庫特點&#xff1a;功能豐富、穩定 &#xff0c;支持主流 zip、Gzip Tar BZip2 格式2、項目中引用SharpZipLib的官方地址是&#xff1a;http://icsharpcode.git…

Intellij idea 報錯:Error : java 不支持發行版本5

idea運行出現了這個錯誤 解決辦法按下圖所示&#xff1a;

屬性“dataProvider”有多個初始值設定項。(注意:“dataProvider”是“mx.charts.BarChart”的默認屬性)。...

1、錯誤描寫敘述 屬性“dataProvider”有多個初始值設定項。&#xff08;注意:“dataProvider”是“mx.charts.BarChart”的默認屬性&#xff09;。2、錯誤原因 <?xml version"1.0" encoding"utf-8"?> <s:Application xmlns:fx"http://ns.…

IO口操控代碼

我們在編寫驅動程序的時候&#xff0c;IO空間的起始地址是0x3f000000,加上GPIO的偏移量0x2000000,所以GPIO的物理地址應該是從0x3f200000開始的&#xff0c;然后在這個基礎上進行Linux系統的MMU內存虛擬化管理&#xff0c;映射到虛擬地址上。 底層驅動代碼 #include <linu…

C#一些實用的函數

1.DateTime 轉為Unix的long的時間戳long orderTime order.AddTime.ToUnixTimeStamp("Milliseconds");long payTime order.StartTime.Value.ToUnixTimeStamp("Milliseconds");2、獲取客戶端IP/// <summary>/// 獲取調用方的IP地址/// </summary&…

Vscode如何新建html文件

1、點擊Open Folder&#xff1a; 2、選擇目標文件夾&#xff0c;在本地新建一個拓展名為html的文件&#xff1a; 3、在第1行輸入!&#xff08;英文狀態下&#xff09;&#xff0c;按tab鍵&#xff0c;新建成功。界面如下圖所示&#xff1a;

混合app

cordova run android 把應用發送到手機ionic serve 電腦瀏覽器調試命令創建&#xff1a;cordova create hello com.example.hello HelloWorldcd hellocordova platform add androidcordova build androidcordova emulate android查詢cordova platform lscord…

vscode瀏覽器打開html

1.點擊拓展 2.輸入open in browser&#xff0c;選擇第一個 3.點擊安裝

VMware虛擬機克隆CentOS后網卡修改方法

轉自:http://www.linuxidc.com/Linux/2015-03/114975.htm 轉載于:https://www.cnblogs.com/water-sky/p/5169107.html