天天看點

S3C2440 字元裝置驅動程式之概念介紹(一)

字元裝置驅動程式之概念介紹(一)

一、

Uboot目的是啟動核心。

核心目的是啟動應用程式。

二、

應用程式:讀寫檔案、點燈、擷取按鍵

三、

S3C2440 字元裝置驅動程式之概念介紹(一)

1、架構:

應用 open,read,write
C庫
系統調用接口 sytem call interface
核心 VFS virtual file system sys_open,sys_read,sys_write
驅動 Led_open,led_read,led_write

2、簡單的應用程式

int main()
{
    int fd1,fd2;
    int val = 1;

    fd1=open(“/dev/led”, O_RDWR);		//打開一個led程式
    write(fd1, &val,4);

    fd2=open(“hello.txt”, O_RDWR);		//打開一個文本檔案
    write(fd2, &val, 4);
}
           

3、驅動也屬于核心的一部分。

4、C庫是怎麼進入核心呢?open,read,write實作的實質是什麼?

    執行swi val(彙編指令),引發一個異常,相當于中斷一樣。當發生這個異常的時候,就會進入核心的異常處理函數裡面。

5、系統調用接口的作用(system call interface):

    在異常處理函數裡面,根據發生異常的原因,調用不同的處理函數。

    例如:使用open函數,則傳進來的值為val1(swi val1);使用read函數,則傳進來的值為val2(swi val2);使用write函數,則傳進來的值為val3(write val3)。核心裡的系統調用接口(system callinterface),會根據傳進來不同的值,去調用sys_open、sys_read和sys_write。

6、上面1簡單的應用程式中,fd1和fd2打開的行為不同。sys_open、sys_read和sys_write,最終根據打開不同的檔案,找到不同的驅動程式,進而調用驅動程式open、read、write來實作這些功能。

四、

1、總結架構:

S3C2440 字元裝置驅動程式之概念介紹(一)

    APP1應用程式調用open、read、write函數等調用,open、read、write函數在c庫裡實作的。執行指令swi val,這條指令會觸發一個異常,這個異常就會進入核心空間,在核心空間異常處理函數裡面,會根據傳進不同的值val,去調用sys_open,sys_read,sys_write函數,這些函數根據打開不同的檔案,檔案有不同的屬性,根據這些屬性來找到底層的驅動程式。比如,led燈,就會找到led燈的驅動程式,如果是某些檔案,就會找到Storage drivers存儲驅動裡面的open,read,write函數。

2、

應用程式app:open,read,write(标準接口)                     

                                                 這個過程怎麼轉換?

                                                 怎麼通過open找到led_open?

                                                 這就依賴于驅動程式架構

驅動程式:led_open,led_read,led_write

                                                             (操作硬體)

3、

S3C2440 字元裝置驅動程式之概念介紹(一)

4、

總的來說,

Sytem call interface系統調用接口是 決定 使用哪一個函數(read(),write(),open()……)

VFS虛拟檔案系統 是 決定 調用哪一個驅動程式的open()函數(led_open()、memdev_open()……)

https://blog.csdn.net/Pris_oner/article/details/51594934

繼續閱讀