×
单片机 > 单片机程序设计 > 详情

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

发布时间:2024-05-20 发布时间:
|

一、


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()……)


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式