S3C2440 字符设备驱动程序之概念介绍(一)

2019-07-12 23:06发布

字符设备驱动程序之概念介绍(一)一、Uboot目的是启动内核。内核目的是启动应用程序。  二、应用程序:读写文件、点灯、获取按键  三、 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、总结框架:    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、

4、总的来说,Sytem call interface系统调用接口是 决定 使用哪一个函数(read(),write(),open()……)VFS虚拟文件系统 是 决定 调用哪一个驱动程序的open()函数(led_open()、memdev_open()……)
https://blog.csdn.net/Pris_oner/article/details/51594934