驅動原理 應用程式訪問驅動程式

2022-08-24 17:30:25 字數 1586 閱讀 2996

以read為例:

read是乙個系統呼叫,系統呼叫之前在應用程式當中(或者叫使用者空間當中),read的實現**在核心中,read是如何找到核心的實現**呢?

/*

********************************************

*filename:read_mem.c

*******************************************

*/#include

#include

#include

#include

intmain()

這個應用程式就是開啟字元裝置檔案,然後使用系統呼叫,去讀取裡頭的資料,

用 arm-linux-gcc static –g read_mem.c –o read_mem

反彙編:arm-linux-objdump –d –s read_mem >dump

找到主函式:vim dump -> /main

找到libc_read函式

關注兩行**:

mov r7,#3

svc 0x00000000

read的系統呼叫在應用程式當中主要做了兩項工作,3傳給了r7,然後使用svc指令。

svc系統呼叫指令,系統會從使用者空間進入到核心空間,而且入口是固定的,3就是代表read要實現的**,根據3查表,查出3代表的函式,然後呼叫這個函式。

開啟entry_common.s;找到其中的entry(vector_swi)

在這個函式中得到呼叫標號

根據標號找到乙個呼叫表

然後找到進入表

開啟calls.s檔案,會得到一張系統呼叫列表(部分圖示)

3代表的就是read;

分析sys_read,原函式在read_write.c檔案中(/linux/kernel code/linux-2.6.39/fs)

syscall_define3(read, unsigned int, fd, char __user *, buf, size_t, count)

return

ret;

}

函式fd進去後,利用fd找到檔案所對應的struct file,利用struct file呼叫vfs_read();

ssize_t vfs_read(struct file *file, char __user *buf, size_t count, loff_t *pos)

inc_syscr(current);

}return

ret;

}

驅動程式和應用程式通訊方法

驅動程式必須與應用程式進行通訊,才能最終達到應用程式控制裝置的目的,不然驅動有qiu用。要通訊就涉及到3個方面 1.應用程式與驅動程式通訊 2.驅動程式與應用程式通訊 3.資料傳輸 下面分別討論 1。應用程式與驅動程式通訊 1 1 應用程式實現與驅動通訊的過程 用createfile開啟裝置,用de...

驅動程式和應用程式之間通訊

正文 q 請問有什麼方法實現驅動程式主動和應用程式進行實時通訊,而不用應用程式採用定時查詢的方法?比如驅動有一事件發生需要立即通知應用程式,或驅動程式需要向應用程式讀取一些內容.a 有乙個很容易的方式,在驅動程式和應用程式之間用乙個事件。在應用程式createfile的時候,驅動程式iocreate...

9 應用程式如何訪問驅動

應用程式如何訪問驅動 應用程式主要是通過系統呼叫來訪問驅動程式圖。接下來我們以read.c應用程式來分析 原始碼 1 include 2 include 3 include 4 include 5 include 6 7int main 8我們知道read.c是個系統呼叫函式,系統呼叫之前,他是在我...