linux kernel 中的 setup_irq和request_irq

講解的很詳細,轉載下. Linux 核心提供了兩個註冊中斷處理函數的介面:setup_irq和request_irq。這兩個函數都定義在kernel/irq/manage.c裡。/** Internal function to register an irqaction - typically used to* allocate special interrupts that are part of the architecture.*/int setup_irq(unsigned int

linux 工作隊列 補充

走入Linux的殿堂已經有一年有餘了,在這裡我想將Linux的各種實現機制分析一遍,一方面對自己來說也是溫故而知新,另一方面,促進大家的交流,最好能夠給大家一些拋磚引玉的啟迪。我是硬體出身,搞硬體已經好多年了,從是專門軟體開發也接近兩年了,在這一段時間內我越發認為軟硬體協同設計是未來發展的主流,軟硬體的界限越來越模糊,軟硬體的設計思想是相通的,實現方法是各異的,實現的結果上當然也存在較大差別,因此,很有必要做好軟硬體的協同設計。本著這樣的想法,我想將我所認識的Linux分析一遍,特別是一些我認為

linux開機logo製作 轉

【從製作logo到LCD顯示或者VGA顯示logo】1、製作logo的方法: 首先選擇一個自己喜歡的圖片,然後通過GIMP軟體將該圖片儲存為.png格式, 變換方式這個就不說了(very easy),比如儲存為linuxlogo.png.然後將該圖片傳入到裝有Linux PC比如(ubuntu),按照以下順序你就可以製作一個你喜歡logo前提你必須安裝以下的工具(pngtopnm,pnmquant,pnmtoplainpnm)$ pngtopnm linuxlogo.png >

linux非同步訊號handle淺析

在初學linux編程的時候,一直覺得非同步訊號handle是個很神奇的東西,使用者程式可以使用singal之類的系統調用為某某訊號註冊一個訊號處理函數(handle函數)。程式的二進位代碼在記憶體中都有著確定的執行流程,為什麼收到非同步訊號以後,程式會被“中斷”,然後跳轉到這個handle函數裡面去運行呢?核心怎麼有能力讓程式做這樣的跳轉呢,總不可能臨時修改程式的可執行代碼吧?後來學習了一些核心知識,才知道原來進程收到訊號以後,並不是立即就被“中斷”的,而是先在進程的控制結構(task_stru

linux中斷處理淺析

最近在研究非同步訊息處理, 突然想起linux核心的中斷處理, 裡面由始至終都貫穿著"重要的事馬上做, 不重要的事推後做"的非同步處理思想. 於是整理一下~第一階段--擷取中斷號每個CPU都有響應中斷的能力, 每個CPU響應中斷時都走相同的流程. 這個流程就是核心提供的中斷服務程式.在進入中斷服務程式時, CPU已經自動禁止了本CPU上的中斷響應, 因為CPU不能假定中斷服務程式是可重新進入的.中斷處理常式的第一步要做兩件事情:1. 將中斷號壓入棧中;

linux系統編程之檔案與I/O(一):檔案的開啟關閉

一、檔案描述符對於Linux而言,所有對裝置或檔案的操作都是通過檔案描述符進行的。當開啟或者建立一個檔案的時候,核心向進程返回一個檔案描述符(非負整數)。後續對檔案的操作只需通過該檔案描述符,核心記錄有關這個開啟檔案的資訊(file結構體)。一個進程啟動時,預設開啟了3個檔案,標準輸入、標準輸出、標準錯誤,對應檔案描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),這些常量定義在unistd.h標頭檔中。fileno:將檔案指標轉換為檔案描

linux網路編程之socket(五):tcp流協議產生的粘包問題和解決方案

我們在前面曾經說過,發送端可以是一K一K地發送資料,而接收端的應用程式可以兩K兩K地提走資料,當然也有可能一次提走3K或6K資料,或者一次只提走幾個位元組的資料,也就是說,應用程式所看到的資料是一個整體,或說是一個流(stream),在底層通訊中這些資料可能被拆成很多資料包來發送,但是一個資料包有多少位元組對應用程式是不可見的,因此TCP協議是面向流的協議,這也是容易出現粘包問題的原因。而UDP是面向訊息的協議,每個UDP段都是一條訊息,應用程式必須以訊息為單位提取資料,不能一次提取任意位元組的

linux系統編程之檔案與I/O(二):檔案的讀取寫入

一、read系統調用一旦有了與一個開啟檔案描述相關連的檔案描述符,只要該檔案是用O_RDONLY或O_RDWR標誌開啟的,就可以用read()系統調用從該檔案中讀取位元組 函數原型:ssize_t read(int fd, void *buf, size_t count);參數:fd :想要讀的檔案的檔案描述符buf : 指向記憶體塊的指標,從檔案中讀取來的位元組放到這個記憶體塊中count :

如何讓進程在Linux後台運行

在Linux中,如果要讓進程在後台運行,一般情況下,我們在命令後面加上&即可,實際上,這樣是將命令放入到一個作業隊列中了:[root@localhost /]# ./test.sh &[1] 17208然後我們就可以用以下命令進行查看:[root@localhost /]# jobs -l[1]  17208 Running ./test.sh &對於已經在前台執行的命令,也可以重新放到後台執行首先按ctrl

深入分析Linux自旋鎖

 前言:     在複習休眠的過程中,我想驗證自旋鎖中不可休眠,所以編寫了一個在自旋鎖中休眠的模組。但是在我的ARMv7的單核CPU(TI的A8晶片)中測試的時候,不會鎖死,並且自旋鎖可以多次擷取。實驗現象和我對自旋鎖和休眠的理解有出路。      我後來我將這個模組放到自己的PC上測試,成功鎖死了,說明我的模組原理上沒有問題。但是為什麼在ARM上會這樣呢???後來我將模組給了我的兩個同事測試,在Omap3530中一樣不會鎖死,但是在S3C6410中成功的鎖死了。這是怎麼回事??     

linux/unix 基本命令

系統# uname -a # 查看核心/作業系統/CPU資訊# head -n 1 /etc/issue # 查看作業系統版本# cat /proc/cpuinfo # 查看CPU資訊# hostname # 查看電腦名稱# lspci -tv # 列出所有PCI裝置# lsusb -tv # 列出所有USB裝置# lsmod #

linux網路編程之socket(六):利用recv和readn函數實現readline函數

在前面的文章中,我們為了避免粘包問題,實現了一個readn函數讀取固定位元組的資料。如果應用程式層協議的各欄位長度固定,用readn來讀是非常方便的。例如設計一種用戶端上傳檔案的協議,規定前12位元組表示檔案名稱,超過12位元組的檔案名稱截斷,不足12位元組的檔案名稱用'\0'補齊,從第13位元組開始是檔案內容,上傳完所有檔案內容後關閉串連,伺服器可以先調用readn讀12個位元組,根據檔案名稱建立檔案,然後在一個迴圈中調用read讀檔案內容並存檔,迴圈結束的條件是read返回0。欄位長度固定的

linux網路編程之socket(七):一個進程發起多個串連和gethostbyname等函數

一、在前面講過的最簡單的回射客戶/伺服器程式中,一個用戶端即一個進程,只會發起一個串連,只要稍微修改一下就可以讓一個用戶端發起多個串連,然後只利用其中一個串連發送資料。先來認識一個函數getsockname  #include <sys/socket.h>  int getsockname(int sockfd, struct sockaddr *addr, socklen_t

linux網路編程之socket(八):五種I/O模型和select函數簡介

一、五種I/O模型1、阻塞I/O我們在前面所說的I/O模型都是阻塞I/O,即調用recv系統調用,如果沒有資料則阻塞等待,當資料到來則將資料從核心空間(套介面緩衝區)拷貝到使用者空間(recv函數提供的buf),然後recv返回,進行資料處理。2、非阻塞I/O我們可以使用 fcntl(fd, F_SETFL, flag | O_NONBLOCK);

linux網路編程之socket(十):shutdown 與 close 函數 的區別

假設server和client 已經建立了串連,server調用了close, 發送FIN 段給client(其實不一定會發送FIN段,後面再說),此時server不能再通過socket發送和接收資料,此時client調用read,如果接收到FIN 段會返回0,但client此時還是可以write

linux網路編程之TCP/IP基礎(四):TCP串連的建立和斷開、滑動視窗

一、TCP段格式:TCP的段格式如所示源連接埠號碼與目的連接埠號碼源連接埠號碼和目的連接埠號碼,加上IP首部的源IP地址和目的IP地址唯一確定一個TCP串連。序號序號表示在這個報文段中的第一個資料位元組序號。確認號僅當ACK標誌為1時有效。確認號表示期望收到的下一個位元組的序號。頭部長度4位,TCP頭部最多60個位元組,最少20個位元組保留位6位,必須為06個標誌位URG-緊急指標有效ACK-確認序號有效PSH-接收方應儘快將這個報文段交給應用程式層RST-串連重設SYN-同步序號用來發起一個串

linux網路編程之TCP/IP基礎(五):分析一幀基於UDP的TFTP協議幀

是UDP的段格式:相比TCP段格式,UDP要簡單得多,也沒啥好說的,需要注意的是UDP資料長度指payload加上首部的長度。下面分析一幀基於UDP的TFTP協議幀:乙太網路首部0000: 00 05 5d 67 d0 b1 00 05 5d 61 58 a8 08 00 IP首部0000: 45 000010: 00 53 93 25 00 00 80 11 25 ec c0 a8 00 37 c0 a80020: 00 01UDP首部0020: 05 d4 00 45 00 3f ac 40

linux網路編程之socket(十六):通過UNIX域通訊端傳遞描述符和 sendmsg/recvmsg 函數

在前面我們介紹了UNIX域通訊端編程,更重要的一點是UNIX域通訊端可以在同一台主機上各進程之間傳遞檔案描述符。下面先來看兩個函數: #include <sys/types.h> #include <sys/socket.h>ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags);ssize_t recvmsg(int sockfd, struct msghdr *msg, int

linux網路編程之socket(三):最簡單的回射客戶/伺服器程式

下面通過最簡單的用戶端/伺服器程式的執行個體來學習socket API。echoser.c 程式的功能是從用戶端讀取字元然後直接回射回去。 C++ Code 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071/*************************************

linux網路編程之socket(一):socket概述和位元組序、地址轉換函式

一、什麼是socketsocket可以看成是使用者進程與核心網路通訊協定棧的編程介面。socket不僅可以用於原生處理序間通訊,還可以用於網路上不同主機的處理序間通訊。socket API是一層抽象的網路編程介面,適用於各種底層網路通訊協定,如IPv4、IPv6,以及以後要講的UNIX Domain Socket。然而,各種網路通訊協定的地址格式並不相同,如所示:IPv4和IPv6的地址格式定義在netinet/in.h中,IPv4地址用sockaddr_in結構體表示,包括16位連接埠號碼和3

總頁數: 4065 1 .... 400 401 402 403 404 .... 4065 Go to: 前往
Tags Index:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。