天天看点

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

继续阅读